Re:HomeProxy на OpenWrt: обход блокировок и гибкая маршрутизация

Материал из wolfram
Перейти к навигации Перейти к поиску

Re:HomeProxy на OpenWrt: обход блокировок и гибкая маршрутизация

Пошаговая инструкция по установке Re:HomeProxy на роутер с OpenWrt — от чистой системы до работающего обхода блокировок. Рассчитана на пользователя, который умеет подключаться к роутеру по SSH.

Проверено на Xiaomi Redmi Router AX6000 (aarch64_cortex-a53) с OpenWrt 24.10.0.

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


Что мы построим

Одна панель в LuCI, которая управляет всем: туннелем, списками заблокированных ресурсов и обходом DPI.

Компонент Назначение
Re:HomeProxy Веб-панель в LuCI. Управляет узлами, маршрутизацией и обходом DPI.
sing-box-extended Ядро. Поддерживает VLESS (REALITY, XHTTP), Hysteria2, Trojan, Shadowsocks, AnyTLS, WireGuard, AmneziaWG, Mieru, NaïveProxy и др.
Списки маршрутизации Готовые наборы доменов и IP (Re-filter, Russia Inside, отдельные сервисы). Обновляются автоматически раз в сутки.
Zapret 2 Обход DPI без туннеля — для сервисов, которые не заблокированы, а замедлены (например, видеохостинги). Трафик идёт напрямую, не нагружая VPS.

Принцип простой: списки решают, какой трафик особенный, а узел или Zapret — через что его пустить. Всё, что не попало ни в один список, идёт напрямую.

Что понадобится

Требование Описание
Роутер OpenWrt / ImmortalWrt 24.10 и новее (opkg) либо 25.12 и новее (apk)
Доступ Веб-интерфейс LuCI и SSH к роутеру
Узел Ссылка на ваш сервер: vless://, hysteria2://, naive+https://, ss:// и т.п.

Установка

Шаг 1. Установить панель

Подключитесь к роутеру по SSH и выполните команды по очереди.

Обновить список пакетов:

opkg update

Установить зависимости:

opkg install ucode-mod-digest kmod-nft-tproxy kmod-tun

Перейти в каталог для загрузок:

cd /tmp

Скачать панель:

wget -O rhp.ipk https://github.com/1andrevich/homeproxy-hiddify/releases/download/2026.06.29-r1/luci-app-re-homeproxy_2026.06.29-r1_all.ipk

Установить:

opkg install /tmp/rhp.ipk

Скачать русский язык интерфейса:

wget -O rhp-ru.ipk https://github.com/1andrevich/homeproxy-hiddify/releases/download/2026.06.29-r1/luci-i18n-homeproxy-ru_2026.06.29-r1_all.ipk

Установить язык:

opkg install /tmp/rhp-ru.ipk

Актуальную версию пакета смотрите на странице релизов — в командах указана 2026.06.29-r1. Для OpenWrt 25.12 и новее замените в ссылках .ipk на .apk, а команду установки — на apk add --allow-untrusted /tmp/rhp.apk.

Шаг 2. Установить ядро

Ядро sing-box-extended ставится вручную — сборка из репозитория OpenWrt собрана без поддержки NaïveProxy, поэтому берём универсальную musl-сборку, где есть все протоколы.

Скачать ядро:

wget -O sb.tar.gz https://github.com/shtorm-7/sing-box-extended/releases/download/v1.13.18-extended-2.6.5/sing-box-1.13.18-extended-2.6.5-linux-arm64-musl.tar.gz

Распаковать:

tar xzf sb.tar.gz

Установить:

cp /tmp/sing-box-1.13.18-extended-2.6.5-linux-arm64-musl/sing-box /usr/bin/sing-box

Сделать исполняемым:

chmod +x /usr/bin/sing-box

Убрать временные файлы:

rm -rf /tmp/sing-box-1.13.18-extended-2.6.5-linux-arm64-musl /tmp/sb.tar.gz

Внимание — архитектура и путь. В ссылке указана архитектура arm64; если у вас другая, возьмите подходящий файл linux-<арх>-musl на странице релизов ядра. Копировать ядро нужно строго в /usr/bin/sing-box — по другому пути служба его не запустит.

Шаг 3. Запустить службу

Включить автозапуск:

/etc/init.d/homeproxy enable

Запустить:

/etc/init.d/homeproxy start

Дальше вся настройка — в веб-интерфейсе: Сервисы → Re:HomeProxy. Если пункт меню не появился, обновите страницу с очисткой кэша (Ctrl+F5).

Шаг 4. Добавить узел

Откройте вкладку Настройки узлов. Список пока пуст.

