能ping通ECS实例但端口不通的排查方法

本文介绍如何进行排查能ping通ECS实例但端口不通的问题。

操作场景

通过客户端访问目标ECS实例时,如果能ping通ECS实例但业务端口无法访问,则可能是链路中相关节点对相应端口做了拦截所致。您可以参考以下步骤进行排查处理。

  1. 步骤一:检查ECS实例安全组规则

  2. 步骤二:检查端口监听状态及相关服务

  3. 步骤三:检查ECS防火墙设置

  4. 步骤四:通过探测工具进行检查

步骤一:检查ECS实例安全组规则

目标ECS实例端口不通时,可能是安全组规则中未放行该端口(如80端口),您可以参考以下步骤,检查ECS实例安全组规则。

  1. 登录ECS管理控制台

  2. 在左侧导航栏,选择实例与镜像 > 实例

  3. 在页面左侧顶部,选择目标资源所在的地域。地域

  4. 在ECS实例列表页面,单击目标ECS实例ID。

  5. 在ECS实例详情页面,单击安全组页签。

  6. 安全组列表页签下,单击安全组ID。

  7. 在安全组规则页面,查看入方向规则是否开放目标端口(如80)。

    2023-06-04_16-56-00..png

步骤二:检查端口监听状态及相关服务

目标ECS实例端口不通时,可能该服务端口未被正常监听(服务未启动),您可以参考以下步骤,检查ECS实例安全组规则。

Linux实例

本操作以CentOS 7.9为例,其他版本的Linux系统操作可能有所差异。

  1. 远程连接Linux实例。

    具体操作,请参见通过密码或密钥认证登录Linux实例

  2. 执行如下命令,查看端口是否正常被监听。

    netstat -an | grep [$Port]    # [$Port]请替换为实际的端口号

Windows实例

本操作以Windows Server 2012为例,其他版本的Windows Server系统操作类似。

  1. 远程连接Windows实例。

    具体操作,请参见通过密码或密钥认证登录Windows实例

  2. 在Windows PowerShell中执行如下命令,查看端口是否正常被监听。

    netstat -ano | findstr "[$Port]"   # [$Port]请替换为实际的端口号
    • 如果返回如下信息,则说明80端口被正常监听,请继续执行检查ECS防火墙设置

      2023-06-04_17-36-44..png
    • 如果返回的不是以上信息,表示80端口未处于监听状态(服务未启动)。您需要重启该服务,若服务重启还是未解决问题,请继续执行检查ECS防火墙设置

步骤三:检查ECS防火墙设置

目标ECS实例端口不通时,可能是ECS防火墙拦截了该端口,您可以参考以下步骤,检查ECS实例防火墙设置。

Linux实例

本操作以CentOS 7.9为例,其他版本的Linux系统操作可能有所差异。

  1. 远程连接Linux实例。

    具体操作,请参见通过密码或密钥认证登录Linux实例

  2. 执行如下命令,查看防火墙状态。

    systemctl status firewalld
    • 如果回显中出现Active: inactive (dead)信息,说明防火墙为关闭状态,无需再进行任何操作。

    • 如果回显中出现Active: active (running)信息,说明防火墙已开启,请继续执行步骤3

  3. 执行如下命令,查看防火墙中已开放的端口。

    firewall-cmd --list-all
    • 如果回显中出现ports: 80/tcp信息,说明防火墙规则中已放行80端口,无需再进行任何操作。

      2023-06-04_19-33-53..png
    • 如果回显中没有ports: 80/tcp信息,请执行如下命令,放行80端口。

      firewall-cmd --zone=public --add-port=80/tcp --permanent

      若返回结果为success,表示已经放行TCP 80端口。

Windows实例

本操作以Windows Server 2012为例,其他版本的Windows Server系统操作类似。

  1. 远程连接Windows实例。

    具体操作,请参见通过密码或密钥认证登录Windows实例

  2. 单击左下角的服务器管理..png图标,打开服务器管理。

  3. 选择右上角的工具(T)>高级安全 Windows防火墙

    2023-05-28_20-21-16..png
  4. 查看防火墙状态。

    1. 如果防火墙处于关闭状态,无需进行任何操作。

      2023-06-04_18-49-00..png
    2. 如果防火墙状态为已启用,请继续以下操作。

      1. 高级安全 Windows防火墙页面,单击入站规则

      2. 查看Windows 远程管理-兼容模式(HTTP-In)的状态。

        • 如果协议已启动,无需进行任何操作。

        • 如果该规则未启用,请右键单击该规则,然后单击启用规则(E)

          2023-06-04_18-58-43..png

步骤四:通过探测工具进行检查

本地客户端无法访问端口可能是链路中的相关节点拦截了端口所致,请利用端口可用性探测工具进行测试,验证是否有节点拦截了端口。

使用端口可用性探测工具

本地客户端为Linux系统

Linux系统中,通常可以通过traceroute来进行端口可用性探测。traceroute用于跟踪Internet协议(IP)数据包传送到目标地址时经过的路,通过发送TCP数据包向目标端口进行探测,以检测从数据包源到目标服务器的整个链路上相应端口的连通性情况。

安装traceroute

sudo yum install -y traceroute

traceroute命令

常用traceroute命令格式如下所示。

traceroute [-n] -T -p <目标端口号> <Host>
    说明
    • -n:直接使用IP地址而非主机名称(禁用DNS反查)。

    • -T:通过TCP探测。

    • -p:设置探测的端口号。

    • <目标端口号>:需要探测的端口号,比如80。

    • <Host>:需要探测的目标服务器地址,比如192.168.XXX.XXX

