From a96d4d3b142fbe3be7428babe6a8a82ca4be63ec Mon Sep 17 00:00:00 2001 From: bol-van Date: Sat, 22 May 2021 20:28:34 +0300 Subject: [PATCH] readme: rewrite badsum limitations --- docs/readme.eng.txt | 11 +++++++++++ docs/readme.txt | 14 ++++++++++---- 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/docs/readme.eng.txt b/docs/readme.eng.txt index 85c6d3d..26800e3 100644 --- a/docs/readme.eng.txt +++ b/docs/readme.eng.txt @@ -173,6 +173,17 @@ The following means are available: set a low TTL, send a packet with bad checksu add tcp option "MD5 signature". All of them have their own disadvantages : * md5sig does not work on all servers +* badsum doesn't work if your device is behind NAT which does not pass invalid packets. + 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. + 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. + 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. Linux NAT by default does not pass them without special setting "sysctl -w net.netfilter.nf_conntrack_checksum=0" Openwrt sets it from the box, other routers in most cases don't, and its not always possible to change it. diff --git a/docs/readme.txt b/docs/readme.txt index 65efd14..4d33434 100644 --- a/docs/readme.txt +++ b/docs/readme.txt @@ -220,10 +220,16 @@ nfqws * md5sig работает не на всех серверах. Пакеты с md5 обычно отбрасывают только linux. * badsum не сработает, если ваше устройство за NAT, который не пропускает пакеты с инвалидной суммой. - Linux NAT по умолчанию их не пропускает без особой настройки "sysctl -w net.netfilter.nf_conntrack_checksum=0". - В openwrt она сделана из коробки, в других роутерах как правило нет, и не всегда это можно изменить. - Если nfqws работает на роутере, то не обязательно выключать nf_conntrack_checksum. Фейковый пакет не проходит FORWARD, он идет через OUTPUT. - Но если роутер за другим NAT, например провайдерским, и он не пропускает invalid packets, вы ничего не сможете с этим сделать. + Наиболее распространенная настройка 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 с самого роутера. + В openwrt из коробки net.netfilter.nf_conntrack_checksum=0, в других роутерах часто нет, и не всегда это можно изменить. + Чтобы nfqws мог работать, нужно выставить указанное значение sysctl в 0 на роутере. + Если роутер за другим NAT, например провайдерским, и он не пропускает invalid packets, вы ничего не сможете с этим сделать. + Но обычно провайдеры все же пропускают badsum. * пакеты с badseq будут наверняка отброшены принимающим узлом, но так же и DPI, если он ориентируется на sequence numbers * TTL казалось бы - лучший вариант, но он требует индивидуальной настройки под каждого провайдера. Если DPI находится дальше локальных сайтов провайдера, то вы можете отрезать себе доступ к ним. Необходим ip exclude list, заполняемый вручную.