v1.41.0 · open source · MIT

Обход блокировок,
который живёт на роутере

Detour — веб-панель для роутера, которая объединяет два независимых движка обхода: прозрачный прокси sing-box (VLESS, Trojan, WireGuard, Shadowsocks, Hysteria2, TUIC, SOCKS/HTTP) и DPI-обход zapret, работающий вообще без внешнего сервера. Настраивается мышкой, работает для всей домашней сети сразу — на телефонах, телевизорах и приставках, где никакой клиент не поставишь.

Ничего не уходит в облако: панель, конфиги и профили лежат только на вашем роутере.

http://192.168.8.1:8080/detour/
Главный экран панели Detour: статус sing-box, выбор профиля, цепочки, DPI-обход
Главный экран: состояние движков, активный профиль, цепочка подключения и переключатели режимов. Тёмная и светлая темы.
Зачем это нужно

Один раз на роутере — вместо клиента на каждом устройстве

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

🌐

Для всей сети сразу

Телевизор, консоль, колонка, рабочий ноутбук гостя — трафик заворачивается на роутере, клиент не требуется нигде.

🎯

Только то, что нужно

Через туннель идут выбранные домены и подсети, остальное — напрямую и на полной скорости. Или наоборот: «всё, кроме списка исключений».

🧰

Два движка вместо одного

sing-box — когда нужен зарубежный выход. zapret — когда сайт блокируется DPI и хватает трюков с пакетами, без всякого сервера.

🔒

Ваша инфраструктура

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

📦

Обновления подписаны

Панель ставится как .ipk, подписанный usign-ключом, и умеет обновлять себя и бинарники из собственного opkg-фида.

🪶

Ничего лишнего на роутере

Бэкенд — чистый BusyBox ash + Lua, без Python, Node и PHP. Пакет панели — около 130 КБ.

Как это работает

DNS подсказывает, файрвол разводит трафик

Когда устройство резолвит домен из списка, dnsmasq складывает полученный IP в соответствующий ipset. Дальше правила nat PREROUTING решают, куда отправить соединение — и делают это без разбора содержимого пакетов, поэтому накладные расходы минимальны.

Клиент dnsmasq + ipset nat PREROUTING
IP в ipset zapret REDIRECT :1081 DPI-обход, прямое соединение
попал под режим sing-box REDIRECT :12345 ваш VPN → (WARP) → сайт
всё остальное напрямую, без потерь скорости

UDP при необходимости заворачивается отдельно через TPROXY — для игр, голосовых чатов и QUIC.

Возможности

Что умеет панель

Ниже — основные разделы интерфейса и то, какую задачу каждый из них закрывает.

Профили VPN и подписки

Профиль добавляется вставкой ссылки vless://, trojan://, vmess://, ss://, socks5:// либо заполнением полей вручную; отдельная вкладка — для WireGuard. Поддерживаются VLESS, Trojan, VMess, Shadowsocks, WireGuard, Hysteria/Hysteria2, TUIC, AnyTLS и HTTP/SOCKS-прокси.

  • Подписки — URL провайдера обновляется по расписанию, новые серверы подтягиваются сами.
  • Папки и группы — сотни профилей не превращаются в кашу.
  • Массовые операции — выделить, перенести в группу, удалить.
  • Экспорт и импорт — JSON целиком или отдельные ссылки для переноса на другой роутер.
Страница «Все профили»: список профилей с группами и массовыми операциями
Страница «Все профили» — фильтр по группам, поиск, перенос в папку.

Проверка и автопереключение

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

  • Автопереключение на живой профиль, когда активный перестал отвечать.
  • Замер скорости — реальная загрузка, а не только пинг.
  • Keep-alive активного VPN с отдельным индикатором в шапке.
  • Свои цели проверки и блок-лист egress-IP, если нужен конкретный выходной адрес.
Раздел «Статусы VPN»: таблица профилей с пингом, работоспособностью и скоростью
«Статусы VPN»: пинг, факт работоспособности, скорость и активация в один клик.

Маршрутизация по профилям

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

  • Строгий режим — такой трафик уходит только назначенным маршрутом либо блокируется, но никогда не утекает напрямую.
  • Через активную цепочку — путь «текущий VPN → маршрутный VPN» вместо прямого выхода.
  • Умный перехват прокси — если устройство жёстко прибито к SOCKS/HTTP-прокси, роутер прозрачно применит к нему правила панели.
  • Несколько инстансов sing-box, когда одного мало.
Вкладка «Маршрутизация»: маршруты доменов по разным профилям
Вкладка «Маршрутизация» — маршруты, строгий режим и keep-alive активного VPN.

