OpenWrt + Xray VLESS: прозрачный прокси-шлюз для всей сети

Настройка Xray с VLESS и Reality на роутере OpenWrt: выбор железа, установка, конфигурация, TPROXY, DNS, решение проблем. Полное руководство.

Зачем проксировать трафик на роутере, а не на устройствах

Когда устройств в доме больше двух-трёх, установка VPN-клиента на каждое из них превращается в ад. Smart TV, игровые консоли и IoT-устройства часто не поддерживают современные протоколы вроде VLESS, а на мобильных клиенты могут незаметно отключаться, оставляя трафик незащищённым. Прокси-шлюз на роутере решает эти проблемы: все устройства, подключённые по Wi-Fi или кабелю, автоматически получают доступ через защищённый канал, и им не нужно ничего знать о прокси.

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

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

Выбор роутера: на что обратить внимание

Не каждый роутер подойдёт для запуска Xray. Ключевые требования — поддержка OpenWrt, достаточный объём RAM и производительный процессор. Xray-core написан на Go и потребляет около 100 МБ физической памяти, плюс geodata (списки IP и доменов) занимает ещё примерно 85 МБ в tmpfs. Поэтому роутеры с 128 МБ RAM не подойдут — минимум 256 МБ, а комфортно — 512 МБ.

Процессор тоже важен: ARM Cortex-A53 или мощнее справится с шифрованием без заметных тормозов, а вот старые MIPS-роутеры с частотой 580 МГц будут задыхаться. Хороший пример — Cudy TR3000 v1: SoC MediaTek Filogic (MT7981B), 2 ядра ARM Cortex-A53, 496 МБ DDR4, 128 МБ NAND. Такой роутер стоит около 4500 рублей и обеспечивает запас производительности.

Обратите внимание на ревизии железа. Например, у Cudy TR3000 v1 с серийными номерами от 2544 и выше (примерно с ноября 2025) установлен новый чип NAND Flash — ESMT F50L1G41LC, который не поддерживается старыми образами OpenWrt. Для прошивки таких устройств требуется специальная промежуточная прошивка от производителя, иначе роутер можно превратить в кирпич. Всегда проверяйте актуальную информацию на openwrt.org/toh.

Установка OpenWrt и базовых пакетов

Прошивка OpenWrt обычно проходит в два этапа: сначала из стоковой прошивки загружается промежуточный образ, затем через LuCI выполняется sysupgrade на финальную версию. После прошивки вы получаете доступ по SSH (root@192.168.1.1) и веб-интерфейс LuCI.

Начиная с OpenWrt 25.x пакетный менеджер изменился: вместо opkg используется apk. Команды установки выглядят так:

apk update
apk add xray-core kmod-nft-tproxy kmod-nf-tproxy nftables-json curl

Эти пакеты включают сам Xray, модули ядра для TPROXY (прозрачного проксирования), утилиту nft с поддержкой JSON и curl для скачивания geodata. Если вы используете более старую версию OpenWrt с opkg, команды будут аналогичными, но с opkg install.

Важно: перед установкой проверьте свободное место в файловой системе. Xray-core вместе с geodata может занять около 23 МБ без учёта geoip.dat и geosite.dat, которые добавляют ещё примерно 11,5 МБ. Если места мало, можно пересобрать прошивку, исключив ненужные пакеты, или использовать урезанные geodata.

Что такое VLESS, Reality и XTLS-Vision

VLESS — это легковесный прокси-протокол, наследник VMess из экосистемы V2Ray. Его ключевая особенность — отсутствие собственного шифрования: вся защита делегируется TLS. Это снижает накладные расходы и нагрузку на процессор, а скорость приближается к нативному HTTPS.

Reality — технология установления TLS-соединения без собственного сертификата. Вместо того чтобы покупать и настраивать сертификат для своего домена, сервер при handshake предъявляет клиенту сертификат выбранного публичного ресурса (например, www.microsoft.com) через SNI. Аутентификация клиента выполняется через криптографическую пару publicKey/shortId. Для DPI и провайдера такое соединение выглядит как обычный HTTPS к легитимному сайту.