测试示例

traceroute的示例命令和返回结果如下:

[test@centos~]# traceroute -n -T -p 22 223.5.XXX.XXX
traceroute to 223.5.XXX.XXX (223.5.XXX.XXX), 30 hops max, 60 byte packets
 1 5X.X.X.X 0.431 ms 0.538 ms 0.702 ms
 2 10.88.XXX.XXX 0.997 ms 1.030 ms 10.88.XXX.XXX 1.309 ms
 3 58.96.XXX.XXX 0.393 ms 0.390 ms 58.96.XXX.XXX 0.423 ms
 4 202.123.XXX.XXX 1.110 ms 202.123.XXX.XXX 0.440 ms 0.440 ms
 5 63.218.XXX.XXX 1.744 ms 63.218.XXX.XXX 1.076 ms 1.232 ms
 6 63.223.XXX.XXX 1.832 ms 63.223.XXX.XXX 1.663 ms 63.223.XXX.XXX 1.616 ms
 7 63.223.XXX.XXX 2.776 ms 63.223.XXX.XXX 1.585 ms 1.606 ms
 8 * * 202.97.XXX.XXX 2.537 ms
 9 202.97.XXX.XXX 6.856 ms * *
10 * * *
11 * * *
12 * * 119.147.XXX.XXX 8.738 ms
13 119.147.XXX.XXX 8.248 ms 8.231 ms *
14 * 42.120.XXX.XXX 32.305 ms 42.120.XXX.XXX 29.877 ms
15 42.120.XXX.XXX 11.950 ms 42.120.XXX.XXX 23.853 ms 42.120.XXX.XXX 29.831 ms
16 42.120.XXX.XXX 11.007 ms 42.120.XXX.XXX 13.615 ms 42.120.XXX.XXX 11.956 ms
17 42.120.XXX.XXX 21.578 ms 42.120.XXX.XXX 13.236 ms *
18 * * 223.5.XXX.XXX 12.070 ms !X

本地客户端为Windows系统

在Windows系统中,您可通过tracetcp进行端口可用性探测。tracetcp同样通过发送TCP数据包进行链路探测,以分析链路是否存在中间节点对目标端口做了阻断。

安装tracetcp

  1. WinPcap官网下载并安装WinPcap library。

  2. tracetcp官网下载tracetcp。

  3. 将下载的tracetcp解压到C:\Windows目录下。

    重要

    如果解压到非系统目录,则需要手动修改系统环境变量,以确保指令可以直接调用。

使用方法

在Windows PowerShell或cmd命令行中输入tracetcp命令,常用tracetcp命令格式如下所示。

tracetcp <IP>:<Port>
    说明
    • <IP>:指目标服务器的IP地址或者域名。

    • <Port>:指需要探测的目标端口。

    关于更多tracetcp参数说明,您可以通过tracetcp -?命令查看帮助。

测试示例

tracetcp的示例命令和返回结果如下:

C:\ >tracetcp www.aliyun.com:80
Tracing route to 140.205.63.8 on port 80
Over a maximum of 30 hops.
1 3 ms 4 ms 3 ms 10.102.XXX.XXX
2 13 ms 3 ms 4 ms 10.102.XXX.XXX
3 3 ms 3 ms 2 ms 140.205.XXX.XXX
4 4 ms 3 ms 3 ms 180.163.XXX.XXX
5 5 ms 4 ms 7 ms 101.95.XXX.XXX
6 6 ms 5 ms 7 ms 124.74.XXX.XXX
7 8 ms 8 ms 8 ms 124.74.XXX.XXX
8 10 ms 10 ms 8 ms 114.80.XXX.XXX
9 9 ms 9 ms 11 ms 42.120.XXX.XXX
10 * * * Request timed out.
11 Destination Reached in 8 ms. Connection established to 140.205.XXX.XXX
Trace Complete.

探测结果的案例分析

当相关端口在某一跳被阻断,则之后各跳均不会有返回数据,据此就可以判断出异常节点。您可以根据相应节点信息,在淘宝IP地址库查询归属运营商进行问题反馈。

案例一:

探测结果:目标端口在第3跳之后就没有数据返回,说明相应端口在该节点被阻断。

探测结果分析:经查询该节点为内网IP,所以推断是本地网络相关安全策略所致,需要联系本地网络管理部门做进一步排查分析。

C:\&gt;tracetcp www.aliyun.com:135
Tracing route to 115.102.XXX.XXX on port 135
Over a maximum of 30 hops.
1       3 ms    3 ms    3 ms    10.102.XXX.XXX
2       4 ms    3 ms    3 ms    10.102.XXX.XXX
3       3 ms    3 ms    3 ms    140.205.XXX.XXX
4       *       *       *       Request timed out.
5       *       *       *       Request timed out.
6       *       *       *       Request timed out.
7       *       *       *       Request timed out.
8       *       *       *       Request timed out.
9       *       *       *       Request timed out.
10      *       *       *       Request timed out.
11      *       *       *       Request timed out.
12      *       *       *       Request timed out.
Trace Complete.

案例二

探测结果:探测结果如下,目标端口在第11跳之后就没有数据返回,说明相应端口在该节点被阻断。

探测结果分析:经查询该节点归属北京移动,需要您自行向运营商反馈。

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