网络路径故障排除第二部分 - Windows、macOS、FreeBSD
在本指南的第一部分中,我们从运行在 Equinix Metal 中的实例内部讲解了网络调试。大多数情况下,这类实例运行的是 Linux 操作系统,但这并非严格的技术要求。它们同样可以运行 Windows 或其他基于 UNIX 的操作系统,例如 FreeBSD。
然而,根据我们的经验,我们知道其他非 Linux 操作系统更常出现在客户端。虽然在许多情况下,服务器端配置错误是导致连接问题的根本原因,但客户端也可能受到技术问题或配置错误的影响。因此,本网络调试指南的第二部分将重点介绍非 Linux 环境中的客户端和服务器端。我们将使用 Windows、macOS 和 FreeBSD 三种不同的操作系统,向您展示最常见的调试步骤和技术。
与第一本网络调试指南一样,本指南也可作为工具,在您使用Equinix Metal时遇到问题时为您提供帮助。在联系我们的客户成功团队时,请提供本文档中引用的信息,这将帮助我们更好地评估情况并找到解决方案。
你需要
- Equinix Metal Account and a server as the source or destination of the network traffic you are testing.
- 运行 Windows Server 的Equinix Metal服务器(可选)。
- 运行 Windows 的客户端计算机。(可选)
- 运行 macOS 的客户端计算机。(可选)
- 本地基于 BSD 的系统。(可选)
由于本指南仅涵盖了几种可能的设置方案,您可能只使用了上述提到的其中一种系统。请注意,某些工具可能需要 root/sudo 权限才能运行。
调试 Windows Server
如果您在 Equinix Metal 上运行 Windows Server,获取网络状况信息的方式与 Linux 服务器略有不同。Windows 没有 mtr 或等效命令,而且遗憾的是,WSLv1 也不支持 mtr 的使用。但是,您可以使用 ping 获取丢包率和延迟信息,并使用 tracert 获取延迟和路径信息。
ping
ping 是 cmd 和 PowerShell 中的一个可用命令,它可以发送和接收 4 个数据包,并返回丢包率和总耗时统计信息。当一切运行正常时,从服务器 ping 一个外部 IP 地址的结果如下:
Microsoft Windows [Version 10.0.17763.2565]
(c) 2018 Microsoft Corporation. All rights reserved.
C:\Users\Admin>ping 76.113.250.165
Pinging 76.113.250.165 with 32 bytes of data:
Reply from 76.113.250.165: bytes=32 time=40ms TTL=51
Reply from 76.113.250.165: bytes=32 time=39ms TTL=51
Reply from 76.113.250.165: bytes=32 time=39ms TTL=51
Reply from 76.113.250.165: bytes=32 time=39ms TTL=51
Ping statistics for 76.113.250.165:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 39ms, Maximum = 40ms, Average = 39ms
从外部 IP ping 你的服务器将会是这样的:
Microsoft Windows [Version 10.0.19043.1526]
(c) Microsoft Corporation. All rights reserved.
C:\Users\User>ping 139.178.82.70
Pinging 139.178.82.70 with 32 bytes of data:
Reply from 139.178.82.70: bytes=32 time=40ms TTL=111
Reply from 139.178.82.70: bytes=32 time=40ms TTL=111
Reply from 139.178.82.70: bytes=32 time=40ms TTL=111
Reply from 139.178.82.70: bytes=32 time=42ms TTL=111
Ping statistics for 139.178.82.70:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 40ms, Maximum = 42ms, Average = 40ms
ping 仅提供从源到目标的总丢包率,并不包含流量路径上可能出现问题的任何详细信息。它只是一个用于显示源和目标之间丢包情况的工具。
tracert
如果您需要深入了解您的流量正在访问哪些节点,以及这些节点是否正在经历高延迟,您可以使用 tracert,该函数在 PowerShell 中也可用。
C:\Users\Admin>tracert 76.113.250.165
Tracing route to c-76-113-250-165.hsd1.mn.comcast.net [76.113.250.165]
over a maximum of 30 hops:
1 <1 ms <1 ms <1 ms 169.254.29.1
2 <1 ms <1 ms <1 ms 10.253.57.204
3 1 ms <1 ms <1 ms 10.253.56.9
4 1 ms 1 ms 1 ms dls-b22-link.ip.twelve99.net [62.115.176.218]
5 * * * Request timed out.
6 * * * Request timed out.
7 1 ms 1 ms 1 ms comcast-ic359572-dls-b23.ip.twelve99-cust.net [80.239.160.214]
8 1 ms 1 ms 1 ms be-3411-cs04.dallas.tx.ibone.comcast.net [96.110.34.93]
9 2 ms 1 ms 1 ms be-1412-cr12.dallas.tx.ibone.comcast.net [68.86.166.126]
10 18 ms 18 ms 18 ms be-302-cr12.1601milehigh.co.ibone.comcast.net [96.110.38.101]
11 18 ms 19 ms 18 ms be-1212-cs02.1601milehigh.co.ibone.comcast.net [96.110.39.85]
12 34 ms 34 ms 34 ms 96.110.40.102
13 34 ms 34 ms 34 ms te-0-2-0-0-sur01.edina.mn.minn.comcast.net [69.139.176.210]
14 34 ms 34 ms 34 ms po-1-xar01.crosstown.mn.minn.comcast.net [68.86.232.206]
15 34 ms 34 ms 34 ms po-1-rur201.crosstown.mn.minn.comcast.net [68.87.175.14]
16 35 ms 48 ms 39 ms 68.85.201.178
17 40 ms 45 ms 38 ms c-76-113-250-165.hsd1.mn.comcast.net [76.113.250.165]
Trace complete.
tracert 会追踪从源到目标的路由,并记录每个节点的延迟。延迟通过显示 3 个 TTL 数据包的往返时间来跟踪,这可以大致反映路由中每个节点的稳定性。
返回路径通常与传出路径不同,因此检查两者很有用。
Microsoft Windows [Version 10.0.19043.1526]
(c) Microsoft Corporation. All rights reserved.
C:\Users\User>tracert 139.178.82.70
Tracing route to network-path-troubleshooting [139.178.82.70]
over a maximum of 30 hops:
1 <1 ms <1 ms <1 ms 192.168.1.1
2 41 ms 13 ms 8 ms 172.30.121.131
3 7 ms 8 ms 8 ms 68.85.201.185
4 7 ms 8 ms 8 ms po-200-xar02.crosstown.mn.minn.comcast.net [68.86.233.185]
5 9 ms 10 ms 14 ms 68.87.175.9
6 10 ms 11 ms 10 ms 162.151.138.5
7 19 ms 18 ms 20 ms be-37041-cs04.350ecermak.il.ibone.comcast.net [96.110.43.13]
8 20 ms 20 ms 29 ms be-2411-pe11.350ecermak.il.ibone.comcast.net [96.110.33.206]
9 23 ms 23 ms 21 ms 62.115.54.21
10 * * * Request timed out.
11 39 ms 49 ms 40 ms dls-b24-link.ip.twelve99.net [62.115.136.46]
12 55 ms 40 ms 39 ms packethost-ic346115-dls-b22.ip.twelve99-cust.net [62.115.176.219]
13 * * * Request timed out.
14 * * * Request timed out.
15 39 ms 40 ms 40 ms network-path-troubleshooting [139.178.82.70]
Trace complete.
遗憾的是,您无法从 tracert 获取丢包统计信息。但现在您已经获得了路径上的 IP 地址,您可以 ping 每个 IP 地址,以查看可能出现丢包的位置。
虽然这不如 Linux 用户通过 mtr 获得的一体化图像方便,但可以帮助您以类似的方式开始排查问题。
调试Windows客户端
如果您在使用 Windows 客户端连接 Equinix Metal 实例时遇到问题,好消息是,调试 Windows 客户端的方法与调试 Windows 服务器实例的方法相同。您可以使用 ping 和 tracert 等工具测试是否可以从客户端访问 Equinix Metal 中的目标 IP 地址。您可以通过在 Windows 桌面的搜索框中输入“cmd”来访问这些工具,或者使用 PowerShell(大多数现代 Windows 系统默认安装了 PowerShell)。即使您没有计算机的管理员帐户,您仍然可以通过“cmd”访问大多数这些工具。
请记住,许多 Windows 客户端都使用Microsoft Security Essentials 或其他个人防火墙软件来增强设备的防护级别。如果您遇到这种情况,并且您不是设备管理员,请咨询您的管理员,确认是否是已安装的防火墙导致了问题。
另请注意,您系统配置的不同信息也可能通过 Windows 客户端计算机上的图形用户界面获取。例如,您可以在当前活动网络连接属性的“TCP/IP”条目中找到您的路由条目和 IP 地址。您还可以在那里找到有关当前使用的 DNS 服务器的信息。如果您可以访问Equinix Metal中的某些主机,但无法访问其对应的 DNS 条目,则可能会出现问题。
调试 macOS 客户端
由于 macOS 很久以来都无法作为服务器操作系统使用,因此大多数(如果不是全部)与 macOS 相关的问题通常都会发生在客户端上。当然,作为桌面操作系统,大多数信息可以通过标准的 macOS UI 收集。我们先来看看这些。
IP 配置
打开“系统偏好设置”,点击“网络”。您将在左侧看到现有网络设备的列表。

