当试图从A打开一个TCP端口到主机B时,我发现两台主机之间的三路TCP握手存在问题。
客户端/主机A向主机B发送SYN,主机B发送SYN / ACK,主机A发送RST包。
我在wireshark中嗅探了数据包,发现SYN / ACK数据包在被A发送和B接收后没有相同的TCP校验和。否则它是完全相同的数据包。 Wireshark将数据包标记为“未确认的段”。
两台机器之间没有任何跳跃。 这两台主机是VMware ESXi主机中的虚拟机。 虚拟机在不同的主机上。 它们直接连接在ESXi中的相同VLAN中。 客户端VM位于ESXi v4.1.0上。 我为我的testing打开了所有的防火墙。 最后,我完全closures了TCP校验和卸载。 我对同一主机上的虚拟机进行了相同的testing,结果相同。 客户端虚拟机运行debian Jessie 8.8,其他虚拟机是debian wheezy。
我怀疑ESXi正在修改两台机器之间的校验和。
由于我对VMware ESXi没有多less经验,并且对其进行了debugging,所以我想知道如何“禁用”校验和TCP? 现在这将是一个解决方法,并testing问题真的来自校验和。
我试图在主机A上添加一个iptables的mangle规则: iptables -t mangle -A PREROUTING -s #IP_HOST_B# -o eth0 -j CHECKSUM --checksum-fill
但不改变任何东西。