NAT-T 是什么
IPsec 的 ESP 是 IP 层协议(协议号 50),没有端口概念,NAT 设备无法为它建立映射。RFC 3947/3948 给出的办法是:先通过 UDP 500 完成 IKE 协商,探测到路径上有 NAT 之后,改用 UDP 4500 承载封装后的 ESP 报文,这就是 NAT 穿越(NAT-T)。因此 500 与 4500 是一对:协商走 500,数据通道走 4500。
基本信息
| 服务 | IPsec NAT-Traversal(RFC 3947 / RFC 3948) |
|---|---|
| 协议 | UDP 4500(IKE 走 UDP 500) |
| 典型用途 | 站点到站点 VPN、客户端远程接入穿越 NAT |
| 放行三件套 | UDP 500、UDP 4500、ESP(IP 协议号 50) |
| 安全等级 | 仅允许对端网关地址 |
典型使用场景
- 分支与总部之间的 IPsec 隧道,两端都在 NAT 之后
- 客户端远程接入:居家网络经过家用路由器访问企业内网
- 排障:隧道建立失败时,按 500 → 4500 → ESP 的顺序逐层确认
- 云上部署:云网关与本地设备建立隧道,注意云端安全组同样要放行
- 巡检:确认没有为临时测试放行的宽泛规则残留在边界设备上
基础连通性检查
基础连通性检查
sudo tcpdump -ni eth0 'udp port 500 or udp port 4500' -c 30
sudo ipsec statusall # strongSwan/libreswan:看 SA 与 NAT 探测结果
sudo swanctl --list-sas | head -30 # strongSwan 新版命令行
# UDP 无连接,nc -zuv 只能证明本机能发包,不能证明对端在听放行清单与常见遗漏
| 条目 | 作用 | 遗漏后的表现 |
|---|---|---|
| UDP 500 | IKE 协商 | 完全无法开始协商 |
| UDP 4500 | NAT-T 数据通道 | 协商看到响应但隧道起不来 |
| ESP(协议号 50) | 无 NAT 时的数据通道 | 隧道显示建立但流量不通 |
| AH(协议号 51) | 完整性保护(少用) | 与 NAT 场景一般不兼容 |
真实 IPsec 状态要用 ipsec status 或守护进程日志确认,端口通不代表 SA 建立;相反,UDP 探测不通也可能是对端只接受特定来源地址,需结合日志判断。
NAT-T 还有保活机制:客户端会周期性发送小报文维持 NAT 映射,若中间设备把这类空闲会话过早回收,隧道会表现为规律性掉线,需要核查 NAT 会话老化时间与保活间隔。
加固提示:IKE 与 NAT-T 的协商报文同样会被扫描与尝试,网关侧应限制可发起协商的来源地址,并选用足够强度的加密套件与预共享密钥。
巡检与加固要点
- 两端设备的安全策略与放行条目定期比对,避免只改一侧
- 统计隧道建立与断开记录,识别异常频繁重连
- 预共享密钥按对端分别设置,避免一处泄漏波及全部隧道
- 变更前留存一份可用的配置备份与回退步骤