选择当前活动的(即下方带有绿点的),然后点击“高级”。选择“TCP/IP”。在这里,您可以看到当前分配给客户端的 IPv4 和 IPv6 地址。

要截取图片的屏幕截图,请按下键盘上的 [control]+[shift]+[4] 键,并将鼠标悬停在窗口上。按下 [Space] 键。屏幕截图随后会保存在您的“桌面”文件夹中。
或者,您可以使用命令行来获取有关 macOS 网络配置的详细信息。在 Finder 中,点击“前往 / 实用工具”,然后双击“终端”。运行 ifconfig -a。
当您向我们的客户成功团队提交工单时,请务必提供您的网络配置截图或通过复制粘贴提供 ifconfig -a 的输出结果。
ping
要测试您的互联网连接(包括与 Equinix Metal 实例的连接),请在命令行中使用 ping 命令。
mloschwitz@mbp ~$ ping -c 4 8.8.8.8
PING 8.8.8.8 (8.8.8.8): 56 data bytes
64 bytes from 8.8.8.8: icmp_seq=0 ttl=119 time=18.501 ms
64 bytes from 8.8.8.8: icmp_seq=1 ttl=119 time=15.090 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=119 time=13.750 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=119 time=14.305 ms
--- 8.8.8.8 ping statistics ---
4 packets transmitted, 4 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 13.750/15.412/18.501/1.846 ms
示例命令将测试与 Google 公共 DNS 服务器之一 8.8.8.8 的互联网连接。请在此处输入您的Equinix Metal实例的 IP 地址,以测试客户端与该实例之间的连接。在向我们的客户成功团队提交工单时,请务必提供程序的输出。
路由追踪
Traceroute 在 macOS 系统上是一个开箱即用的命令。不过, Apple没有提供图形化界面,因此您必须借助命令行界面(即终端)。
在 Finder 中,点击“前往 / 实用工具”,然后双击“终端”。运行 traceroute <target>,并确保将“target”替换为您的目标地址,通常是您的 Equinix 实例的地址。
mloschwitz@mbp: ~$ traceroute 139.178.82.70
traceroute to 139.178.82.70 (139.178.82.70), 64 hops max, 52 byte packets
1 speedport.ip (192.168.2.1) 9.062 ms 5.931 ms 3.295 ms
2 p3e9bf1ac.dip0.t-ipconnect.de (62.155.241.172) 9.566 ms 8.038 ms 8.078 ms
3 217.5.117.34 (217.5.117.34) 14.226 ms 14.545 ms 12.501 ms
4 217.5.117.34 (217.5.117.34) 14.152 ms 12.571 ms 12.203 ms
5 80.157.204.58 (80.157.204.58) 15.995 ms 16.515 ms 15.120 ms
6 ae11.cr8-dal3.ip4.gtt.net (213.200.115.30) 135.016 ms 127.420 ms 128.161 ms
7 ip4.gtt.net (74.199.177.14) 141.398 ms 125.649 ms 126.382 ms
8 * * *
地铁
如果您正在寻找更美观的 traceroute 工具,macOS 用户可以通过 Homebrew 工具集安装 mtr 工具。要安装 Homebrew,请按照项目网站 https://brew.sh/ 上的说明进行操作。所有 brew 命令都需要在 macOS 命令行中运行。Homebrew 安装完成后,brew install mtr 将安装更美观、更便捷的 traceroute 工具。之后,您可以使用 mtr <address> 调用它,只需将“address”替换为您要连接的 IP 地址或主机名即可。运行 mtr 需要您拥有 sudo 权限。
netstat
连接问题可能表明您的路由表存在问题。遗憾的是,macOS 中的路由表没有图形化显示(例如 traceroute),因此您需要再次使用命令行来查看。
在 Finder 中,点击“前往/实用程序”,然后双击“终端”。运行“netstat -r”。请务必在回复我们的客户成功团队时(或在您打开原始请求时)包含该命令的完整输出。
mloschwitz@mbp ~$ netstat -r
Routing tables
Internet:
Destination Gateway Flags Netif Expire
default speedport.ip UGScg en0
127 localhost UCS lo0
localhost localhost UH lo0
169.254 link#13 UCS en0 !
192.168.2 link#13 UCS en0 !
192.168.2.1/32 link#13 UCS en0 !
FreeBSD
FreeBSD 是一款成熟的基于 UNIX 的操作系统,也是市场上最主流的 BSD 之一(与 NetBSD 和 OpenBSD 并列)。它常用于服务器,有时也用于桌面系统。我们将其纳入本指南,是为了演示如何在基于 UNIX 的系统(也可能在其他 BSD 上)上进行网络调试。
方便的是,FreeBSD 上的许多命令与 macOS 上的命令类似——考虑到 macOS 的核心,即 Darwin 操作系统内核,具有 FreeBSD 根源,这是有道理的。
IP 配置
在服务器和客户端上,可以使用命令 ifconfig -a 获取 FreeBSD 网络配置概览。向我们的客户成功团队提交工单时,请说明您是在 Equinix Metal 实例上使用 FreeBSD 还是在本地客户端上使用,并务必在工单中提供命令 ifconfig -a 的输出结果。
ping
用于检查远程主机可达性的 ping 命令与 FreeBSD 上的命令完全相同。ping 8.8.8.8 命令会检查运行该命令的主机是否可以访问 Google 的公共 DNS 服务器,而 ping 139.178.82.70 命令会检查 IP 地址 139.178.82.70 的可达性。
root@vserver1:~ # ping -c 4 139.178.82.70
PING 139.178.82.70 (139.178.82.70): 56 data bytes
64 bytes from 139.178.82.70: icmp_seq=0 ttl=128 time=135.466 ms
64 bytes from 139.178.82.70: icmp_seq=1 ttl=128 time=133.597 ms
64 bytes from 139.178.82.70: icmp_seq=2 ttl=128 time=135.923 ms
64 bytes from 139.178.82.70: icmp_seq=3 ttl=128 time=132.125 ms
--- 139.178.82.70 ping statistics ---
4 packets transmitted, 4 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 132.125/134.278/135.923/1.518 ms
路由追踪
traceroute 命令的功能与 macOS 上相同命令的功能完全相同。打开命令行并输入 traceroute 139.178.82.70 即可确定运行该命令的计算机与目标主机之间的路由。
mloschwitz@vserver1: ~$ traceroute 139.178.82.70
traceroute to 139.178.82.70 (139.178.82.70), 64 hops max, 40 byte packets
1 speedport.ip (192.168.2.1) 10.062 ms 5.931 ms 3.295 ms
2 p3e9bf1ac.dip0.t-ipconnect.de (62.155.241.172) 9.566 ms 8.038 ms 8.078 ms
3 217.5.117.34 (217.5.117.34) 14.226 ms 14.545 ms 12.501 ms
4 217.5.117.34 (217.5.117.34) 14.152 ms 12.571 ms 12.203 ms
5 80.157.204.58 (80.157.204.58) 15.995 ms 16.515 ms 15.120 ms
6 ae11.cr8-dal3.ip4.gtt.net (213.200.115.30) 135.016 ms 127.420 ms 128.161 ms
7 ip4.gtt.net (74.199.177.14) 141.398 ms 125.649 ms 126.382 ms
8 * * *
地铁
mtr 程序可通过 FreeBSD 的 ports 集合获取。请确保您的系统已安装 ports 集合,然后打开命令行并运行 cd /usr/ports/net/mtr 命令进入 /usr/ports/net/mtr 目录。接下来,运行 make install。之后,即可使用 mtr,其所需的参数与使用 Homebrew 在 macOS 或 Linux 上安装时相同。
netstat
要获取 FreeBSD 上所有已建立路由的列表,请在终端窗口中使用 netstat -r 命令。如有需要,请务必在提交给支持团队的工单中包含这些详细信息。
mloschwitz@vserver1:~ $ netstat -r
Routing tables
Internet:
Destination Gateway Flags Netif Expire
default prl-local-ns-serve UGS vtnet0
10.211.55.0/24 link#1 U vtnet0
freebsd-13.1-rc3-a link#1 UHS lo0
localhost link#2 UH lo0
Internet6:
Destination Gateway Flags Netif Expire
::/96 localhost UGRS lo0
default fe80::21c:42ff:fe0 UG vtnet0
localhost link#2 UHS lo0
::ffff:0.0.0.0/96 localhost UGRS lo0
fdb2:2c26:f4e4::/6 link#1 U vtnet0
fdb2:2c26:f4e4:0:2 link#1 UHS lo0
fe80::/10 localhost UGRS lo0
fe80::%vtnet0/64 link#1 U vtnet0
fe80::21c:42ff:fe4 link#1 UHS lo0
fe80::%lo0/64 link#2 U lo0
fe80::1%lo0 link#2 UHS lo0
ff02::/16 localhost UGRS lo0