Jump to content

Recommended Posts

Posted (edited)

Всем привет!

Проекту нужны желающие поучаствовать в открытом тестировании адаптивной VPN-маршрутизации.
https://github.com/R17a/Susanin.Keenetic

Статус: активная разработка / полевое тестирование. Проверено на Keenetic Viva (MT7621, MIPS), KeeneticOS 5.1.5, Entware, WireGuard/ASCWG-туннель. Основная среда — legacy iptables + ipset (nftables на этом ядре нет).

Проект разработан на основе статьи на Habr и проекта Fiark/susanin (адаптивная VPN-маршрутизация для MikroTik RouterOS), портирован на роутеры Keenetic/Entware.

Адаптивная маршрутизация - программа смотрит, какие соединения «не работают» из-за блокировок, пробует их через VPN, запоминает рабочие и дальше держит их в VPN. Если VPN недоступен — всё идёт напрямую. Есть и простой список доменов, которые должны идти через VPN всегда (без ручных списков IP — только имена, как в Keenetic).

Не является VPN-клиентом: туннель (WireGuard/ASCWG «Дополнительное подключение») должен уже работать, IPv6 не поддерживается.

Что делает

  • наблюдает за поведением соединений (conntrack), а не за содержимым;
  • по «тихим» признакам блокировок (TCP SYN без ответа, QUIC/UDP без reply, TCP-stall, late-stall) отправляет IP на проверку через VPN;
  • подтверждает рабочие направления (кэш ok) и запоминает их постоянно (ok_ttl=0, переживает перезагрузки; снимает сам, если маршрут через VPN перестал отвечать);
  • TCP и UDP/QUIC учит раздельно;
  • список доменов «всегда через VPN» (vpn_always.txt): эти направления всегда идут в туннель;
  • список доменов "всегда напрямую) (vpn_never.txt): эти направления всегда НЕ идут в туннель;
  • если сайт ответил по основному каналу, он не заворачивается в VPN (кандидатами становятся только направления без ответа);
  • fail-open: при недоступности туннеля — прямой доступ (DIRECT);
  • автоматически чинит правила, если их снёс NDM (Web-UI change) — reconcile;
  • может маршрутизировать и клиентов OpenConnect-сервера на этом же роутере (интерфейс oc0): установщик находит сервер и предлагает добавить его в маршрутизацию;
  • работает как демон под Entware (/opt), управление — только CLI/SSH.
  • Не является VPN-клиентом: туннель (WireGuard/ASCWG «Дополнительное подключение») должен уже работать. IPv6 в v1 не поддерживается.

Как это устроено (кратко)

  • Смотрим на соединения, а не на содержимое. Программа читает /proc/net/nf_conntrack — там видно состояние TCP, сколько пакетов и байт ушло и пришло, метки.
  • Правила фильтрации. Своя цепочка SUSANIN в mangle PREROUTING (после правил Keenetic). Нужные адреса помечаются через CONNMARK/MARK и уходят в отдельную таблицу маршрутизации (по умолчанию 100; номер должен быть маленьким — busybox ip не понимает большие). Адреса хранятся в наборах ipset susanin_{test,ok}_{tcp,udp}.
  • Таймеры. Проверки идут по расписанию: FAST 1 с, SOFT 2 с, JUDGE 1 с, HEALTH 5 с. «Зависшие» соединения удаляются из conntrack, чтобы клиент подключился заново — уже через VPN. Пороги взяты из проекта Susanin.MikroTik.

OpenConnect VPN на том же роутере
Если на роутере установлено и работает приложение OpenConnect VPN (ocserv), установщик сам находит его интерфейс (oc0) и спрашивает:

Цитата

OpenConnect server detected (oc0). Add it to Susanin routing? [y/N]

Ответьте y (или yes). При запуске с --yes вопрос не задаётся. Что делает установщик при согласии:

  • добавляет интерфейс oc0 в lan_interfaces;
  • добавляет подсеть клиентов OpenConnect (например, 172.16.5.0/24) в lan_subnets (значение берётся из ipv4-network в /var/run/ocserv/ocserv.conf или из адреса интерфейса);
  • после этого трафик клиентов (телефон/ноутбук через OpenConnect) обрабатывается так же, как трафик LAN: заблокированное идёт через VPN, остальное — напрямую; отдельные правила NAT не нужны.

Требования

  • Keenetic с установленным Entware;
  • пакеты Entware: ipset, conntrack, busybox, iptables (legacy);
  • работающий VPN-туннель (WireGuard/AmneziaWG) — его интерфейс будет egress;
  • LAN-интерфейсы (обычно br0, br1);
  • в Keenetic выключена «Маршрутизация DNS» (доменные маршруты, которые уводят домены в туннель) — иначе Keenetic и Susanin мешают друг другу;

DNS_Route.png

  • настроен шифрованный DNS (DoH/DoT) — на роутере или на клиентах: иначе провайдер может подменить ответы DNS, и клиент не получит настоящий адрес сайта даже при рабочем VPN (частая причина «YouTube/Devart не открывается»);

    Указано как пример.
    DNS.png
  • root-доступ по SSH.

 

Важно: «Приоритеты подключений» Keenetic и Susanin

Keenetic умеет сам направлять устройства и сегменты в VPN (Web → «Приоритеты подключений»). Это отдельный механизм: его правила идут с приоритетом 100–107, а правила Susanin — 2000/2001. Поэтому для клиента, привязанного к политике Keenetic, весь трафик идёт по решению Keenetic (в VPN или напрямую — зависит от политики), а списки и обучение Susanin на него не действуют.

Простое правило: у каждого клиента должен быть один «решающий» механизм.

  • Хотите, чтобы решал Susanin (что через VPN, что напрямую) — у клиента или сегмента не должно быть назначено никакой политики (оставьте системную «по умолчанию»). Это про любую политику: названия задаёте вы сами, и любая назначенная политика перекрывает Susanin. Например, при политике «только напрямую» заблокированный сайт не откроется, и Susanin не сможет завернуть его в VPN.
  • Хотите «всё и всегда через VPN» — можно назначить политику Keenetic, но тогда списки и обучение Susanin для этого клиента не работают.
  • Смешивать оба для одного клиента нельзя.

Проверить привязки:

Цитата

ndmc -c "show running-config" | grep -i "ip policy"


(или Web → «Приоритеты подключений»).

Как понять по conntrack, кто управляет клиентом:

  • mark=2684xxxxx (0xffffaXX) — клиент под политикой Keenetic, Susanin его не обрабатывает;
  • mark=0 или mark=536870912 (0x20000000) — работает Susanin (напрямую или через VPN).


Установка (первый раз)

Цитата

opkg update && opkg install ca-certificates ipset iptables conntrack
wget -qO- https://raw.githubusercontent.com/R17a/Susanin.Keenetic/main/install.sh | sh

или

Цитата

opkg update && opkg install ca-certificates ipset iptables conntrack
opkg install curl
curl -fsSL https://raw.githubusercontent.com/R17a/Susanin.Keenetic/main/install.sh | sh

Демо
demo.png

Обновление

sh /opt/susanin/tools/susanin.sh update            # до последнего релиза
sh /opt/susanin/tools/susanin.sh update v0.3.9     # конкретная версия

Демо
image.png.58c028595adf37a4f217d2ba9ecfbae8.png


Итого результат

  • Работают: Youtube, X.com, DevArt, Claude и т.п.
  • Телеграм работает без прокси
  • Если на роутере установлено приложении OpenConnect, а на телефоне OpenConnect клиент - у Вас на сотовом телефоне "Весь интернет работает"
  • Система сама обучается и строит рабочие маршруты


Страница проекта тут https://github.com/R17a/Susanin.Keenetic
Вопросы и пожелания в этой теме или в Телеграм https://t.me/Susanin_Keenetic

Edited by R17a
  • Thanks 2
  • Upvote 3
  • Y'r wrong 1
Posted (edited)

У меня только 1 вопрос. А зачем это все? Зачем выдумывать велосипед да еще и с квадратными колесами, если уже давно (в том числе здесь на форуме) есть достаточно успешные и проверенные временем проекты типа MagiTrickle и другие?

Edited by FLK
  • Upvote 1
  • Y'r wrong 1
Posted

Штатное решение "Маршрутизация DNS":

- особо не обучается (добавления новых адресов ноль)

- поддержки подсетей ноль

Про други проекты сказать не могу т.к. н использовал и какие у них колёса нет знаю.

Воросты про маршрутизацию VPN вижу как тут, так и в https://t.me/Netcraze - если есть у  людей вопросы, в том числе и не отвечэеэные - вопрос актуален или все не знают про "проверенные временем проекты типа MagiTrickle и другие"..

Posted
1 час назад, FLK сказал:

У меня только 1 вопрос.

