mirror of
https://github.com/bol-van/zapret.git
synced 2024-12-02 14:40:52 +03: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
|
IPT OUTPUT -p tcp --dport $1 -m conntrack --ctstate INVALID -j ACCEPT
|
||||||
if [ "$IPV" = 6 -a -n "$IP6_DEFRAG_DISABLE" ]; then
|
if [ "$IPV" = 6 -a -n "$IP6_DEFRAG_DISABLE" ]; then
|
||||||
# the only way to reliable disable ipv6 defrag. works only in 4.16+ kernels
|
# 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
|
elif [ "$IPV" = 4 ]; then
|
||||||
# enable fragments
|
# enable fragments
|
||||||
IPT OUTPUT -f -j ACCEPT
|
IPT OUTPUT -f -j ACCEPT
|
||||||
@ -363,7 +363,7 @@ pktws_ipt_unprepare()
|
|||||||
IPT_DEL INPUT -p tcp --sport $1 ! --syn -j ACCEPT
|
IPT_DEL INPUT -p tcp --sport $1 ! --syn -j ACCEPT
|
||||||
IPT_DEL OUTPUT -p tcp --dport $1 -m conntrack --ctstate INVALID -j ACCEPT
|
IPT_DEL OUTPUT -p tcp --dport $1 -m conntrack --ctstate INVALID -j ACCEPT
|
||||||
if [ "$IPV" = 6 -a -n "$IP6_DEFRAG_DISABLE" ]; then
|
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
|
elif [ "$IPV" = 4 ]; then
|
||||||
IPT_DEL OUTPUT -f -j ACCEPT
|
IPT_DEL OUTPUT -f -j ACCEPT
|
||||||
fi
|
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`.
|
`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.
|
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`.
|
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
|
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
|
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
|
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.
|
and its dependency nf_defrag_ipv6 helps but this severely impacts functionality.
|
||||||
Kernels 4.16+ exclude from defragmentation untracked packets.
|
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.
|
See `blockcheck.sh` code for example.
|
||||||
|
|
||||||
|
|
||||||
|
@ -304,6 +304,7 @@ extension хедерам в поисках транспортного хедер
|
|||||||
Может сочетаться с любыми режимами 2-й фазы, кроме варианта "ipfrag1+ipfrag2".
|
Может сочетаться с любыми режимами 2-й фазы, кроме варианта "ipfrag1+ipfrag2".
|
||||||
Например, "hopbyhop,split2" означает разбить tcp пакет на 2 сегмента, в каждый из них добавить hop-by-hop.
|
Например, "hopbyhop,split2" означает разбить tcp пакет на 2 сегмента, в каждый из них добавить hop-by-hop.
|
||||||
При "hopbyhop,ipfrag2" последовательность хедеров будет : ipv6,hop-by-hop,fragment,tcp/udp.
|
При "hopbyhop,ipfrag2" последовательность хедеров будет : ipv6,hop-by-hop,fragment,tcp/udp.
|
||||||
|
Режим "ipfrag1" может срабатывать не всегда без специальной подготовки. См. раздел "IP фрагментация".
|
||||||
|
|
||||||
Есть DPI, которые анализируют ответы от сервера, в частности сертификат из ServerHello, где прописаны домены.
|
Есть DPI, которые анализируют ответы от сервера, в частности сертификат из ServerHello, где прописаны домены.
|
||||||
Подтверждением доставки ClientHello является ACK пакет от сервера с номером ACK sequence, соответствующим длине ClientHello+1.
|
Подтверждением доставки ClientHello является ACK пакет от сервера с номером ACK sequence, соответствующим длине ClientHello+1.
|
||||||
@ -460,6 +461,8 @@ ipv6 : Нет способа для приложения гарантирова
|
|||||||
Для ядер <4.16 похоже, что нет иного способа решить эту проблему, кроме как выгрузить модуль nf_conntrack,
|
Для ядер <4.16 похоже, что нет иного способа решить эту проблему, кроме как выгрузить модуль nf_conntrack,
|
||||||
который подтягивает зависимость nf_defrag_ipv6. Он то как раз и выполняет дефрагментацию.
|
который подтягивает зависимость nf_defrag_ipv6. Он то как раз и выполняет дефрагментацию.
|
||||||
Для ядер 4.16+ ситуация чуть лучше. Из дефрагментации исключаются пакеты в состоянии NOTRACK.
|
Для ядер 4.16+ ситуация чуть лучше. Из дефрагментации исключаются пакеты в состоянии NOTRACK.
|
||||||
|
Иногда требуется подгружать модуль ip6table_raw с параметром raw_before_defrag=1.
|
||||||
|
В openwrt параметры модулей указываются через пробел после их названий в файлах /etc/modules.d.
|
||||||
Чтобы не загромождать описание, смотрите пример решения этой проблемы в blockcheck.sh.
|
Чтобы не загромождать описание, смотрите пример решения этой проблемы в blockcheck.sh.
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user