CGNAT 是什么
运营商级 NAT(CGNAT,RFC 6598)指运营商在用户侧就做一层地址转换:给家宽路由器分配的 WAN 地址不再是公网地址,而是 100.64.0.0/10 这段共享地址空间里的地址,再由运营商设备统一转成少量公网地址。因此家宽路由器的 WAN 口如果显示 100.64.x.x,说明你处在这一层大内网之后。
为什么需要溯源三元组
CGNAT 下成千上万个用户可能共用同一个公网地址,仅凭公网 IP 无法定位到具体用户。对外溯源必须依靠「公网 IP + 源端口 + 时间戳」这三个要素,由运营商侧的会话日志还原到内层地址与端口。这也意味着自己做服务端日志时,必须记录客户端的真实源 IP 与源端口,并在需要时保留足够长的时间。
对应用与运维的影响
第一,外网主动访问内网设备更困难:不仅要过自己的路由器端口映射,还要过运营商这层 NAT,多数家宽无法直接开放端口。第二,基于公网 IP 的访问控制会失效:大量用户共享同一地址,按 IP 封禁会误伤无辜。第三,日志分析要把内层地址与公网地址对照着看,否则统计口径会失真。
基本信息
| 地址段 | 100.64.0.0/10(100.64.0.0 – 100.127.255.255) |
|---|---|
| 规范 | RFC 6598(共享地址空间)、RFC 6888(CGN 要求) |
| 与私网区别 | 不属于 RFC1918,设备不应默认路由该段 |
| 溯源要素 | 公网 IP + 源端口 + 时间戳 |
| 常见表现 | 家宽路由器 WAN 地址为 100.64.x.x |
典型使用场景
- 家宽用户判断自己是否在运营商大内网之后
- 自建服务无法被外网访问时,判断是否存在两层 NAT
- 日志与审计:用公网 IP 与端口解释某个外连的真实来源
- 内容平台风控:识别大量请求来自同一公网地址的 CGNAT 场景
- 组网工具对比:某些 Mesh 方案默认使用 100.64/10 内地址
判定与对比
判定与对比
# 出口对比
curl -s ifconfig.me # 公网侧看到的地址
ip -4 addr | grep '100\.' # 本机是否拿到 100.64.x.x
# 典型:本机 100.64.12.34 → 公网回显 203.0.113.9
# 说明本机地址属于共享空间,公网出口由运营商统一分配地址性质对照
| 地址段 | 性质 | 能否被公网访问 | 备注 |
|---|---|---|---|
| 10/8、172.16/12、192.168/16 | RFC1918 私网 | 否 | 企业内网常用 |
| 100.64.0.0/10 | 共享地址空间(CGNAT) | 否 | 运营商与组网工具使用 |
| 169.254.0.0/16 | 链路本地 | 否 | APIPA 自动配置 |
| 公网地址 | 全球可路由 | 可以 | 需运营商分配 |
部分组网工具(如基于 WireGuard 的 Mesh 方案)默认在 100.64.0.0/10 内给节点分配虚拟地址,与运营商 CGNAT 段相同但相互独立。看到 100.x 的地址时先判断它是运营商 WAN 地址还是组网工具虚拟地址。
100.64.0.0/10 不是 RFC1918 私网:在企业内网规划中使用该段会与运营商网络或组网工具冲突,而且设备默认不应路由它,混用后的故障排查非常困难。