NAT穿越场景
在ipsec pn部署中,如果发起者比如fwc位于私网内部,而它希望与fwa之间直接建立一条ipsec隧道,这种情况下nat会对部署ipsec pn网络造成障碍。
在多站点企业中,有的站点连动态的公网IP地址都没有,只能先由网络中的nat设备进行地址转换,然后才能访问internet,此时如果同时需要和另一个站点建立ipsec通道的话,就存在问题。
IPSec是用来保护报文不被修改的,而NAT却专门修改报文的IP地址,所以肯定存在问题。
协商IPSec的过程是由isakmp报文完成的,isakmp报文封装在udp中,源目端口都是500,nat设备可以转换该消息的ip地址和端口,因此isakmp消息可以完成nat转换,协商得到IPSec sa,但是数据流量是通过ah或者 esp进行封装的,在nat转换过程中存在问题。
NAT对IPSec的影响
IKE协商问题
NAT转换会改变对等体的ip地址,在IKEV1主模式+预共享密钥验证下,由于依赖IP地址标识身份,所以存在问题。
由于野蛮模式不依赖ip地址标识身份,使得野蛮模式+预共享密钥验证不影响。
解决方式
开启NAT-T。
AH+NAT问题
NAT的存在对其是致命的。因为AH对包括最外层IP头部的整个包进行认证。但是地址转换会改变IP地址,从而破坏ah的hash值,因此使用ah的ipsec隧道无法穿越nat设备。
传输模式
隧道模式
no-pat+ESP传输模式问题
隧道模式默认支持no-pat下形式的nat穿越
no-pat+ESP隧道模式下,ESP对数据包的hash不包括外层ip报头字段,这解决了认证范围包括最外层IP头部情况下的NAT问题,足以满足隧道模式下ESP报文的认证和加密。
传输模式默认不支持no-pat下形式的nat穿越
由于TCP校验问题,在不进行加密的情况下,因为NAT修改了IP地址,所以导致TCP报文中校验和字段变更。这个字段的变更导致了ESP认证范围内数据的变更,使得其无法通过接收方的验证。
在进行加密的情况下,由于TCP首部作为载荷被加密,NAT后虽然IP地址发送了变更,但是由于TCP头部被加密,NAT设备无法更新TCP校验和,接收方收到后进行TCP报文校验时会失败。
TCP报文
TCP的校验和计算和IP头部的校验和计算方法是一致的,但是覆盖的数据范围不一样。TCP校验和覆盖TCP首部和TCP数据,而IP首部中的校验和只覆盖IP的头部。TCP的校验和是必需的,而UDP的校验和是可选的。TCP和UDP计算校验和时,都要加上一个12字节的伪首部。
伪首部包含:源IP地址、目的IP地址、保留字节(置0)、传输层协议号(TCP是6)、TCP报文长度(报头+数据)。伪首部是为了增加TCP校验和的检错能力:如检查TCP的源和目的IP地址、传输层协议等。
napt+ESP问题
NAPT转换,多个内部地址复用一个外部地址,并且使用传输层端口来区分不同流量,由于ESP报文中TCP的端口已经加密无法修改,所以对于同时转换端口的NAT来说,ESP没法支持。
解决方式
在建立IPSec隧道的两个防火墙上同时开启nat穿越功能(NAT traversal)。开启后,当需要穿越NAT设备时,就会在最外层IP头部和ESP头部之间插入一个标准UDP头部,使得ESP报文被封装在UDP头中,UDP头部中源目端口均是4500。这样就可以承载NAT修改IP地址和端口地址的需求了。
NAT表项老化问题
NAT设备上的NAT会话表项有一定的存活时间,如果IPSec隧道建立后长时间没有报文进行NAT穿越,NAT设备会删除该NAT会话表项,这将导致在NAT设备外网侧的对等体无法继续传输数据。为防止NAT表项老化,NAT设备内网侧的IKE SA会以一定的时间间隔向对端发送NAT Keepalive报文,以维持NAT会话的存活。
IPSEC与NAT并存问题
在防火墙的转发流程中,NAT在上游环节,IPSec在下游环节,所以ipsec流量会收到nat处理流程的干扰,即原本应该进入IPSec隧道的流量一旦命中nat策略就会进行nat转换,转换后的流量不会再匹配ipsec中的acl了,也就不会进行IPSec处理了。
IPSEC+源NAPT
需要进入ipsec隧道的流量提前匹配了源NAPT策略,导致地址发生改变,没有匹配到IPSec通过ACL定义的感兴趣流,从而没有进入ipsec隧道。
解决方式
在nat策略中配置优先级最高的针对ipsec流量不进行地址转换的策略,并且该策略中定义的流量范围是其他策略的子集。这样ipsec流量会先命中不进行nat转换的策略,地址不会被转换,也就不会影响下面ipsec 环节的处理,而需要进行nat处理的流量也可以命中其他策略正常转换。
IPSEC+NAT Server
需要进入ipsec隧道的流量提前匹配了nat server生成的反向server-map表项,导致地址发生改变,没有匹配到IPSec通过ACL定义的感兴趣流,从而没有进入ipsec隧道。
解决方式
配置nat server时指定no-reverse参数,不生成反向server-map表项。
NAT穿越分析
NAT-T原理
IKEV1NAT穿越协商
1、协商通信双方是否支持NAT-T
开启NAT 穿越后,IKEV1协商第一阶段的1、2消息(野蛮模式也是1、2消息)会携带标识NAT穿越能力(NAT-T)的vendor id载荷,用于检查通信双方是否支持NAT-T,当双方都在各自的消息中包含了该载荷时,才会进行相关的NAT-T协商。
2、探测NAT网关是否存在及其所在位置
IKEV1协商第一阶段的3、4消息(野蛮模式2、3消息)会携带NAT-D(NAT-Discovery)载荷,用于探测两个要建立IPSec隧道的防火墙之间是否存在nat网关以及nat网关的位置。
协商双方通过NAT-D载荷向对端发送源和目的IP地址与端口的HASH值,接收方收到3、4消息(野蛮模式2、3消息)后对源目IP地址和端口进行hash并与发来的hash值进行对比,就可以判断地址和端口是否被nat设备修改过。NAT-D载荷有两个,第一个为对端ip和端口的hash值,第二个为本端ip和端口的hash值。
解决网络设备如何知道什么时候要加UDP报头的问题
发现NAT网关后,从IKEV1协商第一阶段的5、6消息(野蛮模式从第3个消息)会将ISAKMP消息UDP的源目端口修改为4500,并标识non-esp marker。
3、协商封装模式
IKEV1协商第二阶段会协商是否使用NAT穿越以及NAT穿越时IPSec报文的封装模式:UDP封装隧道模式报文和UDP封装传输模式报文。
IKEV1为ESP报文封装UDP头、UDP报文端口号为4500.当封装后的报文通过NAT设备时,NAT设备对该报文的外层IP头和增加的UDP头进行地址和端口号转换。
VID:vendor id
IKEV2NAT穿越协商
1、探测NAT网关位置
开启NAT穿越后,IKE的发起者和响应者都在IKE SA INIT消息对中包含类型为NAT-DETECTION-SOURCE-IP和NAT-DETECTION-DESTINATION-IP的通知载荷。这两个通知载荷用于检测在将要建立IPSec隧道的两个防火墙之间是否存在NAT设备,如果收到的NAT-DETECTION-SOURCE-IP没有匹配到数据包中源IP和源端口的hash,则说明对端位于NAT网关后,如果收到的NAT-DETECTION-DESTINATION-IP没有匹配到数据包中目的IP和端口的hash,说明本端位于NAT网关后。
发现NAT网关后,IKEV2协商的IKE-AUTH消息会将ISAKMP消息UDP的源目端口修改为4500,并标识non-esp marker。
2、协商封装模式
IKEV2为ESP报文封装UDP头、UDP报文端口号为4500.当封装后的报文通过NAT设备时,NAT设备对该报文的外层IP头和增加的UDP头进行地址和端口号转换。
NAT穿越配置
ike peer a//创建IKE对等体并进入IKE对等体视图。
nat traversal//使能NAT穿越功能。缺省情况下,NAT穿越功能处于开启状态。
quit
ipsec nat-traversal source-port 4500//配置IPSec NAT穿越的端口号。缺省情况下,IPSec NAT穿越的端口号为4500。
ike nat-keepalive-timer interval 20//配置IKE发送NAT Keepalive报文的时间间隔。
缺省情况下,设备发送NAT Keepalive报文的时间间隔为20秒。
实验一:两个网关之间存在NAT设备时通过IKE方式协商IPSec VPN隧道(总部通过Name认证分支)
需求和拓扑
总部属于10.1.1.0/24子网,通过接口GigabitEthernet 0/0/1与FW_A连接。
- FW_B为NAT网关,分支用户必须经过NAT网关才能访问总部。
分支机构的员工需要访问总部的服务器。由于服务器信息较机密,数据经过Internet传输不安全,故需建立IPSec隧道来对传输数据进行加密。
操作步骤
1、配置接口地址和安全区域
2、配置域间安全策略
//f1和f3
security-policy
rule name 1
source-zone trust
destination-zone untrust
source-address 10.1.1.0 mask 255.255.255.0
destination-address 10.1.2.0 mask 255.255.255.0
action permit
rule name 2
source-zone untrust
destination-zone trust
source-address 10.1.2.0 mask 255.255.255.0
destination-address 10.1.1.0 mask 255.255.255.0
action permit
//前两个使得icmp流量通过
rule name 3
source-zone local
destination-zone untrust
source-address 1.1.2.1 mask 255.255.255.255
destination-address 1.1.5.1 mask 255.255.255.255
action permit
rule name 4
source-zone untrust
destination-zone local
source-address 1.1.5.1 mask 255.255.255.255
destination-address 1.1.2.1 mask 255.255.255.255
action permit
//后两个用于控制IPSec隧道两端设备IKE协商报文通过,使其能够进行隧道协商
//f2
security-policy
rule name 1
source-zone trust
destination-zone untrust
source-address 10.1.5.2 mask 255.255.255.255
destination-address 1.1.2.1 mask 255.255.255.255
action permit
rule name 2
source-zone untrust
destination-zone trust
source-address 1.1.2.1 mask 255.255.255.255
destination-address 10.1.5.2 mask 255.255.255.255
action permit
3、配置静态路由
//f1
ip route-static 1.1.5.0 255.255.255.0 1.1.2.2
ip route-static 10.1.2.0 255.255.255.0 1.1.2.2
ip route-static 10.1.5.0 255.255.255.0 1.1.2.2
//f2
ip route-static 1.1.2.0 255.255.255.0 1.1.5.2
ip route-static 10.1.1.0 255.255.255.0 1.1.5.2
ip route-static 10.1.2.0 255.255.255.0 10.1.5.2
//f3
ip route-static 1.1.2.0 255.255.255.0 10.1.5.1
ip route-static 10.1.1.0 255.255.255.0 10.1.5.1
//r
ip route-static 10.1.1.0 255.255.255.0 1.1.2.1
ip route-static 10.1.2.0 255.255.255.0 1.1.5.1
ip route-static 10.1.5.0 255.255.255.0 1.1.5.1
4、配置IPSEC
4.1、配置感兴趣流
//f1
acl number 3000
rule 5 permit ip source 10.1.1.0 0.0.0.255 destination 10.1.2.0 0.0.0.255
//f1
acl number 3000
rule 5 permit ip source 10.1.2.0 0.0.0.255 destination 10.1.1.0 0.0.0.255
4.2、配置ipsec安全提议
//f1f3
ipsec proposal tran1
esp authentication-algorithm sha2-256
esp encryption-algorithm aes-256
4.3、配置ike安全提议
//f1f3
ike proposal 10
encryption-algorithm aes-256
dh group14
authentication-algorithm sha2-256
authentication-method pre-share
integrity-algorithm hmac-sha2-256
prf hmac-sha2-256
4.4、配置ike peer
//f1
ike peer c
undo version 2
pre-shared-key Test!1234
ike-proposal 10
remote-id-type fqdn
remote-id branch
remote-address 1.1.5.1
remote-address authentication-address 10.1.5.2
//f3
ike peer a
undo version 2
pre-shared-key Test!1234
ike-proposal 10
local-id-type fqdn
remote-id-type ip
local-id branch
remote-address 1.1.2.1
4.5、配置ipsec policy
//f1
ipsec policy map1 10 isakmp
security acl 3000
ike-peer c
proposal tran1
//f3
ipsec policy map1 10 isakmp
security acl 3000
ike-peer a
proposal tran1
4.6、接口应用IPSec policy
//f1f3
interface GigabitEthernet1/0/1
ipsec policy map1
5、配置NAT
//f2
nat-policy
rule name 1
source-zone trust
destination-zone untrust
source-address 10.1.5.0 mask 255.255.255.0
action source-nat easy-ip
验证和分析
1、pc2发起访问,之后pc1和pc2之间可以互访,pc2同时可以访问公网。
在f2上检查nat 转换session表项
<f2>dis fire session table
2022-04-04 14:21:30.190
Current Total Sessions : 1
udp VPN: public --> public 10.1.5.2:4500[1.1.5.1:2048] --> 1.1.2.1:4500
2、f1上可以查看到对应的ike sa
[f1]dis ike sa
2022-04-04 15:30:54.200
IKE SA information :
Conn-ID Peer VPN Flag(s) Phase RemoteType RemoteID
--------------------------------------------------------------------------------
12 1.1.5.1:2048 RD|A v1:2 FQDN branch
10 1.1.5.1:2048 RD|A v1:1 FQDN branch
Number of IKE SA : 2
--------------------------------------------------------------------------------
Flag Description:
RD--READY ST--STAYALIVE RL--REPLACED FD--FADING TO--TIMEOUT
HRT--HEARTBEAT LKG--LAST KNOWN GOOD SEQ NO. BCK--BACKED UP
M--ACTIVE S--STANDBY A--ALONE NEG--NEGOTIATING
3、f3上可以查看到对端为f1的ike sa,f3是发起方,标志位是ST
[f3]dis ike sa
2022-04-04 15:37:45.530
IKE SA information :
Conn-ID Peer VPN Flag(s) Phase RemoteType RemoteID
--------------------------------------------------------------------------------
11 1.1.2.1:4500 RD|ST|A v1:2 IP 1.1.2.1
9 1.1.2.1:4500 RD|ST|A v1:1 IP 1.1.2.1
Number of IKE SA : 2
--------------------------------------------------------------------------------
Flag Description:
RD--READY ST--STAYALIVE RL--REPLACED FD--FADING TO--TIMEOUT
HRT--HEARTBEAT LKG--LAST KNOWN GOOD SEQ NO. BCK--BACKED UP
M--ACTIVE S--STANDBY A--ALONE NEG--NEGOTIATING
4、f1上可以查看到一对双向的IPSec sa,对应f3
[f1]dis ipsec sa brief
2022-04-04 15:39:49.190
IPSec SA information:
Src address Dst address SPI VPN Protocol Algorithm
-------------------------------------------------------------------------------
1.1.5.1 1.1.2.1 184615425 ESP E:AES-256 A:SHA2_256_128
1.1.2.1 1.1.5.1 189482996 ESP E:AES-256 A:SHA2_256_128
Number of IPSec SA : 2
5、f3上可以查看到一对双向IPSec sa,对应f1
[f3]dis ipsec sa brief
2022-04-04 15:42:12.900
IPSec SA information:
Src address Dst address SPI VPN Protocol Algorithm
-------------------------------------------------------------------------------
10.1.5.2 1.1.2.1 184615425 ESP E:AES-256 A:SHA2_256_128
1.1.2.1 10.1.5.2 189482996 ESP E:AES-256 A:SHA2_256_128
Number of IPSec SA : 2