Вопрос только в размещении темы не в том разделе, а народное творчество всегда на пользу. Тут вроде самообучающийся маршрутизатор, в МТ такого нет, как и в других маршрутизаторах. Такой велосипед ещё не ездил.  

Posted (edited)
1 час назад, R17a сказал:

Штатное решение "Маршрутизация DNS":

- поддержки подсетей ноль

В каком смысле 0?)

Цитата
  • по «тихим» признакам блокировок (TCP SYN без ответа, QUIC/UDP без reply, TCP-stall, late-stall) отправляет IP на проверку через VPN;

Это в принципе и все "самообучение"? Я правильно понимаю?

 

Edited by FLK
Posted
6 часов назад, FLK сказал:

В каком смысле 0?)

Задача с одной неизвестной.
Дано:

  • работающее VPN подключение в "Другие подключения"
  • Маршрутизация > Маршруты DNS > Правила маршрутизации (выбрано активное VPN подключение)

Как роутеру объяснить, что мне 57.144.0.0/14, 157.240.0.0/16, 185.60.216.0/22, 31.13.64.0/18 и т.д. нужно заворачивать в работающий VPN ?

 

6 часов назад, FLK сказал:

Это в принципе и все "самообучение"? Я правильно понимаю?

Если описанной информации в первом сообщении или на GitHub мало, предлагаю ознакомится со статьёй на Habr (держа в голове, что я портировал с MikroTik на Keenetic всё, кроме специфики RouterOS).

Если вся переписка это просто хейт, предлагаю уйти в личные сообщения.

«Колхоз — дело добровольное: хочешь — иди, хочешь — со стороны гляди» (С) Шолохов

  • Confused 1
Posted
1 час назад, R17a сказал:

Задача с одной неизвестной.
Дано:

  • работающее VPN подключение в "Другие подключения"
  • Маршрутизация > Маршруты DNS > Правила маршрутизации (выбрано активное VPN подключение)

Как роутеру объяснить, что мне 57.144.0.0/14, 157.240.0.0/16, 185.60.216.0/22, 31.13.64.0/18 и т.д. нужно заворачивать в работающий VPN ?

Открою секрет - создаешь список с подсетями и назначаешь правило. И о чудо, оно работает)))

 

Posted

Susanin.Keenetic v0.3.6

Что нового в этой версии

  • wildcard-зоны *.example.com в vpn_always.txt и vpn_never.txt: покрывают домен и поддомены. Точная строка example.com по-прежнему означает только сам домен — поддомены обрабатываются адаптивно;
  • конфликт зон: если зона есть в обоих файлах (vpn_always.txt / vpn_never.txt) или зоны пересекаются (например *.keenetic.ru и forum.keenetic.ru), приоритет у «напрямую» (vpn_never), в лог пишется предупреждение;
  • обслуживание: ротация лога (susanin.log >5 МБ → susanin.log.1.gz..3.gz) и архивация старых каталогов datapath-* в /opt/susanin/var/archive/;
  • меньше «дрожания» списков в tail -n 40 /opt/susanin/var/susanin.log: адрес убирается из наборов только если он отсутствует 2 обновления подряд; per-IP записи pin/unpin перенесены в DEBUG (в INFO — только итоговая строка).

Установка (первый раз)

opkg update && opkg install ca-certificates
wget -qO- https://raw.githubusercontent.com/R17a/Susanin.Keenetic/main/install.sh | sh

Обновление

sh /opt/susanin/tools/susanin.sh update
/opt/susanin/bin/susanin-agent version

 

Posted

 Susanin.Keenetic v0.3.8

Что нового в этой версии

  • Откат кода по rate/late-stall-детект: потоки, которым DPI ТСПУ РКН отдал ответ снова уходят в VPN (`SOFT TCP-LATE-STALL`, `QUIC-LATE-STALL`); Пороги `TCP-CLOSE`/`TCP-STALL` снова `rp <= 2 && rb < 256`. Это возвращает автообучение CDN-поддоменов, из-за чего переставали работать превью/видео YouTube, а также медиа x.com/Insta — включая клиентов OpenConnect (`oc0`), где трафик к Fastly/Akamai-EDGE уходил DIRECT и тормозил. На `vpn_always`/`vpn_never` и wildcard-зоны не влияет;
  • hysteresis списков: (`vpn_always`/`vpn_never`) считает интервалы, а не вызовы `va_refresh`/`vn_refresh`;
  • `vpn_never.txt`: имена приводятся к нижнему регистру (как в `vpn_always.txt`) — дедуп и сравнение зон больше не зависят от регистра;
  • `datapath.sh status`: правильные размеры ipset-наборов в ядре (раньше показывало 125 вместо 2682 — счётчик учитывал не все адреса);
  • `susanin-agent status`: размеры ipset-наборов верны и на больших объёмах (раньше могли занижаться), и в выводе виден ipset-набор susanin_never.

Установка (первый раз)

opkg update && opkg install ca-certificates
wget -qO- https://raw.githubusercontent.com/R17a/Susanin.Keenetic/main/install.sh | sh

Обновление

sh /opt/susanin/tools/susanin.sh update
/opt/susanin/bin/susanin-agent version

 

Posted (edited)

Требуются смелые и отзывчивые на тест Susanin.Keenetic под OpenWRT.

https://github.com/R17a/Susanin.Keenetic/releases/tag/openwrt-v0.3.8 - OpenWRT - сборка Susanin.Keenetic openwrt-v0.3.8

Экспериментальная сборка для роутеров Keenetic / Netcraze, перепрошитых на OpenWRT.
На живом железе не тестировалась — предварительный выпуск для проверки сообществом.

Установка Онлайн (архитектура и версия определяются автоматически):

Цитата

--deps дополнительно поставит нужные пакеты через opkg (ipset, conntrack-tools, iptables-legacy, ip-full, ca-bundle, kmod-ipset kmod-ipt-conntrack kmod-ipt-connmark kmod-ipt-tcp-mss); без него установите их вручную.

Сервис: /etc/init.d/susanin enable && /etc/init.d/susanin start;
Проверка: /usr/bin/susanin-agent status; лог: /var/lib/susanin/susanin.log.

Офлайн: возьмите архив под свою архитектуру (см. ниже), распакуйте и выполните
sh install-openwrt.sh.

susanin-openwrt-mipsel_24kc.tar.gz - MT7620 / MT7621 / MT7628 - большинство Keenetic/Netcraze (Start, 4G, Omni, Extra, Viva, Giga, Ultra)
susanin-openwrt-aarch64_cortex-a53.tar.gz - MT7622 / MT7981 / MT7986 - новые модели (ARM/filogic)

Сообщить о проблемах
Issues: https://github.com/R17a/Susanin.Keenetic/issues
Форум: т.е. тут
Telegram: https://t.me/Susanin_Keenetic

Проверено: только сборка (компиляция). Поведение на устройстве не проверялось.

Диагностика (запустите в момент проблемы, отчёт сохраняется в /tmp/susanin-report.txt):

wget -qO- https://raw.githubusercontent.com/R17a/Susanin.Keenetic/openwrt/tools/owrt-report.sh | sh

 

Edited by R17a
Posted

Попробовал чудо маршрутизатор. Толком он не работает, либо нет правильного мануала. Подозреваю что дело в DNS, т.к. в логах записи в вида:

INFO: vpn_always: twimg.com resolve failed (no A records)

Пробовал принудительно указывать vpn_always_dns, но результата нет. Через туннель какие-то килобайты бегут и дальше всё. Тут либо у маршрутизатора с DNS какие-то проблемы, либо он от клиентов DNS запросы не перехватывает. Телега тоже не взлетела.   

Posted (edited)
8 часов назад, Кинетиковод сказал:

Попробовал чудо маршрутизатор. Толком он не работает, либо нет правильного мануала.

Я за любой кипишь в коде и инструкциях, лишь бы был feedback от желающих.
У меня на Viva (KN-1910)/Entware/5.1.5 - работает, будем разбираться и с другими железяками. 
 

8 часов назад, Кинетиковод сказал:

Подозреваю что дело в DNS, т.к. в логах записи в вида:

INFO: vpn_always: twimg.com resolve failed (no A records)

Пробовал принудительно указывать vpn_always_dns, но результата нет. Через туннель какие-то килобайты бегут и дальше всё. Тут либо у маршрутизатора с DNS какие-то проблемы, либо он от клиентов DNS запросы не перехватывает. Телега тоже не взлетела.   


1. Что говорит?

/opt/susanin/bin/susanin-agent status

config file: /opt/susanin/etc/susanin.conf (present)
egress=nwg0 table=100 lan=br0,br1,oc0
data plane:
  chain SUSANIN                OK
  PREROUTING jump              OK
  ip rule test->table          OK
  ip rule ok->table            OK
  route default in table       OK
