我遇到数据包丢到美国佛罗里达州第三方数据中心的问题。该问题仅出现在 Azure 虚拟机上,无论 VM 位于哪个数据中心。我已经从其他非 Azure 网络同时进行了相同的测试,并且没有丢包。Azure 虚拟机是“香草”/开箱即用,没有加载软件或其他自定义/更改。
我已经和数据中心的网络管理员谈过了,他们看到的唯一数据包是没有超时的数据包;超时的数据包永远不会到达他们的防火墙,所以这听起来像是 Azure 方面的事情(特别是因为数据包一直从多个 Azure 数据中心/区域丢弃/超时)。有谁知道我可以如何解决这个问题?
我正在运行的测试是对端口 80 的连续 TCP ping(使用tcping.exe)(因为 ICMP 在 Azure 上被阻止):
tcping -t 216.155.111.149 80
tcping -t 216.155.111.151 80
tcping -t 216.155.111.146 80
支持它不是第三方数据中心这一事实的其他证据是,我可以从我的家用计算机/工作计算机运行相同的连续 TCP ping,并且不会丢弃任何数据包。我还设置了从 Azure VM 到非 Azure 数据中心的 VM 的隧道 VPN,并且不会丢弃任何数据包。丢弃数据包的唯一时间是当流量直接通过 Azure 传出到 Internet/WAN 时。
我知道下一步将是一些跟踪路由测试,但是由于 Azure 阻止了 ICMP,我不得不使用nmap 来运行 TCP 跟踪路由;下面粘贴的是这些测试的屏幕截图。
nmap -sS -p 80 -Pn --traceroute 216.155.111.149
正如我在评论中提到的那样,您实际上遇到了与本文中描述的类似情况。
我可以很容易地重现你的行为:
我可以通过向VM添加实例级公共 IP来轻松解决此问题:
很难说到底发生了什么,因为我们没有同时捕获,但我的理解是远程站点(www.oandp.com)上的边缘设备(可能是防火墙)在其连接上保持关闭的连接表的时间比 Azure 更长,因此当 Azure 使用其中一个已释放(即已使用)的端口并且远程端仍然认为连接未完全关闭时,我们的 SYN 数据包将被丢弃。
ILPIP 应用静态 NAT 或“一对一 NAT”,因此没有端口转换或端口重用(除非您的操作系统这样做),从而避免了这个问题。