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

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

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

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

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

В этой статье мы разберём полный путь от коробочного роутера до работающей системы на базе OpenWrt, Xray и VLESS Reality. Вы узнаете, как выбрать подходящее железо, настроить прозрачное проксирование TCP-трафика, организовать сплит-роутинг по геолокации и доменам, защитить DNS-запросы и обеспечить автоматическое восстановление после сбоев.

Выбор роутера: требования к железу и подводные камни

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

Процессор также играет ключевую роль: шифрование и дешифрование трафика требует вычислительных ресурсов. Роутеры на базе MIPS с частотой около 580 МГц будут задыхаться даже при небольшом количестве подключений. Рекомендуется выбирать модели с ARM Cortex-A53 или более новыми ядрами.

Популярный выбор — Cudy TR3000 v1 на базе MediaTek Filogic MT7981B: два ядра ARM Cortex-A53, 496 МБ DDR4, 128 МБ NAND-флеша, порт WAN 2.5GbE и три порта LAN 1GbE, Wi-Fi 6. Такая конфигурация обеспечивает достаточную производительность для шифрования и оставляет запас на будущее.

Обратите внимание на ревизии железа. У Cudy TR3000 v1 роутеры с серийными номерами от 2544 и выше (примерно с ноября 2025 года) оснащаются новым чипом NAND Flash ESMT F50L1G41LC. Старые образы OpenWrt на них не загружаются, а поддержка появилась только в версии 24.10.5 и новее. Для прошивки таких устройств требуется специальная промежуточная прошивка от Cudy, иначе роутер можно превратить в «кирпич».

Прошивка OpenWrt: пошаговый процесс и важные нюансы

Процесс установки OpenWrt на Cudy TR3000 v1 состоит из двух этапов. Сначала из стоковой прошивки Cudy через веб-интерфейс загружается bin-файл из архива intermediate firmware. После перезагрузки появляется LuCI от промежуточной версии OpenWrt, через которую выполняется sysupgrade на финальную версию — например, 25.12.2.

После прошивки доступ к роутеру осуществляется по SSH: ssh root@192.168.1.1. В новых версиях OpenWrt (начиная примерно с 25.x) пакетный менеджер заменён с opkg на apk, поэтому команды установки отличаются. Например, для установки необходимых пакетов используется:

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

Важно убедиться, что версия OpenWrt поддерживает ваш конкретный роутер. Список совместимых устройств доступен на openwrt.org/toh. Перед прошивкой рекомендуется сохранить резервную копию заводской прошивки, чтобы иметь возможность откатиться в случае проблем.

Архитектура решения: как работает прозрачный прокси-шлюз

Система строится вокруг нескольких ключевых компонентов. Устройства в локальной сети отправляют TCP-трафик на роутер, где nftables с помощью TPROXY перехватывает пакеты и направляет их в Xray на порту 12345. Xray анализирует трафик, определяет пункт назначения и принимает решение: отправить его напрямую или через защищённый канал VLESS+Reality.

DNS-запросы обрабатываются отдельно. AdGuard Home на порту 53 принимает DNS от устройств, фильтрует рекламу и трекеры, а затем резолвит запросы через DNS-over-HTTPS (DoH). HTTPS-трафик к DNS-серверам также проходит через TPROXY и уходит через прокси. Таким образом, ни один незашифрованный DNS-запрос не покидает роутер.

Сплит-роутинг позволяет направлять только нужный трафик через VPN. Например, российские сайты (geoip:ru) и домены .ru идут напрямую, а всё остальное — через защищённый канал. Это снижает нагрузку на прокси и уменьшает задержки для локальных ресурсов.

Важно понимать ограничение: текущая схема проксирует только TCP-трафик. UDP, за исключением DNS, идёт напрямую. Это осознанное архитектурное решение, которое можно расширить в будущем.

Почему TPROXY, а не REDIRECT: технические детали

Существует два основных способа перехвата трафика на роутере: REDIRECT (DNAT) и TPROXY. REDIRECT подменяет адрес назначения на 127.0.0.1:порт, из-за чего оригинальный IP теряется. Прокси-серверу приходится восстанавливать его из заголовков протокола — HTTP Host или TLS SNI. Для трафика, который не использует эти протоколы, восстановление невозможно.

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

