Skip to content

Маршрутизация ​

Маршруты решают, куда пойдёт каждое соединение: через VPN, напрямую, через другой сервер или никуда. Ядро проверяет их сверху вниз, и срабатывает первый подходящий.

КудаЧто происходит
Через VPNчерез сервер, к которому вы подключены
Напрямуюмимо VPN, сайт видит ваш обычный адрес
Другой серверчерез другой сервер из вашего списка, см. какой сервер подходит
Блокироватьсоединение не открывается

Порядок ​

ads.exampleв списке рекламыvk.comв «Напрямую»192.168.1.1роутерyoutube.comнет в маршрутахБлокировкаВаш серверОтдельные приложенияНапрямуюЛокальная сетьДругой серверЧерез VPNВсё остальноене откроетсямимо VPNмимо VPNчерез VPN
Каждое соединение идёт по строкам сверху вниз и останавливается на первой, которая ему подходит. Ниже оно уже не смотрит.

Порядок одинаковый для обоих ядер. Маршруты внутри одной строки проверяются в том порядке, в каком стоят на экране. Строки 4, 6 и 7 можно менять местами, см. Свой порядок.

  1. Блокировка. Стоит первой, поэтому действует даже на приложения, у которых есть свой маршрут.
  2. Ваш сервер. Адрес сервера, звеньев цепочки и серверов из маршрутов «Другой сервер» всегда идёт напрямую. Иначе соединение с сервером пошло бы через сам сервер.
  3. Отдельные приложения. Сначала проверяются сайты и списки приложения, потом весь его трафик. Домашняя сеть (роутер, принтер) идёт напрямую ещё раньше, так что правило «весь трафик приложения через сервер» её не затрагивает.
  4. Напрямую. Пока вы не меняли порядок, проверяется раньше «Через VPN»: если сайт есть в обоих маршрутах, он пойдёт напрямую.
  5. Локальная сеть. Адреса вида 192.168.x.x и 10.x.x.x всегда идут напрямую, отправить их в VPN маршрутом нельзя.
  6. Другой сервер.
  7. Через VPN.
  8. Всё остальное. Сюда попадает всё, что не подошло выше. Куда это пойдёт, решаете вы: через VPN, напрямую или в блок.

Маршрут, в котором указан протокол или порт, стоит на той же строке, что и обычный маршрут с той же целью.

Свой порядок ​

В разделе «Все приложения» маршрут можно зажать и перетащить выше или ниже. После этого ядро проверяет маршруты раздела в том порядке, в каком они стоят на экране, а не по цели. Так можно пустить один сайт через VPN, когда остальные сайты его страны идут напрямую: поставьте маршрут сайта выше маршрута страны.

Новый маршрут по-прежнему встаёт на место по своей цели: «Напрямую» выше, «Через VPN» ниже. Блокировка, отдельные приложения и локальная сеть остаются на своих местах, а «Всё остальное» всегда последнее. У каждого профиля свой порядок. В ссылку на профиль он не попадает.

Как это выглядит в конфиге ядра

Возьмём для примера такие маршруты: «Блокировать» ads.example, geosite:category-ads-all, «Напрямую» direct.example, 10.10.0.0/16, «Другой сервер» route.example, geoip:de, «Через VPN» proxy.example, geosite:google, «Всё остальное» через VPN. Текущий сервер 198.51.100.33, другой сервер 198.51.100.34.

json
"rules": [
  {"ip": ["169.254.0.0/16", "224.0.0.0/4", "255.255.255.255/32"], "outboundTag": "block", "ruleTag": "block-special"},
  {"port": "53", "network": "tcp,udp", "outboundTag": "dns-out", "ruleTag": "dns-out"},
  {"domain": ["full:www.cloudflare.com"], "outboundTag": "proxy", "ruleTag": "exit-ip-probe"},
  {"domain": ["domain:ads.example", "geosite:category-ads-all"], "outboundTag": "block", "ruleTag": "block-domains"},
  {"ip": ["198.51.100.33"], "outboundTag": "direct", "ruleTag": "server-ip"},
  {"ip": ["198.51.100.34"], "outboundTag": "direct", "ruleTag": "route-server-0"},
  {"domain": ["domain:direct.example"], "outboundTag": "direct", "ruleTag": "direct-domains"},
  {"ip": ["10.10.0.0/16", "10.0.0.0/8", "192.168.0.0/16", "…"], "outboundTag": "direct", "ruleTag": "direct-private"},
  {"domain": ["domain:route.example"], "outboundTag": "keq-srv-0", "ruleTag": "keq-srv-0-domains"},
  {"ip": ["geoip:de"], "outboundTag": "keq-srv-0", "ruleTag": "keq-srv-0-geoip"},
  {"domain": ["domain:proxy.example", "geosite:google"], "outboundTag": "proxy", "ruleTag": "proxy-domains"},
  {"ip": ["0.0.0.0/0", "::/0"], "outboundTag": "proxy", "ruleTag": "final"}
]

Это Xray. У mihomo те же шаги в том же порядке, только записаны они как DOMAIN-SUFFIX,direct.example,DIRECT и так далее, а в конце стоит MATCH.

Последнее правило записано как «любой IP», а не «любое соединение», потому что в примере есть свой IP (10.10.0.0/16). Xray узнаёт адрес сайта и проверяет правила по IP, только если ни одно правило не совпало по имени, а правило «любое соединение» совпадало бы всегда.

Имя или IP ​