ipset sizes:
  susanin_test_tcp   = 0
  susanin_test_udp   = 0
  susanin_ok_tcp     = 4347
  susanin_ok_udp     = 453
  susanin_ok_net     = 9
  susanin_never      = 0
vpn_always (always-VPN list):
  file: /opt/susanin/etc/vpn_always.txt (present)
  domains: 211 (refresh every 300s, resolver: auto)
cache:
  state file                   OK

2. Отключено в "Подключения к интернету по Ethernet-кабелю" -> "Игнорировать DNSv4 интернет провайдера?

image.png.70d7c9dd7662c4524d9e11db696b4ca3.png

3. Включены DoT и DoH, как я показал в первом посте? (сервера могут быть свои).

4. Можно в ответ в архиве вложить?
/opt/susanin/etc/susanin.conf
/opt/susanin/var/susanin.log

Если Вы "счастливый" обладатель настроек у провайдера по блокировкам DoT и DoH, тогда да - всё тлен или пробовать другие DoT и DoH сервера...  =(
Поведение DNS (пока) похоже на ваше https://t.me/whackdoor/30961, но лучше ответом дайте логи.

p.s. залил скрипт сбора данных и для Entware.

Entware: wget -qO- https://raw.githubusercontent.com/R17a/Susanin.Keenetic/main/tools/report.sh | sh
на выходе /opt/susanin/var/report.txt

OpenWRT: wget -qO- https://raw.githubusercontent.com/R17a/Susanin.Keenetic/openwrt/tools/owrt-report.sh | sh
на выходе /tmp/susanin-report.txt

Edited by R17a
Posted
15 часов назад, R17a сказал:

У меня на Viva (KN-1910)/Entware/5.1.5 - работает, будем разбираться и с другими железяками.

С другими не надо, у меня 1910.

16 часов назад, R17a сказал:

1. Что говорит?

/opt/susanin/bin/susanin-agent status

Спойлер

~ # sh /opt/susanin/tools/susanin.sh status
daemon: RUNNING
config file: /opt/susanin/etc/susanin.conf (present)
egress=nwg1 table=100 lan=br0,br1
data plane:
  chain SUSANIN                MISSING
  PREROUTING jump              MISSING
  ip rule test->table          MISSING
  ip rule ok->table            MISSING
  route default in table       MISSING
ipset sizes:
  susanin_test_tcp   = 0
  susanin_test_udp   = 0
  susanin_ok_tcp     = 0
  susanin_ok_udp     = 0
  susanin_ok_net     = 0
  susanin_never      = 0
vpn_always (always-VPN list):
  file: /opt/susanin/etc/vpn_always.txt (present)
  domains: 195 (refresh every 300s)
cache:
  state file                   OK

 

Днс свои, провайдерские отключены.

16 часов назад, R17a сказал:

4. Можно в ответ в архиве вложить?
/opt/susanin/etc/susanin.conf
/opt/susanin/var/susanin.log

Конфиг:

Спойлер

# Susanin.Keenetic runtime configuration.
# Non-secret. Normally generated by `susanin setup` / install.sh.

# Egress (VPN/WireGuard tunnel) interface and its tunnel IPv4 address.
egress_interface=nwg1
egress_address=192.168.99.1

# LAN ingress interfaces and their networks (comma-separated).
lan_interfaces=br0,br1
lan_subnets=192.168.7.0/24,10.1.30.0/24

# Routing: numeric table for VPN egress and fwmark values (32-bit).
routing_table=100
mark_test=0x10000000
mark_ok=0x20000000
mark_mask=0x30000000
ip_rule_priority_start=2000

# Polling intervals.
fast_interval=1s
soft_interval=2s
judge_interval=1s
health_interval=5s
# FAST TCP-SYN: сколько SYN без ответа нужно для детекта (1 = быстрее, больше ложных)
fast_syn_min_op=2

# Cache TTLs. ok_ttl=0 means "never expire" (permanent cache; still self-corrects:
# a confirmed IP that stops replying via VPN is removed by JUDGE automatically).
ok_ttl=0
ok_refresh_below=3h
# Bounded GC (like upstream Susanin v0.12): per-proto ok-cache limit, 0=off.
ok_max_entries=4096
test_ttl=1m
cooldown_ttl=5m
cooldown_ok_ttl=30s
watch_ttl=8s
watch_retry_below=4s

# Health probe targets and source address (through tunnel).
health_probe=1.1.1.1,8.8.8.8,77.88.8.8
health_probe_src=10.8.1.1
# Miss-debounce: сколько подряд неудачных проб подряд = туннель DOWN (5s x 4 = 20s).
health_miss_debounce=4

# Домены, которые ВСЕГДА идут через VPN (список-«принудительный»).
# Файл: по одному домену (или IPv4) на строку, '#' — комментарии. Демон
# резолвит A-записи и пиннит их IP в ok-наборы (TCP и UDP), обновляет каждые
# vpn_always_interval секунд. Изменение файла подхватывается на лету.
# Если файла нет — функция выключена. Готовый список поставляется с дистрибутивом
# (vpn_always.txt); при установке/обновлении существующий файл НЕ перезаписывается.
# Поддерживаются wildcard-строки: *.example.com — домен и все поддомены.
vpn_always_file=/opt/susanin/etc/vpn_always.txt
vpn_always_interval=300s
# Резолвер для списка (пусто = автоматически из /etc/resolv.conf):
vpn_always_dns=77.88.8.8

# Список «всегда напрямую» (никогда через VPN): домен / IPv4 / CIDR.
# Нет файла = выключено. Существующий файл при install/update не перезаписывается.
vpn_never_file=/opt/susanin/etc/vpn_never.txt
vpn_never_interval=300s

# Diagnostics.
log_level=info
diagnostics=off

 

Логи:

Спойлер

16:35:23 ERR: datapath provisioning failed
16:35:23 INFO: restored cache from /opt/susanin/var/susanin.state
16:35:23 INFO: engine started (egress=nwg1 table=100)
16:35:23 INFO: vpn_always: addlive.io resolve failed (no A records)
16:35:23 INFO: vpn_always: akamai.net resolve failed (no A records)
16:35:23 INFO: vpn_always: akamaized.net resolve failed (no A records)
16:35:24 INFO: vpn_always: atomile.com resolve failed (no A records)
16:35:24 INFO: vpn_always: byteimg.com resolve failed (no A records)
16:35:24 INFO: vpn_always: byteoversea.com resolve failed (no A records)
16:35:24 INFO: vpn_always: byteoversea.net resolve failed (no A records)
16:35:24 INFO: vpn_always: bytetcdn.com resolve failed (no A records)
16:35:24 INFO: vpn_always: cdninstagram.com resolve failed (no A records)
16:35:24 INFO: vpn_always: claudemcpclient.com resolve failed (no A records)
16:35:24 INFO: vpn_always: claudemcpcontent.com resolve failed (no A records)
16:35:25 INFO: vpn_always: discord-activities.com resolve failed (no A records)
16:35:25 INFO: vpn_always: discord.tools resolve failed (no A records)
16:35:25 INFO: vpn_always: discordapp.net resolve failed (no A records)
16:35:26 INFO: vpn_always: discordpartygames.com resolve failed (no A records)
16:35:26 INFO: vpn_always: facebook.net resolve failed (no A records)
16:35:27 INFO: vpn_always: feelinsonice.com resolve failed (no A records)
16:35:27 INFO: vpn_always: ggpht.cn resolve failed (no A records)
16:35:27 INFO: vpn_always: ggpht.com resolve failed (no A records)
16:35:27 INFO: vpn_always: gvt1.com resolve failed (no A records)
16:35:27 INFO: vpn_always: ibytedtos.com resolve failed (no A records)
16:35:27 INFO: vpn_always: ibyteimg.com resolve failed (no A records)
16:35:28 INFO: vpn_always: +89/-0 ip, +2/-0 net, 195 domain(s), now 89 ip + 2 net pinned
16:35:28 INFO: AUTO-SUSANIN: FAST TCP-SYN 95.161.76.101:443
16:35:28 INFO: AUTO-SUSANIN: FAST TCP-SYN 149.154.167.41:80
16:35:28 INFO: AUTO-SUSANIN: FAST TCP-SYN 149.154.175.100:80
16:35:28 INFO: AUTO-SUSANIN: FAST QUIC 157.240.253.142:443
16:35:28 INFO: AUTO-SUSANIN: FAST TCP-SYN 95.161.64.100:443
16:35:28 INFO: AUTO-SUSANIN: FAST TCP-CLOSE 173.194.221.102:443
16:35:28 INFO: AUTO-SUSANIN: SOFT TCP-STALL 142.251.155.4:443
16:35:28 INFO: AUTO-SUSANIN: SOFT TCP-STALL 157.240.253.33:443
16:35:28 INFO: AUTO-SUSANIN: SOFT TCP-STALL 157.240.253.142:443
16:35:28 INFO: AUTO-SUSANIN: SOFT TCP-STALL 173.194.221.138:443
16:35:28 WARN: data plane missing (NDM rebuild?), re-provisioning
16:35:28 INFO: vpn_always: intercomassets.com resolve failed (no A records)
16:35:29 INFO: vpn_always: ipstatp.com resolve failed (no A records)
16:35:29 INFO: vpn_always: isnssdk.com resolve failed (no A records)
16:35:29 INFO: vpn_always: licdn.com resolve failed (no A records)
16:35:29 INFO: vpn_always: live.net resolve failed (no A records)
16:35:29 INFO: vpn_always: modelcontextprotocol.com resolve failed (no A records)
16:35:29 INFO: vpn_always: muscdn.com resolve failed (no A records)
16:35:31 INFO: vpn_always: musemuse.cn resolve failed (no A records)
16:35:31 INFO: vpn_always: oaiusercontent.com resolve failed (no A records)
16:35:31 INFO: vpn_always: openai.org resolve failed (no A records)
16:35:31 INFO: vpn_always: pstatp.com resolve failed (no A records)
16:35:31 INFO: vpn_always: rocket-cdn.com resolve failed (no A records)
16:35:32 INFO: vpn_always: rutracker.cc resolve failed (no A records)
16:35:32 INFO: vpn_always: snapads.com resolve failed (no A records)
16:35:32 INFO: vpn_always: snapmap.com resolve failed (no A records)
16:35:32 INFO: vpn_always: snapmap.org resolve failed (no A records)
16:35:32 INFO: vpn_always: snapmaps.com resolve failed (no A records)
16:35:32 INFO: vpn_always: strpst.com resolve failed (no A records)
16:35:32 INFO: vpn_always: t-ru.org resolve failed (no A records)
16:35:32 INFO: vpn_always: tiktokcdn-eu.com resolve failed (no A records)
16:35:32 INFO: vpn_always: tiktokcdn-in.com resolve failed (no A records)
16:35:32 INFO: vpn_always: tiktokcdn-us.com resolve failed (no A records)
16:35:32 INFO: vpn_always: tiktokcdn.com resolve failed (no A records)
16:35:32 INFO: vpn_always: tiktokd.org resolve failed (no A records)
16:35:32 INFO: vpn_always: tiktokv.eu resolve failed (no A records)
16:35:32 INFO: vpn_always: tiktokw.eu resolve failed (no A records)
16:35:33 INFO: vpn_always: +67/-0 ip, +0/-0 net, 195 domain(s), now 156 ip + 2 net pinned
16:35:33 INFO: AUTO-SUSANIN: FAST TCP-SYN 149.154.167.91:80
16:35:33 INFO: AUTO-SUSANIN: FAST QUIC 173.194.221.102:443
16:35:33 INFO: AUTO-SUSANIN: SOFT TCP-STALL 142.251.152.4:443
16:35:33 INFO: vpn_always: ttoverseaus.net resolve failed (no A records)
16:35:33 INFO: vpn_always: ttwstatic.com resolve failed (no A records)
16:35:33 INFO: vpn_always: twimg.com resolve failed (no A records)
16:35:34 INFO: vpn_always: ytimg.com resolve failed (no A records)
16:35:34 INFO: vpn_always: cloudfront.net resolve failed (no A records)
16:35:34 INFO: vpn_always: +49/-0 ip, +0/-0 net, 195 domain(s), now 205 ip + 2 net pinned
16:35:39 INFO: AUTO-SUSANIN: FAST TCP-SYN 91.108.56.183:443
16:35:43 WARN: data plane missing (NDM rebuild?), re-provisioning
16:35:47 INFO: AUTO-SUSANIN: FAST TCP-SYN 149.154.175.50:80
16:35:47 INFO: AUTO-SUSANIN: FAST TCP-SYN 149.154.175.59:443
16:35:51 INFO: AUTO-SUSANIN: SOFT TCP-STALL 199.232.172.159:443
16:35:51 INFO: AUTO-SUSANIN: SOFT TCP-STALL 172.66.0.227:443
16:35:51 INFO: AUTO-SUSANIN: SOFT TCP-STALL 162.159.140.229:443
16:35:52 INFO: AUTO-SUSANIN: FAST TCP-CLOSE 142.251.157.4:443
16:35:58 WARN: data plane missing (NDM rebuild?), re-provisioning
16:35:59 INFO: AUTO-SUSANIN: FAST QUIC 157.240.253.13:443
16:36:01 INFO: AUTO-SUSANIN: SOFT TCP-STALL 157.240.253.13:443
16:36:13 INFO: AUTO-SUSANIN: SOFT TCP-STALL 172.67.182.196:443
16:36:13 WARN: data plane missing (NDM rebuild?), re-provisioning
16:36:28 INFO: AUTO-SUSANIN: FAST TCP-SYN 95.161.76.101:443
16:36:28 INFO: AUTO-SUSANIN: FAST TCP-SYN 149.154.167.41:80
16:36:28 INFO: AUTO-SUSANIN: FAST TCP-SYN 149.154.175.100:80
16:36:28 INFO: AUTO-SUSANIN: FAST QUIC 157.240.253.142:443
16:36:28 INFO: AUTO-SUSANIN: FAST TCP-SYN 95.161.64.100:443
16:36:29 WARN: data plane missing (NDM rebuild?), re-provisioning
16:36:29 INFO: AUTO-SUSANIN: SOFT TCP-STALL 142.251.155.4:443
16:36:31 INFO: AUTO-SUSANIN: SOFT TCP-STALL 157.240.253.142:443
16:36:33 INFO: AUTO-SUSANIN: FAST TCP-SYN 149.154.167.91:80
16:36:33 INFO: AUTO-SUSANIN: FAST TCP-CLOSE 142.251.152.4:443
16:36:39 INFO: AUTO-SUSANIN: FAST TCP-SYN 91.108.56.183:443

 

Posted
7 часов назад, Кинетиковод сказал:

С другими не надо, у меня 1910.

 

data plane:
  chain SUSANIN                MISSING
  PREROUTING jump              MISSING
  ip rule test->table          MISSING
  ip rule ok->table            MISSING
  route default in table       MISSING


Информация говорит, что скорей всего не выполнено условие наличие ipset или iptables или conntrack.

Выполни и скинь результат из bash:

command -v iptables ipset ip conntrack
ip link show nwg1; ip -4 addr show nwg1
sh -x /opt/susanin/tools/datapath.sh up 2>&1 | tail -40


После отчёта выполни:

opkg update && opkg install ipset iptables conntrack
/opt/susanin/tools/susanin.sh restart
/opt/susanin/tools/susanin.sh status


Ожидаемый результат, через минуту рыботы:
Data plane - все OK.
Ipset sizes - не равны 0.

data plane:
  chain SUSANIN                OK
  PREROUTING jump              OK
  ip rule test->table          OK
  ip rule ok->table            OK
  route default in table       OK
ipset sizes:
  susanin_test_tcp   = 0
  susanin_test_udp   = 0
  susanin_ok_tcp     = 4309
  susanin_ok_udp     = 420
  susanin_ok_net     = 9
  susanin_never      = 1
vpn_always (always-VPN list):
  file: /opt/susanin/etc/vpn_always.txt (present)
  domains: 211 (refresh every 300s, resolver: auto)
cache:
  state file                   OK


В следующую сборку включу "Проверка на наличие всех нужных компонентов, до запуска демона + детализация в логах".

 

Posted (edited)

Для интереса попробовал. Да, работает. Причем установка и настройка очень простые. DoH и awg конфиг в подключениях. Установка одной ссылкой, в конце выбрал Y) и вроде все работает. Например вотсап завелся, но вот одно видео надо было подождать. Проперделось и начало грузиться.  А так чтоб wa завелся надо помимо доменов ещё сети akamai добавлять, насколько я помню. В общем, работает. Себе пока ставить не буду, т к у меня там на кинетике куча извращений с маршрутами, серверами. Но вот знакомым, думаю да. Поставил и забыл. Пусть оно само решает куда и что через что о_О. И ещё. Можно ли на внутреннюю память. В том плане не накроется ли от перезаписи она?

