Несколько практических замечаний по поводу мульти-стратегий.
Если используются скрипты zapret, то в опции NFQWS сначала пишите специальные стратегии для особых доменов. После них пишите --new и дальше то, что было там раньше.
Все свои “фишки” типа стандартных листов / автолиста скрипты zapret добавляют в конец - к последнему профилю десинхронизации.
НЕСОВМЕСТИМОЕ ИЗМЕНЕНИЕ.
В новой концепции профилей методы нулевой фазы десинхронизации несовместимы с хост-листами и больше не применяются !
Ранее они применялись , игнорируя хостлист.
Если у вас были стратегии с syndata или wssize и включен режим hostlist, то syndata и wssize не будут применены. Остальные методы 1 и 2 фазы будут применены как обычно.
Если включен режим autohostlist, то syndata и wssize будут применяться, поскольку профиль с autohostlist приоритетен.
Пример :
NFQWS_OPT_DESYNC="--hostlist=/opt/zapret_lists/list-youtube.txt --dpi-desync=split2 --new --dpi-desync=fake,split --dpi-desync-ttl=0 --dpi-desync-fooling=datanoack" NFQWS_OPT_DESYNC_HTTPS6="--hostlist=/opt/zapret_lists/list-youtube.txt --dpi-desync=fake,split2 --dpi-desync-ttl=5 --dpi-desync-fooling=datanoack --dpi-desync-fake-tls=/opt/zapret/files/fake/tls_clienthello_www_google_com.bin --new --dpi-desync=fake,split2 --dpi-desync-ttl=5 --dpi-desync-fooling=datanoack"
Вот так изменилось содержимое preset_russia.cmd для winws :
start "zapret: http,https,quic" /min "%~dp0winws.exe" --wf-tcp=80,443 --wf-udp=443 --filter-udp=443 --dpi-desync=fake --dpi-desync-repeats=11 --new --filter-tcp=80 --dpi-desync=fake,split2 --dpi-desync-autottl=2 --dpi-desync-fooling=md5sig --new --filter-tcp=443 --hostlist="%~dp0list-youtube.txt" --dpi-desync=fake,split2 --dpi-desync-autottl=2 --dpi-desync-fooling=md5sig --dpi-desync-fake-tls="%~dp0tls_clienthello_www_google_com.bin" --new --dpi-desync=fake,disorder2 --dpi-desync-autottl=2 --dpi-desync-fooling=md5sig
windivert filter : это то, что захватывает ядро и передает процессу winws. Аналог ip/nf tables.
1 профиль : udp 443 - для quic
2 профиль : tcp port 80 - для http
3 профиль : tcp port 443 с листом list-youtube.txt . https для ютуба
4 профиль : все остальные https
Теперь продумайте логику как это работает.
Мы обрабатываем только порты 80 и 443 для tcp и порт 443 для udp.
Иного к нам не спустит windivert.
Если у нас порт udp 443, то применять fake.
Тут жесткая фиксация, udp на другой профиль попасть не может.
Если tcp port 80, то тут тоже все однозначно. Другой профиль невозможен
Если tcp port 443, то начало соединения на нулевой фазе идет по профилю 4.
Но т.к. нет методов нулевой фазы (wssize, syndata и тому подобное), то никаких действий не будет.
Как только получаем хостнейм из SNI, идет проверка заново по всем профилям.
1,2 профили отбрасываются , поскольку не удовлетворяют жесткому фильтру.
На 3 профиле идет проверка hostname по листу list-youtube.txt
Если хост в этом листе, выбирается профиль 3. Здесь происходит смена профиля на лету.
Иначе профиль остается как был - 4.
Посмотрим на preset_russia_autohostlist.cmd
start "zapret: http,https,quic" /min "%~dp0winws.exe" --wf-tcp=80,443 --wf-udp=443 --filter-udp=443 --dpi-desync=fake --dpi-desync-repeats=11 --new --filter-tcp=80 --dpi-desync=fake,split2 --dpi-desync-autottl=2 --dpi-desync-fooling=md5sig --hostlist-auto="%~dp0autohostlist.txt" --new --filter-tcp=443 --hostlist="%~dp0list-youtube.txt" --dpi-desync=fake,split2 --dpi-desync-autottl=2 --dpi-desync-fooling=md5sig --dpi-desync-fake-tls="%~dp0tls_clienthello_www_google_com.bin" --new --dpi-desync=fake,disorder2 --dpi-desync-autottl=2 --dpi-desync-fooling=md5sig --hostlist-auto="%~dp0autohostlist.txt"
Разница только в наличии параметра --hostlist-auto. Причем он подтянут сразу к 2 профилям : 2 и 4.
Можно делать разные автолисты для жестких профилей, но можно использовать и 1 файл.
Почему я написал 2 раза автолист ? Потому что сперва идет проверка жесткого фильтра. Если у нас порт 80, до профиля 4 мы не доберемся, и автолист не будет задействован.
Автолист всегда надо писать на последнем профиле, к которому может дойти проверка на жестком фильтре. Если таких путей несколько, и вы хотите автолист на всех, то и писать надо во все места.
Но если бы вы написали автолист на профиле 3, это была бы большая глупость.
До профиля 4 дело бы вообще не дошло, и все бы обслуживалось по профилю 3.
Теперь подумайте куда надо было бы написать wssize и syndata для https, если бы они были в стратегии. Правильный ответ - в профиль 4. Даже для ютуба, который идет по профилю 3. И они будут применятся ко всем сайтам, потому что не фильтруются по хостлисту.
А что будет со старыми конфигами ? Ничего не будет. Они так же будут работать по единственному профилю. За исключением упомянутого выше несовместимого изменения. Если в стратегии были syndata или wssize, и был задан режим hostlist, стратегия полностью или частично перестанет работать. Например, может пропасть ютубе на телике, но остаться на компе (тк TLS 1.2 перестал обходиться). В последнем случае меняйте стратегию или отказывайтесь от hostlist. Чтобы работало как раньше, надо было бы дописать еще один профиль c wssize/syndata, но уже после дополнительных параметров с листами, которые сформируют скрипты zapret. Пока это не реализовано в основном функционале, хотя может быть сделано через custom script.
Почему нельзя было бы сделать как раньше сразу ? Представьте такой вариант
--hostlist a --wssize 1:6 --new --hostlist b --wssize 2:5
хостнейм мы не знаем. что выбирать ?