Zapret: обсуждение

split2 режет пакеты, но не отправляет фейки. split режет пакеты и отправляет фейки. но эти фейки - просто пустые пакеты. поэтому fake нужен для отправки конкретных фейков (можно указать пакет при помощи --dpi-desync-fake-tls), чтобы обойти проверку по sni в случае ютуба, например. так что эти режимы можно применять как вместе, так и отдельно - всё зависит от требуемой стратегии.

читаем про комбинирование, там указанj какой метод на какой позиции можно применять

я тоже не совсем понимаю зачем указывать нулевой ttl, ведь по умолчанию zapret не модифицирует ttl, по идее :thinking:
но в целом, касательно опции --dpi-desync-ttl, она применяется для того, чтобы фейковые пакеты не ушли дальше dpi. её значение надо подбирать исходя из того как устроена маршрутизация у твоего конкретного провайдера. также эту опцию можно комбинировать с --dpi-desync-fooling. или наоборот, использовать fooling без ttl (как раз вариант с ttl=0).
для ipv6 опция, кстати, другая --dpi-desync-ttl6

:grinning: :+1:
Спасибо вам за всё, в том числе за эти разъяснения и “фейковый фейк” для обхода SNI и за обновление с мультипрофилями.

Это совсем не очевидно. Ведь написано:

Параметры манипуляции могут сочетаться в любых комбинациях.

Я под любыми комбинациями понимаю и любой порядок тоже. Про эти фазы не расписано что они из себя представляют. Поэтому непонятно если split2 разрезает пакет на части, но не отправляет фейки, а fake отправляет фейки, то почему fake + split2 не равно split, который и разрезает пакеты и отправляет фейки? Логика работы мне не ясна. Вот это я и имел в виду, когда говорил, что мануал написан путанно.

Ааа, вот оно что! split - это разрезанный пакет и неконкретные фейки, а fake+split2 - это порезанный пакет и КОНКРЕТНЫЕ фейки! Яснее не стало.

@bolvan winws падает в такой конфигурации при попытке открыть сайт из последнего профиля:

.\winws_multi --wf-udp=443 --wf-tcp=443 --filter-udp=443 --hostlist=hosts_all.txt --hostlist=hosts_yt.txt --dpi-desync=fake --new --filter-tcp=443 --hostlist=hosts_yt.txt --dpi-desync=disorder2 --new --filter-tcp=443 --hostlist=hosts_all.txt --dpi-desync=disorder2 --dpi-desync-split-seqovl=1 --dpi-desync-split-tls=sni

Если в последнем профиле использовать --dpi-desync=fake,disorder2 --dpi-desync-fooling=md5sig, то работает.

Предыдущая версия без мультипрофилей с --dpi-desync=disorder2 --dpi-desync-split-seqovl=1 --dpi-desync-split-tls=sni работает без падений.

И каким образом он начнет писать лог прямо в директорию, а не в файл ?
Конечно, каннот

Только ради того, чтобы в любой момент подредактировать 1 циферку и не вспоминать как зовется опция.
Так же как и fooling=none

метод нулевой фазы - это то, что делается на этапе установления соединения, еще до запросов и известного hostname
метод первой фазы - это то, что делается до отправки значимой части запроса. такой, как tls clienthello или http request или wireguard handshake initiation и тд
метод второй фазы - это то, что делается непосредственно со значимой частью запроса. как издеваться над ней

fake : fake TLS, real TLS
fake, split2 : fake TLS, кусок 1 real TLS, кусок 2 real TLS
fake, split : fake TLS, нули в размере 1 куска real TLS, кусок 1 real TLS, нули в размере 2 куска real TLS, 2 кусок real TLS
split2 : кусок 1 real TLS, кусок 2 real TLS
split : нули в размере 1 куска real TLS, кусок 1 real TLS, нули в размере 2 куска real TLS, 2 кусок real TLS

сейчас бы я называл split = split4. но так исторически сложилось, а ломать уже настроенные конфиги не хочется

Итак, в продолжение вчерашней темы с zapret на роутере с OpenWRT ради Youtube:

  • –debug ничего не показал, ошибок в логе нет
  • проверки blockcheck выдают более-менее одинаковые результаты, всегда похожие на –dpi-desync=fake --dpi-desync-ttl=3 и –dpi-desync=split2 --dpi-desync-split-pos=5
  • при активном zapret с настройкой –dpi-desync=fake,split2 --dpi-desync-split-pos=2 --dpi-desync-ttl=3 проверка blockcheck всегда утверждает, что домены Ютуба доступны и не нуждаются в bypass
  • но Ютуб не работает (проверяю на компе и смартфоне)
  • при этом стандартный goodbyedpi.exe -9 --blacklist на компе и ByDPI на смартфоне с split 2 справляются легко

О чем это говорит?

Это говорит о том, что Ютуб у нас никто не блокировал, а только замедлял. Поэтому blockcheck успешно находит стратегии

Попробуйте оставить только --dpi-desync=split2 --dpi-desync-split-pos=1

попробуй так Подбор рабочего конфига для GGC ютуба через blockcheck - #20 by TesterTi

Компьютер и телефон подключены по WiFI к роутеру с zapret. Пробую вашу строку параметров.