Edited by Б А
Posted
4 часа назад, Б А сказал:

Можно ли на внутреннюю память. В том плане не накроется ли от перезаписи она?

Не понял.
Чтобы устанавливалась не в /opt ?
Уточни пожелания, допилим .. 😇

В целом, в отличии от тех же Тайцев (nfqws2) хранить бэкап настроек/правил не нужно. Ну форматнули/переустановили, ну потерялись 
/opt/susanin/var/datapath-*-*
- ip-route.txt
- ip-rule.txt
- mangle.txt
- nat.txt
Установил с нуля и пусть начнёт жизнь с чистого листа.

Posted

Я имел в виду entware на внутреннюю память роутера. А туда уже Сусанина) от такого внутренней памяти плохо не будет со временем? Если на внешнюю флешку ставить, то если накроется, да и фиг с ней. А вот с роутером проблемы будут. И ещё. Что-то типа fallback есть/будет? То есть будут пару туннелей,и чтоб при отвале одного, второй подключался

Posted
20 минут назад, Б А сказал:

Я имел в виду entware на внутреннюю память роутера. А туда уже Сусанина) от такого внутренней памяти плохо не будет со временем?

По хорошему лучше иметь под монтированную flash + OPKG.
install.sh по умолчанию ставит в /opt/susanin т.е. на флэшку и тут как бы не выскочить в память.
Принято, для актуализации инструкции.
 

