首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >CVM 端口不通排障:用监听、抓包和握手证据代替“全部放开”

CVM 端口不通排障:用监听、抓包和握手证据代替“全部放开”

原创
作者头像
一只特立独行的兔先生
发布于 2026-10-20 13:08:19
发布于 2026-10-20 13:08:19
990
举报

结论:先确定报文断在哪一层

CVM 上服务已经启动,客户端却连不上,并不等于安全组配置错误。进程监听地址、操作系统防火墙、云侧规则、目标地址和客户端网络,都可能让同一个请求失败。

更稳妥的做法是:固定一个来源、一个目标地址和一个 TCP 端口,从监听状态开始,结合服务器抓包与客户端连接结果逐层定位。不要为了试错把所有端口向所有来源放开。

下面以 Linux CVM 上的 TCP 8080 服务为例。命令是排查模板,不代表已在读者实例上执行;需要已有业务服务,以及 ss、tcpdump、nc 等工具。生产操作前先保留现有管理连接和回退渠道。

1. 固定测试条件,避免查错对象

先记录客户端实际出口公网 IPv4、CVM 公网 IPv4、业务端口,以及故障发生时间。如果客户端经过 VPN、代理或公司 NAT,安全组看到的来源通常不是电脑的局域网地址。

本轮先使用公网 IPv4 直连,排除 DNS 和 IPv6 选路干扰。以下命令在客户端运行,把地址替换为自己的 CVM 公网 IPv4:

代码语言:bash
复制
SERVER_IP='替换为CVM公网IPv4'
nc -vz -w 3 "$SERVER_IP" 8080

连接成功只能说明 TCP 握手成功,不代表 HTTP 路由、鉴权或业务正确。超时也不能直接证明是安全组拦截;拒绝连接通常与无监听或主动拒绝有关,同样需要服务器证据。

2. 在服务器检查监听,而不是只看进程

在 CVM 执行:

代码语言:bash
复制
sudo ss -lntp 'sport = :8080'

重点看本地监听地址:

  • 没有监听记录:先检查服务启动日志和实际端口,改安全组解决不了问题。
  • 只有 127.0.0.1:8080:服务只接受本机回环连接,外部访问不会因为安全组放行而成功。
  • 0.0.0.0:8080:表示监听本机所有 IPv4 接口;仍需继续检查后续访问控制。
  • 只有 IPv6 监听:是否同时接受 IPv4 与程序及系统设置有关,不要仅凭一行输出下结论。

如果服务运行在容器中,还要确认宿主机发布端口与容器端口的映射。宿主机上的一次 ss 检查不能覆盖所有容器网络转发方式。

不要盲目把监听改成所有接口。业务仅供内网使用时,应绑定适当的内网地址,并限制可访问来源。

3. 云侧只开放必要的一条规则

腾讯云官方文档说明,安全组是有状态的数据包过滤机制。已允许连接对应的响应流量,不需要为了客户端临时端口再单独放开一大片入站端口。

确认查看的是这台 CVM 实际关联的安全组。用于本次 IPv4 排查的规则可以限定为:

  • 方向:入站。
  • 来源:客户端实际出口公网 IPv4 加 /32。
  • 协议端口:TCP:8080。
  • 策略:允许。

这里的来源不是服务器自己的地址,也不是经过 NAT 前的客户端私网地址。若出口地址发生变化,原来的 /32 规则也需要重新核对。

0.0.0.0/0 覆盖所有 IPv4 地址,不适合拿来长期开放管理或内部服务。还应检查已有规则的匹配顺序,以及实例关联的其他安全组;不要假设新加一条允许规则就一定是最终生效结果。

操作系统防火墙是另一层控制。按实例实际使用的 nftables、iptables 或 firewalld 查看规则,不要为了诊断关闭整个防火墙。

4. 用一次抓包连接两端证据

在服务器开启限定时长、限定端口的抓包,再从客户端执行一次前面的 nc 命令:

代码语言:bash
复制
sudo timeout 15 tcpdump -ni any -nn 'tcp port 8080'

命令不使用 -A 或 -X 输出载荷,也不写入抓包文件;输出仍可能包含地址等敏感信息,分享前要脱敏。繁忙机器应进一步按已确认的来源地址过滤。timeout 到期退出不等于业务故障。

按观测结果缩小范围:

  • 完全看不到对应 SYN:核对测试时间、目标 IP、来源出口和抓包过滤条件,再查云侧规则与链路。只能说报文未在此次抓包中出现,不能直接断言安全组有错。
  • 看到入站 SYN,但没有 SYN-ACK:重点核对监听、主机防火墙、容器转发和本机处理路径。
  • 看到 SYN-ACK 发出,却没有后续 ACK:检查回程路径及客户端侧过滤,别只反复修改入站规则。
  • 三次握手完整:转向应用协议、TLS、请求路径与服务日志,而不是继续扩大端口开放范围。

若使用负载均衡、代理或端口映射,中间设备可能改变服务器看到的来源和目标。应按实际拓扑解释抓包,不能照搬直连模型。

5. 验收与收尾

允许来源完成 TCP 连接后,再执行真实业务请求,检查预期状态码、响应内容或应用结果。随后从一个确实不在允许范围内的受控来源验证访问被拒绝,避免“能连通”掩盖访问面过大。

最后撤销临时测试规则,保留业务必需配置,并记录来源、端口、监听状态与抓包结论。一次有效的排障应当解释故障位置,而不是以“全部放开之后好了”作为最终答案。

官方参考

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

目录
  • 结论:先确定报文断在哪一层
  • 1. 固定测试条件,避免查错对象
  • 2. 在服务器检查监听,而不是只看进程
  • 3. 云侧只开放必要的一条规则
  • 4. 用一次抓包连接两端证据
  • 5. 验收与收尾
  • 官方参考
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档