剖析NAT-T【新任帮主】_第1张图片
nat-t技术主要是针对pat来说的 ,当IPsec 建立在防火墙的两边时 ,并且穿越pat设备的时候将会出现问题;

现在来描述整个IPsec建立的过程来引出问题的所在。大家都知道ipsec ***隧道建立的过程中要经历六个包的main mode 和 3个包的 quick mode ,当我们启用nat-t的时候

①  首先在main mode的1,2两个包中会协商有没有nat-t的能力;此阶段,我把它叫做nat-t能力协商(针对nat-t来说)
剖析NAT-T【新任帮主】_第2张图片
此处可以看出,运营商代码(vendor id)13 代表了此处支持nat-t的技术;

① 那么,我们怎么知道防火墙有没有做pat能,R1,R2是怎样感知的呢,此时在main mode的3,4个包中会在vendor id 13 中携带两个hash值,这个hash的原料是分别是源端的地址和端口号,目的端的ip地址和端口号 ;此阶段,我把它叫做试探nat
剖析NAT-T【新任帮主】_第3张图片
如果对端发过来的源hash和目的hash相同说明没有做nat,否则说明做了nat

① 此处我是做了nat的 ,所以hash值是不一样的,当ipsec站点发现存在nat,就会改变数据包报头,插入udp的报头封装IPsec(ESP),此包格式更改是从main mode的5,6个包开始,一直到数据的加密全过程;此处有一个疑问,为什么检查到有nat就要改变报头格式呢?
剖析NAT-T【新任帮主】_第4张图片
解释:当IPsec 隧道感知nat的存在时,在穿越pat设备的时候将不改变源端口号,因为有的时候ike在实施的过程中将不会处理源端口号不为500的数据包,那么pat的设备本身就是靠源端口号来进行地址复用的,现在不改变源端口号,固然会出现问题 。所以此时我们要尽可能改变源端口号,让pat设备转换,如上图udp源和目的端口号均为4500(ipsec-nat-t),此后所有的数据包都在udp 4500中传输;
剖析NAT-T【新任帮主】_第5张图片