28 минут назад, Б А сказал:

И ещё. Что-то типа fallback есть/будет? То есть будут пару туннелей,и чтоб при отвале одного, второй подключался

т.е.

Чтобы в 
# Egress (VPN/WireGuard tunnel) interface and its tunnel IPv4 address.
egress_interface=nwg0
egress_address=10.8.1.1

Было так-же разнообразно как и в LAN
# LAN ingress interfaces and their networks (comma-separated).
lan_interfaces=br0,br1,oc0
lan_subnets=192.168.1.0/24,10.1.30.0/24,172.16.5.0/24

программа мониторила Egress и считала, правила дня них одинаковыми и балансировала, при падении одного из них.
Принято в работу.

 

  • Upvote 1
Posted
11 часов назад, R17a сказал:

наличие ipset или iptables или conntrack

После установки на чистую Энтварь чудо маршрутизатора список пакетов выглядит так:

Спойлер

dfdffdgdfgd.jpg.9d5d579338ff56a8dd0ae7ddbcb06644.jpg

Соответственно из-за отсутствия необходимых пакетов чудо маршрутизатор не работает. Установил МТ и список пакетов стал таким:

Спойлер

dfgdfgdfgdfg.jpg.b8e585bc1a42f971f8c711e8544dc34e.jpg

Как видно добавился iptables, но этого для работы чудо маршрутизатора в отличии от МТ недостаточно. Соответственно из репозитория Энтвари доустановил ipset (ipset_7.24-1_mipsel-3.4) и conntrack (conntrack_1.4.8-1_mipsel-3.4). В репозитории несколько видов одноименных пакетов и те ли я установил пакеты достоверно неизвестно. После установки список пакетов выглядит так:

Спойлер

fghfghfgh.jpg.243e90ea657eb5e9aeeca6f3463adeaa.jpg

После установки пакетов чудо маршрутизатор перешел из статуса MISSING в статус ок. После этого открылось пару нерекомендуемых сайтов и всё потухло. Тогда указал в настройках маршрутизатора днс и перезапустил Энтварь и вообще все сайты перестали открываться. Решил сделать ребут роутера и после ребута маршрутизатор заработал. Чудо!  Правда dnsleaktest показывает днс прописанный для устройства в Keenetic OS, а не в настройках маршрутизатора, но это неважно. 

По итогу я так понимаю R17a пришёл к нам из мира Микротиков, где-то раздобыл древнюю Виву и решил портировать на неё автоматический маршрутизатор с Router OS. R17a не знал, что установщик должен проверять наличие необходимых для его работы пакетов и при отсутствии оных устанавливать их самостоятельно. Возможно на Router OS всё делается только вручную, но на Keenetic OS максимальная автоматизация при минимальном участии пользователя это норма. Про отсутствие ipk установщика я уж не говорю. Установка через tar архив на Кинетиках не лучший вариант. 

До этого мы видели ручные маршрутизаторы где пользователю нужно было самостоятельно искать и загружать списки доменов и CIDR. Также условно полуавтоматы с загрузкой геобаз. А данный маршрутизатор первый полный автомат в который вообще загружать ничего не надо, который сам всё разруливает налету. Насколько он стабилен покажет время, но это реально новый вид маршрутизатора прежде на Кинетиках не встречавшийся. 

  • Thanks 1
Posted (edited)
29 минут назад, Кинетиковод сказал:

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

Спасибо!
Замечание принимается, зависимости пропишем в следующем релизе.

Edited by R17a
Posted
1 час назад, Кинетиковод сказал:

но это реально новый вид маршрутизатора прежде на Кинетиках не встречавшийся. 

Да, этим и интересен. Чем больше людей, которые шарят в кинетиках, как вы, например, установят, поделятся опытом, найдут недостатки, тем будет лучше в итоге этот маршрутизатор.

  • Thanks 1
Posted (edited)

Susanin.Keenetic v0.3.9

Что нового в этой версии

  • Версия сразу с status. susanin-agent status первой строкой печатает версию — отдельно запускать version больше не нужно.
  • Сборщик отчёта для обращений. sh /opt/susanin/tools/report.sh собирает диагностику и сохраняет файл /opt/susanin/var/report.txt — его удобно приложить в Issues, на форум или в Telegram.
  • Понятные ошибки запуска. Если программе не удалось создать свои правила фильтрации, в лог теперь пишется причина (например, «не найден ipset» или  не найден интерфейс nwg0»), а не общее «provisioning failed».
  • Проверка при старте. Программа проверяет, что установлены iptables,ipset, conntrack, ip и что VPN-интерфейс существует; если чего-то нет — пишет подсказку, что до установить. Это упрощает первый запуск.
  • Меньше лишних повторов. Если правила не создались, попытки повторяются раз в минуту (раньше — каждые 15 секунд и с непонятным сообщением про «rebuild»).
  • Несколько VPN-подключений (фейловер). В конфиге можно перечислить несколько VPN-интерфейсов через запятую (например, egress_interface=nwg0,nwg1). Если активный VPN отключился, трафик автоматически пойдёт через следующий живой; если живых не осталось — напрямую.
  • Меньше записей на память роутера (disk_mode). Если программа установлена во внутреннюю память (NAND) — в том числе когда Entware/OPKG стоит на встроенном разделе — установщик включает режим soft: лог-файл не ведётся, бэкапы/архивы не создаются, а список выученных адресов сохраняется редко — раз в 12 часов (soft_state_interval). В обычном режиме (normal, обычно при установке на USB-флешку) лог ведётся и состояние сохраняется раз в 5 минут.
  • Списки применяются сразу. Если адрес добавлен в vpn_never («всегда напрямую»), уже открытые соединения к нему разрываются, чтобы клиент пере подключился напрямую — иначе такие соединения подолгу оставались бы в VPN.
  • Предупреждение, если домен из vpn_never не разобрался. Список «всегда напрямую» работает по IP-адресам: программа находит адреса домена и добавляет их в список. Если адреса получить не удалось, правило не сработает и трафик к этому домену может уйти в VPN — теперь в лог пишется предупреждение.
  • Меньше мусора в списке выученных адресов (learn_exclude_ports). Для служебных портов (22, 23, 445, 554 и т.п.) больше не запоминаем адреса по одному не отвеченному запросу — так отсекается сетевой шум и сканирования. Обычные сайты (80/443/QUIC) учатся как раньше; если заблокированный сервис работает на нестандартном порту — добавьте его домен/IP в vpn_always.txt.


    Диагностика
    Если что-то не так — соберите отчёт (в момент проблемы) и приложите вывод:
    sh /opt/susanin/tools/report.sh
    # или без установки:
    wget -qO- https://raw.githubusercontent.com/R17a/Susanin.Keenetic/v0.3.9/tools/report.sh | sh

    Отчёт сохраняется в /opt/susanin/var/report.txt.


    Установка (первый раз)

    opkg update && opkg install ca-certificates ipset iptables conntrack
    wget -qO- https://raw.githubusercontent.com/R17a/Susanin.Keenetic/main/install.sh | sh

    Обновление (конфиг и состояние сохраняются)

    sh /opt/susanin/tools/susanin.sh update            # до последнего релиза
    sh /opt/susanin/tools/susanin.sh update v0.3.9     # конкретная версия

    Удаление

    sh /opt/susanin/tools/susanin.sh uninstall          # остановить и снять правила/автозапуск, конфиг и состояние оставить
    sh /opt/susanin/tools/susanin.sh uninstall --purge  # удалить /opt/susanin полностью


    p.s. инструкции обновил, чтобы стало более понятно
    p.s.s. вопрос с .ipk в проработке.


    Entware: https://github.com/R17a/Susanin.Keenetic/releases#release-v0.3.9
    openWRT: https://github.com/R17a/Susanin.Keenetic/releases#release-openwrt-v0.3.9

