第194篇:CGNAT(运营商级 NAT)原理与端口块分配

关键词

CGNAT、NAT444、端口块分配、日志溯源、地址共享、DS-Lite、HA、CGNAT 高可用


一、CGNAT 概述

1.1 什么是 CGNAT

CGNAT(Carrier-Grade NAT,运营商级 NAT),也称为 NAT444(NAT44+NAT44+),是运营商为解决 IPv4 地址枯竭而部署的大规模地址转换方案:

用户       CPE NAT       运营商 NAT          Internet
10.x.x.x ─→ 100.64.x.x ─→ 203.0.113.x ─→ 公网

         NAT44(第一次)  CGNAT(第二次)

1.2 NAT444 地址规划

IANA 保留的运营商 NAT 地址段(RFC 6598):
  100.64.0.0/10(100.64.0.0 - 100.127.255.255)

使用方式:
  BRAS/DHCP 分配 100.64.0.0/10 内的地址给用户
  CGNAT 将 100.64.x.x 转换为真正的公网 IP

1.3 为什么需要 NAT444 而非传统 NAT

对比项 传统 NAT(CPE 级) CGNAT(运营商级)
部署位置 CPE 路由器 运营商网络内部
共享粒度 一对用户 数百至数千用户共享一个公网 IP
端口管理 无管控 端口块分配、限制
日志要求 合规溯源(公安部 82 号令)
高可用 无要求 设备级 + 会话级 HA

二、端口块分配(Port Block Allocation, PBA)

2.1 基本原理

传统 NAT 为每个连接动态分配端口,CGNAT 为每个用户预分配一个端口块

公网 IP: 203.0.113.1(65535 个端口)

端口块分配(block-size=1024): | 用户 | 端口块范围 | 可用端口数 | | --- | --- | --- | | 用户 A 用户 B 用户 C ... 用户 63 | 1024-2047 2048-3071 3072-4095 ... 64512-65535 | 1024 1024 1024 ... 1024 |

一个公网 IP 可服务 63 个用户(block-size=1024)

2.2 端口块分配方式

分配方式 说明 优点 缺点
静态 PBA 用户上线即分配固定端口块 确定性强 端口利用率低
动态 PBA 用户有流量时分配端口块 端口利用率高 日志记录复杂
增量 PBA 基础块 + 按需扩展 灵活平衡 算法复杂

2.3 配置示例

# 华为 VRP CGNAT 配置
nat instance CGNAT id 1
 nat address-group 1 203.0.113.1 203.0.113.100  # 公网地址池
 port-range 1024 65535 block-size 1024            # 端口块大小 1024
 port-range extend                                 # 支持端口块扩展
 #
 log enable
 log session log-type port-block                  # 端口块日志
 log session log-type port-allocate                # 端口分配日志(可选)
!
# 接口绑定
interface GigabitEthernet0/0/0
 nat bind instance CGNAT

三、CGNAT 日志管理与溯源

3.1 日志类型

类型一:端口块分配日志(推荐)
  日志量:每用户上线/下线 2 条
  内容:用户 IP → 公网 IP:端口块

类型二:逐会话日志(可选)
  日志量:每个 TCP/UDP 连接 2 条
  内容:五元组信息

类型三:NAT 事件日志
  日志量:端口耗尽、资源超限等异常事件

3.2 溯源流程

溯源需求:公安机关需要查找 203.0.113.1:1025 在某时刻的访问者

步骤 1:查询端口块分配日志
  日志查询:203.0.113.1:1025 → 属于端口块 1024-2047
  归属用户:100.64.1.1(MAC: aaaa-bbbb-cccc)

步骤 2:查询 RADIUS 日志
  用户 100.64.1.1 在 2024-03-15 10:00:00 上线
  对应宽带账号:user001@provider
  装机地址:XX 省 XX 市 XX 小区 XX 栋 XX 室

步骤 3:完整溯源链
  公网 IP:端口 → CGNAT 日志 → 私网 IP → RADIUS 日志 → 用户账号 → 物理地址

3.3 日志格式示例(Syslog)

<134>1 2024-03-15T10:00:00Z CGNAT1 NAT - -
  [NAT@32473 src="100.64.1.1" sport="12345"
   dst="203.0.113.1" dport="1024"
   protocol="6" action="create"
   port-block-start="1024" port-block-size="1024"]