Вкладка «Настройки узлов» до добавления сервера.

Нажмите Импортировать ссылку-конфигурацию для подключения и вставьте ссылку на ваш сервер.

Окно импорта. Поддерживаются Amnezia (vpn://), Hysteria, Mieru, NaïveProxy (naive://), Shadowsocks (ss://), SSH, Trojan, v2rayN (VMess), WireGuard и VLESS (vless://).

После нажатия Импорт узел появится в списке.

Узел добавлен: видны его тип, адрес и порт.

Нажмите Применить.

Шаг 5. Выбрать основной узел

Перейдите на вкладку Настройки клиента → Настройки маршрутизации и выберите добавленный сервер в поле Основной узел.

Основной узел выбран. Остальные параметры можно оставить по умолчанию.

Остальные поля менять не нужно — значения по умолчанию подходят для большинства случаев. Нажмите Применить.

Проверка: в заголовке страницы надпись должна смениться на зелёную — Re:HomeProxy (sing-box ...) РАБОТАЕТ. Если она красная и написано NOT RUNNING — вернитесь к шагу 2, ядро не установлено или лежит не по тому пути.

Шаг 6. Установить Zapret

Zapret нужен для сервисов, которые замедляют, а не блокируют — их не обязательно гнать через сервер.

Откройте Настройки узлов → Zapret и нажмите Установить. Панель скачает и установит всё сама.

Шаг 7. Настроить правила

Это главный шаг: здесь вы указываете, что и через что пускать. Откройте Настройки клиента → Правила прокси и кнопкой Добавить создайте нужные строки.

Три типовых правила: Telegram через основной узел, YouTube и Discord через Zapret.

В каждой строке заполняются три поля: Включить (галочка), Отправитель (какой список) и Узел (через что пускать).

Рекомендуемый набор для начала:

Отправитель Узел Зачем
Re-filter Как основной узел Всё, что заблокировано в России (60000+ доменов и 25000+ IP)
Telegram Как основной узел Мессенджер подключается к серверам по IP, поэтому нужен именно список сервиса
YouTube Zapret Видео идёт напрямую и не расходует трафик сервера
Discord Zapret То же самое; для голосовой связи надёжнее выбрать основной узел

Нажмите Применить. Списки скачаются автоматически и дальше будут обновляться раз в сутки — вручную их вести не нужно.

Шаг 8. Добавить cloudflare-ech.com

Откройте Настройки клиента → Контроль доступа → Список доменов для проксирования и добавьте одну строку:

cloudflare-ech.com
Список доменов для проксирования. Сюда же можно дописывать свои сайты, по одному в строке.

Внимание — без этой строки часть сайтов не откроется в браузере. Современные браузеры скрывают имя сайта в защищённом соединении (технология ECH), и панель не может определить, что за сайт запрошен. В результате он идёт напрямую и блокируется. Эта строка возвращает такие соединения в туннель. Подробности — в разделе «Почему нужен cloudflare-ech.com» ниже.

Нажмите Применить.

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


Дополнения и тонкости

Этот раздел не нужен для базовой установки — читайте по мере необходимости.

Как применить изменения списка доменов

Внимание: если вы изменили только список доменов и ничего больше, кнопка Применить может сообщить, что изменений нет, — и ядро продолжит работать со старым списком. Так устроено поле списка: оно сохраняет файл отдельно от остальных настроек.

Чтобы изменения вступили в силу, откройте вкладку Диагностика и нажмите Перезапустить службу. Либо меняйте список вместе с любой другой настройкой — тогда обычная кнопка Применить сработает как обычно.

Почему нужен cloudflare-ech.com

Сайты, работающие через Cloudflare, публикуют специальную DNS-запись, после которой браузер включает ECH (Encrypted Client Hello) и шифрует имя запрашиваемого сайта внутри защищённого соединения. Панель определяет сайт именно по этому имени, поэтому распознать его не может, не находит в списках и отправляет соединение напрямую — где его и обрывает провайдер.

Характерный признак: сайт есть в списке, но в браузере выдаёт ошибку защищённого соединения (в Firefox — PR_END_OF_FILE_ERROR), при этом проверка через curl с того же компьютера проходит успешно. Так происходит потому, что curl технологию ECH не использует и передаёт имя сайта открыто.

При включённом ECH скрывается только внутреннее имя, а внешнее остаётся видимым, и у всех сайтов за Cloudflare оно одинаковое — cloudflare-ech.com. Добавив его в список, вы возвращаете такие соединения в туннель. Решение работает для любого устройства в сети независимо от браузера и его настроек.

Проверить, использует ли конкретный сайт ECH (подставьте нужный адрес вместо example.com):

curl -s 'https://cloudflare-dns.com/dns-query?name=example.com&type=HTTPS' -H 'accept: application/dns-json'

Если в ответе есть ech=, имя сайта будет скрыто.

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

Многие приложения — мессенджеры, игры, часть мобильных программ — подключаются к своим серверам по IP-адресам, без имени сайта. Правила по доменам на такие соединения не действуют в принципе: панели нечего сопоставлять со списком.

Готовые списки сервисов содержат не только домены, но и IP-подсети, поэтому закрывают оба случая. Показательный пример — Telegram: помимо доменов (t.me, telegra.ph, telesco.pe) список включает подсети серверов (149.154.160.0/20, 91.108.4.0/22, 91.108.56.0/22 и другие). Без них веб-версия откроется, а сам мессенджер подключиться не сможет.

Поэтому для мессенджеров и приложений всегда добавляйте готовое правило сервиса в «Правила прокси», а не отдельные домены в список.

Zapret не работает сам по себе

Внимание: установка Zapret ничего не обходит сама по себе. Он обрабатывает только тот трафик, который вы явно на него направили правилом в Правилах прокси. Пока ни одно правило не указывает на Zapret, он просто запущен и бездействует.

Проверить, что трафик действительно пошёл в обработку:

nft list chain inet fw4 homeproxy_zapret_queue

Ненулевые счётчики пакетов в строках правил означают, что механизм работает.

Стратегия обхода по умолчанию рассчитана на типовые ограничения российских провайдеров. Если сервис всё равно не открывается — на вкладке Zapret есть тестер стратегий: он проверяет разные варианты и показывает, какие работают у вашего провайдера.

Диагностика

Вкладка Диагностика показывает состояние ядра, версию, запущенные службы, занятые порты и позволяет проверить доступность контрольных сайтов.

Из командной строки — состояние службы:

/etc/init.d/homeproxy status

Журнал событий:

tail -30 /var/run/homeproxy/homeproxy.log

Журнал ядра:

tail -30 /var/run/homeproxy/hiddify-c.log

Уточнение: множество строк connection refused и i/o timeout на портах 6881, 51413 и произвольных высоких портах — это обычно торренты: клиент перебирает источники, часть которых недоступна. К работе туннеля отношения не имеет.

Как узнать, каким путём ушло соединение

Временно переключите Уровень журнала на info, откройте сайт с любого устройства и посмотрите записи вида:

outbound/vless[main-out]: outbound connection to 172.67.182.196:443

Обозначение в скобках показывает путь: main-out — через ваш сервер, direct-out — напрямую, zapret-out — с обходом DPI. После проверки верните уровень warn, иначе журнал быстро разрастается.

Проверка с устройства в сети

Проверять нужно с обычного компьютера или телефона, а не с самого роутера — его собственный трафик обрабатывается иначе.

Какой адрес видит внешний мир:

curl -s https://api.ipify.org

Доступность сайта (подставьте нужный адрес):

curl -s -o /dev/null -m 15 -w 'HTTP %{http_code} за %{time_total}s\n' https://example.com

Типовые неполадки

Симптом Причина и решение
В заголовке панели красное NOT RUNNING Ядро не установлено или лежит не по пути /usr/bin/sing-box — см. Шаг 2
Служба запущена, но ничего не проксируется Не выбран Основной узел — см. Шаг 5
Сайт из списка не открывается в браузере, хотя curl работает Не добавлен cloudflare-ech.com — см. Шаг 8
Изменил список доменов, ничего не поменялось Диагностика → Перезапустить службу
Мессенджер не подключается, хотя его сайт открывается Нужно готовое правило сервиса с IP-подсетями, а не домены
Zapret включён, но сервис по-прежнему замедлен Нет правила, направляющего трафик на Zapret
NaïveProxy отсутствует в списке типов узлов Ядро установлено из репозитория OpenWrt. Нужна musl-сборка — см. Шаг 2
Панель открывается по несколько секунд Ядро сжато упаковщиком UPX — замените на обычный файл
Страницы «висят» по 30 секунд, потом открываются Браузер уходит в QUIC мимо перехвата. Заблокируйте UDP/443 действием REJECT (не DROP)

Удаление

Остановить службу:

/etc/init.d/homeproxy stop

Убрать из автозапуска:

/etc/init.d/homeproxy disable

Удалить панель:

opkg remove luci-app-re-homeproxy luci-i18n-homeproxy-ru

Удалить ядро:

rm -f /usr/bin/sing-box

Удалить настройки и списки:

rm -rf /etc/homeproxy /etc/config/homeproxy

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


Ссылки