Edited by R17a
  • Thanks 1
Posted

Susanin.Keenetic v0.3.10

Что нового

  • Меньше «дёрганья» VPN-списка (ok_evict_misses). Раньше адрес мог вылететь из списка «идёт через VPN» после одного плохого наблюдения и тут же вернуться — список «мельтешил». Теперь адрес убирается только после нескольких сбоев подряд (по умолчанию 3). В логе будет одна сводка раз в ~5 минут, а не строка на каждое событие. Хотите как раньше — поставьте ok_evict_misses=1.
  • Быстрее заворачиваем «заглохший» HTTPS. Частая картина: сервер ответил, но данные почти не идут — так провайдер замедляет соединение. Теперь такой адрес сразу проверяется через VPN, не дожидаясь окна наблюдения. Проверки идут чаще: soft_interval по умолчанию снижен до 1 секунды.
  • Ограничитель лишних переводов в VPN (promo_per_min). Чтобы быстрый детект не завернул в VPN всё подряд, за минуту делается не больше 30 новых проб (настраивается; 0 — без ограничения).
  • Мессенджеры не «выпадают» из VPN. Telegram/WhatsApp держат соединение долго; раньше один «тихий» срез мог убрать адрес из списка VPN. Теперь — нет.
  • Диагностика одной командой. sh /opt/susanin/tools/diagnose.sh сам проверит, всё ли на месте (пакеты, настройки, правила, списки), и подскажет, что поправить.
  • Сменили или удалили VPN — перезапуск не нужен. susanin.sh reload перечитывает настройки, susanin.sh rescan заново находит LAN и VPN, обновляет конфиг и применяет изменения. Если VPN-интерфейс пропал, программа сама переключится на живой; если живых нет — пустит трафик напрямую и напишет об этом в лог.
  • Установщик сам предложит доустановить нужное. Если не хватает ipset, iptables, conntrack или сертификатов, установщик спросит, поставить ли их через opkg (флаг --deps — без вопроса).
  • Меньше строк в логе про списки. Домены без A-записи (частая история у CDN) больше не печатаются по строке каждый — будет одна сводка, а повторные неудачи проверяются реже (до 1 часа). Если у домена из vpn_always нет A-записи на самом домене, программа сама проверит поддомены — так адреса CDN чаще попадают в VPN.
  • DNS для разбора списков. Если системный DNS — 127.0.0.1 (NDM) или пуст, берётся адрес LAN-моста: в ряде сборок так надёжнее.
  • Правки vpn_always срабатывают сразу. Когда адрес только что переведён в VPN, старые прямые соединения к нему разрываются — клиент переподключается уже через туннель (для vpn_never так было и раньше).
  • Адрес из vpn_never не «прыгает» в VPN. Если адрес был в списке «всегда напрямую» и оттуда убран, какое-то время он не будет выучен в VPN.
  • Документация. Добавлены USER_GUIDE.md (руководство) и TROUBLESHOOTING.md (что делать, если не работает).
     

 Диагностика

Если что-то работает не так — сначала запустите диагностику: проверит окружение, настройки и списки, выдаст рекомендации:

sh /opt/susanin/tools/diagnose.sh

Для отправки полного отчёта (логи, состояние) — соберите и приложите вывод:

sh /opt/susanin/tools/report.sh

или без установки:

wget -qO- https://raw.githubusercontent.com/R17a/Susanin.Keenetic/v0.3.10/tools/report.sh | sh

Отчёт сохраняется в /opt/susanin/var/report.txt.


Установка (первый раз)

opkg update && opkg install ca-certificates ipset iptables conntrack
wget -qO- https://raw.githubusercontent.com/R17a/Susanin.Keenetic/main/install.sh | sh

Обновление (конфиг и состояние сохраняются)

sh /opt/susanin/tools/susanin.sh update v0.3.10

Удаление

sh /opt/susanin/tools/susanin.sh uninstall          # остановить и снять правила/автозапуск, конфиг и состояние оставить
sh /opt/susanin/tools/susanin.sh uninstall --purge  # удалить /opt/susanin полностью


 

  • Thanks 1
  • Upvote 1
Posted

Здравствуйте. Планируется ли поддержка нескольких списков на разные интерфейсы? Для примера:

1) Авто-список как сейчас
2) Geo-список с сайтами, которые блокируют доступ из РФ
3) Для тяжёлого трафика (CDN), чтобы не грузить основные туннели, особенно где присутствует шейпинг

Posted
В 21.09.2026 в 17:29, MaximUSNG сказал:

Здравствуйте. Планируется ли поддержка нескольких списков на разные интерфейсы?

День добрый!

Включено в план.

  • Upvote 1
Posted

Всем привет!

Бан сервера по IP от ТСПУ РКН, с последующим отказом работы "Другого подключения asc 2.0", подтолкнул сесть за код.
На обкатку предлагаю версию Susanin.Keenetic 0.4.0-dev1 (Develop).

Всем миром собираем замечания/предложения и потом в Release.

Главное в сборке :

1. Веб-панель (по умолчанию выключена)

Включение:  в /opt/susanin/etc/susanin.conf:
web_enable=1
web_listen=192.168.1.1     # LAN-адрес вашего роутера
web_port=8087
web_token=ПРИДУМАЙТЕ_ПАРОЛЬ

Запуск:

/opt/etc/init.d/S95susanin-web start

web_token — пароль, который вы придумываете сами. Если оставить пусто, вход без пароля (доступ только из вашей сети).
Проверка в браузере: http://192.168.1.1:8087/?token=ПАРОЛЬ

Это НЕ  полноценное решение - это обкатка демона, поэтому по умолчанию выключена.
Далее bootstrap и функционал.

2. qWDTT_Server_Keenetic


Это совместимость, а не интеграция: клиентами qWDTT Susanin.Keenetic не занимается.

  • серверные туннели qWDTT (wdtt0/wdttraw0) не должны попадать в lan_interfaces/lan_subnets/egress_interface — они в discover_exclude;
  • подсеть Susanin.Keenetic (egress_address) не должна пересекаться с сетями qWDTT (10.66.66.0/24, 10.70.66.0/16).

Пример:

# --- Сосуществование с qWDTT_Server_Keenetic ---
# Не брать серверные туннели qWDTT как LAN/egress (это дефолт):
discover_exclude=wdtt0,wdttraw0,tun0,tap0

# Наши LAN — только домашние мосты Keenetic (без wdtt*):
lan_interfaces=br0
lan_subnets=192.168.1.0/24

# Наш egress — VPN-интерфейс (nwg*), НЕ wdtt*:
egress_interface=nwg0
egress_address=10.8.1.1         # подсеть Susanin — вне 10.66.66.0/24 и 10.70.66.0/16

Проверка:

sh /opt/susanin/tools/diagnose.sh | sed -n '/qWDTT/,/^$/p'
# ожидаем "qWDTT: обнаружен" и без предупреждений про wdtt* в egress/lan


3. Профили маршрутизации

Профиль — это список (домены / IP / CIDR), который идёт в свой туннель.
Профилей до 4, включаются ключами profile1_* … profile4_*; профиль работает, только если задан profileN_name. Если профилей нет — ничего не меняется.

В /opt/susanin/etc/susanin.conf:

profile1_name=cdn
profile1_egress=nwg1
profile1_list=/opt/susanin/etc/profiles/cdn.txt
profile2_name=social
profile2_egress=nwg2
profile2_list=/opt/susanin/etc/profiles/social.txt

Список — файл /opt/susanin/etc/profiles/<имя>.txt: по строке домен, IP или CIDR, # — комментарий. profileN_table / profileN_mark можно не задавать.

Проверка

sh /opt/susanin/tools/profiles.sh up
sh /opt/susanin/tools/profiles.sh status

Адрес обрабатывается первым совпавшим профилем.

4. XRay (VLESS/REALITY)

  • XRay подключается как egress: Susanin.Keenetic помечает нужные соединения, TCP уходит в Xray через REDIRECT, UDP — через релей в демоне Susanin.Keenetic. TUN не нужен.
  • Тесты показали стабильную работу только на Xray 1.8.24

Настройка

Положить бинарь Xray:

cp xray/xray.mipsel /opt/sbin/xray && chmod +x /opt/sbin/xray   # mips/mipsel
# или: cp xray/xray.aarch64 /opt/sbin/xray && chmod +x /opt/sbin/xray


Положить конфиг клиента и подставить свои данные:

cp /opt/susanin/etc/xray-tproxy.json.example /opt/susanin/etc/xray-tproxy.json
# в файле заменить SERVER/UUID/SNI/PBK/SID


Включить боевой режим (после установки Susanin.Keenetic 0.4.0-dev1) :