XTLS-Vision — это оптимизация, при которой Xray «проваливает» внутренний TLS прямо во внешний TLS без двойного шифрования. Когда вы подключаетесь к HTTPS-сайту через VLESS+Reality, данные шифруются один раз, а не два, как в классических прокси. Это даёт почти нативную скорость. Vision также добавляет padding в TLS-handshake, что скрывает сигнатуру прокси от анализа трафика.

Вместе эти технологии обеспечивают высокую скорость, низкую задержку и устойчивость к детекции, что делает их идеальными для обхода DPI в странах с государственной фильтрацией.

Архитектура прозрачного прокси: TPROXY и nftables

Для прозрачного проксирования трафика на роутере используется TPROXY — механизм ядра Linux, который передаёт пакеты приложению с сохранением оригинального IP-адреса назначения. Это критически важно: Xray должен знать, куда клиент хотел подключиться, чтобы правильно маршрутизировать запрос.

Альтернатива — REDIRECT (DNAT), которая подменяет адрес назначения на 127.0.0.1:порт, но оригинальный адрес теряется. Прокси приходится восстанавливать его из заголовков HTTP Host или TLS SNI, что работает не для всех протоколов. TPROXY сложнее в настройке (нужны модули ядра, policy routing, специальные правила nftables), но он надёжнее и универсальнее.

В OpenWrt настройка TPROXY выполняется через nftables. Вам понадобятся модули kmod-nf-tproxy и kmod-nft-tproxy, а также kmod-nft-fib для FIB lookup. Правила nftables перехватывают TCP-трафик с интерфейса br-lan и направляют его на порт Xray (например, 12345). Xray, в свою очередь, анализирует трафик и решает, отправить его через прокси или напрямую.

Важно: TPROXY работает только с TCP. UDP-трафик (кроме DNS) в базовой схеме идёт напрямую. Если вам нужен UDP через прокси, потребуется дополнительная настройка, например, через tun2socks или другие механизмы.

Конфигурация Xray: inbound, outbound и маршрутизация

Конфигурация Xray состоит из нескольких секций. Inbound (входящее соединение) настраивается на приём перенаправленного трафика через TPROXY. Используется протокол dokodemo-door — специальный режим для прозрачного проксирования. Ключевые параметры:

{
  "tag": "tproxy-in",
  "port": 12345,
  "protocol": "dokodemo-door",
  "settings": {
    "network": "tcp",
    "followRedirect": true
  },
  "sniffing": {
    "enabled": true,
    "destOverride": ["http", "tls"],
    "routeOnly": true
  },
  "streamSettings": {
    "sockopt": {
      "tproxy": "tproxy"
    }
  }
}

Параметр followRedirect: true указывает Xray использовать оригинальный адрес назначения из пакета. Sniffing с destOverride: ["http", "tls"] позволяет извлекать домен из TLS SNI или HTTP Host для маршрутизации по доменам. routeOnly: true — важный нюанс: без него sniffing подменяет адрес назначения, что может ломать некоторые сценарии. С этим флагом домен используется только для принятия решения о маршруте, а соединение устанавливается по оригинальному IP.

Outbound (исходящие соединения) настраиваются для прокси-серверов VLESS+Reality. Пример:

{
  "tag": "proxy-1",
  "protocol": "vless",
  "settings": {
    "vnext": [{
      "address": "your-server.example.com",
      "port": 443,
      "users": [{
        "id": "ваш-uuid",
        "flow": "xtls-rprx-vision",
        "encryption": "none"
      }]
    }]
  },
  "streamSettings": {
    "network": "tcp",
    "security": "reality",
    "realitySettings": {
      "serverName": "sni-domain.example.com",
      "publicKey": "ваш-publicKey",
      "fingerprint": "chrome",
      "shortId": "1234"
    }
  }
}

Маршрутизация (routing) определяет, какой трафик идти через прокси, а какой — напрямую. Например, можно направить российские домены и geoip:ru напрямую, а остальное — через прокси. Для этого используются правила с domainStrategy и списками geosite/geoip.

Настройка DNS: шифрование и фильтрация

