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

fake-tls-mod не работает с fakedsplit. он работает только для fake-tls

Спасибо, я так и думал, но работе не мешает, в принципе. А жаль, конечно :frowning:

Не мешает, но нубы начинают копировать стратегии, не понимая их суть, и испорченный телефон доводит порой до чудовищных монстров

fakedsplit pattern размазывается кусками вокруг сплитнутых частей согласно их размерам.
padencap призван скрыть последующие данные в tls padding extension.
Но там все данные перемешаны фейковые и нет. В таком виде смысла эта техника не имеет.
Теоретически могло иметь бы смысл слать полную копию оригинала с измененным SNI. Естественно, без изменения длины хоста, тк размер должен соответствовать оригиналу. В таком случае единственный вариант для них был бы искать фейки по фулингам (чем они, похоже, и занялись) или просто детектить аномалию и блочить за ее наличие

@bolvan А можно ли в 70.6 версии использовать tls-mod с указанием sni и не использовать fake-tls?

да

по мима прочего, нужно ещё поиграться с параметром --dpi-desync-repeats

Не страшный вариант, у меня отлично автоттл работает.
А нельзя сделать чтобы сначала применять tls-mod, а потом его размазывать по сплитам?

Они за TTL тоже взялись, TTL по сути - тоже фулинг.

В том виде, что для отдельных фейков, это не имеет особого смысла.
Отличие паттерна от фиксированного блока в том, что паттерн размазывается на требуемую длину.
Паттерн похож на повторяющийся рисунок , которым заполняют область любого размера.
Если паттерн 0x010203, а длина нужна 8, то будет 0x0102030102030102
Если паттерн 0x0102030405060708, а длина нужна 4, то паттерн будет обрезан : 0x01020304
Наша задача - сформировать ровно столько данных, сколько входит в оригинальный блок из одного или нескольких (kyber) пакетов.
Можно взять какой-то базовый TLS hello, расширить его до требуемого размера, если он меньше. Расширять надо тоже корректно, чтобы подкорректировать все длины в TLS.
И отдельный вопрос что делать, когда длина базового TLS hello больше оригинала. Обычно такого не бывает, если брать за основу фейки не слишком длинные. Но если такое случится, то итоговый вариант будет порезан.
Либо взять оригинал и шаманить с ним. Но здесь не получится менять длину SNI. Можно только какой-то рандом туда засовывать. rndsni
Вот это мне видится более перспективным вариантом.
Что-то типа --dpi-desync-fakedsplit-clone

Ну почему же? У меня все самодельные фейки меньше оригинала, потому что я их дергаю не из браузера. Ну или я вас неправильно понял или совсем не понял (

когда были блокировки в сибири в самом начале, видел коммент о том, что помогало изменение стандартного ttl для винды
netsh int ipv4 set glob defaultcurhoplimit
но что это делает и можно ли этому верить хз

Ошибся, конечно “если базовый фейк БОЛЬШЕ оригинала”, он будет порезан

Тесты некоторых товарищей подтверждают этот вывод =)

Помогите плиз интегрировать мою стратегию из виндовой версии, которую я запускаю руками в конфиг для OpenWrt (я знаю, что нужно добавить txt файлы в /opt/zapret/ipset/).
Стратегия

