Linux debian 如何禁用 TCP 校验和验证?

Linux debian 如何禁用 TCP 校验和验证?

当尝试从 A 打开到主机 B 的 TCP 端口时,我发现两个主机之间的三次 TCP 握手存在问题。

客户端/主机 A 向主机 B 发送 SYN,主机 B 发送 SYN/ACK,然后主机 A 发送 RST 数据包。

我在 wireshark 中嗅探数据包,发现 SYN/ACK 数据包在由 A 发送并由 B 接收后不具有相同的 TCP 校验和。否则它是完全相同的数据包。Wireshark 将数据包标记为“ACKed unseen 段”。

我没有在两台机器之间设置任何跳数。两台主机是 VMware ESXi 主机中的虚拟机。虚拟机位于不同的主机中。它们直接连接到 ESXi 中的同一 VLAN。客户端虚拟机位于 ESXi v4.1.0 上。我为测试打开了所有防火墙。最后,我完全关闭了 TCP 校验和卸载。我对位于同一主机上的虚拟机进行了相同的测试,结果相同。客户端虚拟机运行 debian Jessie 8.8,其他虚拟机运行 debian wheezy。

我怀疑 ESXi 正在修改两台机器之间的校验和。

由于我对 VMware ESXi 及其调试经验不多,我想知道如何“禁用”校验和 TCP?目前这是一种解决方法,并测试问题是否确实来自校验和。

我尝试在主机 A 上添加类似的 iptables mangle 规则: iptables -t mangle -A PREROUTING -s #IP_HOST_B# -o eth0 -j CHECKSUM --checksum-fill

但却没有改变任何事情。

相关内容