适用场景:
适用场景:
如图所示,一个企业内网可能会有很成百上千台电脑需要上互联网,但一个企业可能只有几个甚至一个公网IP地址,这时候就需要使用到PAT功能(通过端口转换来把私网IP和公网IP对应起来)。当一个VPN设备处于PAT设备之后,可能会出现一些问题。由于TCP和UDP有端口号,因此NAT设备可以对他们加于区分并进行转换,ICMP是通过特殊处理之后才进行了转换,而默认并不会对ESP的流量进行转换,这就会出现问题。
注意:只有端口地址转换,即PAT才会出现这个问题,而静态的一对一NAT是不会出现这个问题的。
实验:
下面通过一个实验来演示该问题:
实验拓扑:
实验介绍:
该实验需要用到4台路由器。“VPN”和“R1”模拟上海分站的路由器,R2模拟运营商的路由器,R3模拟北京总部的路由器。上海分站的VPN路由器与北京总部的R3路由器建立一个IPSec VPN。把分站和总部身后的网络192.168.10.0/24和192.168.20.0/24连接起来。由于上海分站只有一个公网IP地址12.1.1.1,要供内网所有用户上网,因此在R1上使用PAT功能,将192.168.10.0/24和192.168.1.0/24网段转换成外网接口的IP地址。因此,VPN流量会穿越PAT。
基础配置:
VPN基础配置:
interface FastEthernet0/0
ip address 192.168.1.1 255.255.255.0
no shutdown
!
interface Loopback0
ip address 192.168.10.1 255.255.255.0
!
ip route 0.0.0.0 0.0.0.0 192.168.1.2
R1基础配置:
interface FastEthernet0/0
ip address 192.168.1.2 255.255.255.0
no shutdown
!
interface FastEthernet1/0
ip address 12.1.1.1 255.255.255.0
no shutdown
!
ip route 0.0.0.0 0.0.0.0 12.1.1.2
ip route 192.168.10.0 255.255.255.0 192.168.1.1
!
access-list 100 permit ip 192.168.10.0 0.0.0.255 any
access-list 100 permit ip 192.168.1.0 0.0.0.255 any
!
interface FastEthernet0/0
ip nat inside
interface FastEthernet1/0
ip nat outside
ip nat inside source list 100 interface FastEthernet1/0 overload
R2基础配置:
interface FastEthernet1/0
ip address 12.1.1.2 255.255.255.0
no shutdown
!
interface FastEthernet2/0
ip address 23.1.1.2 255.255.255.0
no shutdown
R3基础配置:
interface FastEthernet2/0
ip address 23.1.1.3 255.255.255.0
no shutdown
!
interface Loopback0
ip address 192.168.20.1 255.255.255.0
!
ip route 0.0.0.0 0.0.0.0 23.1.1.2
VPN配置:
VPN-Device:
crypto isakmp policy 10
authentication pre-share
crypto isakmp key cisco address 23.1.1.3
!
crypto ipsec transform-set trans esp-des esp-md5-hmac
!
access-list 100 permit ip 192.168.10.0 0.0.0.255 192.168.20.0 0.0.0.255
!
crypto map cisco 10 ipsec-isakmp
set peer 23.1.1.3
set transform-set trans
match address 100
!
interface FastEthernet0/0
ip address 192.168.1.1 255.255.255.0
crypto map cisco
end
R3配置:
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
!
access-list 100 permit ip 192.168.20.0 0.0.0.255 192.168.10.0 0.0.0.255
!
crypto map cisco 10 ipsec-isakmp
set peer 12.1.1.1
set transform-set trans
match address 100
!
interface FastEthernet2/0
ip address 23.1.1.3 255.255.255.0
crypto map cisco
end
进行测试:
VPN-Device#ping 192.168.20.1 source 192.168.10.1
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.20.1, timeout is 2 seconds:
Packet sent with a source address of 192.168.10.1
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 52/85/112 ms
发现并没有出现我们所说的问题,为什么么呢?这是由于路由器默认开启了NAT-T功能,NAT-T会把ESP
的数据封装在UDP包当中(源末端口是4500)。
NAT-T封装:
查看R1的NAT转换
R1#show ip nat translations
Pro Inside global Inside local Outside local Outside global
udp 12.1.1.1:4500 192.168.1.1:4500 23.1.1.3:4500 23.1.1.3:4500
我们把NAT-T功能关闭再次进行测试:
no crypto ipsec nat-transparency udp-encapsulation
清除SA,重新协商:
VPN-Device#clear crypto isakmp
VPN-Device#clear crypto sa
Ping测试:
VPN-Device#ping 192.168.20.1 source 192.168.10.1
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.20.1, timeout is 2 seconds:
Packet sent with a source address of 192.168.10.1
.....
Success rate is 0 percent (0/5)
发现无法ping通了已经。
IPSec VPN封装协议 | 是否能够穿越NAT | 是否能够穿越NAT |
仅源IP地址一对一转换 | 源IP地址与源端口的多对一转换(PAT) | |
AH传输模式 | 不能 | 不能 |
AH隧道模式 | 不能 | 不能 |
ESP传输模式 | TCP/UDP不能,其他三层以协议可以 | 不能 |
ESP隧道模式 | 能 | 不能 |
NAT-T协商介绍:
步骤1:
主要用于协商IPSec双方是否都支持NAT-T技术,如果任何一方不支持NAT-T,协商就会失败,则 使用原始的ESP封装。
协商由IKE第一阶段的第一、二个包来实现,双方交互NAT-T中的verdor ID来表示自己是否支持NAT-T。
步骤2:
判断两个Peer之间是否存在NAT(包括一对一的NAT或者是PAT)。两个IPsec Peer会在IKE第一阶段的第3、4个包交换一个叫“NAT-D”的散列值。IKE的第3个数据包会传输两个NAT-D负载(就是两个HASH值),其中一个是源IP和端口计算的HASH值,另一个是目的IP和端口计算的HASH值,接收方收到后再进行计算得到HASH值,如果不一样,则中间网络有NAT,需要启用NAT-T;HASH值一样,则中间网络没有NAT,不需要启用NAT-T。
步骤3:
如果在步骤1中确认两个Peer都支持NAT-T技术,在步骤2中确认两个Peer之间存在NAT,则从第一阶段的5、6个包起,往后的所有数据都使用NAT-T技术进行封装。
总结:
在启用NAT-T技术后,当路由器协商IKE的时候,发现中间网络存在NAT,路由器即使用NAT-T进行封装,这样,所有的ESP数据包头前都会增加一个UDP包头,PAT设备在转换的时候能够对UDP进行转换,到此,问题解决。