diff --git a/binaries/aarch64/nfqws b/binaries/aarch64/nfqws index 1b15c87..52cce1a 100755 Binary files a/binaries/aarch64/nfqws and b/binaries/aarch64/nfqws differ diff --git a/binaries/arm/nfqws b/binaries/arm/nfqws index 791272a..7668e38 100755 Binary files a/binaries/arm/nfqws and b/binaries/arm/nfqws differ diff --git a/binaries/freebsd-x64/dvtws b/binaries/freebsd-x64/dvtws index 8664978..0db5d9a 100755 Binary files a/binaries/freebsd-x64/dvtws and b/binaries/freebsd-x64/dvtws differ diff --git a/binaries/mips32r1-lsb/nfqws b/binaries/mips32r1-lsb/nfqws index cec7075..39b09a7 100755 Binary files a/binaries/mips32r1-lsb/nfqws and b/binaries/mips32r1-lsb/nfqws differ diff --git a/binaries/mips32r1-msb/nfqws b/binaries/mips32r1-msb/nfqws index 2769fc1..4c5b95c 100755 Binary files a/binaries/mips32r1-msb/nfqws and b/binaries/mips32r1-msb/nfqws differ diff --git a/binaries/mips64r2-msb/nfqws b/binaries/mips64r2-msb/nfqws index 5a890fc..af7e936 100755 Binary files a/binaries/mips64r2-msb/nfqws and b/binaries/mips64r2-msb/nfqws differ diff --git a/binaries/ppc/nfqws b/binaries/ppc/nfqws index 8e26e8f..8886fa0 100755 Binary files a/binaries/ppc/nfqws and b/binaries/ppc/nfqws differ diff --git a/binaries/x86/nfqws b/binaries/x86/nfqws index 4bc19dd..682a057 100755 Binary files a/binaries/x86/nfqws and b/binaries/x86/nfqws differ diff --git a/binaries/x86_64/nfqws b/binaries/x86_64/nfqws index a4e4fea..020a683 100755 Binary files a/binaries/x86_64/nfqws and b/binaries/x86_64/nfqws differ diff --git a/blockcheck.sh b/blockcheck.sh index 2320469..bbb6440 100755 --- a/blockcheck.sh +++ b/blockcheck.sh @@ -477,7 +477,7 @@ curl_test_https_tls12() # $2 - domain name # do not use tls 1.3 to make sure server certificate is not encrypted - curl_with_dig $1 $2 -ISs -A "$USER_AGENT" --max-time $CURL_MAX_TIME $CURL_OPT --tlsv1.2 $TLSMAX12 "https://$2" -o /dev/null 2>&1 + curl_with_dig $1 $2 -ISs -A "$USER_AGENT" --max-time $CURL_MAX_TIME $CURL_OPT --tlsv1.2 $TLSMAX12 "https://$2" -o /dev/null 2>&1 } curl_test_https_tls13() { @@ -485,7 +485,7 @@ curl_test_https_tls13() # $2 - domain name # force TLS1.3 mode - curl_with_dig $1 $2 -ISs -A "$USER_AGENT" --max-time $CURL_MAX_TIME $CURL_OPT --tlsv1.3 $TLSMAX13 "https://$2" -o /dev/null 2>&1 + curl_with_dig $1 $2 -ISs -A "$USER_AGENT" --max-time $CURL_MAX_TIME $CURL_OPT --tlsv1.3 $TLSMAX13 "https://$2" -o /dev/null 2>&1 } curl_test_http3() @@ -493,8 +493,8 @@ curl_test_http3() # $1 - ip version : 4/6 # $2 - domain name - # force HTTP3 (QUIC) mode - curl_with_dig $1 $2 -ISs -A "$USER_AGENT" --max-time $CURL_MAX_TIME --http3-only $CURL_OPT "https://$2" -o /dev/null 2>&1 + # force TLS1.3 mode + curl_with_dig $1 $2 -ISs -A "$USER_AGENT" --max-time $CURL_MAX_TIME --http3-only $CURL_OPT "https://$2" -o /dev/null 2>&1 } ipt_scheme() @@ -857,6 +857,8 @@ pktws_check_domain_http_bypass() [ "$sec" = 1 ] || break done + pktws_curl_test_update $1 $3 --dpi-desync=syndata + # OpenBSD has checksum issues with fragmented packets [ "$UNAME" != "OpenBSD" ] && [ "$IPV" = 4 -o -n "$IP6_DEFRAG_DISABLE" ] && { for frag in 24 32 40 64 80 104; do diff --git a/docs/nftables_notes.txt b/docs/nftables_notes.txt index bc811f5..75fa845 100644 --- a/docs/nftables_notes.txt +++ b/docs/nftables_notes.txt @@ -39,7 +39,7 @@ Swap позволяет немного сгладить проблему, но Боль N3 -Система nftable построена на виртуальной машине. Правила, которые вы пишите, переводятся в псевдокод VM. +Система nftables построена на виртуальной машине. Правила, которые вы пишите, переводятся в псевдокод VM. Чтобы потом их показать , nft декомпилирует код и переводит в читаемый язык. Это довольно сложно, и регулярно случаются баги, связанные с неверным отображением. diff --git a/docs/readme.eng.md b/docs/readme.eng.md index 5a27f18..0d62567 100644 --- a/docs/readme.eng.md +++ b/docs/readme.eng.md @@ -185,6 +185,7 @@ nfqws takes the following parameters: --dpi-desync-fake-http=|0xHEX ; file containing fake http request --dpi-desync-fake-tls=|0xHEX ; file containing fake TLS ClientHello (for https) --dpi-desync-fake-unknown=|0xHEX ; file containing unknown protocol fake payload + --dpi-desync-fake-syndata=|0xHEX ; file containing SYN data payload --dpi-desync-fake-quic=|0xHEX ; file containing fake QUIC Initial --dpi-desync-fake-wireguard=|0xHEX ; file containing fake wireguard handshake initiation --dpi-desync-fake-dht=|0xHEX ; file containing fake DHT (d1..e) @@ -371,6 +372,10 @@ then `/etc/init.d/firewall restart` Otherwise raw sending SYN,ACK frame will cause error stopping the further processing. If you realize you don't need the synack mode it's highly suggested to restore drop INVALID rule. +### SYNDATA mode + +Normally SYNs come without data payload. If it's present it's ignored by all major OS, but may not be ignored by DPI. + ### Virtual Machines Most of nfqws packet magic does not work from VMs powered by virtualbox and vmware when network is NATed. diff --git a/docs/readme.txt b/docs/readme.txt index 87cb97d..48ea4a3 100644 --- a/docs/readme.txt +++ b/docs/readme.txt @@ -236,7 +236,7 @@ nfqws --hostnospace ; убрать пробел после "Host:" и переместить его в конец значения "User-Agent:" для сохранения длины пакета --hostspell=HoST ; точное написание заголовка Host (можно "HOST" или "HoSt"). автоматом включает --hostcase --domcase ; домен после Host: сделать таким : TeSt.cOm - --dpi-desync=[,][,,][, ; бит fwmark для пометки десинхронизирующих пакетов, чтобы они повторно не падали в очередь. default = 0x40000000 --dpi-desync-ttl= ; установить ttl для десинхронизирующих пакетов --dpi-desync-ttl6= ; установить ipv6 hop limit для десинхронизирующих пакетов. если не указано, используется значение ttl @@ -253,6 +253,7 @@ nfqws --dpi-desync-fake-http=|0xHEX ; файл, содержащий фейковый http запрос для dpi-desync=fake, на замену стандартному www.iana.org --dpi-desync-fake-tls=|0xHEX ; файл, содержащий фейковый tls clienthello для dpi-desync=fake, на замену стандартному www.iana.org --dpi-desync-fake-unknown=|0xHEX ; файл, содержащий фейковый пейлоад неизвестного протокола для dpi-desync=fake, на замену стандартным нулям 256 байт + --dpi-desync-fake-syndata=|0xHEX ; файл, содержащий фейковый пейлоад пакета SYN для режима десинхронизации syndata --dpi-desync-fake-quic=|0xHEX ; файл, содержащий фейковый QUIC Initial --dpi-desync-fake-dht=|0xHEX ; файл, содержащий фейковый пейлоад DHT протокола для dpi-desync=fake, на замену стандартным нулям 64 байт --dpi-desync-fake-unknown-udp=|0xHEX ; файл, содержащий фейковый пейлоад неизвестного udp протокола для dpi-desync=fake, на замену стандартным нулям 64 байт @@ -429,7 +430,7 @@ mark нужен, чтобы сгенерированный поддельный КОМБИНИРОВАНИЕ МЕТОДОВ ДЕСИНХРОНИЗАЦИИ В параметре dpi-desync можно указать до 3 режимов через запятую. -0 фаза предполагает работу на этапе установления соединения. Может быть synack. +0 фаза предполагает работу на этапе установления соединения. Может быть synack или syndata. На 0 фазу не действует фильтр по hostlist. Последующие режимы отрабатывают на пакетах с данными. Режим 1-й фазы может быть fake,rst,rstack. Режим 2-й фазы может быть disorder,disorder2,split,split2,ipfrag2. @@ -458,6 +459,9 @@ ip6tables -D zone_wan_output -m comment --comment '!fw3' -j zone_wan_dest_ACCEPT Если не принять эти меры, отсылка SYN,ACK сегмента вызовет ошибку и операция будет прервана. Остальные режимы тоже не сработают. Если поймете, что вам synack не нужен, обязательно верните правило дропа INVALID. +РЕЖИМ SYNDATA +Тут все просто. Добавляются данные в пакет SYN. Все ОС их игнорируют, а DPI может воспринять. + ВИРТУАЛЬНЫЕ МАШИНЫ Изнутри VM от virtualbox и vmware в режиме NAT не работают многие техники пакетной магии nfqws. Принудительно заменяется ttl, не проходят фейк пакеты. Необходимо настроить сеть в режиме bridge.