华为云 NAT 网关:私网 ECS 访问公网不通时的排查清单
现象
很多业务会把 ECS 放在私有子网里,不绑弹性公网 IP(EIP),统一走公网 NAT 网关的 SNAT 规则出公网:拉镜像、打补丁、调第三方 API、访问对象存储公网域名等。配置做完之后,常见的情况是:
ping公网 IP 不通,或能 ping 通 IP、域名却解析失败 / 访问超时curl/wget长时间无响应,或偶发成功、高峰期又失败- 同一 VPC 里部分子网的 ECS 正常,另一批子网完全出不去
- 控制台里 NAT 网关、SNAT 规则看起来都是「运行中」,但业务侧仍然报网络错误
公网 NAT 的出网链路经过「路由表 → SNAT → NAT 绑定的 EIP 带宽 → 安全组 / 网络 ACL → 操作系统」多层,任意一环不对都会表现为「访问公网不通」。下面按官方 FAQ 的排查顺序整理成可对照的清单。
原因对照(按出现频率)
| 可能原因 | 典型表现 | 先看哪里 |
|---|---|---|
| 路由表没有指向 NAT 的默认路由 | 整台机出网全挂;新建 NAT 时默认路由已存在导致自动下发失败 | VPC → 路由表 → 是否有 0.0.0.0/0 下一跳为该 NAT |
| ECS 仍绑定了 EIP | 出网不走 SNAT;与 DNAT 混用时入出路径不一致 | ECS 列表「IP 地址」列是否有公网 IP |
| SNAT 规则未覆盖该子网 / 状态异常 | 同 VPC 部分子网正常、部分不通 | NAT 详情 → SNAT 规则:网段、状态、绑定的 EIP |
| 安全组出方向过严 | 出方向非「全部」且未放行目标端口 | ECS 安全组 → 出方向规则 |
| 子网关联了网络 ACL | ACL 默认丢弃全部;关闭 ACL 默认规则仍生效 | 子网是否关联 ACL,入/出方向是否有放通 |
| NAT 所用 EIP 带宽打满 | 高峰丢包、超时,低峰又恢复 | 云监控看 EIP 出网带宽是否顶满 |
| SNAT 连接数超过规格 | 新建连接失败、间歇丢包 | 云监控 → NAT 网关 → SNAT 连接数 vs 规格上限 |
| NAT 网关状态非「运行中」 | 欠费、冻结等导致整体不可用 | NAT 列表状态列 |
| 本机 DNS / 防火墙 / 路由 | IP 通、域名不通;或本机 iptables 拦了 | resolv.conf、iptables/firewalld、默认路由 |
规格侧可对照:小型 SNAT 最大约 1 万连接,中型 5 万,大型 20 万,超大型 100 万(以产品规格文档当前数值为准)。连接数按「转换后 EIP + 源端口 + 目的 IP + 目的端口 + 协议」五元组计数。
步骤清单
1. 确认 NAT 与 SNAT 本身健康
- 打开「网络 → NAT 网关」,确认目标公网 NAT 状态为「运行中」。
- 进入该 NAT →「SNAT 规则」:
- 规则状态为「运行中」
- 「网段」覆盖 ECS 所在子网 CIDR(VPC 内每个子网只能有一条 SNAT)
- 已绑定可用的 EIP,且该 EIP 有带宽
- 购买 NAT 时,系统会尝试在 VPC 默认路由表自动写入
0.0.0.0/0 → 该 NAT。若购买前默认路由表里已经有0.0.0.0/0,自动添加会失败——这是很多人「买了 NAT、配了 SNAT 仍不通」的第一原因。
2. 核对路由表(优先查)
- 「网络 → 虚拟私有云 → 路由表」,打开 ECS 子网实际关联的那张表(不一定是默认表)。
- 确认存在目的地址
0.0.0.0/0、下一跳类型「NAT 网关」、下一跳为当前公网 NAT 的路由。 - 若
0.0.0.0/0指向了别的下一跳(例如旧的 VPN、对等连接旁路),需要改指向 NAT,或为该子网单独建自定义路由表并关联子网。 - 多网关场景下,确认流量所在子网关联的是「指向正确 NAT」的那张表,避免看错路由表。
在 ECS 上可辅助确认:
ip route
# 期望能看到 default via <VPC 网关>,由云上路由表决定下一跳到 NAT
curl -I --connect-timeout 5 https://www.huaweicloud.com
# 或先测 IP,再测域名,区分「链路」和「DNS」
3. 检查 ECS 是否还绑着 EIP
官方说明:同一台 ECS 同时配置了 SNAT 与直接绑定的 EIP 时,出云方向优先走 EIP。
若本意是「只走 NAT、统一出口 IP」,请解绑 ECS 上的 EIP,只保留 SNAT 规则上的 EIP。
和 DNAT 混用时更要小心:入云可能打到 DNAT 的 EIP,出云却走 ECS 直绑 EIP,两边地址不一致时,对端会话会对不上。排查「单向通、回程不通」时,优先把 ECS 直绑 EIP 解掉再复测。
4. 放通安全组与网络 ACL
安全组(有状态)
- 出方向:默认往往是「全部允许」。若被人改成白名单模式,需要放行业务实际访问的目的端口(HTTPS 443、HTTP 80、以及第三方 API 端口等)。
- 只出网、不做 DNAT 入站时,出方向通常是关键;入方向按最小权限即可。
网络 ACL(无状态)
- 子网关联了 ACL 后,默认规则是丢弃所有入/出方向报文。
- 需要同时配置入方向、出方向的允许规则;只放开一侧不够。
- 文档特别提醒:关闭网络 ACL 后,默认丢弃规则仍然生效,真正不用时请「取消关联子网」,而不是只关开关。
5. 看带宽与 SNAT 连接数
- 云监控 → 弹性公网 IP:出网带宽是否长期顶满。打满时表现为超时、重传、间歇失败,容易被误判成「路由坏了」。
- 云监控 → NAT 网关:查看 SNAT 连接数是否接近或超过当前规格上限。超限会导致丢包或新建连接失败,处理方式是升规格,并建议为 SNAT 连接数配告警。
- 需要对外提供服务(DNAT)时,再额外确认 ECS 上业务端口处于 LISTEN(
ss -lntup/netstat -ntulp);纯出网 SNAT 场景一般不依赖本机监听端口。
6. 本机侧快速排除
在 ECS 内按「先 IP、后域名」测:
# 1)链路:换一个稳定的公网 IP 测连通(按实际可用探测目标调整)
ping -c 3 8.8.8.8
# 2)DNS
cat /etc/resolv.conf
# 公共镜像通常走华为云内网 DNS,一般不影响解析公网域名
# 3)本机防火墙(示例)
sudo iptables -L -n
# 或 firewall-cmd --list-all
若 IP 通、域名不通,优先查 DNS / hosts;若 IP 也不通,回到路由、SNAT、安全组、ACL、带宽与连接数。操作系统防火墙、错误的静态路由、Network 与 NetworkManager 同时启用冲突等,也会造成「云上配置都对、本机仍出不去」。
注意点
- SNAT 才是私网 ECS 出公网的主路径;只创建 NAT、不配 SNAT,或 SNAT 网段选错子网,都会表现为「明明买了 NAT 却用不了」。
- 一个子网一条 SNAT;换 EIP 或改网段时先确认没有冲突规则。
- SNAT 与「全端口」DNAT 不要共用同一个 EIP:全端口 DNAT 会占满端口,SNAT 无法再用,容易出现业务互相抢端口。
- NAT 支持 TCP / UDP / ICMP;不支持 ALG,GRE 以及 IPsec 的 ESP/AH 也不能走 NAT 网关。需要这类隧道时,换其他出网方案。
- 部分运营商会拦截一批高危端口(如 TCP 445、135–139 等),即使 NAT 配置正确也可能访问失败,尽量避开这些端口。
- 我习惯排查时固定顺序:路由表 → 是否绑 EIP → SNAT 覆盖范围 → 安全组出方向 → 网络 ACL → 带宽 / 连接数 → 本机 DNS 与防火墙。先云上、后本机,能少绕很多圈。
- 具体菜单名称、规格数值和控制台路径以华为云当前文档与控制台为准;区域差异(例如部分区域带宽上限说明)以对应区域产品说明为准。
参考文档
- 点赞
- 收藏
- 关注作者
评论(0)