|
|
@ -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 |
|
|
|