# 关键字段含义
src: 用户私网 IP
sport: 用户源端口
dst: 转换后公网 IP
dport: 转换后端口
port-block-start: 端口块起始
port-block-size: 端口块大小

四、CGNAT 高可用方案

4.1 主备模式(Active/Standby)

           ┌──────────────────┐
           │   浮动路由/VIP    │
           └────────┬─────────┘
                    │
         ┌──────────┴──────────┐
         │    主 CGNAT         │  ← 处理所有流量
         │  (Active)           │
         └─────────────────────┘

         ┌─────────────────────┐
         │    备 CGNAT         │  ← 备用,定期同步会话表
         │  (Standby)          │
         └─────────────────────┘
特性 说明
切换时间 1-3 秒(VRRP + 会话同步)
会话保持 主备间同步会话表
端口块同步 主备分配一致的端口块
适用场景 中小型 CGNAT 部署

4.2 负载分担模式(Active/Active)

      ┌──────────┴──────────┐
      │   负载均衡器/LB     │
      └──────────┬──────────┘
                 │
┌────┴────┐ ┌────┴────┐ ┌────┴────┐
CGNAT-1 1/3 流量 CGNAT-2 1/3 流量 CGNAT-3 1/3 流量
特性 说明
流量分发 ECMP / LB 按用户或连接分发
会话表独立 每台 CGNAT 只维护自己的会话
故障切换 故障设备上用户需重连
适用场景 大规模部署(>100 万用户)

4.3 会话同步机制

主备会话同步流程:
1. 主 CGNAT 收到新连接,建立 NAT 转换条目
2. 主 CGNAT 将会话信息同步给备 CGNAT
3. 备 CGNAT 保存会话信息,但不激活
4. 主故障时,备接管流量,使用同步的会话表继续转发

同步内容:
  - 私网 IP:端口 ↔ 公网 IP:端口
  - 协议类型(TCP/UDP/ICMP)
  - 超时时间
  - 端口块分配记录

五、CGNAT 性能优化

5.1 性能指标

典型 CGNAT 设备性能指标:

指标                    规格
──────────────────────────────
最大并发连接数:          1 亿
新建连接速率:            500 万/秒
吞吐量:                  1 Tbps
用户容量:                500 万
端口块分配速率:          10 万/秒

5.2 优化策略

1. 硬件加速
   - 专用 NP/FPGA 处理 NAT 转换
   - 流表使用 TCAM 查表

2. 软件优化
   - 快速路径(Fast Path/数据面)
   - 控制面与数据面分离

3. 连接超时调优
   TCP:默认 300 秒可调至 60-120 秒
   UDP:默认 60 秒可调至 30 秒
   ICMP:默认 20 秒

4. 端口复用
   同一个 (公网IP, 对端IP, 对端端口) 组合的 TCP 连接
   可以复用同一源端口(Full Cone 限制需注意)

六、CGNAT 与其他过渡技术的关系

技术 关系说明
NAT444 (CGNAT) IPv4 地址共享,最常见的方案
DS-Lite IPv4 over IPv6,CGNAT 作为 AFTR
NAT64 IPv6-only 用户访问 IPv4 资源
464XLAT CLAT + NAT64,多用于移动网络
Lightweight 4over6 类似 DS-Lite,但 CPE 侧也有绑定

七、总结

知识点 核心要点
NAT444 用户私网 → 100.64.x.x → 公网 IP 两级转换
端口块分配 每用户固定端口块,可用 1024/2048 端口
日志溯源 端口块日志 + RADIUS 日志实现完整链条
高可用 主备(会话同步)或负载分担(Active/Active)
CGNAT vs 传统 NAT 运营商级:大容量、高可靠、合规日志

八、思考

  1. 什么是 NAT444?为什么需要两级 NAT 转换?
  2. 端口块分配相比传统逐连接端口分配有什么优势?
  3. 如果公安机关要求追溯某个公网 IP:端口的访问者,完整的溯源链是怎样的?
  4. CGNAT 主备切换时如何保证现有用户的连接不中断?
  5. 当某个用户的端口块耗尽时,CGNAT 可以采取什么措施?

下篇预告:第195篇《DS-Lite 轻量级双栈:IPv4 over IPv6》——在 IPv6 基础网络上传输 IPv4 流量的隧道技术,以及与 CGNAT 的协同。