{
            $YTDB_YTPot = "--dpi-desync=multisplit --dpi-desync-split-seqovl=1 --dpi-desync-split-pos=midsld+1"
            $YTDB_WinSZ = "--hostlist=""$LISTS\youtubeGV.txt"" --dpi-desync=multisplit --dpi-desync-split-seqovl=1 --dpi-desync-split-pos=midsld-1"
            $YTDB_DIS1 = "--ipset=""$LISTS\ipset-discord.txt"" --dpi-desync=syndata --dpi-desync-fake-syndata=""$BIN\tls_clienthello_3.bin"" --dpi-desync-autottl"
            $YTDB_DIS2 = "--hostlist=""$LISTS\discord.txt"" --dpi-desync=fake,udplen --dpi-desync-udplen-increment=5 --dpi-desync-udplen-pattern=0xDEADBEEF --dpi-desync-fake-quic=""$BIN\quic_2.bin"" --dpi-desync-repeats=7 --dpi-desync-cutoff=n2"
            $YTDB_DIS3 = "--dpi-desync=fake --dpi-desync-any-protocol --dpi-desync-cutoff=n3"
            
            Invoke-ZapretStrategy -StrategyName "Ultimate Config v2" -Arguments "$YTDB_prog_log --wf-tcp=80,443 --wf-udp=443,50000-50090 --filter-tcp=443 --ipset=""$LISTS\russia-youtube-rtmps.txt"" --dpi-desync=syndata --dpi-desync-fake-syndata=""$BIN\tls_clienthello_4.bin"" --dpi-desync-autottl --new --filter-udp=443 --hostlist=""$LISTS\youtubeQ.txt"" --dpi-desync=fake,udplen --dpi-desync-udplen-increment=2 --dpi-desync-fake-quic=""$BIN\quic_3.bin"" --dpi-desync-cutoff=n3 --dpi-desync-repeats=2 --new --filter-tcp=443 --hostlist=""$LISTS\youtube.txt"" $YTDB_YTPot --new --filter-tcp=80 --hostlist=""$LISTS\other.txt"" --dpi-desync=fake,multisplit --dpi-desync-fooling=md5sig --dpi-desync-autottl --new --filter-tcp=443 --hostlist=""$LISTS\other.txt"" --dpi-desync=fake,multisplit --dpi-desync-split-seqovl=1 --dpi-desync-split-pos=midsld-1 --dpi-desync-fooling=md5sig,badseq --dpi-desync-fake-tls=""$BIN\tls_clienthello_4.bin"" --dpi-desync-autottl --new --filter-tcp=443 $YTDB_DIS1 --new --filter-udp=443 $YTDB_DIS2 --new --filter-udp=50000-50090 $YTDB_DIS3 --new --filter-tcp=443 $YTDB_WinSZ"
        }

Конфиг, который создался при установке запрета на роутер

# this file is included from init scripts
# change values here

# can help in case /tmp has not enough space
#TMPDIR=/opt/zapret/tmp

# redefine user for zapret daemons. required on Keenetic
#WS_USER=nobody

# override firewall type : iptables,nftables,ipfw
FWTYPE=nftables
# nftables only : set this to 0 to use pre-nat mode. default is post-nat.
# pre-nat mode disables some bypass techniques for forwarded traffic but allows to see client IP addresses in debug log
#POSTNAT=0

# options for ipsets
# maximum number of elements in sets. also used for nft sets
SET_MAXELEM=522288
# too low hashsize can cause memory allocation errors on low RAM systems , even if RAM is enough
# too large hashsize will waste lots of RAM
IPSET_OPT="hashsize 262144 maxelem $SET_MAXELEM"
# dynamically generate additional ip. $1 = ipset/nfset/table name
#IPSET_HOOK="/etc/zapret.ipset.hook"

# options for ip2net. "-4" or "-6" auto added by ipset create script
IP2NET_OPT4="--prefix-length=22-30 --v4-threshold=3/4"
IP2NET_OPT6="--prefix-length=56-64 --v6-threshold=5"
# options for auto hostlist
AUTOHOSTLIST_RETRANS_THRESHOLD=3
AUTOHOSTLIST_FAIL_THRESHOLD=3
AUTOHOSTLIST_FAIL_TIME=60
# 1 = debug autohostlist positives to ipset/zapret-hosts-auto-debug.log
AUTOHOSTLIST_DEBUGLOG=0

# number of parallel threads for domain list resolves
MDIG_THREADS=30