TPROXY сложнее в настройке: требуются специальные модули ядра, policy routing и правила nftables. Однако он надёжнее и универсальнее. В конфигурации Xray для TPROXY используется параметр sockopt.tproxy: "tproxy", а входящее соединение настраивается через протокол dokodemo-door с followRedirect: true.

Конфигурация Xray: входящие и исходящие соединения

Конфигурация Xray состоит из нескольких секций. Входящее соединение (inbound) настраивается для приёма перенаправленного трафика:

{
  "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"
    }
  }
}

Протокол dokodemo-door — это «дверь куда угодно», которая принимает прозрачно перенаправленный трафик. followRedirect: true позволяет использовать оригинальный адрес назначения, восстановленный TPROXY. Сниффинг с destOverride: ["http", "tls"] извлекает домен из SNI или Host-заголовка, что необходимо для маршрутизации по доменам. Флаг routeOnly: true гарантирует, что домен используется только для принятия решения о маршруте, а само соединение устанавливается по оригинальному IP.

Исходящие соединения (outbounds) бывают трёх типов: прокси-серверы VLESS+Reality, прямое соединение (freedom) и блокировка (blackhole). Для прокси-сервера указываются адрес, порт, UUID пользователя, flow xtls-rprx-vision, а также параметры Reality: serverName, publicKey, fingerprint и shortId.

Пример исходящего соединения:

{
  "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"
    }
  }
}

Параметр fingerprint: "chrome" заставляет Xray имитировать TLS-отпечаток браузера Chrome, что затрудняет обнаружение DPI.

Сплит-роутинг и балансировка нагрузки

Сплит-роутинг позволяет гибко управлять тем, какой трафик идёт через прокси, а какой напрямую. В Xray это реализуется через правила маршрутизации, которые могут использовать геоданные (geoip) и списки доменов (geosite). Например, можно настроить правило: если домен заканчивается на .ru или IP принадлежит России, то использовать outbound direct, иначе — proxy-1.

