![Linux 中的 IPv4 标识字段操作](https://linux22.com/image/726151/Linux%20%E4%B8%AD%E7%9A%84%20IPv4%20%E6%A0%87%E8%AF%86%E5%AD%97%E6%AE%B5%E6%93%8D%E4%BD%9C.png)
当Don't Fragment
设置标志时,IPv4 RFC 允许将标识字段设置为0x0000
。
我得到了一个位于防火墙后面的对等点,该防火墙会阻止 RFC 并阻止任何带有此类0x0000
ID 字段的 IPv4 数据包。我的“现代”4.4.0 Linux 内核会生成带有 ID 的数据包,0x0000
因此我无法创建 TCP 连接。
我怎样才能禁止生成此0x0000
ID 或如何使用 iptables mangle 或任何其他方式来操作此字段?
答案1
你可能指的是RFC 6864。
在 4.17.x Linux 上,我可以看到 id = 0 仅可靠地出现在服务器应答接收连接的 SYN+ACK 数据包中,但之后不会出现。
更新:OP 确认这也是问题中的常见情况(使用 4.4.x 内核)。
可能最低要求:nftables v0.6 .notrack
不需要,conntrack 条目不关心这个 id。
无论如何,这里有一个nftables
0xbeef
规则是将 id 值更改为[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
。