第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 | 运营商级:大容量、高可靠、合规日志 |
八、思考
- 什么是 NAT444?为什么需要两级 NAT 转换?
- 端口块分配相比传统逐连接端口分配有什么优势?
- 如果公安机关要求追溯某个公网 IP:端口的访问者,完整的溯源链是怎样的?
- CGNAT 主备切换时如何保证现有用户的连接不中断?
- 当某个用户的端口块耗尽时,CGNAT 可以采取什么措施?
下篇预告:第195篇《DS-Lite 轻量级双栈:IPv4 over IPv6》——在 IPv6 基础网络上传输 IPv4 流量的隧道技术,以及与 CGNAT 的协同。