readme: rewrite badsum limitations

This commit is contained in:
bol-van 2021-05-22 20:47:15 +03:00
parent 01e72a8e39
commit 3f217b55ae
2 changed files with 19 additions and 15 deletions

View File

@ -177,11 +177,11 @@ add tcp option "MD5 signature". All of them have their own disadvantages :
The most common Linux NAT router configuration does not pass them. Most home routers are Linux based.
The default sysctl configuration net.netfilter.nf_conntrack_checksum=1 causes contrack to verify tcp and udp checksums
and set INVALID state for packets with invalid checksum.
Typically, iptables rules include a rule for dropping packets with INVALID state, either only in FORWARD chain,
or both in FORWARD and OUTPUT chains. The combination of these factors does not allow badsum packets to pass through the router.
Presence of a drop INVALID rule in the OUTPUT chain blocks nfqws running on the router from using badsum option.
Typically, iptables rules include a rule for dropping packets with INVALID state in the FORWARD chain.
The combination of these factors does not allow badsum packets to pass through the router.
In openwrt mentioned sysctl is set to 0 from the box, in other routers its often left in the default "1" state.
For nfqws to work properly set net.netfilter.nf_conntrack_checksum=0 on the router.
For nfqws to work properly through the router set net.netfilter.nf_conntrack_checksum=0 on the router.
System never verifies checksums of locally generated packets so nfqws will always work on the router itself.
If you are behind another NAT, such as a ISP, and it does not pass invalid packages, there is nothing you can do about it.
But usually ISPs pass badsum.
* badsum doesn't work if your device is behind NAT which does not pass invalid packets.

View File

@ -222,21 +222,25 @@ nfqws
* badsum не сработает, если ваше устройство за NAT, который не пропускает пакеты с инвалидной суммой.
Наиболее распространенная настройка NAT роутера в Linux их не пропускает. На Linux построено большинство
домашних роутеров. Непропускание обеспечивается так : настройка ядра sysctl по умолчанию
net.netfilter.nf_conntrack_checksum=1 заставляет conntrack проверять tcp и udp чексуммы и выставлять
state INVALID для пакетов с инвалидной суммой.
Обычно в правилах iptables вставляется правило для дропа пакетов с состоянием INVALID либо только в FORWARD,
либо в FORWARD и OUTPUT. Совместное сочетание этих факторов приводит к непрохождению badsum через такой роутер,
а при наличии дропа INVALID в OUTPUT и к неработоспособности nfqws с badsum с самого роутера.
net.netfilter.nf_conntrack_checksum=1 заставляет conntrack проверять tcp и udp чексуммы входящих пакетов
и выставлять state INVALID для пакетов с инвалидной суммой.
Обычно в правилах iptables вставляется правило для дропа пакетов с состоянием INVALID в цепочке FORWARD.
Совместное сочетание этих факторов приводит к непрохождению badsum через такой роутер,
В openwrt из коробки net.netfilter.nf_conntrack_checksum=0, в других роутерах часто нет,
и не всегда это можно изменить. Чтобы nfqws мог работать, нужно выставить указанное значение sysctl в 0 на роутере.
и не всегда это можно изменить. Чтобы nfqws мог работать через роутер, нужно на нем выставить указанное
значение sysctl в 0. nfqws на самом роутере будет работать и без этой настройки, потому что
чексумма локально созданных пакетов не проверяется никогда.
Если роутер за другим NAT, например провайдерским, и он не пропускает invalid packets
вы ничего не сможете с этим сделать. Но обычно провайдеры все же пропускают badsum.
* пакеты с badseq будут наверняка отброшены принимающим узлом, но так же и DPI, если он ориентируется на sequence numbers
* TTL казалось бы - лучший вариант, но он требует индивидуальной настройки под каждого провайдера. Если DPI находится дальше локальных
сайтов провайдера, то вы можете отрезать себе доступ к ним. Необходим ip exclude list, заполняемый вручную.
Вместе с ttl можно применять md5sig. Это ничего не испортит, зато дает неплохой шанс работы сайтов, до которых "плохой" пакет дойдет по TTL.
* пакеты с badseq будут наверняка отброшены принимающим узлом, но так же и DPI, если он ориентируется
на sequence numbers
* TTL казалось бы - лучший вариант, но он требует индивидуальной настройки под каждого провайдера.
Если DPI находится дальше локальных сайтов провайдера, то вы можете отрезать себе доступ к ним.
Необходим ip exclude list, заполняемый вручную. Вместе с ttl можно применять md5sig. Это ничего не испортит,
зато дает неплохой шанс работы сайтов, до которых "плохой" пакет дойдет по TTL.
Если не удается найти автоматическое решение, воспользуйтесь файлом zapret-hosts-user-exclude.txt.
КАКИМ СТОИТ ВЫБИРАТЬ TTL : найдите минимальное значение, при котором обход еще работает. Это и будет номер хопа вашего DPI.
КАКИМ СТОИТ ВЫБИРАТЬ TTL : найдите минимальное значение, при котором обход еще работает.
Это и будет номер хопа вашего DPI.
Режимы дурения могут сочетаться в любых комбинациях. --dpi-desync-fooling берет множество значений через запятую.