mirror of
https://github.com/bol-van/zapret.git
synced 2024-12-23 23:04:23 +00:00
blockcheck: fix frag6 notrack
This commit is contained in:
parent
4aef7a96a4
commit
bf74a6caf9
@ -340,7 +340,7 @@ pktws_ipt_prepare()
|
||||
IPT OUTPUT -p tcp --dport $1 -m conntrack --ctstate INVALID -j ACCEPT
|
||||
if [ "$IPV" = 6 -a -n "$IP6_DEFRAG_DISABLE" ]; then
|
||||
# the only way to reliable disable ipv6 defrag. works only in 4.16+ kernels
|
||||
IPT OUTPUT -t raw -p tcp --dport $1 -j CT --notrack
|
||||
IPT OUTPUT -t raw -p tcp -m frag -j CT --notrack
|
||||
elif [ "$IPV" = 4 ]; then
|
||||
# enable fragments
|
||||
IPT OUTPUT -f -j ACCEPT
|
||||
@ -363,7 +363,7 @@ pktws_ipt_unprepare()
|
||||
IPT_DEL INPUT -p tcp --sport $1 ! --syn -j ACCEPT
|
||||
IPT_DEL OUTPUT -p tcp --dport $1 -m conntrack --ctstate INVALID -j ACCEPT
|
||||
if [ "$IPV" = 6 -a -n "$IP6_DEFRAG_DISABLE" ]; then
|
||||
IPT_DEL OUTPUT -t raw -p tcp --dport $1 -j CT --notrack
|
||||
IPT_DEL OUTPUT -t raw -p tcp -m frag -j CT --notrack
|
||||
elif [ "$IPV" = 4 ]; then
|
||||
IPT_DEL OUTPUT -f -j ACCEPT
|
||||
fi
|
||||
|
@ -248,6 +248,7 @@ walk through the extension header chain until transport header is found.
|
||||
`hopbyhop`, `destopt`, `ipfrag1` modes can be used with any second phase mode except `ipfrag1+ipfrag2`.
|
||||
For example, `hopbyhop,split2` means split original tcp packet into 2 pieces and add hop-by-hop header to both.
|
||||
With `hopbyhop,ipfrag2` header sequence will be : `ipv6,hop-by-hop,fragment,tcp/udp`.
|
||||
`ipfrag1` mode may not always work without special preparations. See "IP Fragmentation" notices.
|
||||
|
||||
There are DPIs that analyze responses from the server, particularly the certificate from the ServerHello
|
||||
that contain domain name(s). The ClientHello delivery confirmation is an ACK packet from the server
|
||||
@ -424,6 +425,8 @@ Sometimes it works, sometimes system defragments packets.
|
||||
Looks like kernels <4.16 have no simple way to solve this problem. Unloading of nf_conntrack module
|
||||
and its dependency nf_defrag_ipv6 helps but this severely impacts functionality.
|
||||
Kernels 4.16+ exclude from defragmentation untracked packets.
|
||||
Sometimes it's required to load `ip6table_raw` kernel module with parameter raw_before_defrag=1.
|
||||
In openwrt module parameters are specified after module names separated by space in files located in `/etc/modules.d`
|
||||
See `blockcheck.sh` code for example.
|
||||
|
||||
|
||||
|
@ -304,6 +304,7 @@ extension хедерам в поисках транспортного хедер
|
||||
Может сочетаться с любыми режимами 2-й фазы, кроме варианта "ipfrag1+ipfrag2".
|
||||
Например, "hopbyhop,split2" означает разбить tcp пакет на 2 сегмента, в каждый из них добавить hop-by-hop.
|
||||
При "hopbyhop,ipfrag2" последовательность хедеров будет : ipv6,hop-by-hop,fragment,tcp/udp.
|
||||
Режим "ipfrag1" может срабатывать не всегда без специальной подготовки. См. раздел "IP фрагментация".
|
||||
|
||||
Есть DPI, которые анализируют ответы от сервера, в частности сертификат из ServerHello, где прописаны домены.
|
||||
Подтверждением доставки ClientHello является ACK пакет от сервера с номером ACK sequence, соответствующим длине ClientHello+1.
|
||||
@ -460,6 +461,8 @@ ipv6 : Нет способа для приложения гарантирова
|
||||
Для ядер <4.16 похоже, что нет иного способа решить эту проблему, кроме как выгрузить модуль nf_conntrack,
|
||||
который подтягивает зависимость nf_defrag_ipv6. Он то как раз и выполняет дефрагментацию.
|
||||
Для ядер 4.16+ ситуация чуть лучше. Из дефрагментации исключаются пакеты в состоянии NOTRACK.
|
||||
Иногда требуется подгружать модуль ip6table_raw с параметром raw_before_defrag=1.
|
||||
В openwrt параметры модулей указываются через пробел после их названий в файлах /etc/modules.d.
|
||||
Чтобы не загромождать описание, смотрите пример решения этой проблемы в blockcheck.sh.
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user