
Если Don't Fragment
флаг установлен, IPv4 RFC позволяет установить поле идентификации в значение 0x0000
.
У меня есть пир, который находится за брандмауэром, который тормозит RFC и блокирует любые пакеты IPv4 с таким 0x0000
полем ID. Мое "современное" ядро linux 4.4.0 генерирует пакеты с ID, 0x0000
поэтому я не могу создать TCP-соединение.
Как запретить генерацию этого 0x0000
идентификатора или как манипулировать этим полем с помощью iptables mangle или каким-либо другим способом?
решение1
Вы, вероятно, имеете в видуRFC6864.
В Linux 4.17.x я мог видеть, что id = 0 надежно появляется только для пакета SYN+ACK сервера, отвечающего на полученное соединение, но не после.
ОБНОВЛЕНИЕ: OP подтвердил, что это обычный случай и в вопросе (с ядром 4.4.x).
Вероятныйминимальные требования: nftables v0.6 . notrack
не нужен, записи conntrack не заботятся об этом идентификаторе.
Если это имеет значение, вот вамnftables
правило для изменения значения id на значение, 0xbeef
когда установлено [DF] и id == 0. Я не думаю, что iptables
оно вообще способно это сделать.
nft add table raw
nft 'add chain raw output {type filter hook output priority -300;}'
nft 'add rule raw output ip frag-off & 0x4000 != 0 ip id == 0 ip id set 0xbeef'
0x4000
здесь означаетфлагDF
.