Для балансировки нагрузки между несколькими серверами используется модуль Observatory. Он периодически проверяет доступность серверов, отправляя HTTP-запросы к контрольной точке (например, http://cp.cloudflare.com). На основе результатов выбирается сервер с наименьшей задержкой (leastPing).

Пример конфигурации Observatory:

{
  "observatory": {
    "subjectSelector": ["proxy-"],
    "probeURL": "http://cp.cloudflare.com",
    "probeInterval": "120s",
    "enableConcurrency": true
  }
}

Это позволяет автоматически переключаться на резервный сервер в случае сбоя основного, обеспечивая высокую доступность.

Защита DNS: AdGuard Home и DNS-over-HTTPS

DNS-запросы — это один из самых уязвимых элементов сетевой инфраструктуры. Если они передаются в открытом виде, провайдер или злоумышленник может видеть, какие сайты вы посещаете, и подменять ответы. Для защиты DNS в рассматриваемой схеме используется AdGuard Home, который работает на роутере и принимает все DNS-запросы от устройств.

AdGuard Home не только фильтрует рекламу и трекеры, но и перенаправляет запросы через DNS-over-HTTPS к публичным резолверам, например Cloudflare (1.1.1.1) или Google (8.8.8.8). HTTPS-трафик к DNS-серверам проходит через TPROXY и уходит через защищённый канал, что гарантирует конфиденциальность.

Важно, что DNS-серверы провайдера, полученные по PPPoE, не используются. Вместо них настраиваются Cloudflare и Google. Это предотвращает утечку DNS-запросов и повышает устойчивость к блокировкам.

Настройка AdGuard Home включает установку пакета, настройку upstream DNS-серверов и включение фильтрации. После этого все устройства в сети автоматически получают защищённый DNS.

Автоматическое восстановление и мониторинг

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

Во-первых, procd — система инициализации OpenWrt — может автоматически перезапускать службу Xray при её падении. Для этого в init-скрипте указывается параметр procd_set_param respawn.

Во-вторых, watchdog (сторожевой таймер) может отслеживать доступность прокси и перезагружать роутер при зависании. Это грубый, но эффективный метод.

В-третьих, hotplug-скрипты позволяют реагировать на изменения сетевых интерфейсов, например, перезапускать Xray при переподключении PPPoE.

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

В итоге система может работать неделями без перезагрузки, самостоятельно восстанавливаясь после большинства сбоев.

Ограничения и практические рекомендации

Несмотря на все преимущества, у описанной схемы есть ограничения. Главное — проксируется только TCP-трафик. UDP, например, для онлайн-игр или видеозвонков, идёт напрямую. Это может быть проблемой, если нужно проксировать UDP-приложения. В таком случае потребуется дополнительная настройка, например, использование TUN-интерфейса.

Также стоит учитывать, что Xray потребляет значительные ресурсы, поэтому выбор роутера с достаточным объёмом RAM и производительным процессором критичен. Роутеры с 128 МБ RAM не подойдут.

При использовании PPPoE важно правильно настроить MTU. Для PPPoE стандартное значение — 1480 байт (1500 минус 8 байт PPP и 12 байт PPPoE). OpenWrt автоматически настраивает MSS clamping, что предотвращает проблемы с фрагментацией.

Рекомендуется регулярно обновлять geodata (geoip и geosite), чтобы маршрутизация оставалась актуальной. Это можно автоматизировать с помощью cron-заданий.

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

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

Какие минимальные требования к роутеру для VLESS Reality на OpenWrt?

Для работы Xray-core требуется минимум 256 МБ оперативной памяти, но комфортно — 512 МБ. Процессор должен быть ARM Cortex-A53 или мощнее, так как MIPS-роутеры с частотой около 580 МГц не справятся с шифрованием. Также необходима поддержка OpenWrt — проверяйте совместимость на openwrt.org/toh.

В чём разница между TPROXY и REDIRECT при настройке прозрачного прокси?

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

Как защитить DNS-запросы при использовании прокси на роутере?

Используйте AdGuard Home на роутере, который принимает все DNS-запросы от устройств, фильтрует рекламу и перенаправляет запросы через DNS-over-HTTPS к публичным резолверам (например, Cloudflare 1.1.1.1). HTTPS-трафик к DNS-серверам проходит через TPROXY и уходит через защищённый канал, что исключает утечку открытых DNS-запросов.

Можно ли использовать несколько VPN-серверов с автоматическим переключением?

Да, Xray поддерживает пул серверов и балансировку нагрузки через модуль Observatory. Он периодически проверяет доступность серверов, отправляя HTTP-запросы к контрольной точке, и выбирает сервер с наименьшей задержкой. При сбое основного сервера трафик автоматически переключается на резервный.

Какие ограничения у схемы с TPROXY на OpenWrt?

Основное ограничение — проксируется только TCP-трафик. UDP (кроме DNS) идёт напрямую. Это может быть неприемлемо для онлайн-игр или видеозвонков. Также требуется роутер с достаточными ресурсами (RAM от 256 МБ, CPU ARM Cortex-A53), иначе производительность будет низкой.

Что делать, если роутер Cudy TR3000 v1 не загружает OpenWrt?

Проверьте серийный номер. Роутеры с серийниками от 2544 и выше используют новый чип NAND Flash ESMT F50L1G41LC, поддержка которого появилась только в OpenWrt 24.10.5+. Для прошивки требуется специальная промежуточная прошивка от Cudy (ZIP-архив с датой 20251118), а затем sysupgrade на нужную версию. Без промежуточной прошивки роутер может выйти из строя.

Как настроить сплит-роутинг, чтобы российские сайты шли напрямую?

В конфигурации Xray добавьте правила маршрутизации, которые используют geoip:ru и geosite с доменами .ru. Если IP или домен соответствует российским, направляйте трафик в outbound direct, иначе — в прокси. Сниффинг с destOverride: ["http", "tls"] позволяет определять домены из SNI или Host-заголовка.