1. IPSec与NAT的恩怨情仇:为什么需要穿越?
第一次在企业网络里配置IPSec VPN时,我遇到了一个让人抓狂的现象:明明两端配置都检查了无数遍,隧道就是建立不起来。后来用抓包工具分析才发现,原来中间有台NAT设备在"捣乱"。这就像两个说好要秘密接头的人,中间却站了个爱改信的邮差——IPSec要保证通信的完整性和机密性,而NAT却非要修改IP包头,这种根本性冲突导致两者水火不容。
具体来说,NAT会修改三个关键字段:
- 源/目的IP地址:这是NAT的核心功能
- TCP/UDP端口号:PAT(端口地址转换)时会修改
- 校验和:任何上层协议修改后都需要重新计算
而IPSec的AH协议会对整个IP包(包括包头)做完整性校验,ESP协议虽然不校验外层IP头,但在传输模式下会加密TCP/UDP头。这就导致:
- AH协议:完全无法与NAT共存,因为NAT修改IP头必然导致校验失败
- ESP传输模式:加密后的TCP/UDP头无法被NAT修改校验和
- ESP隧道模式:是唯一可行的方案,因为外层IP头可被任意修改
我在某次金融行业项目中就踩过这个坑。客户分支机构使用AH协议做总部连接,结果换了运营商后突然无法连通。后来发现新运营商部署了NAT444设备,最终我们通过切换到ESP隧道模式+NAT-T技术解决了问题。
2. NAT穿越技术揭秘:UDP封装的艺术
NAT-T(NAT Traversal)技术的核心思路非常巧妙——既然NAT必须要修改某些字段,那我们就给它"喂"它喜欢的数据格式。具体来说,就是在ESP报文外面再套一层UDP外壳:
[ 新IP头 | UDP头(4500端口) | ESP头 | 加密的原始数据 ]
这种设计有三大精妙之处:


1387

被折叠的 条评论
为什么被折叠?



