Re:HomeProxy на OpenWrt: обход блокировок и гибкая маршрутизация: различия между версиями
Владимир (обсуждение | вклад) Инструкция по установке Re:HomeProxy на OpenWrt |
Владимир (обсуждение | вклад) Упрощён раздел установки, добавлены скриншоты |
||
| (не показана 1 промежуточная версия этого же участника) | |||
| Строка 1: | Строка 1: | ||
= Re:HomeProxy на OpenWrt: обход блокировок и гибкая маршрутизация = | = Re:HomeProxy на OpenWrt: обход блокировок и гибкая маршрутизация = | ||
Пошаговая инструкция по установке '''Re:HomeProxy''' на роутер с OpenWrt — от чистой системы до работающего обхода блокировок. Рассчитана на пользователя, который умеет подключаться к роутеру по SSH. | |||
Проверено на '''Xiaomi Redmi Router AX6000''' (<code>aarch64_cortex-a53</code> | Проверено на '''Xiaomi Redmi Router AX6000''' (<code>aarch64_cortex-a53</code>) с '''OpenWrt 24.10.0'''. | ||
<div style="padding: 10px 15px; margin: 10px 0; background-color: #d1ecf1; border-left: 4px solid #17a2b8; border-radius: 4px;"> | |||
'''Как читать команды:''' каждая команда приведена '''отдельной строкой''' и выполняется самостоятельно — копируйте и вставляйте их по одной, дожидаясь завершения предыдущей. Ничего править перед запуском не нужно, кроме мест, где это указано явно. | |||
</div> | |||
---- | ---- | ||
== Что мы построим == | == Что мы построим == | ||
Одна панель в LuCI, которая управляет всем | Одна панель в LuCI, которая управляет всем: туннелем, списками заблокированных ресурсов и обходом DPI. | ||
{| class="wikitable" | {| class="wikitable" | ||
| Строка 13: | Строка 17: | ||
!Назначение | !Назначение | ||
|- | |- | ||
|'''Re:HomeProxy''' | |'''Re:HomeProxy''' | ||
|Веб-панель в LuCI | |Веб-панель в LuCI. Управляет узлами, маршрутизацией и обходом DPI. | ||
|- | |- | ||
|'''sing-box-extended''' | |'''sing-box-extended''' | ||
|Ядро | |Ядро. Поддерживает VLESS (REALITY, XHTTP), Hysteria2, Trojan, Shadowsocks, AnyTLS, WireGuard, AmneziaWG, Mieru, NaïveProxy и др. | ||
|- | |- | ||
|'''Списки маршрутизации''' | |'''Списки маршрутизации''' | ||
|Готовые наборы доменов и IP (Re-filter, Russia Inside, | |Готовые наборы доменов и IP (Re-filter, Russia Inside, отдельные сервисы). Обновляются автоматически раз в сутки. | ||
|- | |- | ||
|''' | |'''Zapret 2''' | ||
| | |Обход DPI без туннеля — для сервисов, которые не заблокированы, а замедлены (например, видеохостинги). Трафик идёт напрямую, не нагружая VPS. | ||
|} | |} | ||
'''Принцип простой:''' списки решают, ''какой'' трафик особенный, а узел или Zapret — ''через что'' его пустить. Всё, что не попало ни в один список, идёт напрямую. | |||
== Что понадобится == | |||
= | |||
{| class="wikitable" | {| class="wikitable" | ||
!Требование | !Требование | ||
| Строка 49: | Строка 38: | ||
|- | |- | ||
|'''Роутер''' | |'''Роутер''' | ||
|OpenWrt / ImmortalWrt '''24.10''' и новее ( | |OpenWrt / ImmortalWrt '''24.10''' и новее (<code>opkg</code>) либо '''25.12''' и новее (<code>apk</code>) | ||
|- | |- | ||
|'''Доступ''' | |'''Доступ''' | ||
|Веб-интерфейс LuCI и SSH | |Веб-интерфейс LuCI и SSH к роутеру | ||
|- | |- | ||
|'''Узел | |'''Узел''' | ||
| | |Ссылка на ваш сервер: <code>vless://</code>, <code>hysteria2://</code>, <code>naive+https://</code>, <code>ss://</code> и т.п. | ||
|} | |} | ||
---- | |||
== | = Установка = | ||
== Шаг 1. Установить панель == | |||
Подключитесь к роутеру по SSH и выполните команды по очереди. | |||
Обновить список пакетов: | |||
<syntaxhighlight lang="bash"> | |||
opkg update | |||
</syntaxhighlight> | </syntaxhighlight> | ||
Установить зависимости: | |||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
opkg install ucode-mod-digest kmod-nft-tproxy kmod-tun | opkg install ucode-mod-digest kmod-nft-tproxy kmod-tun | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Перейти в каталог для загрузок: | |||
<syntaxhighlight lang="bash"> | |||
cd /tmp | |||
</syntaxhighlight> | |||
= | Скачать панель: | ||
<syntaxhighlight lang="bash"> | |||
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 | |||
</syntaxhighlight> | |||
Установить: | |||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
opkg install /tmp/rhp.ipk | opkg install /tmp/rhp.ipk | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Скачать русский язык интерфейса: | |||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
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 | |||
wget -O rhp-ru.ipk | |||
</syntaxhighlight> | </syntaxhighlight> | ||
Установить язык: | |||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
opkg | opkg install /tmp/rhp-ru.ipk | ||
</syntaxhighlight> | </syntaxhighlight> | ||
<div style="padding: 10px 15px; margin: 10px 0; background-color: #d1ecf1; border-left: 4px solid #17a2b8; border-radius: 4px;"> | |||
'''Актуальную версию''' пакета смотрите на [https://github.com/1andrevich/homeproxy-hiddify/releases странице релизов] — в командах указана <code>2026.06.29-r1</code>. Для OpenWrt 25.12 и новее замените в ссылках <code>.ipk</code> на <code>.apk</code>, а команду установки — на <code>apk add --allow-untrusted /tmp/rhp.apk</code>. | |||
<div style="padding: 10px 15px; margin: 10px 0; background-color: # | |||
''' | |||
</div> | </div> | ||
== 2. | == Шаг 2. Установить ядро == | ||
Ядро <code>sing-box-extended</code> ставится вручную — сборка из репозитория OpenWrt собрана без поддержки '''NaïveProxy''', поэтому берём универсальную musl-сборку, где есть все протоколы. | |||
Скачать ядро: | |||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
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 | |||
</syntaxhighlight> | |||
wget -O sb.tar.gz | |||
Распаковать: | |||
<syntaxhighlight lang="bash"> | |||
tar xzf sb.tar.gz | |||
</syntaxhighlight> | |||
Установить: | |||
" | <syntaxhighlight lang="bash"> | ||
cp /tmp/sing-box-1.13.18-extended-2.6.5-linux-arm64-musl/sing-box /usr/bin/sing-box | |||
</syntaxhighlight> | </syntaxhighlight> | ||
Сделать исполняемым: | |||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
chmod +x /usr/bin/sing-box | chmod +x /usr/bin/sing-box | ||
</syntaxhighlight> | </syntaxhighlight> | ||
< | Убрать временные файлы: | ||
<syntaxhighlight lang="bash"> | |||
</ | rm -rf /tmp/sing-box-1.13.18-extended-2.6.5-linux-arm64-musl /tmp/sb.tar.gz | ||
</syntaxhighlight> | |||
<div style="padding: 10px 15px; margin: 10px 0; background-color: #fff3cd; border-left: 4px solid #ffc107; border-radius: 4px;"> | <div style="padding: 10px 15px; margin: 10px 0; background-color: #fff3cd; border-left: 4px solid #ffc107; border-radius: 4px;"> | ||
'''Внимание — | '''Внимание — архитектура и путь.''' В ссылке указана архитектура <code>arm64</code>; если у вас другая, возьмите подходящий файл <code>linux-<арх>-musl</code> на [https://github.com/shtorm-7/sing-box-extended/releases странице релизов ядра]. Копировать ядро нужно строго в <code>/usr/bin/sing-box</code> — по другому пути служба его не запустит. | ||
</div> | </div> | ||
< | == Шаг 3. Запустить службу == | ||
Включить автозапуск: | |||
</ | <syntaxhighlight lang="bash"> | ||
/etc/init.d/homeproxy enable | |||
</syntaxhighlight> | |||
Запустить: | |||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
/etc/init.d/homeproxy start | |||
</syntaxhighlight> | </syntaxhighlight> | ||
Дальше вся настройка — в веб-интерфейсе: '''Сервисы → Re:HomeProxy'''. Если пункт меню не появился, обновите страницу с очисткой кэша (<code>Ctrl+F5</code>). | |||
== Шаг 4. Добавить узел == | |||
Откройте вкладку '''Настройки узлов'''. Список пока пуст. | |||
[[Файл:Rehomeproxy-nodes-empty.png|центр|мини|900x900пкс|Вкладка «Настройки узлов» до добавления сервера.]] | |||
Нажмите '''Импортировать ссылку-конфигурацию для подключения''' и вставьте ссылку на ваш сервер. | |||
[[Файл:Rehomeproxy-import-link.png|центр|мини|600x600пкс|Окно импорта. Поддерживаются Amnezia (vpn://), Hysteria, Mieru, NaïveProxy (naive://), Shadowsocks (ss://), SSH, Trojan, v2rayN (VMess), WireGuard и VLESS (vless://).]] | |||
| | |||
| | |||
| | |||
| | |||
После нажатия '''Импорт''' узел появится в списке. | |||
[[Файл:Rehomeproxy-node-added.png|центр|мини|900x900пкс|Узел добавлен: видны его тип, адрес и порт.]] | |||
Нажмите '''Применить'''. | |||
== Шаг 5. Выбрать основной узел == | |||
''' | Перейдите на вкладку '''Настройки клиента → Настройки маршрутизации''' и выберите добавленный сервер в поле '''Основной узел'''. | ||
[[Файл:Rehomeproxy-routing-settings.png|центр|мини|900x900пкс|Основной узел выбран. Остальные параметры можно оставить по умолчанию.]] | |||
Остальные поля менять не нужно — значения по умолчанию подходят для большинства случаев. Нажмите '''Применить'''. | |||
<div style="padding: 10px 15px; margin: 10px 0; background-color: # | <div style="padding: 10px 15px; margin: 10px 0; background-color: #d4edda; border-left: 4px solid #28a745; border-radius: 4px;"> | ||
''' | '''Проверка:''' в заголовке страницы надпись должна смениться на зелёную — '''Re:HomeProxy (sing-box ...) РАБОТАЕТ'''. Если она красная и написано '''NOT RUNNING''' — вернитесь к шагу 2, ядро не установлено или лежит не по тому пути. | ||
</div> | </div> | ||
== | == Шаг 6. Установить Zapret == | ||
Zapret нужен для сервисов, которые замедляют, а не блокируют — их не обязательно гнать через сервер. | |||
Откройте '''Настройки узлов → Zapret''' и нажмите '''Установить'''. Панель скачает и установит всё сама. | |||
== Шаг 7. Настроить правила == | |||
Это главный шаг: здесь вы указываете, что и через что пускать. Откройте '''Настройки клиента → Правила прокси''' и кнопкой '''Добавить''' создайте нужные строки. | |||
-- | [[Файл:Rehomeproxy-proxy-rules.png|центр|мини|900x900пкс|Три типовых правила: Telegram через основной узел, YouTube и Discord через Zapret.]] | ||
В каждой строке заполняются три поля: '''Включить''' (галочка), '''Отправитель''' (какой список) и '''Узел''' (через что пускать). | |||
Рекомендуемый набор для начала: | |||
{| class="wikitable" | {| class="wikitable" | ||
! | !Отправитель | ||
! | !Узел | ||
!Зачем | |||
|- | |||
|'''Re-filter''' | |||
|Как основной узел | |||
|Всё, что заблокировано в России (60000+ доменов и 25000+ IP) | |||
|- | |- | ||
|''' | |'''Telegram''' | ||
| | |Как основной узел | ||
|Мессенджер подключается к серверам по IP, поэтому нужен именно список сервиса | |||
|- | |- | ||
|''' | |'''YouTube''' | ||
| | |Zapret | ||
|Видео идёт напрямую и не расходует трафик сервера | |||
|- | |- | ||
|''' | |'''Discord''' | ||
| | |Zapret | ||
|То же самое; для голосовой связи надёжнее выбрать основной узел | |||
|} | |} | ||
Нажмите '''Применить'''. Списки скачаются автоматически и дальше будут обновляться раз в сутки — вручную их вести не нужно. | |||
== Шаг 8. Добавить cloudflare-ech.com == | |||
Откройте '''Настройки клиента → Контроль доступа → Список доменов для проксирования''' и добавьте одну строку: | |||
<syntaxhighlight lang="text"> | |||
cloudflare-ech.com | |||
</syntaxhighlight> | |||
[[Файл:Rehomeproxy-domain-list.png|центр|мини|900x900пкс|Список доменов для проксирования. Сюда же можно дописывать свои сайты, по одному в строке.]] | |||
<div style="padding: 10px 15px; margin: 10px 0; background-color: # | <div style="padding: 10px 15px; margin: 10px 0; background-color: #fff3cd; border-left: 4px solid #ffc107; border-radius: 4px;"> | ||
''' | '''Внимание — без этой строки часть сайтов не откроется в браузере.''' Современные браузеры скрывают имя сайта в защищённом соединении (технология ECH), и панель не может определить, что за сайт запрошен. В результате он идёт напрямую и блокируется. Эта строка возвращает такие соединения в туннель. Подробности — в разделе «Почему нужен cloudflare-ech.com» ниже. | ||
</div> | </div> | ||
<div style="padding: 10px 15px; margin: 10px 0; background-color: # | Нажмите '''Применить'''. | ||
''' | |||
<div style="padding: 10px 15px; margin: 10px 0; background-color: #d4edda; border-left: 4px solid #28a745; border-radius: 4px;"> | |||
'''Готово.''' Обход работает для всех устройств в сети — телефонов, телевизоров, компьютеров. Ничего настраивать на них не нужно. | |||
</div> | </div> | ||
= | ---- | ||
= Дополнения и тонкости = | |||
Этот раздел не нужен для базовой установки — читайте по мере необходимости. | |||
== Как применить изменения списка доменов == | |||
<div style="padding: 10px 15px; margin: 10px 0; background-color: #fff3cd; border-left: 4px solid #ffc107; border-radius: 4px;"> | <div style="padding: 10px 15px; margin: 10px 0; background-color: #fff3cd; border-left: 4px solid #ffc107; border-radius: 4px;"> | ||
'''Внимание | '''Внимание:''' если вы изменили '''только''' список доменов и ничего больше, кнопка '''Применить''' может сообщить, что изменений нет, — и ядро продолжит работать со старым списком. Так устроено поле списка: оно сохраняет файл отдельно от остальных настроек. | ||
</div> | </div> | ||
Чтобы изменения вступили в силу, откройте вкладку '''Диагностика''' и нажмите '''Перезапустить службу'''. Либо меняйте список вместе с любой другой настройкой — тогда обычная кнопка '''Применить''' сработает как обычно. | |||
''' | |||
== Почему нужен cloudflare-ech.com == | |||
Сайты, работающие через Cloudflare, публикуют специальную DNS-запись, после которой браузер включает '''ECH (Encrypted Client Hello)''' и '''шифрует имя запрашиваемого сайта''' внутри защищённого соединения. Панель определяет сайт именно по этому имени, поэтому распознать его не может, не находит в списках и отправляет соединение напрямую — где его и обрывает провайдер. | |||
Характерный признак: сайт есть в списке, но в браузере выдаёт ошибку защищённого соединения (в Firefox — <code>PR_END_OF_FILE_ERROR</code>), при этом проверка через <code>curl</code> с того же компьютера проходит успешно. Так происходит потому, что <code>curl</code> технологию ECH не использует и передаёт имя сайта открыто. | |||
При включённом ECH скрывается только внутреннее имя, а внешнее остаётся видимым, и у всех сайтов за Cloudflare оно одинаковое — <code>cloudflare-ech.com</code>. Добавив его в список, вы возвращаете такие соединения в туннель. Решение работает для '''любого устройства в сети''' независимо от браузера и его настроек. | |||
Проверить, использует ли конкретный | Проверить, использует ли конкретный сайт ECH (подставьте нужный адрес вместо <code>example.com</code>): | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
curl -s 'https://cloudflare-dns.com/dns-query?name=example.com&type=HTTPS' -H 'accept: application/dns-json' | curl -s 'https://cloudflare-dns.com/dns-query?name=example.com&type=HTTPS' -H 'accept: application/dns-json' | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Если в ответе есть <code>ech=</code>, имя сайта будет скрыто. | |||
- | == Почему списки сервисов важнее ручных доменов == | ||
Многие приложения — мессенджеры, игры, часть мобильных программ — подключаются к своим серверам '''по IP-адресам, без имени сайта'''. Правила по доменам на такие соединения не действуют в принципе: панели нечего сопоставлять со списком. | |||
Готовые списки сервисов содержат не только домены, но и IP-подсети, поэтому закрывают оба случая. Показательный пример — Telegram: помимо доменов (<code>t.me</code>, <code>telegra.ph</code>, <code>telesco.pe</code>) список включает подсети серверов (<code>149.154.160.0/20</code>, <code>91.108.4.0/22</code>, <code>91.108.56.0/22</code> и другие). Без них веб-версия откроется, а сам мессенджер подключиться не сможет. | |||
Поэтому для мессенджеров и приложений всегда добавляйте '''готовое правило сервиса''' в «Правила прокси», а не отдельные домены в список. | |||
== | == Zapret не работает сам по себе == | ||
<div style="padding: 10px 15px; margin: 10px 0; background-color: #fff3cd; border-left: 4px solid #ffc107; border-radius: 4px;"> | <div style="padding: 10px 15px; margin: 10px 0; background-color: #fff3cd; border-left: 4px solid #ffc107; border-radius: 4px;"> | ||
'''Внимание | '''Внимание:''' установка Zapret ничего не обходит сама по себе. Он обрабатывает только тот трафик, который вы явно на него направили правилом в '''Правилах прокси'''. Пока ни одно правило не указывает на '''Zapret''', он просто запущен и бездействует. | ||
</div> | </div> | ||
Проверить, что трафик действительно пошёл в обработку: | Проверить, что трафик действительно пошёл в обработку: | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
nft list chain inet fw4 homeproxy_zapret_queue | nft list chain inet fw4 homeproxy_zapret_queue | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Ненулевые счётчики пакетов означают, что механизм работает. | Ненулевые счётчики пакетов в строках правил означают, что механизм работает. | ||
Стратегия обхода по умолчанию рассчитана на типовые ограничения российских провайдеров. Если сервис всё равно не открывается — на вкладке '''Zapret''' есть тестер стратегий: он проверяет разные варианты и показывает, какие работают у вашего провайдера. | |||
== Диагностика == | == Диагностика == | ||
Вкладка '''Диагностика''' показывает состояние ядра, версию | Вкладка '''Диагностика''' показывает состояние ядра, версию, запущенные службы, занятые порты и позволяет проверить доступность контрольных сайтов. | ||
Из командной строки: | Из командной строки — состояние службы: | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
/etc/init.d/homeproxy status | /etc/init.d/homeproxy status | ||
</syntaxhighlight> | |||
Журнал событий: | |||
<syntaxhighlight lang="bash"> | |||
tail -30 /var/run/homeproxy/homeproxy.log | tail -30 /var/run/homeproxy/homeproxy.log | ||
</syntaxhighlight> | |||
Журнал ядра: | |||
<syntaxhighlight lang="bash"> | |||
tail -30 /var/run/homeproxy/hiddify-c.log | tail -30 /var/run/homeproxy/hiddify-c.log | ||
</syntaxhighlight> | </syntaxhighlight> | ||
<div style="padding: 10px 15px; margin: 10px 0; background-color: #d1ecf1; border-left: 4px solid #17a2b8; border-radius: 4px;"> | <div style="padding: 10px 15px; margin: 10px 0; background-color: #d1ecf1; border-left: 4px solid #17a2b8; border-radius: 4px;"> | ||
'''Уточнение | '''Уточнение:''' множество строк <code>connection refused</code> и <code>i/o timeout</code> на портах <code>6881</code>, <code>51413</code> и произвольных высоких портах — это обычно торренты: клиент перебирает источники, часть которых недоступна. К работе туннеля отношения не имеет. | ||
</div> | </div> | ||
=== Как | === Как узнать, каким путём ушло соединение === | ||
Временно | Временно переключите '''Уровень журнала''' на <code>info</code>, откройте сайт с любого устройства и посмотрите записи вида: | ||
<syntaxhighlight lang="text"> | <syntaxhighlight lang="text"> | ||
outbound/vless[main-out]: outbound connection to 172.67.182.196:443 | outbound/vless[main-out]: outbound connection to 172.67.182.196:443 | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Обозначение в скобках показывает путь: <code>main-out</code> — через ваш сервер, <code>direct-out</code> — напрямую, <code>zapret-out</code> — с обходом DPI. После проверки верните уровень <code>warn</code>, иначе журнал быстро разрастается. | |||
== Проверка | === Проверка с устройства в сети === | ||
Проверять | Проверять нужно с обычного компьютера или телефона, а не с самого роутера — его собственный трафик обрабатывается иначе. | ||
Какой адрес видит внешний мир: | |||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
curl -s https://api.ipify.org | |||
curl -s https://api.ipify.org | </syntaxhighlight> | ||
Доступность сайта (подставьте нужный адрес): | |||
<syntaxhighlight lang="bash"> | |||
curl -s -o /dev/null -m 15 -w 'HTTP %{http_code} за %{time_total}s\n' https://example.com | curl -s -o /dev/null -m 15 -w 'HTTP %{http_code} за %{time_total}s\n' https://example.com | ||
</syntaxhighlight> | </syntaxhighlight> | ||
---- | ---- | ||
| Строка 471: | Строка 315: | ||
!Причина и решение | !Причина и решение | ||
|- | |- | ||
| | |В заголовке панели красное '''NOT RUNNING''' | ||
|Ядро не установлено или лежит не по пути <code>/usr/bin/sing-box</code> — см. | |Ядро не установлено или лежит не по пути <code>/usr/bin/sing-box</code> — см. Шаг 2 | ||
|- | |- | ||
|Служба запущена, но | |Служба запущена, но ничего не проксируется | ||
|Не | |Не выбран '''Основной узел''' — см. Шаг 5 | ||
|- | |- | ||
|Сайт из списка не открывается '''в браузере''', | |Сайт из списка не открывается '''в браузере''', хотя <code>curl</code> работает | ||
| | |Не добавлен <code>cloudflare-ech.com</code> — см. Шаг 8 | ||
|- | |- | ||
|Изменил список доменов | |Изменил список доменов, ничего не поменялось | ||
| | |'''Диагностика → Перезапустить службу''' | ||
|- | |- | ||
|Мессенджер не подключается, хотя его сайт открывается | |Мессенджер не подключается, хотя его сайт открывается | ||
| | |Нужно готовое правило сервиса с IP-подсетями, а не домены | ||
|- | |- | ||
|Zapret включён, но сервис по-прежнему замедлен | |Zapret включён, но сервис по-прежнему замедлен | ||
|Нет правила | |Нет правила, направляющего трафик на Zapret | ||
|- | |- | ||
| | |'''NaïveProxy''' отсутствует в списке типов узлов | ||
| | |Ядро установлено из репозитория OpenWrt. Нужна musl-сборка — см. Шаг 2 | ||
|- | |- | ||
| | |Панель открывается по несколько секунд | ||
|Ядро сжато UPX | |Ядро сжато упаковщиком UPX — замените на обычный файл | ||
|- | |- | ||
|Страницы «висят» по 30 секунд, | |Страницы «висят» по 30 секунд, потом открываются | ||
|Браузер уходит в QUIC | |Браузер уходит в QUIC мимо перехвата. Заблокируйте UDP/443 действием '''REJECT''' (не DROP) | ||
|} | |} | ||
| Строка 502: | Строка 346: | ||
= Удаление = | = Удаление = | ||
Остановить службу: | |||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
/etc/init.d/homeproxy stop | /etc/init.d/homeproxy stop | ||
</syntaxhighlight> | |||
Убрать из автозапуска: | |||
<syntaxhighlight lang="bash"> | |||
/etc/init.d/homeproxy disable | /etc/init.d/homeproxy disable | ||
</syntaxhighlight> | |||
Удалить панель: | |||
<syntaxhighlight lang="bash"> | |||
opkg remove luci-app-re-homeproxy luci-i18n-homeproxy-ru | opkg remove luci-app-re-homeproxy luci-i18n-homeproxy-ru | ||
</syntaxhighlight> | |||
Удалить ядро: | |||
<syntaxhighlight lang="bash"> | |||
rm -f /usr/bin/sing-box | rm -f /usr/bin/sing-box | ||
</syntaxhighlight> | |||
Удалить настройки и списки: | |||
<syntaxhighlight lang="bash"> | |||
rm -rf /etc/homeproxy /etc/config/homeproxy | rm -rf /etc/homeproxy /etc/config/homeproxy | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Правила | Правила межсетевого экрана снимаются автоматически при остановке службы. Проброс портов и остальные настройки роутера не затрагиваются. | ||
---- | ---- | ||
| Строка 523: | Строка 378: | ||
* [https://github.com/1andrevich/homeproxy-hiddify Re:HomeProxy — исходный код и релизы] | * [https://github.com/1andrevich/homeproxy-hiddify Re:HomeProxy — исходный код и релизы] | ||
* [https://github.com/shtorm-7/sing-box-extended sing-box-extended — ядро] | * [https://github.com/shtorm-7/sing-box-extended sing-box-extended — ядро] | ||
* [https://github.com/1andrevich/Re-filter-lists Re-filter — | * [https://github.com/1andrevich/Re-filter-lists Re-filter — список заблокированных ресурсов] | ||
* [https://github.com/itdoginfo/allow-domains itdoginfo/allow-domains — списки по сервисам] | * [https://github.com/itdoginfo/allow-domains itdoginfo/allow-domains — списки по сервисам] | ||
* [https://github.com/bol-van/zapret2 Zapret 2 | * [https://github.com/bol-van/zapret2 Zapret 2] | ||
* [https://github.com/hufrea/byedpi ByeDPI] | * [https://github.com/hufrea/byedpi ByeDPI] | ||
Текущая версия от 11:59, 14 августа 2026
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. Добавить узел
Откройте вкладку Настройки узлов. Список пока пуст.

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

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

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

Остальные поля менять не нужно — значения по умолчанию подходят для большинства случаев. Нажмите Применить.
Проверка: в заголовке страницы надпись должна смениться на зелёную — Re:HomeProxy (sing-box ...) РАБОТАЕТ. Если она красная и написано NOT RUNNING — вернитесь к шагу 2, ядро не установлено или лежит не по тому пути.
Шаг 6. Установить Zapret
Zapret нужен для сервисов, которые замедляют, а не блокируют — их не обязательно гнать через сервер.
Откройте Настройки узлов → Zapret и нажмите Установить. Панель скачает и установит всё сама.
Шаг 7. Настроить правила
Это главный шаг: здесь вы указываете, что и через что пускать. Откройте Настройки клиента → Правила прокси и кнопкой Добавить создайте нужные строки.

В каждой строке заполняются три поля: Включить (галочка), Отправитель (какой список) и Узел (через что пускать).
Рекомендуемый набор для начала:
| Отправитель | Узел | Зачем |
|---|---|---|
| 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
Правила межсетевого экрана снимаются автоматически при остановке службы. Проброс портов и остальные настройки роутера не затрагиваются.