记一次阿里云网络故障分析

1,174 阅读4分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

起因是阿里云跨境链路(美国ECS与北京ECS)有一个实例突然调用不通问题,最终没有给出明确的结果,重新起了个实例好了。 虽然没有定位到问题,但也学到了一些网络链路测试和分析的一些知识,特此分享。

mtr链路测试和分析

mtr(My traceroute)几乎是所有Linux发行版本预装的网络测试工具。其将pingtraceroute的功能合并,所以功能更强大。mtr默认发送ICMP数据包进行链路探测。您也可以通过-u参数来指定使用UDP数据包进行探测。相对于traceroute只会做一次链路跟踪测试,mtr会对链路上的相关节点做持续探测并给出相应的统计信息。所以,mtr能避免节点波动对测试结果的影响,所以其测试结果更正确,建议优先使用。

请用mtr测试,把结果发给我们帮您分析。

具体的请参考以下链接:

Windows下的mtr工具使用方法您参考:help.aliyun.com/knowledge_d… 工具(建议优先使用)

Linux下的mtr工具使用方法您参考:help.aliyun.com/knowledge_d… 命令行工具(建议优先使用)

请用mtr -r 加访问域名测试

# 1. 获取本地网络对应的公网IP
# 2. 正向链路测试(ping和mtr)
# 3. 反向链路测试(ping和mtr)
# 4. 测试结果分析

另外还有一个工具,traceroute也是几乎所有Linux发行版本预装的网络测试工具,用于跟踪Internet协议(IP)数据包传送到目标地址时经过的路径。

tracetcp端口可用性探测

请用tracetcp来测试一下看在那个设备有端口过滤,可以参考:help.aliyun.com/knowledge_d…

# 1. 实例安全组检查
# 2. 端口相关服务检查
netstat -ntpl|grep [$Port]
# 3. 检查目标服务器的防火墙配置
iptables -nL
# 4. 通过探测工具进行检查
traceroute [-n] -T -p [$Port] [$Host]
traceroute -n -T -p 22 223.5.5.5

探测结果如下,目标端口在第11跳之后就没有数据返回。

[root@mycentos ~]# traceroute -T -p 135 www.baidu.com
traceroute to www.baidu.com (111.13.100.92), 30 hops max, 60 byte packets
 1  * * *
 2  1X.X.X.X (1X.X.X.X)  4.115 ms  4.397 ms  4.679 ms
 3  2X.X.X.X (2X.X.X.X)  901.921 ms  902.762 ms  902.338 ms
 4  3X.X.X.X (3X.X.X.X)  2.187 ms  1.392 ms  2.266 ms
 5  * * *
 6  5X.X.X.X (5X.X.X.X)  1.688 ms  1.465 ms  1.475 ms
 7  6X.X.X.X (6X.X.X.X)  27.729 ms  27.708 ms  27.636 ms
 8  * * *
 9  * * *
10  111.13.98.249 (111.13.98.249)  28.922 ms 111.13.98.253 (111.13.98.253)  29.030 ms  28.916 ms
11  111.13.108.22 (111.13.108.22)  29.169 ms  28.893 ms 111.13.108.33 (111.13.108.33)  30.986 ms
12  * * *
13  * * *
14  * * *
15  * * *
16  * * *
17  * * *
18  * * *
19  * * *
20  * * *

tcpdump抓包

在故障复现的时候抓包,可以使用下面的方法抓包看一下。能帮助您查找问题

Windows:

  1. 在Wireshark 界面中,选择 Capture -》 Interface ,选择对应连接的内网网卡后 -》 Option -》 在 File 输入框中输入要保存的文件 1.cap,然后点击 start 开始抓包。
  2. 复现问题。
  3. 问题复现后,停止抓包。
  4. 将1.cap 压缩为zip格式提供给我们

Linux:

  1. 打开一个到ECS的ssh连接,并以root身份登录。 在该窗口运行下列命令 tcpdump host 服务器的域名或地址 -w /var/tmp/1.cap
  2. 复现问题。
  3. 使用 ctrl + c 终止窗口1 的 tcpdump 命令。
  4. 下载 /var/tmp/1.cap 并压缩成zip格式上传到工单中。 请参考:help.aliyun.com/knowledge_d…
# 执行以下命令,抓取eth0网卡22端口的交互数据
tcpdump -s 0 -i eth0 port 22
# 抓取eth1网卡发送给22端口的交互数据,并在控制台输出详细交互信息
tcpdump -s 0 -i eth1 -vvv port 22
# 抓取eth1网卡发送至指定IP地址的PING交互数据,并输出详细交互数据
tcpdump -s 0 -i eth1 -vvv dst 223.xx.xx.5 and icmp
# 抓取系统内所有接口数据并保存到指定文件
tcpdump -i any -s 0 -w test.cap

总结

出问题是先用tcpdump打开两端抓包,再用mtr和tracetcp测试,再复现问题,最后用ctrl + c 终止窗口,把信息发给我们。

您好,通过您发来的包分析,目前是中间设备拦截导致的。 1、 问题复现的时候 :IP_A访问IP_B的8080端口,出现rst的情况。 根据抓包看: 当IP_B收到这个rst报文,对方并没有始发该报文。 并且通过该rst报文的 ttl 和 ip序列号, 更证明了该报文不是阿里云发出的。 是中间公网运营商设备伪造发送的rst报文。

2、由于公网运营商网络,尤其您这个是跨境网络的情况下, 怀疑是运营商公网出口进行了rst报文的构造发送。