IPsec 与 NAT 的处理顺序
ESP 是协议 50,报文里没有端口号,中间设备做端口转换(PAT)时无从映射,因此 IPsec 与 NAT 的先后关系决定了是否需要 NAT-T。两端都是公网地址时 ESP 可以直接传输;路径上存在地址转换时,需要把 ESP 封装进 UDP 4500 才能穿过。现代平台通常默认启用 NAT-T,所以真正要确认的往往是中间设备是否放行了正确的端口。
基本信息
| 不过 NAT | ESP(协议 50)可直接传输,无需额外封装 |
|---|---|
| 经过 NAT | 启用 NAT-T,ESP 装入 UDP 4500 传输 |
| 放行要求 | 中间设备需放行 UDP 500 与 UDP 4500(或放行 ESP 协议) |
| 平台默认 | 现代平台通常默认启用 NAT-T |
| 核对命令 | show crypto ipsec sa(观察是否处于 NAT 环境) |
典型使用场景
- 分支机构在 NAT 后:确认 NAT-T 已生效且端口放行
- 两端都在 NAT 后:需验证探测结果与封装形态,避免协商成功但数据不通
- 防火墙策略梳理:把 500 与 4500 作为一组同时确认
- 隧道偶发中断:结合映射表老化时间核对保活配置
- 抓包取证:确认实际封装端口,为安全策略变更提供依据
观察与保活
观察与保活
# 查看 SA 是否处于 NAT 环境
show crypto ipsec sa | include NAT|nat
# 保活:维持中间设备的映射表项(按平台文档核对命令)
crypto isakmp nat keepalive 20
# 抓包确认封装形态:NAT 外侧应看到 UDP 4500
tcpdump -ni eth0 'udp port 4500' -c 20场景与要求
| 场景 | 封装形态 | 注意事项 |
|---|---|---|
| 两端公网 | ESP 直传,无需 NAT-T | 只需放行协议 50 与 UDP 500 |
| 一端在 NAT 后 | ESP 封装进 UDP 4500 | 两端需支持 NAT-T,放行 500 与 4500 |
| 两端都在 NAT 后 | UDP 4500 承载 | 检测最关键,需两端同时抓包确认 |
| 中间设备只做路由 | ESP 直传 | 确认未误过滤协议 50 |
上线前先确认报文实际走 500 还是 4500,再据此配置安全策略;顺序搞反时会出现「策略看起来都放行了,隧道却建不起来」的尴尬局面。
确认封装形态的办法很直接:在 NAT 设备外侧抓包,看到 UDP 4500 说明已启用 NAT-T,只看到协议 50 则未做封装。两种情况下安全策略需要放行的内容不同,抓包结论可以直接作为策略调整依据。