Skip to content
RUEN

Раздельная маршрутизация: российские сайты напрямую ​

Когда весь трафик идёт через сервер в Германии, многие российские сервисы видят зарубежный IP и ведут себя иначе: банк просит дополнительное подтверждение или не пускает вовсе, Госуслуги показывают ошибку, маркетплейс меняет регион доставки, онлайн-кинотеатр отказывается показывать фильм. Выключать VPN каждый раз неудобно.

Личный VPN на OBLAKO

Reality и другие протоколы для личного VPN на серверах OBLAKO разрешены правилами, если в SNI стоит ваш собственный домен. Поднимите сервер по нашей инструкции, а правила маршрутизации из этой статьи добавьте поверх.

Решение называется раздельной маршрутизацией (split tunneling): российские адреса идут напрямую через вашего провайдера, всё остальное через ваш сервер. Настраивается это один раз.

Где можно делить трафик ​

ГдеПлюсыМинусы
В приложении на устройствеБыстро, без доступа к серверуНастраивать на каждом устройстве
На сервере-входе в каскадеОдни правила для всех устройствНужен второй сервер в России
На роутереРаботает для всей домашней сетиНужен роутер с поддержкой Xray или sing-box

Обратите внимание: на сервере в Германии отправить российский трафик «напрямую» не получится. Он и так выходит из Германии, поэтому российский сайт всё равно увидит немецкий IP. Делить трафик нужно до того, как он покинет Россию: на устройстве, на роутере или на российском сервере каскада.

Как устроены правила ​

Почти все клиенты на ядре Xray и sing-box понимают два вида списков:

  • geoip это базы IP-адресов по странам. Правило geoip:ru означает «все российские адреса».
  • geosite это наборы доменов по категориям. Категория category-ru содержит российские доменные зоны (.ru, .su, .рф и некоторые другие), category-gov-ru охватывает государственные сайты.

Обычно ставят оба правила: домены ловят сайты в зоне .ru, а база IP подхватывает российские сервисы на других доменах. Для правил по доменам в клиенте должен быть включён sniffing (определение домена по трафику). В большинстве приложений он включён по умолчанию.

Стандартные базы клиентов подходят для начала. Если нужна точнее настроенная выборка, есть сборки, которые обновляются несколько раз в день и учитывают российскую специфику, например runetfreedom/russia-v2ray-rules-dat. Их подключают вместо стандартных файлов geoip.dat и geosite.dat.

Порядок правил важен

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

Вариант 1. Правила в приложении ​

Названия пунктов меню меняются от версии к версии, но логика везде одна: найти раздел маршрутизации и добавить правило с действием «напрямую» (direct).

  • Hiddify. Откройте Настройки, раздел Маршрутизация, в поле Регион выберите Россия (ru) и включите Обход сайтов региона ru. Российские сайты пойдут напрямую.
  • Happ и v2RayTun. В разделе маршрутизации (routing) добавьте правило с geoip:ru и geosite:category-ru и действием «напрямую» (direct). Названия пунктов зависят от версии приложения.
  • v2rayN. Откройте Настройки маршрутизации, нажмите Добавить набор правил и через Добавить правило создайте первым правило с geosite:category-ru и geoip:ru и выходом direct, последним правило для всего остального с выходом proxy. Затем выберите набор и нажмите Установить как активное правило.
  • NekoBox и другие клиенты на sing-box. Правила задаются наборами rule_set, о них ниже.

Если вы правите конфиг Xray вручную, правила выглядят так:

json
"routing": {
  "domainStrategy": "IPIfNonMatch",
  "rules": [
    { "type": "field", "domain": ["geosite:category-ru"], "outboundTag": "direct" },
    { "type": "field", "ip": ["geoip:ru", "geoip:private"], "outboundTag": "direct" }
  ]
}

Трафик, который не попал ни под одно правило, уходит в первый outbound конфига, то есть на ваш сервер. Значение IPIfNonMatch нужно, чтобы клиент проверил IP-адрес сайта, если по домену совпадения не нашлось.

В sing-box базы geoip и geosite подключаются как наборы правил:

json
"route": {
  "rule_set": [
    {
      "tag": "geoip-ru",
      "type": "remote",
      "format": "binary",
      "url": "https://raw.githubusercontent.com/SagerNet/sing-geoip/rule-set/geoip-ru.srs"
    },
    {
      "tag": "geosite-category-ru",
      "type": "remote",
      "format": "binary",
      "url": "https://raw.githubusercontent.com/SagerNet/sing-geosite/rule-set/geosite-category-ru.srs"
    }
  ],
  "rules": [
    { "rule_set": ["geoip-ru", "geosite-category-ru"], "outbound": "direct" }
  ]
}

В конфиге должен быть outbound с тегом direct и типом direct.

Вариант 2. На сервере-входе каскада ​

Если вы собрали каскад из двух серверов с Xray на российском входе, правила удобно держать там. Тогда на телефонах и компьютерах вообще ничего настраивать не нужно.

В конфиге входа уже есть outbound direct с протоколом freedom. Добавьте в корень конфига блок маршрутизации:

json
"routing": {
  "domainStrategy": "IPIfNonMatch",
  "rules": [
    { "type": "field", "domain": ["geosite:category-ru"], "outboundTag": "direct" },
    { "type": "field", "ip": ["geoip:ru"], "outboundTag": "direct" }
  ]
},

И включите sniffing во входящем подключении, чтобы Xray видел домены:

json
"sniffing": { "enabled": true, "destOverride": ["http", "tls", "quic"] }

Проверьте конфиг командой xray run -test -c /usr/local/etc/xray/config.json и перезапустите systemctl restart xray. Теперь российские сайты увидят адрес вашего российского сервера, а остальные адреса сервера в Германии.

Вариант 3. На роутере ​

Роутер с поддержкой Xray или sing-box делит трафик для всех устройств дома, включая телевизор и игровую приставку, на которые VPN не поставить. На прошивке OpenWrt для этого есть готовые пакеты с веб-интерфейсом, которые подключаются к серверу по ссылке vless:// и маршрутизируют трафик по спискам доменов. Часть роутеров других производителей умеет то же самое через свои компоненты.

Перед покупкой роутера под эту задачу проверьте, что модель поддерживает нужную прошивку и что у неё хватит памяти и процессора: шифрование на слабом роутере заметно режет скорость.

Как проверить, что всё работает ​

  1. Подключите VPN.
  2. Откройте сервис определения IP в зоне .ru. Он должен показать адрес вашего провайдера (или российского входа каскада).
  3. Откройте зарубежный сервис определения IP, например ifconfig.me. Он должен показать адрес сервера в Германии.
  4. Зайдите в приложение банка. Если оно по-прежнему ругается, посмотрите, на какие домены оно ходит, и добавьте их в правило «напрямую» вручную через domain:example.ru.

Если клиент при запуске пишет, что не нашёл категорию в geosite.dat, проверьте написание категории и обновите файлы баз: в старых сборках нужной категории может не быть.

Что ещё важно ​

  • Банковские приложения проверяют не только IP. Некоторые смотрят, включён ли VPN на устройстве вообще. Здесь раздельная маршрутизация не поможет, такие приложения придётся исключать из VPN целиком через настройку «приложения в обход VPN» на Android.
  • DNS тоже маршрутизируется. Если сайт открывается, но выдаёт регион «не Россия», проверьте, через какой DNS-сервер идут запросы. Некоторые сервисы определяют регион по DNS.
  • Только для себя. Правила OBLAKO разрешают личный VPN для себя и домашнего круга, подробнее в статье Личный VPN на VPS.