На компе результат никакой (((

На смартфоне медленно открылась главная страница Ютуба (которая с поиском и без рекомендаций). Затем поиск даже выдал какие-то результаты, потом через время появились превью видео, но произвольно выбранное видео не открылось. Вернулся к результатам поиска, а вот обновить страничку уже не вышло - висит с серыми блоками вместо превью…(((
И всё это очень медленно…

Чего-то явно не хватает в параметрах, только вот чего?

Ок, спасибо, попробую!

Спасибо. fixed

Это значит ничего и не происходит. Он ничего не обрабатывает.

/opt/zapret/binaries/mips32r1-lsb/nfqws “–qnum=1 --debug=syslog --dpi-desync=split2 --dpi-desync-split-pos=2”

С чего взят номер очереди 1 ?

/etc/init.d/zapret stop
/etc/init.d/zapret start_fw

и номер очереди должен быть 200, если не заданы уточняющие параметры для HTTP,HTTPS
если уж запускаете в консоли, то можно и без syslog. с syslog он ничего в консоль не выведет.
или в файл --debug=@/tmp/log.txt

выяснить точнее что запускается скриптами zapret можно через
/etc/init.d/zapret start_daemons
/etc/init.d/zapret stop_daemons

Фильтра по хостлисту или ipset нет ?

Мультипрофили - это вещь хорошая, я вот твою программку попробовала, скомпилировала с коммита 85de6f. За пару минут стратегии для одного провайдера настроила, трёхфазный nfqws как часики швейцарские заработал. И крёстный ход на Ютюбе посмотреть можно, и как молодёжь кувыркается - тоже.
Работает прямо из коробки, без всяких мудрёных шелл-скриптов, благо были запасные очереди с флагом bypass для, так сказать, горячей замены. Молодец!

Но всё же, очередь - она и в Африке очередь. Даже если многопоточно обрабатывать, вход и выход-то у неё последовательные. Значит, малейшая задержка может сразу на всё повлиять, особенно если настройки слишком мудрёные придётся применять. Один пользователь программку не нагрузит, а вот если это шлюз?
Поэтому лучше очереди делить - хотя бы по адресам распределять, или numgen приспособить. А в идеале по хостам, чтобы у каждого фильтра был свой pid. А там уж хоть nice им ставь, хоть через cgroups политики настраивай, чтобы лайвстримы в реальном времени без задержек шли, а форумы, как этот, уж как получится.
Это я к тому говорю, что на будущее стоит об этом подумать, особенно если стратегии сложнее станут. И для масштабирования, где возможность есть, и для алгоритмов, чтобы сеть не сломалась, когда одна TCP сессия по разным процессам разлетится.

Если в linux *tables настроены правильно с ограничителем по connbytes, то вряд ли оно сильно нагрузит. Оно будет обрабатывать по 10-20 пакетов на каждое соединение, что вообще ни о чем по нагрузке на CPU.
Но если у вас получится сделать так, чтобы на каждое tcp соединение (connmark) пакеты будут приходить одному инстансу nfqws, то это тоже вариант.

Можно не использовать хостлист фильтры, а только ipset.
Загонять в ipset целые ASки проблемных ресурсов с прыгающими IP.
ASN google, ASN meta corp и тд
Остальное загонять через ресолв листа.
Тогда nfqws вообще не будет трогать ничего остального, и оно не сможет сломаться.

Апните репу, пересоберите проект, добавьте к правилам с fake следующий параметр

 --dpi-desync-fake-tls=/opt/zapret/files/fake/tls_clienthello_www_google_com.bin

и в теории это всё, что требуется, что обойти текущие блокировки (в смысле текущие проблемы с fake, т.к. как я понял в данный момент fake не работает только с GGC, остальные сайты с ним прекрасно открываются)

Ох, спасибо вам, уважаемые. И особенно респект автору за скрипт и техподдержку!

Номер очереди ставил и 200. Результат такой же. (увидел на гитхабе чьи-то дампы с –qnum=1 и –qnum=200 и делал как попугай :face_exhaling:

нет

Вот у меня тоже такие подозрения…

С --debug я не никогда не видел больше чем это после запуска/перезапуска, и при посещении сайтов там строки не добавляются:
initializing conntrack with timeouts tcp=60:300:60 udp=60
opening library handle
unbinding existing nf_queue handler for AF_INET (if any)
binding nfnetlink_queue as nf_queue handler for AF_INET
binding this socket to queue ‘200’
setting copy_packet mode
initializing raw sockets bind-fix4=0 bind-fix6=0
set_socket_buffers fd=5 rcvbuf=2048 sndbuf=32768
fd=5 SO_RCVBUF=4096
fd=5 SO_SNDBUF=65536
set_socket_buffers fd=6 rcvbuf=2048 sndbuf=32768
fd=6 SO_RCVBUF=4096
fd=6 SO_SNDBUF=65536
Running as UID=1 GID=1
set_socket_buffers fd=4 rcvbuf=65536 sndbuf=32768
fd=4 SO_RCVBUF=131072
fd=4 SO_SNDBUF=65536

Доктор, скажите - есть ли шансы?