
CVM 上服务已经启动,客户端却连不上,并不等于安全组配置错误。进程监听地址、操作系统防火墙、云侧规则、目标地址和客户端网络,都可能让同一个请求失败。
更稳妥的做法是:固定一个来源、一个目标地址和一个 TCP 端口,从监听状态开始,结合服务器抓包与客户端连接结果逐层定位。不要为了试错把所有端口向所有来源放开。
下面以 Linux CVM 上的 TCP 8080 服务为例。命令是排查模板,不代表已在读者实例上执行;需要已有业务服务,以及 ss、tcpdump、nc 等工具。生产操作前先保留现有管理连接和回退渠道。
先记录客户端实际出口公网 IPv4、CVM 公网 IPv4、业务端口,以及故障发生时间。如果客户端经过 VPN、代理或公司 NAT,安全组看到的来源通常不是电脑的局域网地址。
本轮先使用公网 IPv4 直连,排除 DNS 和 IPv6 选路干扰。以下命令在客户端运行,把地址替换为自己的 CVM 公网 IPv4:
SERVER_IP='替换为CVM公网IPv4'
nc -vz -w 3 "$SERVER_IP" 8080连接成功只能说明 TCP 握手成功,不代表 HTTP 路由、鉴权或业务正确。超时也不能直接证明是安全组拦截;拒绝连接通常与无监听或主动拒绝有关,同样需要服务器证据。
在 CVM 执行:
sudo ss -lntp 'sport = :8080'重点看本地监听地址:
如果服务运行在容器中,还要确认宿主机发布端口与容器端口的映射。宿主机上的一次 ss 检查不能覆盖所有容器网络转发方式。
不要盲目把监听改成所有接口。业务仅供内网使用时,应绑定适当的内网地址,并限制可访问来源。
腾讯云官方文档说明,安全组是有状态的数据包过滤机制。已允许连接对应的响应流量,不需要为了客户端临时端口再单独放开一大片入站端口。
确认查看的是这台 CVM 实际关联的安全组。用于本次 IPv4 排查的规则可以限定为:
这里的来源不是服务器自己的地址,也不是经过 NAT 前的客户端私网地址。若出口地址发生变化,原来的 /32 规则也需要重新核对。
0.0.0.0/0 覆盖所有 IPv4 地址,不适合拿来长期开放管理或内部服务。还应检查已有规则的匹配顺序,以及实例关联的其他安全组;不要假设新加一条允许规则就一定是最终生效结果。
操作系统防火墙是另一层控制。按实例实际使用的 nftables、iptables 或 firewalld 查看规则,不要为了诊断关闭整个防火墙。
在服务器开启限定时长、限定端口的抓包,再从客户端执行一次前面的 nc 命令:
sudo timeout 15 tcpdump -ni any -nn 'tcp port 8080'命令不使用 -A 或 -X 输出载荷,也不写入抓包文件;输出仍可能包含地址等敏感信息,分享前要脱敏。繁忙机器应进一步按已确认的来源地址过滤。timeout 到期退出不等于业务故障。
按观测结果缩小范围:
若使用负载均衡、代理或端口映射,中间设备可能改变服务器看到的来源和目标。应按实际拓扑解释抓包,不能照搬直连模型。
允许来源完成 TCP 连接后,再执行真实业务请求,检查预期状态码、响应内容或应用结果。随后从一个确实不在允许范围内的受控来源验证访问被拒绝,避免“能连通”掩盖访问面过大。
最后撤销临时测试规则,保留业务必需配置,并记录来源、端口、监听状态与抓包结论。一次有效的排障应当解释故障位置,而不是以“全部放开之后好了”作为最终答案。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。