在TE的课程中会讲到ipsec配置NAT穿越的问题,因为NAT会修改报文的源IP地址,导致报文在交给接收方进行时,接收方通过IPSEC对报文进行安全检查,因为IP地址修改过了,导致报文不能正确验证的问题。具体为什么IPSEC不兼容NAT的原因因为篇幅有限,大家可以参考一些资料。
我们今天主要讲IPSEC NAT的特殊实验,老版的SE教材上有一个NAT穿越的实验,但是那个实验只有一台NAT设备。我们今天要介绍的实验是有两个NAT设备的实验,也是实践当中可以会遇到的IPSEC穿越NAT的情况。
拓扑图如下图所示:
需求:RT1和RT4分别作为一家公司的总部与分部的私网路由器,两台设备分别连接两个私网IP地址,分别是192.168.1.1和192.168.4.1。这两个地址需要跨越公网互通。其中RT1设备出口连接一台NAT设备RT2,这个设备会把私网的源IP地址替换成RT2自身G0/0/1接口公网IP地址20.1.1.1/24;同理RT4连接的NAT出口设备RT3也会把私网源IP地址替换成出接口的公网IP地址20.1.1.2。此时要求私网IP192.168.1.1和192.168.4.1能够跨越公网互通,同时报文要通过ipsec进行加密验证。
此时为了理解这个实验,我们把两个loopback地址通信的报文报文格式与协商过程通过图示的形式进行演示:
1
左边loopback的PC机向右侧发送的普通报文的格式,如下图所示:
此报文交给RT1之后RT1对报文进行IPSEC封装,交给IPSEC设备进行封装时,因为IPSEC是在RT1的出接口生效,所以封装的报文源IP地址是RT1的G0/0/0接口的IP地址192.168.2.1,目的地址指向RT3的公网出接口地址20.1.1.2因为是配置了nat穿越功能,所以在ESP头前封装UDP头。
2
上图的报文交给RT2设备之后,因为RT2是NAT设备,此设备会把报文头最外层的私网源IP地址192.168.2.1替换成RT2出接口的公网地址20.1.1.1。如下图所示:
3
替换完成的报文变成公网报文可以发送给RT3设备,RT3收到的公网报文如下图所示:
4
那么RT3设备收到报文之后查看目的地址是20.1.1.2这个地址,是它自身的公网地址,同时在RT3上配置了NAT server功能,把20.1.1.2这个公网目的地址映射成私网地址,如下图所示:
5
此时RT3发送给RT4的报文如下图所示:
6
RT4收到上图所示报文之后,发现报文目的地址就是自身接口IP地址,去掉新IP头,RT4设备配置ipsec的NAT穿越,去掉UDP头后,对报文进行校验、解密,发现一致,露出内层私网地址,目的地址是192.168.2.1是自身loopback接口地址,发送成功;依次类推,接收的过程类似发送的过程,就不再赘述。
7
配置命令如下图所示:
RT1配置如下图所示:
RT2配置如下图所示:
Ping过后的检测结果如下图所示:
RT1上通过display ipsec sa和display ike sa命令查看结果如下图所示:
在RT2上开启debugging功能,查看debugging nat packet结果如下图所示:
因为NAT穿越使用的是UDP的500和4500两个端口号,所以在NAT映射时不仅要允许IP地址映射,也要允许相应的端口号映射,RT3的配置如下图所示:
这就是我们这一期给大家介绍的ipsec特殊的NAT穿越实验。