NAT-T和PAT(IPSec)
¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥NAT-T技术介绍¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥
为什么TCP和UDP不能穿越:
TCP和UDP有一个IP头的尾部校验(校验头部和负载,IP尾部(SIP,DIP,协议号));而IP只是校验IP头部。
穿过NAT的时候,IP头部的地址变了,那么校验结果也就改变了,这样就不行了。数据在传输层就丢掉了。
Cisco的IOS 12.3之后支持,NAT-T的解决问题的思路是:
这项技术用来将ESP数据包封装到UDP数据包中(在原ESP头部和外层IP头部之间,插入一个UDP 4500的头部),使得NAT设备
按照处理一个普通的UDP数据包的方式对它处理,这样就可以穿越PAT了。
下面是NAT-T的封装示意图:
下面是NAT-T协商的介绍:
协商3步骤:
1、主要用于判断IPSec双方是否都支持NAT-T技术,若任何一方不支持就会失败,那IPSec VPN就会使用ESP封装数据包。主要是通过IKE中的版本ID来看
2、判断两个peer之间是否有存在地址转换(NAT,PAT)——两个peer之间必须存在地址转换,不管是NAT或是PAT,才会使用NAT-T技术封装数据。NAT-D也叫做hash负载。对源地址hash,对源端口hash,目的也是如此。看是否过了NAT。
3、在1中两个peer都支持NAT-T技术,在2中peer之间确实存在地址转换,那么从上图中第一阶段IKE5-6包开始,后面的所有数据都会使用NAT-T技术进行封装。
命令: crypto ISAKMP nat-traversal
靠参考文档:https://max.book118.com/html/2017/0818/128588311.shtm
接下来验证一下PAT在中间网络的情况:
R1:
hostname R1
!
crypto isakmp policy 10
authentication pre-share
crypto isakmp key cisco address 23.1.1.3//因为这里通过R3做了PAT,所以peer地址应该是23.1.1.3
!
!
crypto ipsec transform-set trans esp-des esp-md5-hmac
!
crypto map cisco 10 ipsec-isakmp
set peer 23.1.1.3
set transform-set trans
match address vpn
!
!
interface Loopback0
ip address 1.1.1.1 255.255.255.0
interface FastEthernet1/0
ip address 12.1.1.1 255.255.255.0
duplex auto
speed auto
crypto map cisco
!
ip route 0.0.0.0 0.0.0.0 12.1.1.2
!
ip access-list extended vpn
permit ip 1.1.1.0 0.0.0.255 4.4.4.0 0.0.0.255
R2:
hostname R2
!
interface FastEthernet1/0
ip address 12.1.1.2 255.255.255.0
duplex auto
speed auto
!
!
interface FastEthernet1/1
ip address 23.1.1.2 255.255.255.0
duplex auto
speed auto
R3:
hostname R3
interface FastEthernet1/0
ip address 23.1.1.3 255.255.255.0
ip nat outside
ip virtual-reassembly
duplex auto
speed auto
!
!
interface FastEthernet1/1
ip address 34.1.1.3 255.255.255.0
ip nat inside
ip virtual-reassembly
duplex auto
speed auto
ip nat inside source list PAT interface FastEthernet1/0 overload
ip route 0.0.0.0 0.0.0.0 23.1.1.2
!
ip access-list extended PAT
permit ip any any
R4:
hostname R4
!
crypto isakmp policy 10
authentication pre-share
crypto isakmp key cisco address 12.1.1.1
!
!
crypto ipsec transform-set trans esp-des esp-md5-hmac
!
crypto map cisco 10 ipsec-isakmp
set peer 12.1.1.1
set transform-set trans
match address vpn
interface Loopback0
ip address 4.4.4.4 255.255.255.0
!
interface FastEthernet1/0
ip address 34.1.1.4 255.255.255.0
duplex auto
speed auto
crypto map cisco
!
ip route 0.0.0.0 0.0.0.0 34.1.1.3
!
ip access-list extended vpn
permit ip 4.4.4.0 0.0.0.255 1.1.1.0 0.0.0.255
现在可以在R3的两个接口抓包,具体情况如下:
R3-R4:
R3-R2:
可以看到明显是经过了PAT了,
R3#sho ip nat translations
Pro Inside global Inside local Outside local Outside global
udp 23.1.1.3:500 34.1.1.4:500 12.1.1.1:500 12.1.1.1:500
udp 23.1.1.3:4500 34.1.1.4:4500 12.1.1.1:4500 12.1.1.1:4500
这是PAT之前的校验和:
这是PAT之后的校验和:
这也就验证前面所说的在穿越NAT设备的时候,UDP或者TCP会校验IP头尾部,IP变了,那么校验出的结果就改变了。而这里穿越的是PAT,那么就需要使用源IP和源端口,然后这里的端口是被ESP封装的,所以不能实现通信。
这里也可以看到源和目的端口启用了NAT-T技术,使用UDP 4500端口。那么我们将NAT-T技术关闭(Cisco IOS的NAT-T技术是默认打开的):
R3(config)#no crypto ipsec nat-transparency udp-encapsulation
观察现在的R4—R1的IPSec VPN情况:由于实验的IOS的问题,所以这里还是通的,但是正确的应该是关闭NAT-T技术,就是不通的,所以,NAT-T的关键就是在新的IP头部和ESP头部之间封装一个NAT-T使用的UDP 4500端口。来实现通信的。