DNS — критически важный компонент. Если DNS-запросы уходят в открытом виде, провайдер может видеть, какие сайты вы посещаете, даже если трафик зашифрован. В схеме с прокси-шлюзом рекомендуется использовать AdGuard Home или аналогичный инструмент для шифрования DNS через DoH (DNS-over-HTTPS) и фильтрации рекламы.

AdGuard Home принимает DNS-запросы от устройств на порту 53, резолвит их через DoH (например, https://1.1.1.1/dns-query) и возвращает ответы. При этом HTTPS-трафик к DNS-серверам проходит через TPROXY и уходит через защищённый канал. Таким образом, ни один plaintext DNS-запрос не покидает роутер.

В конфигурации Xray также есть настройки DNS. По умолчанию в некоторых сборках (например, luci-app-xray) прописан китайский DNS 114.114.114.114 для запросов, которые идут напрямую. Его стоит заменить на ближайший к вам DNS, например, провайдерский или 8.8.8.8. Secure DNS и Default DNS — для запросов через прокси, их можно оставить как есть.

Важно: убедитесь, что клиентские устройства используют адрес роутера в качестве DNS-сервера. Если они получают адрес по DHCP, скорее всего, так и есть. Если на устройствах прописан другой DNS, Xray может работать некорректно.

Установка через luci-app-xray: альтернативный подход

Вместо ручной настройки Xray и nftables можно использовать пакет luci-app-xray, который предоставляет веб-интерфейс для управления. Это упрощает настройку, особенно для новичков. Установка включает два файла: luci-app-xray-fw4 и luci-app-xray-shared. Первый содержит скрипты и интерфейс, второй — зависимости от xray-core.

Скачайте последний релиз с GitHub (например, v2.1.2) и установите через opkg:

opkg install ./luci-app-xray-shared_2.1.2-1_all.ipk
opkg install ./luci-app-xray-fw4_2.1.2-1_all.ipk

Возможно, потребуется доустановить зависимости, например kmod-nft-tproxy. После перезагрузки в LuCI появится вкладка Xray. Интерфейс позволяет добавлять серверы, указывая адрес, порт, UUID и протокол (Shadowsocks, VLESS, VMess). Для VLESS с Reality нужно заполнить поля publicKey, shortId, SNI и flow.

Обратите внимание: в luci-app-xray настройка идёт «наоборот» — сначала задаётся имя сервера и данные пользователя, а затем на второй вкладке выбирается протокол и параметры. На третьей вкладке настраиваются DNS и правила маршрутизации. По умолчанию там прописаны правила для Китая (домен .cn) — их нужно удалить. Также важно заполнить поля Bypassed domain rules и Forwarded domain rules, иначе Xray может пускать весь трафик напрямую.

Решение типовых проблем и диагностика

Даже при правильной настройке могут возникнуть проблемы. Вот типичные сценарии и способы их решения.

Таймаут или connection refused. Проверьте UUID — копируйте его из панели, а не перепечатывайте вручную. Убедитесь, что порт 443 не блокируется вашей сетью. Попробуйте подключиться с другого устройства или через мобильный хотспот для диагностики.

Соединение есть, но интернет не работает. Проверьте DNS: в клиенте или на роутере должен быть указан рабочий DNS (8.8.8.8 или 1.1.1.1). Убедитесь, что режим роутинга — Global, а не PAC. Отключите другие VPN и прокси, которые могут конфликтовать.

Низкая скорость. Убедитесь, что XTLS Vision включён (flow: xtls-rprx-vision). Используйте транспорт TCP, а не WebSocket или gRPC. Измерьте скорость без прокси, чтобы понять потолок канала. Учтите географию — до удалённого сервера есть естественная задержка.

IP не выглядит как ожидалось. Проверьте выходной IP на специализированных сервисах (ip.proxypoland.com, whoer.net). Убедитесь, что режим роутинга — Global. Подождите несколько секунд после подключения.

Для диагностики на роутере увеличьте уровень логирования Xray и смотрите логи через logread или в System Log. Когда всё работает, верните уровень warning, чтобы экономить ресурсы.

Практические примеры и продвинутые сценарии

Один из полезных сценариев — сплит-роутинг по GeoIP и доменам. Например, можно направить трафик к российским сайтам напрямую, а всё остальное — через прокси. Это снижает нагрузку на прокси и уменьшает задержки для локальных ресурсов. В Xray это реализуется через правила routing:

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

Другой сценарий — балансировка нагрузки между несколькими прокси-серверами. Xray поддерживает механизм Observatory, который автоматически выбирает самый быстрый сервер из списка. Это полезно, если у вас несколько серверов в разных локациях.

Также можно настроить автоматическое обновление списка серверов из подписки. Для этого используется скрипт, который скачивает конфигурацию каждые 30 минут и перезагружает Xray. Это удобно, если ваш провайдер прокси предоставляет динамические серверы.

Наконец, для UDP-трафика (например, для игр или видеозвонков) можно использовать tun2socks или другие механизмы, но это требует дополнительной настройки. В базовой схеме UDP идёт напрямую, что может быть приемлемо для большинства сценариев.

Вопросы и ответы

Чем VLESS отличается от VMess?

VLESS — это более современный протокол, который не имеет собственного шифрования и полностью полагается на TLS. Это снижает нагрузку на CPU и уменьшает задержки. VMess, напротив, использует собственное шифрование AES поверх TLS, что приводит к двойному шифрованию и снижению скорости на 15–30%. Кроме того, VLESS поддерживает XTLS-Vision, а VMess — нет. Для новых конфигураций всегда выбирайте VLESS.

Что такое REALITY и зачем он нужен?

REALITY — это технология в Xray, которая маскирует прокси-сервер под обычный HTTPS-сайт. При handshake сервер предъявляет клиенту TLS-сертификат выбранного публичного ресурса (например, www.microsoft.com) через SNI. Для DPI и провайдера соединение выглядит как обычный HTTPS, что делает прокси практически неотличимым от легитимного трафика. Это особенно важно в странах с активной фильтрацией.

Какой роутер выбрать для OpenWrt с Xray?

Нужен роутер с поддержкой OpenWrt, минимум 256 МБ RAM (лучше 512 МБ) и процессором ARM Cortex-A53 или мощнее. Пример — Cudy TR3000 v1 с SoC MediaTek Filogic (MT7981B), 496 МБ RAM и 128 МБ NAND. Избегайте старых MIPS-роутеров с 128 МБ RAM — они не потянут Xray. Проверяйте совместимость на openwrt.org/toh.

Почему TPROXY лучше REDIRECT для прозрачного проксирования?

TPROXY сохраняет оригинальный IP-адрес назначения, что позволяет Xray видеть, куда клиент хотел подключиться. Это критично для маршрутизации по доменам и IP. REDIRECT (DNAT) подменяет адрес на 127.0.0.1, и прокси приходится восстанавливать его из заголовков HTTP или TLS SNI, что работает не для всех протоколов. TPROXY сложнее в настройке, но надёжнее и универсальнее.

Как настроить DNS, чтобы он не утекал?

Используйте AdGuard Home или аналогичный инструмент на роутере. Он принимает DNS-запросы от устройств на порту 53 и резолвит их через DoH (например, https://1.1.1.1/dns-query). HTTPS-трафик к DNS-серверам проходит через TPROXY и уходит через прокси. Убедитесь, что клиентские устройства используют адрес роутера в качестве DNS-сервера, иначе запросы могут уходить напрямую.

Что делать, если Xray запускается, но трафик идёт напрямую?

Проверьте, что файлы geoip.dat и geosite.dat установлены в /usr/share/. Без них Xray может работать некорректно. Также убедитесь, что в правилах маршрутизации заполнены поля Bypassed domain rules и Forwarded domain rules — если они пустые, Xray может пускать весь трафик напрямую. Проверьте настройки DNS и убедитесь, что клиенты используют роутер как DNS-сервер.

Можно ли использовать OpenWrt как сервер Xray для подключений извне?

Да, можно. Установите xray-core и настройте его как сервер, аналогично настройке на VPS. Откройте нужный порт на фаерволе. Также можно использовать Passwall, который имеет режим server-side. Однако учтите, что домашний роутер обычно имеет динамический IP, поэтому потребуется DDNS или статический IP от провайдера.