IPsec DPD分两种模式 Periodic (周期性的) on-demand (按需的) Periodic模式就是peer双方会每隔一个固定时间就会向对方发送一个hello包,也表示每隔一个固定时间就会从邻居peer收到一个hello包,如果超过一定的时间没有收到对方peer的hello包,则认为对方peer已经失效,从而立刻删除与对方的SA。
在配置Periodic模式时,除了需要配置hello的间隔时间之外,还可以选择配置retry时间,例如hello间隔是10秒,retry时间是2秒,那就表示每10秒都应该收到邻居一个hello包,但如果到了10秒都没收到邻居的hello包,则不会再等10秒,而是会在retry的时间2秒后再向对方发送hello,默认连续5个,即10秒后就认为邻居失效。retry默认时间为2秒、5个。
on-demand模式则不会定期在peer双方发送hello,而是根据流量来的,只有在要发数据时,才发送hello去查询邻居状态,如果没有数据要发送,就不会发送hello,所以在没有数据要发时,即使邻居失效了,本地也是不知道的,除非SA的lifetime超时,
注:
★IPsec DPD支持的设备包括路由器,PIX防火墙,并且支持各种LAN-to-LAN ×××以及Easy ×××。
★一定要先配置了IPsec DPD,才能应用crypto map到接口,如果先应用crypto map到接口再配IPsec DPD,是不生效的。
★IPsec DPD在peer双方都要配置。
要达到在IPsec SA空闲时将其删除的目的,需要使用IPsec SA Idle Timer机制,IPsec SA Idle Timer为IPsec SA设置空闲时间,在这个时间内没有流量传递,就认为该IPsec SA是空闲的,从而将其删除。
IPsec SA Idle Timer和IPsec DPD不一样,IPsec DPD只有在peer不可用时才会删除SA,而IPsec SA Idle Timer时在没有流量的情况下就会删除SA。
注:
★如果IPsec SA被删除了,那么IKE SA也照样会[被删除的。
★IOS 12.3(14)T以及之后版本才支持IPsec SA Idle Timer。
★IPsec SA Idle Timer可以在全局(globally)下配,也可以在crypto map下配,全局下配的对所有SA生效,而在crypto map下配的则只针对特定peer的SA生效。
★一定要先配置了IPsec SA Idle Timer,才能应用crypto map到接口,如果先应用crypto map到接口再配IPsec DPD,是不生效的。
★IPsec SA Idle Timer不需要在peer双方都配置,单方配置也可以。
有时为了网络冗余性,会设计一个场点两台×××路由器,使用两台路由器来和对方建立×××连接,对于×××路由器来说,如果要同时和对方一台以上的路由器建立×××连接,这并不困难,但有时希望只和对方某单台路由器建立×××连接,只有当使用中的×××路由器不可用时,再启用其它路由器作备用;这种IPsec ×××使用情况,我们称为IPsec Preferred Peer。
IPsec Preferred Peer由两个部件组成:
Default peer
IPsec DPD
Reverse route injection (RRI)
当配置的crypto map是静态crypto map时,RRI是根据crypto map中的ACL所定义的流量来自动创建静态路由的,但在配置动态crypto map时,是不会通过ACL来定义感兴趣流的,所以此时RRI就无法自动创建静态路由,因为事先根本无法知道哪些流量需要通过IPsec 隧道来加密传输,所以crypto map中,只能在建立IPsec SA后,根据IPsec SA中指示的需要被保护的流量来自动创建静态路由。
NAT Traversal(NAT-T)
大家都知道,在网络中配置了NAT时,通过NAT的数据包的包头都将被改写,而经过IPsec保护后的数据包在中途传输时,要更改IP包头也许会变的不可行,因为IPsec会将IP包头保护起来,并生成hash,如果随意改动IP包头,将使该数据包作废,所以IPsec数据包在穿越NAT网络时,存在着某些麻烦。
为了解决以上问题,IOS加入了探测网络路径中是否存在NAT的功能,称为NAT Traversal(NAT穿越);NAT-T在Phase 1时就开始探测网络路径中是否存在NAT,检测的方法是发送测试数据包,数据包对地址做hash,如果收到的数据包的hash没变化,就认为路径中没有NAT,如果有NAT,双方就会执行NAT-T。测试时发送的包称为NAT discovery (NAT-D),源地址和端口与目标地址和端口是分开的,如果有多个,那么数据包也就有多个包。
当Phase 1发现存在NAT之后,Phase 2才会考虑是否采用NAT-T,不过不用担心,NAT-T是自动开启的,不用手工配置;NAT-T是将IPsec的数据包当作数据再次封装在UDP中再进行传输的,这样一来,IPsec的数据包就受到与普通数据一样的对待,所以NAT也就伤不到IPsec的数据包了。
在ISAKMP中使用目的端口号为UDP 4500来协商NAT-T,而源端口则使用下一个可用更高的端口,如4501,在选择端口时,如果端口已经被用了,则使用4501,4502,直到可用为止。
注:
★准确地讲,IPsec是不能穿越PAT,而静态地址NAT映射是可以的。
★NAT-T只能让ESP(Encapsulating Security Protocol)封装穿越PAT,而AH(Authentication Header)封装却不可以。
★NAT Traversal(NAT-T)是在IOS 12.2(13)T以及之后的版本中默认是自动开启的;
★NAT Traversal(NAT-T)在IOS没有特定的命令来打开,却有特定的命令来关闭,命令如:
★Router(config)# no crypto ipsec nat-transparency udp-encapsulation
在IOS 12.2(13)T之前的版本没有NAT-T的功能,但并不表示IPsec数据包就不能穿过NAT网络,如果要穿过,也是可以的,该功能称为IPSec through NAT,如果IPsec ×××连接是从NAT本端的设备发起的,不需要做任何配置,但如果IPsec ×××连接是从NAT远端的设备发起的,则需要在NAT设备上增加配置命令,例如IPsec ×××源路由器的IP地址是10.1.1.1,NAT路由器的外网接口为F0/1,则需要在NAT设备上增加如下配置命令:
ip nat inside source static esp 10.1.1.1 interface f0/1
ip nat inside source static udp 10.1.1.1 500 interface f0/1 500
在×××设备支持NAT-T时,如果IPsec ×××连接是从NAT本端的设备发起的,也不需要做任何配置,但如果IPsec ×××连接是从NAT远端的设备发起的,同样需要在NAT路由器上增加如下配置命令:
ip nat inside source static udp 10.1.1.1 4500
interface f0/1 4500 ip nat inside source static udp 10.1.1.1 500 interface f0/1 500
出现IPsec数据包要穿越PAT的情况多数是因为某个分支机构的公网IP只有一个或不够,但又需要将×××路由器放置在内网,配置了内网地址后然后通过外网路由器进行NAT地址转换后出去,一个配置了内网IP地址的路由器是不可能和远程设备建立×××的,所以需要以外网路由器的公网IP地址为源去和远端建立×××连接,这就需要NAT-T或IPSec through