Detour — веб-панель для роутера, которая объединяет два независимых движка обхода: прозрачный прокси sing-box (VLESS, Trojan, WireGuard, Shadowsocks, Hysteria2, TUIC, SOCKS/HTTP) и DPI-обход zapret, работающий вообще без внешнего сервера. Настраивается мышкой, работает для всей домашней сети сразу — на телефонах, телевизорах и приставках, где никакой клиент не поставишь.
Ничего не уходит в облако: панель, конфиги и профили лежат только на вашем роутере.
VPN-клиент на ноутбуке решает задачу только для ноутбука. Detour переносит обход на уровень домашней сети: маршрутизация происходит прозрачно, устройствам ничего не нужно знать и ставить.
Телевизор, консоль, колонка, рабочий ноутбук гостя — трафик заворачивается на роутере, клиент не требуется нигде.
Через туннель идут выбранные домены и подсети, остальное — напрямую и на полной скорости. Или наоборот: «всё, кроме списка исключений».
sing-box — когда нужен зарубежный выход. zapret — когда сайт блокируется DPI и хватает трюков с пакетами, без всякого сервера.
Никаких чужих аккаунтов и телеметрии. Профили и ключи хранятся на роутере, панель закрыта логином и паролем.
Панель ставится как .ipk, подписанный usign-ключом,
и умеет обновлять себя и бинарники из собственного opkg-фида.
Бэкенд — чистый BusyBox ash + Lua, без Python, Node и PHP. Пакет панели — около 130 КБ.
Когда устройство резолвит домен из списка, dnsmasq складывает полученный IP в соответствующий ipset. Дальше правила nat PREROUTING решают, куда отправить соединение — и делают это без разбора содержимого пакетов, поэтому накладные расходы минимальны.
UDP при необходимости заворачивается отдельно через TPROXY — для игр, голосовых чатов и QUIC.
Ниже — основные разделы интерфейса и то, какую задачу каждый из них закрывает.
Профиль добавляется вставкой ссылки vless://,
trojan://, vmess://, ss://,
socks5:// либо заполнением полей вручную; отдельная
вкладка — для WireGuard. Поддерживаются VLESS, Trojan, VMess,
Shadowsocks, WireGuard, Hysteria/Hysteria2, TUIC, AnyTLS и
HTTP/SOCKS-прокси.

Панель постоянно пингует все профили в фоне и раз в час проверяет их «по-настоящему»: поднимает временный sing-box и ходит через него на реальные адреса. Мёртвый сервер видно до того, как об этом узнает пользователь.

Разные сайты — через разные выходы одновременно. Каждый маршрут
описывает, какой профиль забирает указанные домены,
*.поддомены, IP или CIDR.

Профили выстраиваются в цепочку: клиент → VPN 1 → VPN 2 → интернет. Отдельный сценарий — бесплатный WARP последним хопом: выходной адрес перестаёт выглядеть как «сервер в дата-центре», и сервисы, которые блокируют хостинги, снова начинают работать.

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

Два режима на выбор: «только указанные» (в туннель уходит
лишь список) и «всё, кроме указанных» (в туннель уходит всё,
кроме исключений). Списки принимают домены,
*.поддомены, IP и CIDR с комментариями.

Провайдер видит DNS-запросы всей сети — если их не зашифровать.
Панель включает DoH/DoT для роутера целиком и умеет подключать
внешний hosts-файл приоритетом над upstream-DNS.

Обратная задача: не выйти из дома, а пустить в него. Панель выпускает Let's Encrypt-сертификат для вашего домена и публикует нужный сервис — либо HTTPS-реверс-прокси на этом сертификате, либо обычный проброс порта.
https://домен:порт/ → устройство в LAN, с WebSocket и опциональной Basic-авторизацией.

Когда активный VPN отвалился, узнать об этом лучше от роутера, а не от зависшей страницы. Панель отправляет Web Push в браузер — в том числе на телефон, и делает это по каналу в обход упавшего туннеля.


Всё, за чем обычно лезут по SSH, доступно во вкладках: логи sing-box, итоговый JSON-конфиг, действующие правила файрвола и таблица conntrack.
nat PREROUTING, nftables input_lan, conntrack.

Основная платформа — OpenWrt / GL.iNet. Вторая — Keenetic с Entware: там нет nftables и NFQUEUE, поэтому часть механик реализована иначе, а движок zapret2 недоступен физически.
| Возможность | OpenWrt / GL.iNet | Keenetic / Entware |
|---|---|---|
| sing-box (VLESS, Trojan, WireGuard, …) | ✓ из своего opkg-фида | ✓ mipsel-сборка из фида |
| zapret (tpws) | ✓ | ✓ |
| zapret2 (nfqws2) | ✓ | — нет NFQUEUE в ядре |
| Цепочки, WARP, маршрутизация | ✓ | ✓ |
| Проброс сервисов | ✓ nginx / uci firewall | ✓ lighttpd / ndm-хуки |
| Файрвол | nftables fw4 + iptables nat | только iptables через netfilter.d |
| Самообновление подписанным .ipk | ✓ | ✓ |
Референсное устройство — GL.iNet GL-BE9300 (Flint 3) на OpenWrt 23.05,
aarch64, musl. Проверялось также на GL-MT6000 (Flint 2).
Панель — это slim-пакет .ipk без бинарников. После
установки она сама прописывает opkg-фид проекта и подтягивает
sing-box и tpws-zapret в фоне.
Из GitHub Releases:
detour_X.Y.Z_all.ipk для OpenWrt / GL.iNet либо
detour-keenetic_X.Y.Z_all.ipk для Keenetic / Entware.
Рядом лежит .ipk.sig — подпись релиза.
# OpenWrt / GL.iNet scp detour_X.Y.Z_all.ipk root@192.168.8.1:/tmp/ ssh root@192.168.8.1 'opkg install /tmp/detour_X.Y.Z_all.ipk' # Keenetic / Entware (Entware смонтирован в /opt) opkg install /tmp/detour-keenetic_X.Y.Z_all.ipk
За это время подтянутся бинарники. Панель откроется по адресу
http://<IP-роутера>:8080/detour/. Ход установки
виден в /var/log/detour-bootstrap.log.
tpws из zapret вообще не пакуется ни одним фидом.
Поэтому проект держит собственный подписанный фид на обе
архитектуры.
musl
(бинарники собраны под неё) либо Keenetic с установленным Entware.
Нужен root по SSH и немного места; для стабильной работы панели
желательна флешка со SWAP — его тоже можно создать из интерфейса.