Ladon - Автоматический обход DPI блокировок

Автоматический обход DPI блокировок в реальном времени для Linux-шлюзов, Linux-десктопов, FreeBSD, OPNSense

Ladon реактивно наблюдает DNS-трафик клиентов шлюза, четырёхстадийной пробой (DNS → TCP:443 → TLS handshake → HTTP read до 32KB) идентифицирует реальные DPI-блокировки и собирает IP файлом, простым списком или rule-set для sing-box ipset для tunnel-routing. За доли секунды.

Ladon. Кратко

  • Реактивная подписка — probe только на домены, которые клиенты сами запросили через DNS.
  • Четырёхстадийный probe — DNS → TCP:443 → TLS handshake → HTTP read до 32KB.
  • 20+ типизированных failure-кодовtls_alert, tls_garbage, tls_reset, tls13_block, tls_intercept, mtls_required, tcp_refused, http_cutoff, http_451, …
  • Server-active vs path-active — TLS alert / RST / connection refused отделены от timeout / cutoff / garbage.
  • 24h temporal accumulation — порог blocked-вердиктов в окне для постоянного списка.
  • Семья как единица — при ≥N подтверждённых поддоменов eTLD+1 семья тянется в туннель целиком: её IP разворачиваются скопом, новые поддомены (covered) больше не пробятся.
  • Опциональная ревалидацияcache и ignore не навсегда: домен возвращается к пробам, когда состояние перестаёт подтверждаться.
  • Вердикт наружу — список заблокированных доменов файлом, простым списком или rule-set для sing-box, для тех, кто исполняет решение не через ipset.

Методология

Подробно о методологии можно прочесть тут. На протяжении всей работы система учится, репробирует, оценивает достижимость для того чтобы в длительной перспективе накапливать только действительно заблокированные ресурсы. Оптимистичный путь (inline probe) занимает не больше секунды. Этого хватает чтобы клиент даже не перезагружал страницу (хотя иногда все-таки приходится)

Задумка классная! Планируете ли поддержку др. OS кроме linux?

благодарю! для iOS сейчас фреймворк в тесте (GitHub - belotserkovtsev/ladon-ios-sdk: Swift Package Manager distribution manifest for the Ladon iOS SDK. Binary artifacts ship from belotserkovtsev/Ladon releases. · GitHub), думал над openwrt, но пока не первый приоритет

Есть ли описание для нубов примера запуска и базовой настройки? Текущего, например, мне не хватило.
И ещё я не понял. что именно пробивает DPI в утилите или это только запуск проб?

Наверное списки генерирует для Zapret / VPN? Само не обходит, Zapret / VPN читает те файлы с ipset куда движок и записывает.

инструкцию по установке можно найти тут. движок формирует список заблокированных ip-адресов, маршрутизацию над которыми нужно делать руками. это осознанное решение - конфигурация сети у всех разная, так гибкость инструмента сохраняется

по поводу инструкции для нубов опять же не понятно какой метод описывать. возможно есть смысл подумать над кукбуками с разными конфигурациями. кидайте пры, буду рад иннерсорсу. а идею запишу в бэклог, мб руки дойдут

поднимаю ща openwrt реализацию в бету. если кто-то захочет потестить - напишите пж

Есть какие-то хитрости если попытаться заводить на FreeBSD, включая лохматые (9.4, 11.2, 11.4) ?

подумаю, постараюсь потестить

Интересно. А docker будет?)

Думаю что смогу потестить. У меня OpenWrt 25.12.4, 256 RAM
OPENWRT_BOARD=“mediatek/mt7622”
OPENWRT_ARCH=“aarch64_cortex-a53”

вскоре смогу рассказть о крупном обновлении, пока на вопросы отвечу:

Есть какие-то хитрости если попытаться заводить на FreeBSD, включая лохматые (9.4, 11.2, 11.4) ?

FreeBSD версия была в разработке последнюю неделю, но пока приоритет отдал OpnSense. думаю в ближ будущем получится докрутить голый FreeBSD

Интересно. А docker будет?)

пока не планировал. решение глубоко интегрировано с сетевым ядром

Думаю что смогу потестить. У меня OpenWrt 25.12.4, 256 RAM

OpenWRT реализацию сам потестил локально, есть проблемы. один из первых приоритетов на ровне с FreeBSD на доведение в Stable. принесу новости сюда когда будет готово

  1. чем отличается от автохостлист в запрете?
  2. под винду не планируется?

ladon спроектирован для корневого сетевого оборудования - шлюзы, роутеры и т.д. если нужно десктоп решение - zapret с автохостлист приемлемо задачу закроет. а если важно стабильно и точно держать всю домашнюю / корпоративную сеть под обходом, то ladon конечно вне конкуренции

Ladon x OPNsense (beta2)

Ладон теперь работает на OPNsense как полноценный плагин с веб-интерфейсом. устанавливается одной командой на Linux и на OPNsense.

curl -fsSL https://github.com/belotserkovtsev/Ladon/releases/download/v2.0.0-beta2/install.sh | sudo sh

Что меняется

  • настройка и диагностика OPNSense версии идут через веб-интерфейс

  • заблокированные домены попадают в таблицы pf под тремя алиасами фаервола: ladon_engine, ladon_manual, ladon_cidr

  • вкладка Diagnostics показывает, что работает сейчас, какие домены недавно туннелировались и общее состояние

В beta2

  • движок теперь обрабатывает только адреса, которые успешно зазрезолвились. имена, которые не резолвятся (NXDOMAIN, локальные зоны), отбрасываются

  • Inline-пробы берут адреса прямо из наблюдений, а не из кэша, поэтому конфликта между ними больше нет

  • починил баг, из-за которого локальные домены (.lan, .internal) вызывали рекурсивное засорение имён

  • ladon doctor и ladon status работают точнее

подробнее о 2.0.0-beta2 - Release v2.0.0-beta2 · belotserkovtsev/Ladon · GitHub

Ladon 2.1.0 - Hardened

curl -fsSL https://github.com/belotserkovtsev/Ladon/releases/download/v2.1.0/install.sh | sudo sh

Что меняется

  • Решения перестают быть вечными. Домен, один раз признанный доступным, раньше не перепроверялся никогда
  • Подмена сертификата распознаётся как блокировка
  • Опечатка в списке доменов больше не оставляет сеть без DNS
  • dnsmasq не перезапускается без причины
  • Полноценная поддержка OPNSense
  • Устранены неточности, улучшен перфоманс

подробнее о 2.1.0 - Release v2.1.0 · belotserkovtsev/Ladon · GitHub

Ladon 3.0.0 - Dockerized

curl -fsSL https://github.com/belotserkovtsev/Ladon/releases/download/v3.0.0/install.sh | sudo sh

Что меняется

  • Работает не только на роутере. Появился Docker контейнер со своим резолвером: поднимается на обычной Linux-машине, наборы держит в собственном network namespace — на хосте не появляется ни правил, ни ipset’ов. Установщик спрашивает, ставить службой или контейнером.
  • Отдаёт вердикт файлом. Простым списком доменов или готовым rule-set для sing-box (клиент сам перечитывает при изменении). Поверх можно положить что угодно — туннель, прозрачный прокси или in-place обфускатор вроде zapret. ipset для этого больше не обязателен

подробнее о 3.0.0 - https://github.com/belotserkovtsev/Ladon/releases/tag/v3.0.0

Насколько глубоко привязано к iptables? Будет ли работать через слой совместимости nftables-iptables?

ни на сколько не привязан. будет