# ipset/*.sh can compress large lists
GZIP_LISTS=1
# command to reload ip/host lists after update
# comment or leave empty for auto backend selection : ipset or ipfw if present
# on BSD systems with PF no auto reloading happens. you must provide your own command
# set to "-" to disable reload
#LISTS_RELOAD="pfctl -f /etc/pf.conf"

# mark bit used by nfqws to prevent loop
DESYNC_MARK=0x40000000
DESYNC_MARK_POSTNAT=0x20000000

TPWS_SOCKS_ENABLE=0
# tpws socks listens on this port on localhost and LAN interfaces
TPPORT_SOCKS=987
# use <HOSTLIST> and <HOSTLIST_NOAUTO> placeholders to engage standard hostlists and autohostlist in ipset dir
# hostlist markers are replaced to empty string if MODE_FILTER does not satisfy
# <HOSTLIST_NOAUTO> appends ipset/zapret-hosts-auto.txt as normal list
TPWS_SOCKS_OPT="
--filter-tcp=80 --methodeol <HOSTLIST> --new
--filter-tcp=443 --split-pos=1,midsld --disorder <HOSTLIST>
"

TPWS_ENABLE=1
TPWS_PORTS=80,443
# use <HOSTLIST> and <HOSTLIST_NOAUTO> placeholders to engage standard hostlists and autohostlist in ipset dir
# hostlist markers are replaced to empty string if MODE_FILTER does not satisfy
# <HOSTLIST_NOAUTO> appends ipset/zapret-hosts-auto.txt as normal list
TPWS_OPT="
--filter-tcp=80 --methodeol <HOSTLIST> --new
--filter-tcp=443 --split-pos=1,midsld --disorder <HOSTLIST>
"

NFQWS_ENABLE=0
# redirect outgoing traffic with connbytes limiter applied in both directions.
NFQWS_PORTS_TCP=80,443
NFQWS_PORTS_UDP=443
# PKT_OUT means connbytes dir original
# PKT_IN means connbytes dir reply
# this is --dpi-desync-cutoff=nX kernel mode implementation for linux. it saves a lot of CPU.
NFQWS_TCP_PKT_OUT=$((6+$AUTOHOSTLIST_RETRANS_THRESHOLD))
NFQWS_TCP_PKT_IN=3
NFQWS_UDP_PKT_OUT=$((6+$AUTOHOSTLIST_RETRANS_THRESHOLD))
NFQWS_UDP_PKT_IN=0
# redirect outgoing traffic without connbytes limiter and incoming with connbytes limiter
# normally it's needed only for stateless DPI that matches every packet in a single TCP session
# typical example are plain HTTP keep alives
# this mode can be very CPU consuming. enable with care !
#NFQWS_PORTS_TCP_KEEPALIVE=80
#NFQWS_PORTS_UDP_KEEPALIVE=
# use <HOSTLIST> and <HOSTLIST_NOAUTO> placeholders to engage standard hostlists and autohostlist in ipset dir
# hostlist markers are replaced to empty string if MODE_FILTER does not satisfy
# <HOSTLIST_NOAUTO> appends ipset/zapret-hosts-auto.txt as normal list
NFQWS_OPT="
--filter-tcp=80 --dpi-desync=fake,multisplit --dpi-desync-split-pos=method+2 --dpi-desync-fooling=md5sig <HOSTLIST> --new
--filter-tcp=443 --dpi-desync=fake,multidisorder --dpi-desync-split-pos=1,midsld --dpi-desync-fooling=badseq,md5sig <HOSTLIST> --new
--filter-udp=443 --dpi-desync=fake --dpi-desync-repeats=6 <HOSTLIST_NOAUTO>
"

# none,ipset,hostlist,autohostlist
MODE_FILTER=none

# donttouch,none,software,hardware
FLOWOFFLOAD=donttouch

