From eda06277cb52d76b2dfc6a0360f71586813efaac Mon Sep 17 00:00:00 2001 From: bol-van Date: Sun, 6 Feb 2022 12:28:44 +0300 Subject: [PATCH] readme: iptables-nft recompile info --- docs/readme.eng.md | 15 +++++++++++++-- docs/readme.txt | 14 ++++++++++++-- 2 files changed, 25 insertions(+), 4 deletions(-) diff --git a/docs/readme.eng.md b/docs/readme.eng.md index f527fd0..ce2f428 100644 --- a/docs/readme.eng.md +++ b/docs/readme.eng.md @@ -426,14 +426,25 @@ Looks like kernels <4.16 have no simple way to solve this problem. Unloading of and its dependency nf_defrag_ipv6 helps but this severely impacts functionality. Kernels 4.16+ exclude from defragmentation untracked packets. See `blockcheck.sh` code for example. + 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`. -In traditional linux first check if the problem actually exists using tcpdump or wireshark. -If it does check whether iptables-legacy or iptables-nft are used. If legacy create the file + +In traditional linux check whether iptables-legacy or iptables-nft are used. If legacy create the file `/etc/modprobe.d/ip6table_raw.conf` with the following content : ``` options ip6table_raw raw_before_defrag=1 ``` +In some linux distros its possible to change current ip6tables using this command: update-alternatives --config ip6tables +If you want to stay with nftables-nft you need to patch and recompile your version. +In nft.c find : +``` + name= "PREROUTING", + type = "filter", + prio = -300, /* NF_IP_PRI_RAW */ +``` +and replace -300 to -450. + It must be done manually, `blockcheck.sh` cannot auto fix this for you. ## tpws diff --git a/docs/readme.txt b/docs/readme.txt index 5a03b26..1af7c2e 100644 --- a/docs/readme.txt +++ b/docs/readme.txt @@ -455,19 +455,29 @@ IP ФРАГМЕНТАЦИЯ Смещение считается с транспортного заголовка. Существует ряд моментов вокруг работы с фрагментами на Linux, без понимания которых может ничего не получиться. + ipv4 : Linux дает отсылать ipv4 фрагменты, но стандартные настройки iptables в цепочке OUTPUT могут вызывать ошибки отправки. + ipv6 : Нет способа для приложения гарантированно отослать фрагменты без дефрагментации в conntrack. На разных системах получается по-разному. Где-то нормально уходят, где-то пакеты дефрагментируются. Для ядер <4.16 похоже, что нет иного способа решить эту проблему, кроме как выгрузить модуль nf_conntrack, который подтягивает зависимость nf_defrag_ipv6. Он то как раз и выполняет дефрагментацию. Для ядер 4.16+ ситуация чуть лучше. Из дефрагментации исключаются пакеты в состоянии NOTRACK. Чтобы не загромождать описание, смотрите пример решения этой проблемы в blockcheck.sh. + Иногда требуется подгружать модуль ip6table_raw с параметром raw_before_defrag=1. В openwrt параметры модулей указываются через пробел после их названий в файлах /etc/modules.d. -В традиционных linux нужно сначала оценить есть ли вообще эта проблема через tcpdump или wireshark. -Если есть, то посмотреть используется ли iptables-legacy или iptables-nft. Если legacy, то нужно создать файл +В традиционных система посмотрите используется ли iptables-legacy или iptables-nft. Если legacy, то нужно создать файл /etc/modprobe.d/ip6table_raw.conf с содержимым : options ip6table_raw raw_before_defrag=1 +В некоторых традиционных дистрибутивах можно изменить текущий ip6tables через : update-alternatives --config ip6tables +Если вы хотите оставаться на iptables-nft, вам придется пересобрать патченную версию. Патч совсем небольшой. +В nft.c найдите фрагмент : + name= "PREROUTING", + type = "filter", + prio = -300, /* NF_IP_PRI_RAW */ +и замените -300 на -450. + Это нужно сделать вручную, никакой автоматики в blockcheck.sh нет. tpws