sh /opt/susanin/tools/xray-egress.sh enable


Ключи (egress_type=tproxy, udp_relay=1 и др.) прописываются сами. Логи Xray — отдельным ключом xray_loglevel (по умолчанию warning): enable/run применяют его и перезапускают Xray. Не ставьте info — иначе Xray пишет строку на каждое соединение (from … accepted …) и грузит Flash носитель.

Проверка Безопасно проверить один адрес (в туннель уйдёт только он):

sh /opt/susanin/tools/xray-egress.sh run 1.1.1.1 both


С компьютера в вашей сети:

# Windows:

nslookup ya.ru 1.1.1.1
nslookup -class=chaos -type=txt whoami.cloudflare. 1.1.1.1   # должен быть IP вашего VPN сервера


# Linux/macOS:

curl -s https://1.1.1.1/cdn-cgi/trace | grep '^ip='          # должен быть IP вашего VPN сервера


На роутере:

sh /opt/susanin/tools/xray-egress.sh status
# ожидаем: redirect: port=12345 rules=2 ; udp-relay: port=1081 rules=2

 

sh /opt/susanin/tools/xray-egress.sh default      # вернуть всё в DIRECT


Выключить боевой режим:

sh /opt/susanin/tools/xray-egress.sh disable.

Важно: UDP проверяйте с компьютера, а не с роутера — трафик самого роутера в этот механизм не попадает.

Если Xray не запущен, Susanin.Keenetic сам не поднимает tproxy-правила и пускает трафик напрямую (fail-open) — в status это видно как (Xray NOT LISTENING).
Поднять Xray:

/opt/etc/init.d/S93xray-tproxy start


Если что-то не так

sh /opt/susanin/tools/susanin.sh status
sh /opt/susanin/tools/diagnose.sh
sh /opt/susanin/tools/report.sh        # отчёт: /opt/susanin/var/report.txt

Логи и информацию просьба оставлять на форуме или в Телеге

Установка c XRay клиентом

mkdir -p /opt/tmp/sus-dist && cd /opt/tmp/sus-dist
wget -O susanin-dev.tar.gz \
  https://github.com/R17a/Susanin.Keenetic/raw/main/develop/susanin-keenetic-0.4.0-dev.tar.gz
tar -xzf susanin-dev.tar.gz
cd susanin-keenetic-0.4.0-dev
sh install.sh --yes

Если установлен и настроен XRay (VLESS/REALITY)

sh /opt/susanin/tools/xray-egress.sh enable
sh /opt/susanin/tools/susanin.sh status

image.thumb.png.9acec38588fb3f60c8eb30d4fb069332.png

  • Upvote 1
Posted (edited)
В 24.09.2026 в 23:26, R17a сказал:

На обкатку предлагаю версию Susanin.Keenetic 0.4.0-dev1 (Develop).

Обновление Susanin.Keenetic 0.4.0-dev2

  • [FIX] Меньше обращений к флешке. Логи Xray почти не пишутся (access-лог выключен), для бэкапов правил введён разумный лимит — носитель работает спокойнее.
  • [FIX] Само-восстановление перехвата. Если после перезагрузки или обновления прошивки KeeneticOS сбросит правила перенаправления в Xray, Susanin.Keenetic сам это замечает и возвращает правила за ~15 секунд.
  • [FIX] Соединения идут строго по заданному правилу. Если домен включён в список «всегда через VPN», но соединение успело открыться напрямую (например, до применения правила/адреса), Susanin.Keenetic мягко закрывает этот устаревший прямой поток — и следующее соединение к домену идёт уже через VPN, как задано.
  • [FIX] Устойчивость к занятым таблицам iptables. «Замок» iptables — это встроенный механизм «по одному»: менять правила может только один процесс за раз. Если таблицы в этот момент правит, например, сама KeeneticOS, Susanin.Keenetic дожидается своей очереди и не выдаёт ошибку.
  • [FIX] Корректное сосуществование. Susanin.Keenetic учитывает только свои метки и не мешает меткам других сервисов — схемы «как с OpenConnect» работают и для qWDTT/WireGuard. (для этого достаточно указать нужные интерфейсы и подсети в lan_interfaces/lan_subnets.)
  • [FIX] rescan теперь полноценный. Он пересканирует сеть, сам подбирает актуальный VPN-интерфейс и его адрес (например, заменит устаревшее имя интерфейса на рабочий nwg…).
  • [FIX] enable сообщает о готовности по факту. Сначала поднимает Xray, дожидается готовности и лишь затем пишет «включено».
  • Ускорение VPN для списка vpn_always
  • [NEW] Параллельный разбор списка. До 12 доменов резолвятся одновременно — самый первый проход заметно быстрее.
  • [NEW] VPN для доменов из списка работает сразу после перезагрузки. Адреса сохраняются и мгновенно восстанавливаются — ждать не нужно.
  • [NEW] Быстрее и «чище» разбор списка: меньше таймаут на DNS, «пустые» домены не тормозят процесс и не перепроверяются заново при каждом старте.
  • [NEW] enable дожидается прогрева списка и подсказывает, если он ещё дополняется.

     
    Установка без клиента XRay.

    Обновиться с уже установленной версии:

    opkg update && opkg install ca-certificates ipset iptables conntrack wget-ssl
    wget -qO- https://raw.githubusercontent.com/R17a/Susanin.Keenetic/develop/bootstrap.sh | sh -s -- --yes

     

    Первая установка (Entware уже стоит) — ставим полный набор зависимостей:

    opkg update && opkg install ca-certificates ipset iptables conntrack wget-ssl
    wget -qO- https://raw.githubusercontent.com/R17a/Susanin.Keenetic/develop/bootstrap.sh | sh -s -- --yes

     

    Нужен режим VLESS/REALITY — добавьте --with-xray (Xray качается отдельно, в архив не входит):

    opkg update && opkg install ca-certificates ipset iptables conntrack wget-ssl
    wget -qO- https://raw.githubusercontent.com/R17a/Susanin.Keenetic/develop/bootstrap.sh | sh -s -- --yes --with-xray

     

Edited by R17a
  • Upvote 1
Posted (edited)
В 25.09.2026 в 16:22, R17a сказал:

Обновление Susanin.Keenetic 0.4.0-dev2

Обновление Susanin.Keenetic 0.4.0-dev3

  • [FIX] Очередная корректировка "Пересканирование сети". Внутренний вызов ломался, поэтому после смены или удаления VPN сеть не пересканировалась и продолжал использоваться старый, уже несуществующий интерфейс. Теперь Susanin.Keenetic сам находит актуальный VPN-интерфейс и его адрес — править настройки вручную не нужно (src/discover.c переписан без popen()).
  • [FIX] Предупреждение, если у выученных адресов отключён срок хранения. Susanin.Keenetic запоминает адреса, которым нужен VPN, на ограниченное время (по умолчанию — 6 часов), а затем забывает их. Если поставить ok_ttl=0, адреса не забываются никогда: список растёт, и в VPN начинает уходить всё больше лишнего. Теперь при таком значении в логе появляется явное предупреждение.
  • [FIX] Установка и обновление сами добавляют новые параметры. install.sh и update.sh дописывают в существующий susanin.conf недостающие ключи (существующие значения не перезаписываются), а список сетей CDN (cdn_ranges.txt) ставится, если его ещё нет. Ручной merge не нужен.
  • [NEW] Универсальное лечение сайтов за Cloudflare и другими CDN — без ручных списков. Раньше «заблокированные» сайты за CDN (у которых много быстро меняющихся адресов) приходилось заносить в списки вручную, и всё равно часть соединений «проскакивала» напрямую и зависала. Теперь Susanin.Keenetic сам знает диапазоны популярных CDN, автоматически обновляет их раз в сутки и, поняв, что адрес из такого диапазона нужно вести через VPN, запоминает не один адрес, а всю ближайшую подсеть — на час. Следующие адреса той же CDN сразу идут через VPN, и зависаний становится меньше. Настройки: cdn_ranges_file, cdn_ranges_url, cdn_ranges_interval, cdn_prefix_learn, cdn_prefix_ttl, cdn_prefix_max.
  • [NEW] Ловим не только полный обрыв, но и «медленный интернет». Раньше срабатывало, только если данные почти полностью вставали. Теперь, если ответ идёт еле-еле (типичное замедление провайдером) и адрес относится к CDN, такой поток тоже отправляется на проверку через VPN.
  • [NEW] Меньше ложных переводов в VPN. Ужесточены пороги, по которым адрес считается «заблокированным»: теперь нужен заметный объём обмена, а не пара пакетов. Пороги настраиваются параметрами: learn_min_op — минимум пакетов к адресу, learn_min_bytes — минимум байт обмена, confirm_min_bytes — минимум ответных байт для подтверждения, что VPN помог, а learn_strict=1 делает пороги ещё строже (вдвое).
  • [NEW] Управление IPv6. Susanin.Keenetic работает только по IPv4, поэтому IPv6-трафик уходил мимо него. По умолчанию (ipv6_block=1) IPv6 для домашних устройств закрывается, и они переходят на IPv4, снова попадая под управление Susanin.Keenetic. ipv6_block=0 — не трогать IPv6.
  • [NEW] Зависания YouTube из-за QUIC устранены. Приложения сначала пробуют QUIC (UDP 443), а через UDP-релей он ненадёжен: поток «висит» без ответов, и только потом приложение переходит на TCP (это и есть пауза). По умолчанию (quic_block=1) QUIC из LAN запрещается, и приложения сразу идут по TCP — через туннель стабильно. quic_block=0 — не трогать QUIC.
  • [NEW] Видно «само-восстановление» перехвата. Когда роутер после обновления или перезагрузки сбрасывает правила перенаправления, Susanin.Keenetic возвращает их сам. Теперь это видно в статусе: когда и почему правила возвращались.
  • [NEW] Встроенная диагностика для IPTV и сайтов «то грузится, то нет». В команде диагностики появился раздел, который проверяет наличие IPv6, показывает, когда и почему возвращались правила, и подсказывает, что смотреть при зависаниях (какой адрес резолвит плеер и идёт ли поток через  VPN):
