Skip to content

Releases: varyen/detour

v1.41.0

Choose a tag to compare

@varyen varyen released this 29 Jul 22:42

detour v1.41.0

(no notes)

Packages

  • detour_1.41.0_all.ipk — panel for OpenWrt/GL.iNet (scripts/UI). On first install it bootstraps the detour feed and then pulls sing-box + tpws-zapret automatically.
  • detour-keenetic_1.41.0_all.ipk — Keenetic/Entware (mipsel) package (on first install it bootstraps our mipsel feed and then pulls sing-box + tpws-zapret automatically; nothing bundled).

Binaries (sing-box + tpws-zapret)

Neither binary is bundled — after the panel package lands, its postinst adds our feed (src/gz detour https://raw.githubusercontent.com/varyen/detour/feed/aarch64 on OpenWrt; feed/mipsel on Keenetic) and installs sing-box + tpws-zapret in the background via detour-update. Build/publish the feed with python3 build_feed.py --version <sb-ver> --tpws-version <zapret-ver> --publish.

Install

Fresh (SSH)

opkg install /tmp/detour_1.41.0_all.ipk

The panel then bootstraps the feed and pulls sing-box + tpws-zapret itself.

Panel update (existing install)

LuCI → Software → Upload detour_1.41.0_all.ipk, or the panel's self-update, or detour-update apply.

Binary updates

Panel → version chip → «Обновление». sing-box: detour-update bins-apply (opkg upgrade sing-box); tpws-zapret: detour-update tpws-apply (opkg upgrade tpws-zapret).

v1.40.2

Choose a tag to compare

@varyen varyen released this 29 Jul 22:22

detour v1.40.2

(no notes)

Packages

  • detour_1.40.2_all.ipk — panel for OpenWrt/GL.iNet (scripts/UI). On first install it bootstraps the detour feed and then pulls sing-box + tpws-zapret automatically.
  • detour-keenetic_1.40.2_all.ipk — Keenetic/Entware (mipsel) package (on first install it bootstraps our mipsel feed and then pulls sing-box + tpws-zapret automatically; nothing bundled).

Binaries (sing-box + tpws-zapret)

Neither binary is bundled — after the panel package lands, its postinst adds our feed (src/gz detour https://raw.githubusercontent.com/varyen/detour/feed/aarch64 on OpenWrt; feed/mipsel on Keenetic) and installs sing-box + tpws-zapret in the background via detour-update. Build/publish the feed with python3 build_feed.py --version <sb-ver> --tpws-version <zapret-ver> --publish.

Install

Fresh (SSH)

opkg install /tmp/detour_1.40.2_all.ipk

The panel then bootstraps the feed and pulls sing-box + tpws-zapret itself.

Panel update (existing install)

LuCI → Software → Upload detour_1.40.2_all.ipk, or the panel's self-update, or detour-update apply.

Binary updates

Panel → version chip → «Обновление». sing-box: detour-update bins-apply (opkg upgrade sing-box); tpws-zapret: detour-update tpws-apply (opkg upgrade tpws-zapret).

v1.40.1

Choose a tag to compare

@varyen varyen released this 29 Jul 21:54

detour v1.40.1

(no notes)

Packages

  • detour_1.40.1_all.ipk — panel for OpenWrt/GL.iNet (scripts/UI). On first install it bootstraps the detour feed and then pulls sing-box + tpws-zapret automatically.
  • detour-keenetic_1.40.1_all.ipk — Keenetic/Entware (mipsel) package (on first install it bootstraps our mipsel feed and then pulls sing-box + tpws-zapret automatically; nothing bundled).

Binaries (sing-box + tpws-zapret)

Neither binary is bundled — after the panel package lands, its postinst adds our feed (src/gz detour https://raw.githubusercontent.com/varyen/detour/feed/aarch64 on OpenWrt; feed/mipsel on Keenetic) and installs sing-box + tpws-zapret in the background via detour-update. Build/publish the feed with python3 build_feed.py --version <sb-ver> --tpws-version <zapret-ver> --publish.

Install

Fresh (SSH)

opkg install /tmp/detour_1.40.1_all.ipk

The panel then bootstraps the feed and pulls sing-box + tpws-zapret itself.

Panel update (existing install)

LuCI → Software → Upload detour_1.40.1_all.ipk, or the panel's self-update, or detour-update apply.

Binary updates

Panel → version chip → «Обновление». sing-box: detour-update bins-apply (opkg upgrade sing-box); tpws-zapret: detour-update tpws-apply (opkg upgrade tpws-zapret).

v1.40.0

Choose a tag to compare

@varyen varyen released this 29 Jul 20:56

detour v1.40.0

(no notes)

Packages

  • detour_1.40.0_all.ipk — panel for OpenWrt/GL.iNet (scripts/UI). On first install it bootstraps the detour feed and then pulls sing-box + tpws-zapret automatically.
  • detour-keenetic_1.40.0_all.ipk — Keenetic/Entware (mipsel) package (on first install it bootstraps our mipsel feed and then pulls sing-box + tpws-zapret automatically; nothing bundled).

Binaries (sing-box + tpws-zapret)

Neither binary is bundled — after the panel package lands, its postinst adds our feed (src/gz detour https://raw.githubusercontent.com/varyen/detour/feed/aarch64 on OpenWrt; feed/mipsel on Keenetic) and installs sing-box + tpws-zapret in the background via detour-update. Build/publish the feed with python3 build_feed.py --version <sb-ver> --tpws-version <zapret-ver> --publish.

Install

Fresh (SSH)

opkg install /tmp/detour_1.40.0_all.ipk

The panel then bootstraps the feed and pulls sing-box + tpws-zapret itself.

Panel update (existing install)

LuCI → Software → Upload detour_1.40.0_all.ipk, or the panel's self-update, or detour-update apply.

Binary updates

Panel → version chip → «Обновление». sing-box: detour-update bins-apply (opkg upgrade sing-box); tpws-zapret: detour-update tpws-apply (opkg upgrade tpws-zapret).

v1.39.0

Choose a tag to compare

@varyen varyen released this 29 Jul 17:56

detour v1.39.0

(no notes)

Packages

  • detour_1.39.0_all.ipk — panel for OpenWrt/GL.iNet (scripts/UI). On first install it bootstraps the detour feed and then pulls sing-box + tpws-zapret automatically.
  • detour-keenetic_1.39.0_all.ipk — Keenetic/Entware (mipsel) package (on first install it bootstraps our mipsel feed and then pulls sing-box + tpws-zapret automatically; nothing bundled).

Binaries (sing-box + tpws-zapret)

Neither binary is bundled — after the panel package lands, its postinst adds our feed (src/gz detour https://raw.githubusercontent.com/varyen/detour/feed/aarch64 on OpenWrt; feed/mipsel on Keenetic) and installs sing-box + tpws-zapret in the background via detour-update. Build/publish the feed with python3 build_feed.py --version <sb-ver> --tpws-version <zapret-ver> --publish.

Install

Fresh (SSH)

opkg install /tmp/detour_1.39.0_all.ipk

The panel then bootstraps the feed and pulls sing-box + tpws-zapret itself.

Panel update (existing install)

LuCI → Software → Upload detour_1.39.0_all.ipk, or the panel's self-update, or detour-update apply.

Binary updates

Panel → version chip → «Обновление». sing-box: detour-update bins-apply (opkg upgrade sing-box); tpws-zapret: detour-update tpws-apply (opkg upgrade tpws-zapret).

v1.38.0

Choose a tag to compare

@varyen varyen released this 29 Jul 14:13

detour v1.38.0

Исправлено

  • «WAN просел до 100 Мбит» горело вечно на 100-мегабитном Keenetic. Обе ветки проверки линка (detour-wan-link для баннера панели и vpn-keepalive для push) считали деградацией любую скорость ниже гигабита — константа 1000 в коде. На роутере, у которого 100 Мбит/с и есть физический потолок порта, это ровно здоровое состояние, а панель показывала аварию, которую нечем чинить. Теперь эталон — не гигабит, а потолок самого порта: WAN_LINK_MAX_MBPS в detour.conf / PORT_MAX_MBPS= в wan-watch.conf (ручное значение) → Supported link modes из ethtool → максимум скорости, когда-либо виденный на этом роутере (запоминается в state-файле). Если потолок определить нечем — предупреждение не показывается вовсе: молчание лучше ложной тревоги. Отдельно разведён случай «сосед умеет меньше нас»: линк на максимуме соседнего порта (ONU/модем на 100 Мбит) больше не авария, а факт в диагностике. Полный выключатель: WAN_LINK_MONITOR=off.
  • GitHub отвечал 403 на проверку обновлений. api.github.com без токена даёт 60 запросов в час на IP, а за провайдерским CGNAT этот лимит общий на всех абонентов адреса — отсюда «attempt 1/4 … 4/4 failed» и ERROR: GH API request failed при полностью рабочем интернете. Добавлен обход: если API недоступен, тег берётся из редиректа обычной страницы github.com/<repo>/releases/latest (в этот лимит она не входит), а ссылки на ассеты собираются по детерминированному шаблону /releases/download/<tag>/<файл>. Проверка версии и установка работают и в этом режиме; теряется только текст changelog.
  • Установка могла «пройти успешно», оставив старую версию в базе opkg. После opkg install версия сверялась через файл /etc/detour/version, который пишет postinst самого пакета — то есть установка подтверждалась по данным устанавливаемого файла, а не по данным opkg. Расхождение (.ipk новой версии лежит на флешке, в базе Entware по-прежнему старая, сервисы крутят старые файлы) такая проверка не ловила. Теперь читается именно база (opkg list-installed), и несовпадение с Version: из пакета — это ошибка установки, а не успех. detour-update selftest печатает такое расхождение отдельной строкой с подсказкой, что делать.

Добавлено

  • Предупреждение о скорости WAN-порта можно скрыть и вернуть. В баннере — ссылка «Скрыть это предупреждение», в шапке (⚙ → Уведомления) — пункт «Вернуть предупреждение о WAN». Пункт появляется только когда есть что возвращать. Скрытие привязано к подписи «интерфейс/скорость/ожидаемое»: как только любое из чисел изменилось (линк просел ещё сильнее, сменился порт), предупреждение показывается снова — одно нажатие не глушит будущую, уже настоящую аварию.

Кросс-платформенность

  • Правки в detour-wan-link, vpn-keepalive, detour-update, index.html — общие файлы, обе платформы получают их из одного манифеста; новых файлов не добавлялось.
  • ⚠️ На живом OpenWrt (GL-BE9300) проверено: разбор ethtool под busybox awk, новый JSON статуса (порт 2.5G, аплинк 1G → не авария), selftest со сверкой базы opkg, редирект-фолбэк GitHub. Логика WAN-потолка прогнана на 10 сценариях в изоляции (включая 100-мегабитный порт без ethtool), логика «скрыть/вернуть» — на 7 шагах.
  • ⚠️ На живом Keenetic не проверялось — роутер недоступен с рабочей машины. Нужна проверка владельцем: пропал ли баннер/push про 100 Мбит, проходит ли проверка обновлений при 403 от API, что печатает detour-update selftest (в пакете обновлён keenetic/validate-recent-features.sh — печатает port_max/expected/peer_limited).
  • ⚠️ Обход 403 живёт внутри этого пакета: если роутер уже упирается в 403, первую установку придётся сделать вручную (detour-update apply-local /opt/tmp/detour-keenetic_1.38.0_all.ipk), дальше самообновление станет устойчивым.

Packages

  • detour_1.38.0_all.ipk — panel for OpenWrt/GL.iNet (scripts/UI). On first install it bootstraps the detour feed and then pulls sing-box + tpws-zapret automatically.
  • detour-keenetic_1.38.0_all.ipk — Keenetic/Entware (mipsel) package (on first install it bootstraps our mipsel feed and then pulls sing-box + tpws-zapret automatically; nothing bundled).

Binaries (sing-box + tpws-zapret)

Neither binary is bundled — after the panel package lands, its postinst adds our feed (src/gz detour https://raw.githubusercontent.com/varyen/detour/feed/aarch64 on OpenWrt; feed/mipsel on Keenetic) and installs sing-box + tpws-zapret in the background via detour-update.

Install

Fresh (SSH)

opkg install /tmp/detour_1.38.0_all.ipk

Panel update (existing install)

Панель → «Установить последнюю», либо detour-update apply, либо загрузка .ipk в модал «Установить из файла».

v1.37.3

Choose a tag to compare

@varyen varyen released this 29 Jul 12:57

detour v1.37.3

Багфикс-релиз: чинит выбор файла в модале обновления панели и приводит поля ввода к одному виду в обеих темах.

Исправлено

  • Кнопка «Установить из файла» выглядела нерабочей. Нажималась она на самом деле: клик доходил до обработчика, тот видел пустой <input type="file"> и печатал подсказку «Выберите .ipk» — но файл выбрать было нечем. Оба поля стояли с accept=".ipk" / accept=".sig", а Safari (macOS/iOS) и часть Android-пикеров показывают неизвестное расширение как недоступное: в диалоге выбора пакет просто гаснет, диалог закрывается пустым, поле остаётся «файл не выбран». Снаружи это и читается как «кнопка не нажимается».

    Теперь accept не ставится вовсе, нативные инпуты скрыты, а выбор идёт кнопками «📦 Выбрать .ipk» / «🔏 Выбрать .sig» — тем же приёмом, что уже используется для импорта профилей и hosts-источников. Рядом показываются имя и размер выбранного файла, а нажатие «Установить из файла» с пустым полем не тупикует сообщением, а сразу открывает диалог выбора.

  • Поля ввода без класса рисовались нативно. В тёмной теме такое поле оставалось белым, а пара мест с инлайновым фолбэком var(--bg-input, #1b1b1b) давала обратное — тёмный прямоугольник посреди светлой панели (переменной --bg-input в проекте нет). Добавлен базовый блок стилей для всех input / select / textarea на одних токенах: фон, рамка, фокус, ::placeholder, :disabled, оформление кнопки file-инпута. Компонентные правила поверх задают только метрики.

  • var(--amber) не резолвился: токена с таким именем не существовало, и текст «SWAP не создан» наследовал обычный цвет вместо предупреждающего. Добавлен алиас на --yellow.

Изменено

  • Из плейсхолдеров и комментариев убраны реальные адреса — заменены на документационные диапазоны.

Кросс-платформенность

Все правки — в общем index.html, исполняются в браузере и одинаково приезжают в оба пакета (OpenWrt и Keenetic). Платформо-зависимых веток не добавлялось.

⚠️ Проверено чтением кода и синтаксической проверкой; на живой панели фикс выбора файла стоит подтвердить на Keenetic — именно там воспроизводился симптом.

Packages

  • detour_1.37.3_all.ipk — панель для OpenWrt/GL.iNet. На первой установке прописывает наш фид и сама подтягивает sing-box + tpws-zapret.
  • detour-keenetic_1.37.3_all.ipk — Keenetic/Entware (mipsel), аналогично через feed/mipsel; бинарники не бандлятся.

Рядом с каждым .ipk лежит .ipk.sig (usign).

Install

Панель (обновление)

Панель → чип версии → «Обновление панели» → «Установить последнюю», либо по SSH:

opkg install /tmp/detour_1.37.3_all.ipk

Бинарники

Панель → чип версии → «Обновление». sing-box: detour-update bins-apply (opkg upgrade sing-box); tpws-zapret: detour-update tpws-apply (opkg upgrade tpws-zapret).

v1.37.2

Choose a tag to compare

@varyen varyen released this 29 Jul 09:17

detour v1.37.2

Исправлено

  • Лог-мост плодил процессы при каждом перезапуске. /proc/<pid>/comm ядро обрезает до 15 символов, поэтому наши же подоболочки видны там как detour-logbridg, а whitelist в kill_tree сверялся с полным 16-символьным detour-logbridge — совпадения не было никогда. При рестарте умирали только tail и logger (их имена короткие), а подоболочка-follow выживала и через sleep 5 поднимала себе новую пару; одновременно новый run добавлял ещё четыре.

    На референсном роутере за 1 день 22 часа аптайма накопилось 48 tail + 48 logger + 49 подоболочек при 331 процессе всего. Теперь whitelist матчит обрезанное имя, а на старте добавлена зачистка по /proc: CHILDREN_FILE знает только текущее поколение, поэтому всё, что оставил после себя убитый по SIGKILL run, было для него невидимо навсегда.

    Замерено после фикса на живом GL-BE9300: 4/4/5 и не растёт через три перезапуска подряд, пересылка в syslog живая и ровно в одной копии.

  • Матричный фон не перекрашивался при смене темы. toggleTheme() сначала вешает на <html> класс с transition: background-color 0.25s, и только потом меняет data-theme. Наблюдатель срабатывал мгновенно и читал getComputedStyle(...).backgroundColor, который в этот момент возвращал ещё старый цвет — переход только начался. Цвета глифов берутся напрямую из атрибута, поэтому перекрашивались сразу, а фон оставался в прежней теме, причём навсегда: этот же цвет дальше использует затухающая заливка, и починить его мог только ресайз окна. Теперь читается токен --bg (кастомные свойства не анимируются, значение переключается мгновенно), с фолбэком на backgroundColor.

Кросс-платформенность

  • Фикс лог-моста — в общем detour-logbridge, обход /proc платформо-независим и приезжает на обе платформы. ⚠ Проверен на живом OpenWrt (GL-BE9300); на живом Keenetic не проверялся — как и весь Keenetic-путь этого скрипта с момента его появления.
  • Фикс темы — целиком в index.html, исполняется в браузере, одинаков на обеих платформах.

Packages

  • detour_1.37.2_all.ipk — OpenWrt / GL.iNet (BE9300, Flint).
  • detour-keenetic_1.37.2_all.ipk — Keenetic / Entware (mipsel).

Рядом с каждым пакетом лежит .ipk.sig (usign).

v1.37.1

Choose a tag to compare

@varyen varyen released this 29 Jul 09:07

detour v1.37.1

Изменено

  • Матричный фон ускорен на 20%. Все три скоростные константы умножены на 1.2 — скорости колонок (теперь 4.6–16.8 строк/с), затухание хвоста и темп перезапуска отработавших колонок. Масштабируется именно весь эффект целиком: если поднять одни скорости, хвосты стали бы на 20% длиннее, а так картинка та же, просто проигрывается быстрее.

Кросс-платформенность

  • Правка целиком в index.html и исполняется в браузере — одинаково приезжает в оба пакета.

Packages

  • detour_1.37.1_all.ipk — OpenWrt / GL.iNet (BE9300, Flint).
  • detour-keenetic_1.37.1_all.ipk — Keenetic / Entware (mipsel).

Рядом с каждым пакетом лежит .ipk.sig (usign).

v1.37.0

Choose a tag to compare

@varyen varyen released this 29 Jul 08:49

detour v1.37.0

Добавлено

  • Проверка «доходит ли порт до роутера из интернета». У каждого включённого проброса появилась кнопка «Проверить снаружи». Обычный port-checker на этот вопрос отвечает неверно: если внешний порт перехватывает оборудование провайдера, оно само завершает TCP-рукопожатие, и чекер рапортует «открыт», хотя до роутера не доходит ничего.
    • Поэтому проверка сверяет два сигнала: ответ внешних узлов и прирост счётчика пакетов на нашем же правиле файрвола (nft на OpenWrt/fw4, iptables на fw3 и Keenetic) вокруг пробы. Счётчик дёрнулся — отвечали мы; не дёрнулся — отвечал кто-то другой.
    • Вердикты: reachable, hijacked (перехват выше роутера — с советом сменить порт на нестандартный), blocked, open_unverified, unknown.
    • CLI: detour-portmap check-external <id>; CGI: portmap_check_external.
  • Обычный check дополнительно отдаёт wan_packets — сколько пакетов из интернета видело правило проброса с последней перезагрузки файрвола.

Изменено

  • Матричный фон стал спокойнее, а колонки — разноскоростными. Скорость задавалась в строках за кадр, то есть зависела от герцовки: на 120 Гц фон летел вдвое быстрее, чем на 60. Теперь она в строках в секунду и умножается на реальный dt — 3.8–14 стр/с вместо прежних ≈21–66, примерно впятеро медленнее. Скорость колонки выбирается лог-равномерно, поэтому медленные капли и быстрые росчерки встречаются одинаково часто.
  • Попутно исправлено то, что вылезает именно на медленной скорости: голова капли привязана к сетке строк и берёт новый глиф только при переходе на строку вниз (раньше перевыбирала символ каждый кадр — дрожание на месте), а затухающая заливка тратит альфу порциями вместо микро-альфы каждый кадр (слишком малая альфа не меняет 8-битные пиксели, и хвосты не дочищались до фона). Побочно — ~17 вызовов fillText на кадр вместо ~160.
  • ⚠️ Проверка проброса обращается к стороннему сервису (check-host.net) — единственное такое место в проекте. Наружу уходят только WAN-IP и номер порта, оба и без того публичны. Запускается только по кнопке, никогда сама.

Исправлено

  • Проверка доступности устройства в LAN врала на любом веб-сервисе. target_reachable использовал nc, а BusyBox nc возвращает ошибку, если собеседник ничего не прислал первым — то есть каждый HTTP-сервер, вежливо ожидающий запрос, показывался как «устройство не отвечает». Теперь признак — %{time_connect} у curl.

Кросс-платформенность

  • check-external и wan_packets сделаны сразу для обеих платформ. ⚠ Ветка Keenetic по-прежнему не проверялась на живом железе — как и весь «Проброс сервисов» с 1.35.0.
  • Правка матричного фона живёт целиком в index.html и исполняется в браузере — приезжает в оба пакета одинаково.

Packages

  • detour_1.37.0_all.ipk — панель для OpenWrt/GL.iNet (BE9300, Flint). При первой установке сама прописывает фид и подтягивает sing-box + tpws-zapret.
  • detour-keenetic_1.37.0_all.ipk — Keenetic/Entware (mipsel), бинарники из нашего mipsel-фида.

Рядом с каждым пакетом лежит .ipk.sig (usign).

Install

Обновление панели: кнопкой в самой панели, загрузкой .ipk в её модал, или по SSH:

opkg install /tmp/detour_1.37.0_all.ipk