NAT-T 做什么
ESP 是协议 50,不带端口信息,中间设备做端口转换时无法正确回填,因此 IPsec 穿越 NAT 需要 NAT-T(NAT Traversal):IKE 交换过程中用 NAT-D 载荷探测路径上是否存在地址转换,一旦确认存在,就把 ESP 封装进 UDP 4500 传输。它让站点在 NAT 设备后也能建立隧道,代价是多一层封装与对映射表老化的依赖。
基本信息
| 检测机制 | IKE 交换中的 NAT-D 载荷判断路径是否存在 NAT |
|---|---|
| 封装方式 | ESP 装入 UDP 4500(RFC 3948) |
| 协商端口 | IKE 使用 UDP 500 |
| 保活 | Cisco 可用 crypto isakmp nat keepalive <秒> 维持映射表项 |
| 防火墙要求 | 放行 UDP 500 与 UDP 4500,两者都要 |
典型使用场景
- 分支机构在 NAT 设备之后:必须启用 NAT-T 才能建立可用隧道
- 两端都在 NAT 后:需确认设备支持并正确检测,否则协商能过而数据不通
- 防火墙策略梳理:逐条确认 500 与 4500 都被放行,避免协商中途失败
- 映射表老化导致周期性中断:调整保活间隔以维持 NAT 表项
- 排障取证:抓包确认 ESP 是否真的封装进 UDP 4500
保活与核对
保活与核对
# 定期发送保活报文,维持中间设备的映射表项
crypto isakmp nat keepalive 20
# 查看 SA 是否处于 NAT 环境及加密封装情况
show crypto ipsec sa | include NAT|local|remote
# 抓包确认封装形态(NAT 外侧应看到 UDP 4500)
tcpdump -ni eth0 'udp port 4500' -c 20现象与定位
| 现象 | 可能原因 | 核对动作 |
|---|---|---|
| IKE 协商成功但数据不通 | ESP 被中间设备丢弃 | 确认 NAT-T 是否启用、4500 是否放行 |
| 隧道周期性中断 | NAT 映射表项老化 | 配置保活并缩短间隔,观察中断周期是否改善 |
| 只有一侧能发起 | 一侧设备未检测到 NAT | 两端同时抓包,比对 NAT-D 判断结果 |
| 协商到一半失败 | 只放行了 UDP 500 | 补放行 UDP 4500 后复测 |
保活间隔要比中间设备映射表的老化时间短,否则隧道会在空闲期被清理,表现为「每隔一段时间自己断一次、随后又自己恢复」。
两端都是公网地址时不需要 NAT-T;但路径中间若有做端口转换的设备,即使端点没有 NAT 也要按 NAT-T 规划端口放行。上线前先确认报文实际走 500 还是 4500,再据此配置安全策略。