# openwrt: specify networks to be treated as LAN. default is "lan"
#OPENWRT_LAN="lan lan2 lan3"
# openwrt: specify networks to be treated as WAN. default wans are interfaces with default route
#OPENWRT_WAN4="wan vpn"
#OPENWRT_WAN6="wan6 vpn6"

# for routers based on desktop linux and macos. has no effect in openwrt.
# CHOOSE LAN and optinally WAN/WAN6 NETWORK INTERFACES
# or leave them commented if its not router
# it's possible to specify multiple interfaces like this : IFACE_LAN="eth0 eth1 eth2"
# if IFACE_WAN6 is not defined it take the value of IFACE_WAN
#IFACE_LAN=eth0
#IFACE_WAN=eth1
#IFACE_WAN6="ipsec0 wireguard0 he_net"

# should start/stop command of init scripts apply firewall rules ?
# not applicable to openwrt with firewall3+iptables
INIT_APPLY_FW=1
# firewall apply hooks
#INIT_FW_PRE_UP_HOOK="/etc/firewall.zapret.hook.pre_up"
#INIT_FW_POST_UP_HOOK="/etc/firewall.zapret.hook.post_up"
#INIT_FW_PRE_DOWN_HOOK="/etc/firewall.zapret.hook.pre_down"
#INIT_FW_POST_DOWN_HOOK="/etc/firewall.zapret.hook.post_down"

# do not work with ipv4
#DISABLE_IPV4=1
# do not work with ipv6
DISABLE_IPV6=1

# select which init script will be used to get ip or host list
# possible values : get_user.sh get_antizapret.sh get_combined.sh get_reestr.sh get_hostlist.sh
# comment if not required
#GETLIST=

Для моего понимания это уже недоступные вещи :roll_eyes:

придётся научиться, иначе каждый раз когда будет малейшая проблема придётся ждать ответа на форуме, будет он или нет, вопрос.
NFQWS_ENABLE=1
TPWS_ENABLE=0
меняй
MODE_FILTER= посмотри какой тебе удобен будет
стратегии менять в разделе NFQWS_OPT="
–filter-tcp=**

по стратегия примеры и как должно писаться тут zapret/docs/quick_start.md at master · bol-van/zapret · GitHub

Спасибо за ответ, хоть чо-то поряснилось. Попробую, что-то сделать, хоть и не очень в себе уверен.
“MODE_FILTER= посмотри какой тебе удобен будет”
А что туда в теории хоть ставится? Мне удобно все что работает :no_mouth: Думал он тоже как-то вычилсяеться из той стратегии, что запускал на винде

Документацию открой и посмотри, все расписано же. Вы как вообще скрипты установки запускаете с закрытыми глазами что ли? Там же в каждом пункте выбор даётся и на режим фильтрации тоже или вы просто бездумно enter жали и все

Тут же не указано какие значения у этих $YTDB_*, поэтому непонятно как это должно выглядеть. Проще будет если посмотреть процесс(ы) winws.exe со всеми переданными аргументами комстроки.

@bolvan Можешь подсказать, вы где-то писали что md5sig гарантировано сломает соединение если сервер не linux, а windows. Хотя вот когда я использую md5sig некоторые сайты гарантировано ломаются с ошибкой err_ssl_protocol_error, я думал что это из-за того что они используют windows, но если дернуть курл то написано что эти сайты используют openresty. Так вот вопрос, почему md5sig их ломает, а вот другой фуллинг,например, badseq без проблем проходит, хотя сервер линуксовый а не win.Или это как раз таки тот сервер с которым md5sig может не работать как описано в доке?

Откуда мне знать, что выбрать то?
Встроенным инструментом я пытался еще полгода назад что-то подобрать, но уже тогда он ниче не мог предложить. Менял стратегии несколько раз, и всегда это было что-то с форума готовое.

Знать бы как это делать…
А то попалась классная стратегия (31 “Ultimate Config v2”) в популряной сборке запрета. Но ска, как ее перенести на роутер.