公网服务无法访问:DNS、NAT、ACL、运营商链路全流程
本文用于排查网站、VPN、API、邮件网关等内部服务经防火墙发布后,出现“公网打不开”“偶发超时”或“仅部分用户无法访问”的问题。适用于 DNAT、端口映射、虚拟 IP(VIP)等常见发布方式;不同设备厂商的对象名称不同,判断逻辑相同。
安全原则:仅发布必要服务和端口;SSH、RDP、网络设备管理等运维入口优先使用 VPN、零信任或堡垒机。任何变更均应在维护窗口实施,保留旧配置、日志和明确的回滚方案。
一、完整访问路径
外部用户 → DNS 解析 → 运营商/Internet → 公网 IP/上游路由
→ 防火墙 WAN 接口 → DNAT/VIP/端口映射 → ACL/安全策略
→ 内部路由/VLAN → 服务器本机防火墙 → 应用/IIS/Nginx
→ 按正确回程路径返回防火墙 → 外部用户
“公网打不开”不等于 NAT 有问题。必须确定请求停在上图的哪个环节,再进行对应处理。
二、先记录故障现象
| 项目 | 示例 | 作用 |
|---|---|---|
| 访问地址 | https://service.example.com:8443 |
域名、协议、端口和路径必须完整 |
| 首次故障时间 | 2026-08-18 10:25 | 与 DNS、设备和运营商变更比对 |
| 影响范围 | 所有人、某运营商、某地区、仅公司内 | 快速区分线路与本地问题 |
| 错误表现 | 超时、拒绝、403、404、502、证书错误 | 判断故障层级 |
| 最近变更 | DNS、NAT、策略、证书、应用更新 | 优先检查变更点 |
| 服务归属 | 负责人、内网 IP、监听端口 | 便于同步应用侧验证 |
常见现象判断
| 现象 | 优先检查方向 |
|---|---|
| 域名解析失败或指向旧 IP | DNS 记录、NS 委派、TTL、A/AAAA/CNAME |
| TCP 连接超时 | 运营商、上游 NAT、路由、DNAT、安全策略、回程路由 |
Connection refused |
目标端口未监听、映射目标错误、服务器主动拒绝 |
| HTTP 403 | WAF/CDN/ACL、IIS/Nginx 访问控制、目录权限 |
| HTTP 404 | 网络通常已通,检查站点绑定、Host 头、应用路由 |
| HTTP 502/504 | 反向代理、后端进程、应用超时、后端路由 |
| TLS 证书错误 | SNI、站点绑定、证书链、域名或服务器时间 |
| 仅部分用户失败 | IPv6、DNS 差异、CDN、运营商路由或地域策略 |
三、排障前准备
- 导出防火墙 NAT、策略、路由、地址对象和 WAN 配置;变更前后均保存。
- 记录服务器 IP、网关、路由、监听端口和本机防火墙规则。
- 准备两个真实外部测试点,例如手机关闭 Wi-Fi 后使用蜂窝网络,以及异地云主机或另一运营商宽带。
- 公司内访问公网域名不能代替外部测试:它可能受到代理、内部 DNS 或 NAT 回流影响。
- 排障时不要通过关闭所有防火墙规则来“试一下”。临时放行必须最小范围、记录工单、设置清理时间。
四、第一步:DNS 解析
1. 核对 A、AAAA、CNAME 和权威 DNS
Windows 可执行:
nslookup service.example.com
nslookup -type=ns example.com
nslookup -type=aaaa service.example.com
nslookup service.example.com 223.5.5.5
Linux/macOS 可执行:
dig service.example.com A +short
dig service.example.com AAAA +short
dig example.com NS +short
dig @权威DNS服务器 service.example.com A
逐项确认:
- A 记录是否指向当前公网 IPv4;前置 ESA/CDN 时,A/CNAME 通常应指向边缘服务,而非源站公网 IP。
- 是否残留错误 AAAA 记录。客户端优先使用 IPv6 时,IPv6 不通会造成“部分用户打不开”。
- 是否有多条 A 记录,其中一条已经失效,导致访问偶发成功。
- 域名注册商处的 NS 委派是否与实际 DNS 托管平台一致。
- 权威 DNS 已更新而公共 DNS 仍返回旧值时,通常等待 TTL 过期即可;不要反复修改同一记录。
2. DNS 通过后的判断
DNS 已解析到预期地址,只说明“用户找到了入口”,不代表端口、防火墙和应用可用。此时应转入公网链路与防火墙验证。
五、第二步:公网 IP 与运营商链路
1. 确认 WAN 是真实公网地址
在防火墙 WAN 接口查看地址,并从外部网络查询当前出口地址。两者必须匹配,或符合已知的上游静态路由/NAT 设计。
以下地址不具备直接互联网入站能力:
- 私网:
10.0.0.0/8、172.16.0.0/12、192.168.0.0/16; - 运营商级 NAT:
100.64.0.0/10。
若 WAN 为上述地址,常见原因是光猫仍路由、上级路由器做 NAT 或运营商 CGNAT。应由具备权限的人员改桥接、配置正确的上游转发/DMZ,或向运营商申请可入站的公网地址与端口能力。
2. 运营商与上游检查表
| 场景 | 典型表现 | 处理方向 |
|---|---|---|
| 光猫仍路由 | 防火墙 WAN 为 192.168.x.x | 检查桥接、DMZ 或上游端口映射 |
| CGNAT | WAN 为 100.64.x.x | 联系运营商申请公网 IP/企业线路 |
| 入站端口限制 | 特定端口始终不通 | 向运营商确认端口策略,采用合规替代方案 |
| 双出口回程错误 | 偶发超时、会话建立后中断 | 检查策略路由和对称回程 |
| 公网 IP 变更 | DNS、白名单、CDN 源站失效 | 同步更新记录和相关白名单 |
若防火墙日志中完全没有外部测试请求,优先检查本节,而不是服务器应用。
六、第三步:DNAT / VIP / 端口映射
将每项发布写成完整的四元映射,例如:
公网地址:端口 → 内部服务器地址:端口
203.0.113.10:443 → 10.20.30.40:443
必查项目
- NAT 是否绑定实际接收流量的 WAN 接口,而不是错误的备用出口或管理口。
- 公网 IP 是否已正确路由到该防火墙;公网地址池中的地址也需确认上游路由。
- 外部端口、内部 IP、内部端口是否准确,尤其是
443 → 8443这类非对称映射。 - 内部服务器是否使用固定地址或 DHCP 保留;地址变化是常见的间歇性故障原因。
- 是否有重复的“公网 IP + 协议 + 端口”映射;可能命中错误对象。
- 使用反向代理时,NAT 应指向反向代理入口,不应将后端应用端口直接暴露到公网。
必须同时查看会话与日志
从外部测试点发起一次访问,在防火墙中确认:
- 是否看到测试源 IP 建立新会话;
- 是否命中正确的 DNAT/VIP 对象;
- 转换后的目的 IP 和端口是否为预期服务器;
- 会话是否被拒绝,以及拒绝规则名称;
- 是否有服务器回包,以及回包是否转换回预期公网地址。
结论:看不到会话,问题多在上游;会话被拒绝,检查 ACL;会话转入内网但没有回包,检查服务器、内部路由和回程。
七、第四步:ACL、防火墙策略与安全服务
DNAT 仅负责地址转换,并不自动允许流量。多数防火墙仍需要单独的允许策略。
| 策略字段 | 核对内容 |
|---|---|
| 入/出接口或安全域 | 应为 WAN 到 LAN/DMZ;多区域设备注意 zone |
| 源地址 | 建议限定业务所需 IP/网段;临时放行必须到期回收 |
| 目的地址 | 应匹配 NAT/VIP 或发布对象 |
| 服务 | 精确到 TCP/UDP 与端口,避免用 ALL 排障 |
| 顺序 | Allow 规则不能被更宽泛的 deny 规则覆盖 |
| 安全功能 | IPS、WAF、地理限制、DDoS、防暴力破解是否阻断 |
| 日志 | 允许与拒绝策略都应记录会话日志 |
ESA/CDN/WAF 前置时
- 用户访问首先到边缘节点,边缘请求数与源站请求数未必相同。
- 源站防火墙应只允许可信边缘回源地址访问 Web 端口,避免绕过边缘直接攻击源站。
- 同步检查回源协议、源站端口、Host 头、SNI 和证书;边缘 52x 与源站 4xx/5xx 的排查入口不同。
- 不要因排障临时全网暴露源站后忘记收回;按平台公布的回源地址范围和验证方式恢复最小授权。
八、第五步:路由与回程路径
请求能到服务器,不代表它能正确返回。服务器回包必须经处理 DNAT 的同一防火墙或正确的对称路径返回,否则会话表无法正确转换。
Windows 检查命令:
ipconfig /all
route print
Get-NetTCPConnection -State Listen | Where-Object LocalPort -eq 443
Test-NetConnection 10.20.30.40 -Port 443
Linux 检查命令:
ip addr
ip route
ss -lntp | grep ':443'
curl -vk https://127.0.0.1/
重点检查:
- 默认网关是否指向发布防火墙,或是否配置了明确的返回策略路由;
- 多网卡服务器是否设置多个默认网关;
- 服务器 VLAN 与防火墙之间是否双向可达;
- 双出口、SD-WAN 或策略路由是否把回包导向另一条 WAN;
- 内网访问公网域名的 NAT 回流是否独立配置。回流失败不代表外网访问失败。
九、第六步:服务器与应用
1. 服务监听与本机防火墙
- 应用进程必须处于运行状态,并监听预期 TCP/UDP 端口。
- 监听地址不能仅为
127.0.0.1;否则 DNAT 到服务器内网 IP 时无法连接。 - Windows Defender 防火墙、firewalld 或 ufw 应允许来自防火墙/DMZ 的最小必要源和端口。
- 先从服务器本机访问,再从同网段主机访问,最后再验证公网路径。
2. IIS / Web 服务检查
- 站点状态为已启动,应用程序池没有停止或频繁回收。
- 站点绑定的端口、IP、主机名、HTTPS 证书和 SNI 与访问域名一致。
- 404、403、502/504 多数已不属于基础网络问题,应继续检查站点目录权限、Host 头、反向代理和应用日志。
- 查看 IIS 日志、Windows 事件查看器和应用日志;不要只依赖浏览器报错。
- 前置 ESA/CDN 时,确认回源 Host 头与 IIS 绑定相匹配。
十、外部测试与证据留存
| 目的 | 示例 | 说明 |
|---|---|---|
| DNS | nslookup service.example.com |
仅证明名称解析 |
| TCP 端口 | Test-NetConnection service.example.com -Port 443 |
验证 TCP 连接 |
| HTTP/TLS | curl -Ivk https://service.example.com/ |
查看证书和 HTTP 状态 |
| 指定 IP 验证 | curl -vk --resolve 域名:443:公网IP https://域名/ |
仅限已授权本单位资产,用于绕过公共 DNS 验证 |
| 路径辅助 | tracert 公网IP 或 traceroute 公网IP |
ICMP 可能被限制,只作辅助 |
每次测试保留:时间、测试网络、源 IP、目标域名/端口、命令结果、防火墙会话 ID 和日志截图。禁止对非授权第三方资产进行端口扫描或高频探测。
十一、一页式决策树
外部访问失败
├─ 域名是否解析到预期 IP?
│ ├─ 否:检查 A/AAAA/CNAME、TTL、NS 委派与权威 DNS
│ └─ 是:继续
├─ 防火墙是否看见外部测试会话?
│ ├─ 否:检查公网 IP、光猫/上游 NAT、CGNAT、运营商端口限制
│ └─ 是:继续
├─ 是否命中正确 NAT 与允许策略?
│ ├─ 否:检查 VIP/DNAT、策略顺序、服务对象、IPS/WAF/地理规则
│ └─ 是:继续
├─ 服务器是否收到连接并返回数据?
│ ├─ 否:检查内部路由、本机防火墙、监听地址与应用进程
│ └─ 是:继续
└─ 回包是否走正确出口?
├─ 否:检查默认网关、策略路由、双出口和 SNAT
└─ 是:检查 IIS/应用绑定、Host/SNI、证书和业务日志
十二、变更、验收与回滚
变更前最小记录
| 字段 | 记录内容 |
|---|---|
| 工单号与变更目的 | |
| 域名、DNS、TTL | |
| 公网 IP/端口与内网 IP/端口 | |
| NAT/VIP 对象、策略名称、允许源范围 | |
| 服务负责人、实施人、验收人 | |
| 维护窗口、回滚时间点、旧配置备份位置 |
验收清单
- [ ] 两个不同外部网络均能正确解析并访问服务。
- [ ] TCP、TLS、HTTP 状态与业务预期一致。
- [ ] 防火墙 NAT、Allow 策略、日志和会话命中正确。
- [ ] 服务器日志收到预期请求,未额外暴露不必要端口。
- [ ] ESA/CDN/WAF 场景下,源站访问控制已恢复为可信回源范围。
- [ ] 台账、拓扑、DNS 记录与变更工单已更新。
回滚原则
出现安全告警、业务异常或错误暴露时,应按变更单将 NAT、ACL、DNS 或反向代理恢复到变更前版本,并从外部重新验证。不要在故障期间持续叠加临时规则;应先回到已知可用状态,再分析根因。
十三、常见误区
- 能 ping 通并不说明 TCP/HTTPS 服务正常。
- 配置 NAT 不等于已放行安全策略。
- 内网能访问公网域名,不等于真正外网用户能访问。
- 浏览器返回 404 多数说明网络已经可达,应检查 Web 绑定或应用路由。
- 使用
Any-Any临时放行极易遗留风险,应最小授权并设置复核时间。 - 不查看防火墙会话和日志,只凭控制台猜测,无法定位真实断点。