VPN:配置NAT穿越功能
2021-11-17
来源:计算机与网络安全
部署IPSec VPN网络时,如果发起者位于一个私网内部(也就是IPSec的一个端点接口的IP地址是私网IP地址,如图1中的Router A),远端位于公网侧(如图1中的Router B),而它希望与远端响应者直接建立一条IPSec隧道。为保证存在NAT设备的IPSec隧道能够正常建立,就需要配置IPSec的NAT穿越功能。
图1 IPSec的NAT穿越示意
因为AH协议会对整个封装后的IP报文(包括IP报头)进行认证保护,如果AH报文经过NAT网关,则报头部分的IP地址肯定会发生变化,这时传输到达IPSec隧道对端时,肯定不能通过AH认证,所以IPSec采用AH作为安全协议时是不支持NAT的。但是ESP协议与AH协议不同,它无论是对IP报文进行认证保护,还是进行加密保护都不会包括最外层IP报头,所以ESP报文经过NAT网关时IP报头部分发生IP地址改变不会导致在对端进行ESP认证、数据解密时失败,所以理论上来说采用ESP作为安全协议时是支持NAT的。
但是这里又涉及到一个非常现实的问题,无论是AH(IP协议号为51),还是ESP(IP协议号为50)协议其都是网络层的协议,它们发送的报文不会经过上面的传输层协议封装。因此当NAT网关背后存在多个ESP应用端时(即实现多对一的地址映射时),也无法只根据IP地址进行反向映射,必须依靠传输层的UDP或TCP端口号。此处通过借用UDP的方式,巧妙地实现了NAT地址复用。此时要使用UDP 500端口(IKE协商协议ISAKMP所使用端口)来插入一个新的UDP报头。
IPSec NAT穿越简单来说就是在原报文的IP报头和ESP报头间增加一个标准的UDP报头。这样,当ESP报文穿越NAT网关时,NAT对该报文的外层IP报头和增加的UDP报头同时进行地址和端口号转换(把私网IP地址、端口号都转换成公网);转换后的报文到达IPSec隧道对端后,与普通IPSec报文处理方式相同。
在IPSec NAT穿越应用中,如果采用的是预共享密钥或数字证书认证方法,则要同时在部署了NAT网关设备的这端IKE对等体配置中采用名称类型标识ID(即配置local-id-type fqdn命令),在发起方的IKE对等体配置中采用IP地址方式标识对端ID。