Что такое маршрутизация VLESS и зачем она нужна
Маршрутизация VLESS — это механизм, который позволяет направлять разные типы трафика через разные каналы: напрямую, через прокси или блокировать. Вместо того чтобы гнать весь интернет-трафик через VPN-туннель, вы можете настроить правила, по которым, например, российские сайты открываются напрямую, зарубежные — через прокси, а реклама блокируется. Это даёт несколько преимуществ: снижается нагрузка на VPN-сервер, уменьшается задержка для локальных ресурсов, а доступ к заблокированным сервисам сохраняется.
В контексте VLESS маршрутизация реализуется через конфигурацию Xray-core — основного движка, поддерживающего этот протокол. Xray позволяет гибко настраивать правила на основе доменов, IP-адресов, геолокации и даже типа устройства. Это особенно полезно для пользователей, которые хотят совместить скорость прямого подключения с безопасностью прокси.
Ключевая идея — разделение трафика на категории: direct (напрямую), proxy (через VLESS-сервер) и block (заблокировать). Такая схема называется «точечной маршрутизацией» и широко применяется на роутерах с OpenWrt, а также на клиентских устройствах.
Основные компоненты: inbound, outbound и routing
Чтобы маршрутизация работала, нужно понимать три ключевых элемента конфигурации Xray:
- Inbound (входящий трафик) — определяет, как трафик попадает в Xray. Например, через SOCKS-прокси на порту 10808 или через прозрачный перехват на роутере. Каждому inbound присваивается тег (
tag), напримерinbound-10808. - Outbound (исходящий трафик) — определяет, куда направляется трафик после обработки. Для VLESS это обычно удалённый сервер, но также могут быть
freedom(прямое подключение) иblackhole(блокировка). Теги помогают ссылаться на них в правилах. - Routing (маршрутизация) — набор правил, которые связывают inbound с outbound на основе условий: домен, IP, порт, источник и т.д.
Пример простейшей конфигурации: весь трафик с порта 10808 направляется на VLESS-сервер. В routing указывается правило: inboundTag: ["inbound-10808"] → outboundTag: "proxy-out-vless". Это базовый сценарий, но он иллюстрирует принцип: без корректной настройки всех трёх компонентов маршрутизация не заработает.
Важно помнить, что правила проверяются по порядку, и первое совпавшее правило определяет судьбу трафика. Поэтому порядок правил критичен.
Доменная маршрутизация: geosite и списки доменов
Самый распространённый способ маршрутизации — по доменным именам. Xray использует файл geosite.dat, который содержит категории доменов: geosite:cn (китайские), geosite:geolocation-!cn (не китайские), geosite:category-ads-all (реклама) и многие другие. Это позволяет создавать правила вида: «все домены из категории X → через прокси».
Например, для пользователя в России можно настроить:
geosite:category-ads-all→block(блокировать рекламу)geosite:ru→direct(российские сайты напрямую)geosite:geolocation-!ru→proxy(зарубежные через VLESS)
Файл geosite.dat поддерживается сообществом и регулярно обновляется. Существуют разные версии: от v2fly, Loyalsoldier и Project X. Выбор версии влияет на полноту списков, поэтому стоит использовать актуальную сборку.
Однако у доменной маршрутизации есть ограничение: не весь трафик содержит домен. Например, приложения, использующие собственные протоколы поверх IP, не передают SNI. Для таких случаев нужна маршрутизация по IP-адресам.
Маршрутизация по IP и CIDR: когда домен не виден
Некоторые приложения (например, мессенджеры с собственным шифрованием) не используют DNS-резолвинг на устройстве и не передают домен в TLS-запросе. В таких случаях Xray не может определить домен, и правило по домену не сработает. Решение — маршрутизация по IP-адресам назначения.
В конфигурации Xray можно указать ip: ["1.2.3.4/32", "5.6.7.0/24"] в правиле. Это полезно для диапазонов IP, принадлежащих определённым сервисам. Например, если вы знаете, что IP-адреса конкретного стримингового сервиса всегда одни и те же, можно добавить их в правило proxy.
Однако поддерживать такие списки вручную сложно, так как IP-адреса меняются. Поэтому часто используют готовые списки, например, из репозитория itdoginfo, которые автоматически резолвят домены в IP и обновляются. Но у этого подхода есть минус: при первом обращении к сайту может быть задержка, пока DNS-резолвер добавит IP в список.
На роутерах с OpenWrt для IP-маршрутизации используются nftables sets, которые заполняются через dnsmasq. Это позволяет динамически добавлять IP-адреса доменов из списка.
Балансировка между серверами VLESS: почему один сервер — плохо
Многие VPN-провайдеры выдают подписку, содержащую десятки серверов. Если выбрать один конкретный сервер и зашить его в конфиг, рано или поздно он может перегрузиться или выйти из строя, и весь трафик останется без прокси. Чтобы этого избежать, нужна балансировка — автоматический выбор самого быстрого и живого сервера из пула.
Встроенный балансировщик Xray (leastPing) часто работает некорректно, особенно в некоторых версиях ядра. Поэтому разработчики создают собственные решения. Например, модуль SmartRoute для OpenWrt использует два сигнала: пинг и Observatory (проверка реальной доступности). Это позволяет выбирать сервер не только по задержке, но и по фактической работоспособности.
Балансировка особенно важна для подписок, где серверы обновляются на лету. Провайдер не гарантирует аптайм каждого узла, но пул в целом работает. Автоматический выбор лучшего сервера избавляет пользователя от ручного переключения.
При настройке балансировки нужно учитывать, что проверка серверов должна происходить в фоне, без прерывания трафика. Также важно, чтобы при переключении на другой сервер не терялись активные соединения.
Точечная маршрутизация на роутере: OpenWrt и Keenetic
На роутерах с OpenWrt точечная маршрутизация реализуется через связку dnsmasq и nftables. dnsmasq резолвит домены и складывает IP-адреса в nftables sets, а правила firewall направляют трафик из этих sets в VPN-туннель. Это позволяет маршрутизировать трафик по доменам без участия клиентских устройств.
Для Keenetic (на базе Entware) используется xkeen — менеджер Xray-core. Поверх него можно установить SmartRoute, который добавляет веб-интерфейс для управления профилями маршрутизации. Пользователь вставляет подписку VLESS/Trojan, создаёт правила «домен → сервер/группа», и модуль сам генерирует конфигурацию Xray.
Важно отметить, что на OpenWrt 22+ используется nftables, который потребляет больше памяти, чем iptables. Большие списки IP могут вызвать ошибку No buffer space available. Решение — использовать доменные списки вместо IP, так как они занимают меньше памяти.
Также нужно учитывать, что не все приложения используют DNS-сервер роутера. Некоторые имеют встроенный резолвинг, и тогда доменная маршрутизация не сработает. В таких случаях требуется принудительно перенаправлять DNS-запросы на роутер.
Защита от утечек: DNS, IPv6 и QUIC
При настройке маршрутизации важно предотвратить утечки трафика, которые могут раскрыть реальный IP-адрес. Основные источники утечек:
- DNS-запросы — если DNS-запросы идут напрямую, а не через прокси, то даже при проксировании остального трафика DNS-сервер провайдера видит, какие сайты вы посещаете. Решение — использовать DNSCrypt-proxy2 или Stubby для шифрования DNS, либо направлять DNS через туннель.
- IPv6 — если устройство имеет IPv6-адрес, а VPN-туннель работает только по IPv4, трафик IPv6 может уходить напрямую. Нужно либо отключить IPv6, либо настроить его маршрутизацию через туннель.
- QUIC/HTTP3 — протокол QUIC работает поверх UDP и может обходить правила маршрутизации, если они настроены только для TCP. Нужно блокировать или проксировать QUIC-трафик.
На роутерах с OpenWrt можно настроить firewall так, чтобы весь трафик, не соответствующий правилам, блокировался (kill-switch). Это гарантирует, что при сбое VPN-туннеля трафик не уйдёт напрямую.
Также важно следить за тем, чтобы DNS-запросы не шли через системный резолвер, который может игнорировать настройки. Рекомендуется принудительно перенаправлять все DNS-запросы на роутер.
Практические примеры конфигураций для Xray
Рассмотрим пример конфигурации Xray для клиента, который разделяет трафик на три категории: блокировка рекламы, прямые подключения к российским сайтам и прокси для остального.
{
"inbounds": [{
"tag": "socks-in",
"protocol": "socks",
"listen": "127.0.0.1",
"port": 10808
}],
"outbounds": [
{"tag": "proxy", "protocol": "vless", "settings": { ... }},
{"tag": "direct", "protocol": "freedom"},
{"tag": "block", "protocol": "blackhole"}
],
"routing": {
"domainStrategy": "IPIfNonMatch",
"rules": [
{"domain": ["geosite:category-ads-all"], "outboundTag": "block"},
{"domain": ["geosite:ru"], "outboundTag": "direct"},
{"domain": ["geosite:geolocation-!ru"], "outboundTag": "proxy"}
]
}
}Здесь domainStrategy: "IPIfNonMatch" означает, что если домен не совпал с правилами, Xray попробует определить IP и применить правила по IP. Это полезно для доменов, отсутствующих в geosite.
Для роутера с OpenWrt конфигурация будет сложнее, так как нужно настроить перехват трафика и интеграцию с nftables. Но принцип тот же: правила маршрутизации в Xray определяют, куда направить трафик.
Важно помнить, что порядок правил имеет значение: сначала блокировка рекламы, потом прямые подключения, потом прокси. Если поставить прокси первым, то реклама тоже пойдёт через прокси, что увеличит нагрузку.
Инструменты для автоматизации: SmartRoute и скрипты
Для упрощения настройки маршрутизации существуют готовые решения. Например, SmartRoute — модуль для OpenWrt и Keenetic, который автоматизирует импорт подписок, генерацию конфигов и балансировку. Он предоставляет веб-интерфейс, где можно создавать профили маршрутизации без ручного редактирования JSON.
Другой инструмент — скрипты от itdoginfo, которые автоматически настраивают OpenWrt: устанавливают dnsmasq-full, настраивают firewall, подтягивают списки доменов. Это удобно для новичков, но требует понимания основ.
Также можно использовать Ansible для управления конфигурацией роутера, что удобно для массового развёртывания.
При выборе инструмента стоит учитывать:
- Поддержку вашего роутера и версии OpenWrt.
- Возможность кастомизации правил.
- Наличие балансировки и защиты от утечек.
Автоматизация экономит время, но не заменяет понимания принципов маршрутизации. В случае сбоев придётся разбираться вручную.
Типичные проблемы и их решение
При настройке маршрутизации VLESS пользователи часто сталкиваются с рядом проблем:
- Не работает на определённом устройстве — часто из-за того, что устройство использует собственный DNS. Решение — принудительно указать DNS-сервер роутера или отключить встроенный резолвинг.
- Firefox и Android — эти платформы могут использовать DoH (DNS over HTTPS), что обходит локальные правила. Нужно отключить DoH или добавить домены DoH-серверов в правила прокси.
- DNS-сервер роутера не является основным — если устройства настроены на внешний DNS, маршрутизация по доменам не сработает. Нужно настроить DHCP на выдачу адреса роутера как DNS.
- IPv6-утечки — если не настроен IPv6, трафик может уходить напрямую. Рекомендуется отключить IPv6 или настроить его маршрутизацию.
- Ошибка nftables — при больших списках IP может не хватить памяти. Решение — использовать доменные списки или уменьшить количество IP.
Для диагностики полезно использовать логи Xray и утилиты вроде tcpdump. Также можно проверить, какой IP видит сервер, с помощью специальных сайтов.
Если проблема не решается, стоит обратиться к сообществу — на форумах OpenWrt и в Telegram-чатах часто есть готовые решения.
Вопросы и ответы
Что такое VLESS и чем он отличается от VMess?
VLESS — это протокол передачи данных, разработанный для Xray. Он отличается от VMess более лёгкой структурой, отсутствием шифрования на уровне протокола (используется TLS) и лучшей производительностью. VLESS также поддерживает различные транспорты, такие как TCP, WebSocket, gRPC, и позволяет настраивать маршрутизацию на основе доменов и IP.
Как настроить маршрутизацию VLESS на роутере с OpenWrt?
Для настройки маршрутизации VLESS на OpenWrt необходимо:
- Установить dnsmasq-full и Xray-core (например, через xkeen).
- Настроить перехват трафика через nftables или iptables.
- Создать конфигурацию Xray с правилами routing, указав домены/IP для прокси, direct и block.
- Настроить firewall для направления трафика в туннель.
Можно использовать готовые скрипты, например, от itdoginfo, которые автоматизируют установку и настройку.
Что такое geosite и как его использовать в маршрутизации?
Geosite — это файл со списками доменов, сгруппированных по категориям (страны, сервисы, реклама). В Xray он используется в правилах маршрутизации через синтаксис geosite:category. Например, geosite:ru — российские домены, geosite:category-ads-all — рекламные. Это позволяет легко создавать правила без ручного перечисления доменов.
Как защититься от утечек DNS при использовании VLESS?
Чтобы избежать утечек DNS, нужно:
- Настроить DNS-запросы через прокси (например, указать DNS-сервер на стороне VPN).
- Использовать DNSCrypt-proxy2 или Stubby для шифрования DNS.
- Убедиться, что все устройства в сети используют DNS-сервер роутера.
- Отключить DoH в браузерах, если он мешает маршрутизации.
Также можно включить kill-switch, который блокирует весь трафик, не проходящий через туннель.
Почему балансировка серверов важна для VLESS-подписок?
Подписки VLESS часто содержат множество серверов, и отдельный сервер может быть перегружен или недоступен. Балансировка автоматически выбирает самый быстрый и живой сервер из пула, что обеспечивает стабильное соединение без ручного переключения. Это особенно важно для роутеров, где трафик всех устройств зависит от одного соединения.
Какие есть ограничения у доменной маршрутизации?
Доменная маршрутизация не работает для трафика, который не содержит домена (например, приложения с собственным протоколом поверх IP). Также она зависит от DNS-резолвинга: если устройство использует внешний DNS, правила могут не сработать. Для таких случаев нужна маршрутизация по IP-адресам.
Как добавить свои домены в список маршрутизации?
В Xray можно добавить свои домены в правила routing, указав их в массиве domain. Например: "domain": ["example.com", "*.example.org"]. Также можно использовать файлы geosite, но для своих доменов проще добавить их напрямую в конфигурацию. На роутерах с OpenWrt можно добавить домены в конфигурацию dnsmasq, чтобы они попадали в nftables sets.