Цепочки и Cloudflare WARP

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

  • Регистрация WARP из панели — устройство регистрируется через выбранный VPN, не трогая активный трафик.
  • Именованные цепочки — сохранённые связки включаются одним кликом с главного экрана.
  • Цепочка как цель маршрута — например, увести в «VPN → WARP» только один домен.
Диалог регистрации Cloudflare WARP через выбранный VPN
Регистрация WARP: выбираем VPN-окружение, получаем готовую цепочку «VPN → WARP».

DPI-обход без внешнего сервера

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

  • zapret (tpws) — прозрачный прокси на порту 1081.
  • zapret2 (nfqws2) — работа через NFQUEUE с настраиваемой строкой стратегии.
  • Общий список доменов для обоих движков и счётчик обработанных пакетов.
  • Движок переключается на лету, без перезагрузки роутера.
Карточка DPI-обхода: переключение zapret и zapret2, строка стратегии
Карточка DPI-обхода: выбор движка, строка стратегии, статистика.

Списки доменов и режимы

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

  • Список подсетей РФ обновляется автоматически (MaxMind GeoLite2 или RIPE/RIR) — российские адреса идут напрямую.
  • Исключения из исключений — адрес, который числится российским, но должен идти через VPN.
  • UDP через VPN — отдельный список для игр и голосовых чатов.
Вкладка списков доменов sing-box с режимами и списком подсетей РФ
Списки sing-box: режимы, исключения и автообновляемые подсети РФ.

DNS: шифрование и hosts-обход

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

  • Secure DNS — свой список серверов DoH/DoT.
  • Приоритетный hosts — параллельный способ обхода: домен резолвится в рабочий адрес без туннеля.
  • Обновление списка по расписанию и по кнопке.
Вкладка Hosts-DNS: шифрованный DNS и приоритетный hosts-файл
Hosts-DNS: DoH/DoT для всей сети и внешний hosts-файл.

Публикация домашних сервисов наружу

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

  • HTTPS-режимhttps://домен:порт/ → устройство в LAN, с WebSocket и опциональной Basic-авторизацией.
  • DNAT-режим — проброс порта для любого протокола.
  • Проверка снаружи — панель сама выясняет, доходит ли порт до роутера из интернета, и отличает свой ответ от подмены провайдером.
Диалог «Проброс сервисов»
Диалог выпуска HTTPS-сертификата Let's Encrypt
Проброс сервисов и выпуск сертификата Let's Encrypt — из панели, без SSH.

Push-уведомления и мобильный вид

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

  • Уведомления о недоступности активного VPN и об автопереключении.
  • Вход по QR — открыть панель на телефоне без ввода логина и пароля.
  • Адаптивный интерфейс — с телефона доступно всё то же самое.
Настройки Web Push-уведомлений
Панель Detour на экране телефона
Push-уведомления о падении VPN и мобильный вид панели.

Диагностика и обслуживание

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

  • Логи и конфиг — видно, что именно сгенерировала панель.
  • Файрволnat PREROUTING, nftables input_lan, conntrack.
  • Ускорение (offload) — авто-восстановление аппаратного ускорения при просадке скорости.
  • SWAP-файл — создаётся на флешке прямо из панели.
  • Самообновление — проверка GitHub Releases раз в 6 часов и установка в один клик, с откатом на предыдущую версию.
Вкладка «Файрвол» с действующими правилами
Диалог обновления панели
Правила файрвола без SSH и самообновление панели из GitHub Releases.
Платформы

Две прошивки, один интерфейс

Основная платформа — 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 в фоне.

1

Скачать пакет своей платформы

Из GitHub Releases: detour_X.Y.Z_all.ipk для OpenWrt / GL.iNet либо detour-keenetic_X.Y.Z_all.ipk для Keenetic / Entware. Рядом лежит .ipk.sig — подпись релиза.

2

Скопировать на роутер и установить

# 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
3

Подождать 30–90 секунд и открыть панель

За это время подтянутся бинарники. Панель откроется по адресу http://<IP-роутера>:8080/detour/. Ход установки виден в /var/log/detour-bootstrap.log.

Почему свой opkg-фид. Дистрибутивный фид GL.iNet застрял на sing-box 1.8.10, который не понимает схему конфига 1.13.x, а tpws из zapret вообще не пакуется ни одним фидом. Поэтому проект держит собственный подписанный фид на обе архитектуры.
Требования к железу. Роутер на OpenWrt с musl (бинарники собраны под неё) либо Keenetic с установленным Entware. Нужен root по SSH и немного места; для стабильной работы панели желательна флешка со SWAP — его тоже можно создать из интерфейса.