在proxmox上有一个集群。 在一个集群中有vmconfiguration的路由器(pfsense)。 在我们的网上有Windows和Linux的机器。
有问题:Windows机器可以访问互联网,但是Linux机器没有。
所有Linux机器的行为都是一样的,它发送一个请求并等待响应,但响应不会回来。 我用wget,ssh和nslookup检查了外部服务器(8.8.8.8例子)和ping。 除了ping,一切都不起作用。 ICMP数据包正确地去,因此我冒昧地提出与TCP的问题。 但所有的Windows机器,一切正常的作品。
我并没有为linux或windows创build特殊的过滤规则。
我打破了头,但还没有能够解决这个问题。
基线:
Our External IP: XX.XXX.XX.XX External Server IP: Y.YYY.Y.YYY (which was used to test)
所以,我花了两个testing:
testing1.从linux机器上的wget:
从路由器捕获数据包:
No. Time Source Destination Protocol Length Info 1 0.000000 XX.XXX.XX.XX Y.YYY.Y.YYY HTTP 174 GET / HTTP/1.1 2 21.798340 XX.XXX.XX.XX Y.YYY.Y.YYY TCP 74 49656 > http [SYN] Seq=0 Win=14600 Len=0 MSS=1460 SACK_PERM=1 TSval=173036151 TSecr=0 WS=128 3 21.850793 Y.YYY.Y.YYY XX.XXX.XX.XX TCP 74 http > 49656 [SYN, ACK] Seq=0 Ack=1 Win=5792 Len=0 MSS=1460 SACK_PERM=1 TSval=1304117522 TSecr=173036151 WS=1024 4 21.850849 XX.XXX.XX.XX Y.YYY.Y.YYY TCP 66 49656 > http [ACK] Seq=1 Ack=1 Win=14720 Len=0 TSval=173036203 TSecr=1304117522 5 21.850868 XX.XXX.XX.XX Y.YYY.Y.YYY HTTP 174 GET / HTTP/1.1 6 22.101939 XX.XXX.XX.XX Y.YYY.Y.YYY HTTP 174 [TCP Retransmission] GET / HTTP/1.1 7 22.605999 XX.XXX.XX.XX Y.YYY.Y.YYY HTTP 174 [TCP Retransmission] GET / HTTP/1.1 8 23.613997 XX.XXX.XX.XX Y.YYY.Y.YYY HTTP 174 [TCP Retransmission] GET / HTTP/1.1 9 25.629983 XX.XXX.XX.XX Y.YYY.Y.YYY HTTP 174 [TCP Retransmission] GET / HTTP/1.1 10 28.931894 Y.YYY.Y.YYY XX.XXX.XX.XX TCP 78 http > 11956 [FIN, ACK] Seq=1 Ack=1 Win=6 Len=0 TSval=1304124610 TSecr=172983238 SLE=109 SRE=110 11 28.932001 XX.XXX.XX.XX Y.YYY.Y.YYY TCP 66 [TCP Previous segment not captured] 11956 > http [ACK] Seq=110 Ack=2 Win=115 Len=0 TSval=173043285 TSecr=1304124610 12 29.661996 XX.XXX.XX.XX Y.YYY.Y.YYY HTTP 174 [TCP Retransmission] GET / HTTP/1.1 13 31.360021 XX.XXX.XX.XX Y.YYY.Y.YYY HTTP 174 [TCP Retransmission] GET / HTTP/1.1
从我的外部服务器捕获数据包:
No. Time Source Destination Protocol Length Info 1 0.000000 XX.XXX.XX.XX Y.YYY.Y.YYY TCP 76 49656 > http [SYN] Seq=0 Win=14600 Len=0 MSS=1460 SACK_PERM=1 TSval=173036151 TSecr=0 WS=128 2 0.000059 Y.YYY.Y.YYY XX.XXX.XX.XX TCP 76 http > 49656 [SYN, ACK] Seq=0 Ack=1 Win=5792 Len=0 MSS=1460 SACK_PERM=1 TSval=1304117522 TSecr=173036151 WS=1024 3 0.059242 XX.XXX.XX.XX Y.YYY.Y.YYY TCP 68 49656 > http [ACK] Seq=1 Ack=1 Win=14720 Len=0 TSval=173036203 TSecr=1304117522 4 0.059247 XX.XXX.XX.XX Y.YYY.Y.YYY HTTP 176 GET / HTTP/1.1 5 0.303398 XX.XXX.XX.XX Y.YYY.Y.YYY HTTP 176 [TCP Retransmission] GET / HTTP/1.1 6 0.809767 XX.XXX.XX.XX Y.YYY.Y.YYY HTTP 176 [TCP Retransmission] GET / HTTP/1.1 7 1.815634 XX.XXX.XX.XX Y.YYY.Y.YYY HTTP 176 [TCP Retransmission] GET / HTTP/1.1 8 3.836576 XX.XXX.XX.XX Y.YYY.Y.YYY HTTP 176 [TCP Retransmission] GET / HTTP/1.1 9 7.088059 Y.YYY.Y.YYY XX.XXX.XX.XX TCP 80 http > 11956 [FIN, ACK] Seq=1 Ack=1 Win=6 Len=0 TSval=1304124610 TSecr=172983238 SLE=109 SRE=110 10 7.134903 XX.XXX.XX.XX Y.YYY.Y.YYY TCP 68 11956 > http [ACK] Seq=110 Ack=2 Win=115 Len=0 TSval=173043285 TSecr=1304124610 11 7.864582 XX.XXX.XX.XX Y.YYY.Y.YYY HTTP 176 [TCP Retransmission] GET / HTTP/1.1 12 9.564772 XX.XXX.XX.XX Y.YYY.Y.YYY HTTP 176 [TCP Retransmission] GET / HTTP/1.1
从Windows机器testing2. wget:
从路由器捕获数据包:
No. Time Source Destination Protocol Length Info 1 0.000000 XX.XXX.XX.XX Y.YYY.Y.YYY TCP 66 ampr-info > http [SYN] Seq=0 Win=8192 Len=0 MSS=1460 WS=256 SACK_PERM=1 2 0.053994 Y.YYY.Y.YYY XX.XXX.XX.XX TCP 66 http > ampr-info [SYN, ACK] Seq=0 Ack=1 Win=5840 Len=0 MSS=1460 SACK_PERM=1 WS=1024 3 0.054129 XX.XXX.XX.XX Y.YYY.Y.YYY TCP 54 ampr-info > http [ACK] Seq=1 Ack=1 Win=65536 Len=0 4 0.054450 XX.XXX.XX.XX Y.YYY.Y.YYY HTTP 150 GET / HTTP/1.0 5 0.110034 Y.YYY.Y.YYY XX.XXX.XX.XX TCP 60 http > ampr-info [ACK] Seq=1 Ack=97 Win=6144 Len=0 6 0.113011 Y.YYY.Y.YYY XX.XXX.XX.XX HTTP 931 HTTP/1.1 200 OK (text/html) 7 0.115990 XX.XXX.XX.XX Y.YYY.Y.YYY TCP 54 ampr-info > http [RST, ACK] Seq=97 Ack=878 Win=0 Len=0
从我的外部服务器捕获数据包:
No. Time Source Destination Protocol Length Info 1 0.000000 XX.XXX.XX.XX Y.YYY.Y.YYY TCP 66 ampr-info > http [SYN] Seq=0 Win=8192 Len=0 MSS=1460 WS=256 SACK_PERM=1 2 0.053994 Y.YYY.Y.YYY XX.XXX.XX.XX TCP 66 http > ampr-info [SYN, ACK] Seq=0 Ack=1 Win=5840 Len=0 MSS=1460 SACK_PERM=1 WS=1024 3 0.054129 XX.XXX.XX.XX Y.YYY.Y.YYY TCP 54 ampr-info > http [ACK] Seq=1 Ack=1 Win=65536 Len=0 4 0.054450 XX.XXX.XX.XX Y.YYY.Y.YYY HTTP 150 GET / HTTP/1.0 5 0.110034 Y.YYY.Y.YYY XX.XXX.XX.XX TCP 60 http > ampr-info [ACK] Seq=1 Ack=97 Win=6144 Len=0 6 0.113011 Y.YYY.Y.YYY XX.XXX.XX.XX HTTP 931 HTTP/1.1 200 OK (text/html) 7 0.115990 XX.XXX.XX.XX Y.YYY.Y.YYY TCP 54 ampr-info > http [RST, ACK] Seq=97 Ack=878 Win=0 Len=0
请帮助我,有什么想法?
过去我也遇到类似的问题。 原来,这是由于校验和卸载的问题。 虚拟化客户操作系统会将校验卸载到虚拟化主机,虚拟化主机应该将其卸载到物理networking接口。
但是最后校验和从来没有被计算过,并且数据包通过networking被发送,没有有效的校验和。 在连接的接收端,由于具有无效校验和,数据包将被丢弃。
在虚拟化主机和来宾中,您可以尝试使用以下任一名称查找选项,并尝试将其closures:
有趣的问题。 它看起来不像防火墙问题,否则最初的3路TCP握手将不起作用。 尽pipe有TCP重传,但它似乎并不是一个MTU问题,因为数据包非常小,而且你又在两端看到它们。 它看起来像Web服务器只是没有响应GET请求。
DNS查找将使用UDP,所以这是另一回事。 您在尝试SSH的数据包捕获时看到了什么? 另外,如果您telnet到外部服务器的80端口并发出手动GET请求,该怎么办:
telnet yyyy 80 GET / HTTP/1.1 host: yyyy <line feed>
尝试上面的HTTP 1.0和1.1。 我注意到这是在Linux和Windows数据包上限GET请求之间的区别。 应该不重要,但值得尝试。
经过几个月的工作,我把Windows机器上的网卡驱动程序转换成了virtio,问题也出现在windows机器上。 这是真的,这似乎是问题与个人不兼容pfSense (或freebsd)和virtio驱动程序或proxmox其他组件。
在这一点上,我决定绕过这个问题:
结果我得到了以下结果:
谢谢你们!
不幸的是,我无法评论:-(
据我所知,你已经看过了通过你的路由器和/从目标服务器的数据包。 你有没有尝试tcpdump或wireshark在你的任何行为不端的主机上看到实际到达/离开主机?
另一个要testing的可能是在你的一个linux主机上完全禁用iptables来进行testing。 虽然您没有在主机上configuration任何特殊的防火墙规则,但可能会出现一些错误的默认规则。