Правила по имени (vk.com, geosite:) сравнивают имя сайта, а правила по адресу (1.2.3.4, 10.0.0.0/8, geoip:) – его IP. Иногда программа передаёт ядру только имя, и правилу по адресу не с чем сравнивать.

Если среди ваших маршрутов есть свои IP или подсети, ядро в таком случае само узнаёт адрес сайта, но только когда ни одно правило по имени не подошло. Записи geoip: этого не включают: иначе ради проверки страны пришлось бы делать лишний DNS-запрос на каждое соединение. Это поведение меняется настройкой «Стратегия доменов в правилах».

Как писать сайты и адреса ​

Записи разделяются запятой, пробелом или переносом строки.

ЗаписьЧто под неё попадает
vk.comvk.com и все поддомены
.vk.com, *.vk.comто же самое
ruвсё, что заканчивается на .ru
full:vk.comтолько vk.com, без поддоменов
regexp:…имена, подходящие под регулярное выражение
geosite:googleготовый список доменов сервиса
1.2.3.4один адрес
10.0.0.0/8подсеть
geoip:deадреса страны

В geosite лежат списки сервисов, а не стран. Для страны используйте geoip.

На Android встроена урезанная база стран: в ней только коды, которые нужны готовым спискам (private, ru, telegram, refilter и иранские). Чтобы работала любая другая страна, например geoip:de, скачайте полную базу: «О приложении» → «Скачать полную базу». Без неё такая запись перед подключением отбрасывается, а на экране маршрута появляется предупреждение «Нет в гео-базах, будет проигнорировано».

Списки по ссылке ​

В поле сайтов можно вставить ссылку на список AdBlock или hosts. Приложение скачает его и будет обновлять раз в сутки, а новая версия начнёт действовать со следующего подключения.

Из списков AdBlock берутся только правила для целого домена, вида ||example.com^. Правила с путями, косметические правила и правила для отдельных сайтов пропускаются. Ядро такие правила не поддерживает, а если считать их правилом для всего домена, заблокируется больше, чем задумал автор списка.

Готовые списки ​

СписокЧто внутри
Российские сайтыgeosite:category-ru
Иранские сайтыgeosite:ir, geoip:ir и иранские CDN
Реклама и трекерыgeosite:category-ads-all
Re-filtergeosite:refilter, geoip:refilter
Белые списки мобильной связиgeosite:ru-whitelist

В «Российских сайтах» нет geoip:ru. Дело в том, что российскими по адресу выглядят и кэш-серверы зарубежных сервисов, которые стоят у российских провайдеров. С geoip:ru такой сервис пойдёт напрямую на свой кэш и перестанет открываться там, где он заблокирован. Если нужного сайта нет в списке, добавьте его отдельным маршрутом.

Какое правило сработало ​

На экране «Соединения» видно, какое правило сработало для каждого соединения. Для mihomo это тип и значение правила, например DomainSuffix(vk.com). Для Xray – имя правила:

ИмяЧто это
block-domains, block-geoip, block-ipsБлокировать
direct-domains, direct-geoipНапрямую
direct-privateлокальная сеть и свои IP из «Напрямую»
keq-srv-N-…Другой сервер, N – его номер среди серверов маршрутов, считая с нуля
proxy-domains, proxy-geoip, proxy-ipsЧерез VPN
keq-app-N…маршрут отдельного приложения
keq-proto-N…маршрут с протоколом или портом
server-…, chain-hop-N, route-server-Nадреса серверов
user-…ваши маршруты поверх готового конфига провайдера
block-quicQUIC на сервере с Vision, см. ниже
exit-ip-probeзапрос страны для флага
dns-out, tun-dnsDNS
outside-vpnприложение вне VPN пыталось пройти через туннель, см. Правки в ядрах
tun-…раздельное туннелирование на ПК
без правилаВсё остальное

Профили ​

Маршруты и «Всё остальное» хранятся в профиле. Профиль «Основной» действует для всех подписок, у которых нет своего. При подключении приложение берёт профиль той подписки, из которой выбран сервер. У подписки может быть только один профиль. Если профиль выключить, вместо него работает «Основной». Раздельное туннелирование общее для всех профилей.

Провайдер может прислать профиль вместе с подпиской. Он работает в том виде, в каком прислан: его можно посмотреть, но нельзя изменить. Если включить «Правила» в «Не учитывать от провайдера», новые профили от провайдера перестанут приходить, а уже полученный станет вашим.

Готовый конфиг провайдера ​

У готового конфига Xray или Clash свои правила, и они проверяются первыми. Ваши маршруты работают для всего, что под них не попало. Что приложение оставляет в таком конфиге, а что удаляет, описано на странице Подписки и серверы.

Пункт «Правила» в «Не учитывать от провайдера» убирает из конфига правила, которые отправляют сайты напрямую или блокируют их, а также его собственное «всё остальное». Тогда решают ваши маршруты. Как это работает с шаблоном mihomo с группами, описано на странице Группы mihomo.

QUIC на серверах с Vision ​

Если сервер подключён через VLESS с Vision (xtls-rprx-vision), а «Всё остальное» идёт через VPN, приложение на Xray блокирует QUIC (UDP на порт 443). Сервер с Vision всё равно не пропускает QUIC, но отказывает только после полного рукопожатия, и браузер на каждой попытке терял время. С блокировкой браузер сразу переходит на обычное соединение. С вариантом xtls-rprx-vision-udp443 блокировки нет, потому что там сервер пропускает QUIC.