Правила маршрутизации
Правила маршрутизации соединяют ваши списки с вашими outbounds.
Большинству пользователей нужно только одно простое правило для каждого списка, например:
{
"route": {
"rules": [
{
"list": ["my_sites"],
"outbound": "vpn"
}
]
}
}Правила проверяются сверху вниз. Первое совпадение выигрывает. Трафик, который не соответствует никакому правилу, остаётся немаркированным и следует обычной системной маршрутизации.
Конфигурация
{
"route": {
"inbound_interfaces": [...],
"rules": [...]
}
}| Поле | Тип | Обязательно | Описание |
|---|---|---|---|
inbound_interfaces |
array of string | нет | Опциональный фильтр входящих интерфейсов. Если отсутствует или пустой, все интерфейсы доступны. Если непустой, только пакеты, входящие через перечисленные интерфейсы, обрабатываются KeenPbrTable. |
rules |
array | да | Упорядоченный список правил маршрутизации |
Поля правила маршрутизации
| Поле | Тип | Обязательно | Описание |
|---|---|---|---|
enabled |
boolean | нет | Активно ли это правило. false отключает его. true, отсутствует или null все означают включено. |
list |
array of string | да | Имена списков, трафик которых сопоставляется этим правилом |
outbound |
string | да | Тег outbound для маршрутизации сопоставленного трафика |
proto |
string | нет | Протокол: "tcp", "udp" или "tcp/udp" |
src_port |
string | нет | Сопоставлять только конкретные исходные порты |
dest_port |
string | нет | Сопоставлять только конкретные порты назначения |
src_addr |
string | нет | Сопоставлять только конкретные исходные адреса |
dest_addr |
string | нет | Сопоставлять только конкретные адреса назначения |
Примеры
Базовый — маршрутизация списка через VPN
{
"route": {
"rules": [
{
"enabled": true,
"list": ["my_domains", "my_ips", "remote_list"],
"outbound": "vpn"
}
]
}
}Временное отключение правила без удаления
{
"route": {
"rules": [
{
"enabled": false,
"list": ["my_domains"],
"outbound": "vpn"
}
]
}
}Когда enabled отсутствует или установлен в null, правило обрабатывается как включённое.
Фильтр входящих интерфейсов — обработка только пакетов с br0
{
"route": {
"inbound_interfaces": ["br0"],
"rules": [
{
"list": ["my_domains"],
"outbound": "vpn"
}
]
}
}Фильтр входящих интерфейсов отключён (отсутствует или пустой)
Если inbound_interfaces отсутствует (по умолчанию) или явно установлен в пустой массив, фильтрация интерфейсов отключена и правила маршрутизации применяются независимо от входящего интерфейса.
{
"route": {
"inbound_interfaces": [],
"rules": [
{
"list": ["my_domains"],
"outbound": "vpn"
}
]
}
}Фильтр портов — только HTTPS TCP из двух подсетей
{
"route": {
"rules": [
{
"list": ["my_domains"],
"src_addr": "192.168.20.0/24,192.168.30.0/24",
"proto": "tcp",
"dest_port": "443",
"outbound": "vpn"
}
]
}
}Фильтр адресов — сопоставление конкретной подсети источника
{
"route": {
"rules": [
{
"list": ["my_ips"],
"src_addr": "192.168.10.0/24",
"outbound": "vpn"
}
]
}
}Полный фильтр — Google DNS из подсети через VPN
{
"route": {
"rules": [
{
"list": ["my_domains"],
"src_addr": "192.168.10.0/24",
"dest_addr": "8.8.8.8",
"dest_port": "53",
"outbound": "vpn"
}
]
}
}Отрицание — все источники, кроме локальной LAN
{
"route": {
"rules": [
{
"list": ["my_ips"],
"src_addr": "!192.168.1.0/24",
"outbound": "vpn"
}
]
}
}Отрицание — весь TCP, кроме HTTPS, идёт через VPN
{
"route": {
"rules": [
{
"list": ["my_domains"],
"proto": "tcp",
"dest_port": "!443",
"outbound": "vpn"
}
]
}
}Отрицание — весь UDP, кроме DNS и NTP, идёт через VPN
{
"route": {
"rules": [
{
"list": ["my_domains"],
"proto": "udp",
"dest_port": "!53,123",
"outbound": "vpn"
}
]
}
}Отрицание — блокировка трафика, НЕ идущего в доверенную подсеть
{
"route": {
"rules": [
{
"list": ["my_ips"],
"dest_addr": "!10.0.0.0/8,172.16.0.0/12",
"outbound": "block"
}
]
}
}Расширенные фильтры: синтаксис адресов и портов
src_addr, dest_addr, src_port и dest_port все используют одинаковый строковый синтаксис:
| Формат | Пример | Сопоставление |
|---|---|---|
| Одиночное значение | "192.168.1.0/24" |
эта подсеть |
| Список | "192.168.1.0/24,8.8.8.8" |
либо подсеть/IP |
| Отрицание | "!192.168.1.0/24" |
любой источник, кроме этой подсети |
| Список с отрицанием | "!192.168.1.0/24,8.8.8.8" |
любой источник, кроме любой подсети |
| Одиночный порт | "443" |
порт 443 |
| Список портов | "80,443" |
порт 80 или 443 |
| Диапазон портов | "8000-9000" |
порты 8000-9000 |
| Отрицание порта | "!443" |
все порты, кроме 443 |
| Список портов с отрицанием | "!80,443" |
все порты, кроме 80 и 443 |
Одиночный ! в начале отрицает всё значение. Отрицание применяется ко всем записям через запятую.