1. 问题现象与初步排查
上周部署在云环境的应用突然无法访问,客户反馈连接超时。通过telnet测试发现目标端口完全不通,但服务器本身运行状态正常。这种云环境下的网络连通性问题,往往集中在安全组和主机防火墙两个层面。
首先用nmap快速扫描确认端口状态:
bash复制nmap -Pn -p 8080 203.0.113.45
返回结果显示端口被标记为filtered状态,说明存在中间设备阻断了连接。这个现象立刻让我把排查重点转向了网络安全策略。
2. 安全组策略深度检查
2.1 规则方向性验证
在云平台控制台检查安全组时,新手常犯的错误是只关注入站规则而忽略出站规则。实际上需要双向确认:
- 入站规则:确保源IP/端口范围正确
- 出站规则:检查目标端口是否放行
- 规则优先级:注意是否有更高优先级的拒绝规则
2.2 协议类型匹配
遇到过实际案例:用户配置了TCP放行规则,但应用实际使用UDP协议。建议用tcpdump抓包确认实际协议:
bash复制tcpdump -i eth0 port 8080 -vv
2.3 安全组绑定位置
云服务器可能绑定多个安全组,需检查:
- 是否绑定到正确的实例
- 是否绑定到正确的网卡(特别是多网卡场景)
- 安全组是否关联到正确的子网
3. 主机防火墙排查指南
3.1 iptables规则审计
即使云平台安全组放行,主机层面的iptables仍可能拦截。关键检查点:
bash复制iptables -L -n --line-numbers
iptables -L -n -t nat # 检查NAT规则
常见问题包括:
- 默认策略设置为DROP
- 新建的规则被后续规则覆盖
- 规则中的网卡绑定错误
3.2 firewalld配置要点
使用firewalld的系统需要注意:
bash复制firewall-cmd --list-all-zones
firewall-cmd --get-active-zones
特别注意:
- 接口是否分配到正确zone
- 服务定义是否包含目标端口
- 运行时配置与永久配置的差异
4. 网络链路全路径验证
4.1 路由追踪检查
通过traceroute确认网络路径:
bash复制traceroute -T -p 8080 203.0.113.45
观察在哪个跃点开始丢包,可能发现:
- 云平台内部的网络ACL拦截
- 中间经过的负载均衡设备策略
- 跨境链路的特殊限制
4.2 双端抓包分析
在客户端和服务端同时抓包:
bash复制# 客户端
tcpdump -i any host 203.0.113.45 and port 8080 -w client.pcap
# 服务端
tcpdump -i any port 8080 -w server.pcap
通过对比可确认:
- 请求是否到达服务器
- 是否收到TCP SYN/ACK
- 是否存在包过滤现象
5. 特殊场景处理方案
5.1 VPC对等连接问题
当流量跨越不同VPC时,需要检查:
- 对等连接的路由表配置
- 对端VPC的安全组规则
- 账号间的网络权限设置
5.2 负载均衡后端检测
如果通过LB访问,需确认:
- 健康检查配置是否正确
- 监听器协议版本匹配
- 后端服务器组权重分配
6. 验证命令速查表
| 检查项 | 命令示例 | 预期输出特征 |
|---|---|---|
| 端口连通性 | nc -zv 203.0.113.45 8080 |
Connection succeeded |
| 防火墙状态 | sudo ufw status numbered |
8080/tcp ALLOW |
| 进程监听 | `ss -tulnp | grep 8080` |
| 路由可达性 | mtr -P 8080 203.0.113.45 |
无100%丢包节点 |
| 云API查询 | aliyun ecs DescribeSecurityGroupAttribute --SecurityGroupId sg-xxx |
包含8080端口规则 |
7. 典型故障案例库
-
案例1:安全组规则配置正确但端口仍不通
- 原因:实例绑定了多个安全组,优先级更高的安全组有拒绝规则
- 解决:调整安全组优先级或合并规则集
-
案例2:本地可连但外网无法访问
- 原因:云平台网络ACL默认拒绝所有入站
- 解决:在VPC网络ACL中添加放行规则
-
案例3:间歇性连接失败
- 原因:连接数超过实例规格限制
- 解决:升级实例规格或调整内核参数
8. 进阶排查工具链
对于复杂网络环境,建议采用以下工具组合:
- 网络拓扑测绘:
bash复制
nmap -sV -T4 -O -A 203.0.113.45 - 流量分析:
bash复制tshark -i eth0 -f "port 8080" -Y "tcp.analysis.flags" - 连接追踪:
bash复制
conntrack -L -d 203.0.113.45
9. 配置管理最佳实践
根据多年运维经验,推荐以下配置规范:
- 安全组采用最小权限原则,按应用分层配置
- 所有变更通过基础设施即代码(IaC)工具管理
- 生产环境实施变更窗口和回滚机制
- 建立网络拓扑文档,标注所有策略设备位置
- 使用标签系统标记安全组用途和责任人
10. 监控与告警方案
建议配置以下监控指标:
- 端口可用性(每分钟探测)
- 安全组规则变更审计
- 防火墙规则命中计数
- TCP重传率异常告警
- 连接建立耗时监控
示例Prometheus监控规则:
yaml复制- alert: PortDown
expr: probe_success{instance=":8080"} == 0
for: 5m
labels:
severity: critical
annotations:
summary: "Port 8080 down on {{ $labels.instance }}"
在云环境网络问题排查中,最耗时的往往不是技术难点,而是排查路径的选择。建议建立标准化的排查流程:先安全组后主机防火墙,先基础连通性再深入分析。每次故障解决后,将新发现的问题特征补充到案例库中,长期积累形成有效的知识体系。