sh /opt/susanin/tools/diagnose.sh
 
  • [NEW] Предупреждение о подмене DNS. Если провайдер подменяет адреса (домены «резолвятся» в 127.0.0.1), диагностика замечает это и печатает заметное «DNS WARNING»: пока адрес подменён, завернуть его в VPN нельзя; лечится переключением DNS-over-TLS (порт 853 часто глушат) на DoH или обычный DNS. Проверяется той же командой — в разделе «Списки» появится строка «ПОДМЕНА DNS …» и ниже сам «DNS WARNING». 

Новые параметры конфигурации (файл /opt/susanin/etc/susanin.conf)

  • learn_min_op — по умолчанию 10 — минимум пакетов к адресу, чтобы считать его «заблокированным».
  • learn_min_bytes — по умолчанию 2000 — минимум байт обмена до обучения.
  • confirm_min_bytes — по умолчанию 512 — минимум ответных байт для подтверждения, что VPN помог.
  • learn_strict — по умолчанию 0 — 1 делает пороги обучения ещё строже (вдвое).
  • cdn_ranges_file — по умолчанию /opt/susanin/etc/cdn_ranges.txt — файл с сетями CDN.
  • cdn_ranges_url — по умолчанию https://www.cloudflare.com/ips-v4 — откуда автоматически обновлять список CDN.
  • cdn_ranges_interval — по умолчанию 86400 — период обновления, сек (0 — не обновлять).
  • cdn_prefix_learn — по умолчанию 1 — включать агрегацию по подсети CDN.
  • cdn_prefix_ttl — по умолчанию 3600 — на сколько секунд запоминать подсеть CDN.
  • cdn_prefix_max — по умолчанию 24 — не агрегировать шире, чем /24 (ограничивает «радиус»).
  • ipv6_block — по умолчанию 1 — 1 закрыть IPv6 для домашних устройств, 0 — не трогать.

 
Установка без клиента XRay.

Обновиться с уже установленной версии:

opkg update && opkg install ca-certificates ipset iptables conntrack wget-ssl
wget -qO- https://raw.githubusercontent.com/R17a/Susanin.Keenetic/develop/bootstrap.sh | sh -s -- --yes

 

Первая установка (Entware уже стоит) — ставим полный набор зависимостей:

opkg update && opkg install ca-certificates ipset iptables conntrack wget-ssl
wget -qO- https://raw.githubusercontent.com/R17a/Susanin.Keenetic/develop/bootstrap.sh | sh -s -- --yes

 

Нужен режим VLESS/REALITY — добавьте --with-xray (Xray качается отдельно, в архив не входит):

opkg update && opkg install ca-certificates ipset iptables conntrack wget-ssl
wget -qO- https://raw.githubusercontent.com/R17a/Susanin.Keenetic/develop/bootstrap.sh | sh -s -- --yes --with-xray

 

Edited by R17a
  • Thanks 1
  • Upvote 1
Posted (edited)
В 26.09.2026 в 17:05, R17a сказал:

Обновление Susanin.Keenetic 0.4.0-dev3

Обновление Susanin.Keenetic 0.4.0-dev4

image.thumb.png.2b6330d2f2a0b092e7f05435fdb019da.png

  • [FIX] Restart больше не отваливает веб-панель. Web — отдельный процесс; раньше при остановке демона били по всем susanin-agent сразу, поэтому /api/restart убивал процесс, обслуживающий сам запрос, и панель не возвращалась. Теперь демон и web разведены; добавлены susanin.sh web {start|stop|restart|status}, строка web: в status; start/restart поднимают web при web_enable=1.
  • [FIX] Пины vpn_always больше не теряются. На восстановлении туннеля resync_sets() чистит ipset'ы — теперь списки помечаются «грязными» и пины возвращаются; желаемые адреса/сети передобавляются каждый проход (ipset -exist), так что внешняя потеря пина само-исправляется. Это лечит случаи «сайт из списка ходил через VPN, а после переключения — напрямую».
  • [FIX] Автообучение больше не заворачивает российские сервисы. Яндекс (в т.ч. uniproxy.alice.yandex.net, 213.180.193.76): long-poll/keepalive выглядел как «клиент шлёт — сервер молчит» → SOFT LATE-STALL → CONFIRMED → VPN. В список «всегда напрямую» добавлены Яндекс и VK/OK/Mail.ru (домены и сети).
  • [FIX] Уровень логов Xray (xray_loglevel) — полноценный ключ конфига: больше не теряется при сохранении настроек и правится из панели (раньше в панели показывалось «нет в файле»).
  • [FIX] rescan стал безопаснее: обновляет только сетевые параметры (egress_*, lan_*) и по умолчанию не затирает вручную заданный egress_interface (--force — переопределить), с отчётом об изменениях.
  • [FIX] Установка/обновление дописывают больше недостающих ключей (fast_syn_min_op, ok_max_entries, ok_evict_misses, promo_per_min, soft_state_interval, learn_exclude_ports, vpn_always_*, vpn_never_*); дефолты новых ключей — уже числами без букв.
  • [NEW] Веб-панель: редактор конфигурации и статус. Базовая разработка, будет доработка юзабилити. Раздел «Конфигурация агента» — параметры сгруппированы по темам, значения читаются и сохраняются через агента (GET/POST /api/config). Списки vpn_always/vpn_never правятся перетаскиванием между колонками; появились верхняя панель (Reload/Rescan/Restart, индикатор связи, версия) и раздел «Статус» (наборы ipset, Reset адреса/домена).
  • [NEW] Единый и понятный формат настроек времени. Раньше длительности писались по-разному (1s, 5m, 3h). Теперь все временные параметры задаются просто числом, а единица (секунды/минуты/часы) указана в описании к каждому параметру. Генерируемый susanin.conf печатает описание к каждому ключу — файл стал самодокументируемым. Старые записи с буквами (5m, 3h) по-прежнему читаются, править руками ничего не нужно.
  • [NEW] Авто-детект блокировки по SNI (ТСПУ/DPI). Новый сигнал FAST/DPI-RST — «TCP-рукопожатие прошло, ClientHello отправлен, ответа нет, соединение сброшено». Такие блокировки старые проверки не ловили (нужен rp==0, а SYN-ACK уже приходил) — теперь адрес автоматически уводится в VPN и проверяется туннелем.

 

Установка без клиента XRay.

Обновиться с уже установленной версии:

opkg update && opkg install ca-certificates ipset iptables conntrack wget-ssl
wget -qO- https://raw.githubusercontent.com/R17a/Susanin.Keenetic/develop/bootstrap.sh | sh -s -- --yes

 

Первая установка (Entware уже стоит) — ставим полный набор зависимостей:

opkg update && opkg install ca-certificates ipset iptables conntrack wget-ssl
wget -qO- https://raw.githubusercontent.com/R17a/Susanin.Keenetic/develop/bootstrap.sh | sh -s -- --yes

 

Нужен режим VLESS/REALITY — добавьте --with-xray (Xray качается отдельно, в архив не входит):

opkg update && opkg install ca-certificates ipset iptables conntrack wget-ssl
wget -qO- https://raw.githubusercontent.com/R17a/Susanin.Keenetic/develop/bootstrap.sh | sh -s -- --yes --with-xray

 

Edited by R17a

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...

Important Information

This site uses cookies. By clicking "I accept" or continuing to browse the site, you authorize their use in accordance with the Privacy Policy.