跳至内容

网络路径故障排除第二部分 - 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 服务器实例的方法相同。您可以使用 pingtracert 等工具测试是否可以从客户端访问 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 配置

打开“系统偏好设置”,点击“网络”。您将在左侧看到现有网络设备的列表。

Example Network Panel in MacOS

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

Example IPv4 and IPv6 Address Assignments

要截取图片的屏幕截图,请按下键盘上的 [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
此页面有帮助吗?