Манипуляция полем идентификации IPv4 в Linux

Манипуляция полем идентификации IPv4 в Linux

Если 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.

Связанный контент