VPN (下)
{Back to Index}
Table of Contents
1 IKEv2 1
1.1 配置示例
Figure 1: 实验拓扑
初始配置
查看 Branch 信息
Branch#sh crypto ipsec transform-set Transform set default: { esp-aes esp-sha-hmac } will negotiate = { Transport, }, Transform set My_Transform_Set_1: { esp-des esp-md5-hmac } will negotiate = { Tunnel, }, Transform set My_Transform_Set_2: { esp-3des esp-sha256-hmac } will negotiate = { Tunnel, }, Branch#sh crypto ikev2 policy IKEv2 policy : My_Policy Match fvrf : global Match address local : any Proposal : My_Proposal IKEv2 policy : default Match fvrf : any Match address local : any Proposal : default Branch#sh crypto ikev2 proposal IKEv2 proposal: My_Proposal Encryption : 3DES AES-CBC-256 Integrity : SHA256 SHA512 PRF : SHA256 SHA512 ! 自动补全的,和完整性算法保持一致 DH Group : DH_GROUP_1024_MODP/Group 2 DH_GROUP_1536_MODP/Group 5 DH_GROUP_2048_MODP/Group 14 IKEv2 proposal: default ! 默认自带 Encryption : AES-CBC-256 AES-CBC-192 AES-CBC-128 Integrity : SHA512 SHA384 SHA256 SHA96 MD596 PRF : SHA512 SHA384 SHA256 SHA1 MD5 DH Group : DH_GROUP_1536_MODP/Group 5 DH_GROUP_1024_MODP/Group 2
2 IPSec 流量穿越注意点
2.1 防火墙
Figure 2: 实验拓扑
初始配置
此时如果从 R2 发起去往 R1 的流量,通信失败。在 R2 上观察,发现可以正常加密数据(说明 ISAKMP 协商阶段已经完成了),而在 R1 上观察,却发现 数据可以正常加解密,说明 R1 的响应流量无法到达 R2 。同时,从 ASAv 上看,发现有流量被 Drop 掉了:
R2#sh cry engine connections active Crypto Engine Connections ID Type Algorithm Encrypt Decrypt LastSeqN IP-Address 19 IPsec DES+MD5 0 0 0 202.100.2.1 20 IPsec DES+MD5 4 0 0 202.100.2.1 1010 IKE SHA+DES 0 0 0 202.100.2.1 R1#sh cry eng conn a Crypto Engine Connections ID Type Algorithm Encrypt Decrypt LastSeqN IP-Address 15 IPsec DES+MD5 0 4 4 16 IPsec DES+MD5 4 0 0 202.100.1.1 1008 IKE SHA+DES 0 0 0 202.100.1.1 ASAv(config)# sh asp drop frame acl-drop Flow is denied by configured rule (acl-drop) 4 Last clearing: Never
由于由于 ASA 默认会 inspect UDP 流量,因此 ISAKMP 可以正常协商,而后续的加密数据是三层流量(协议号50),在 Outside 接口 in 方向会被阻挡。
需要调整 Outside 接口 ACL :
! --- ASAv Configuration to make traffic work --- ! allow negociation traffic initiated by R1 access-list Outside_ACL extended permit udp host 202.100.1.1 eq isakmp host 202.100.2.1 eq isakmp ! allow ESP traffic from R1 access-list Outside_ACL extended permit esp host 202.100.1.1 host 202.100.2.1 !
2.2 ACL 处理逻辑 2
Figure 3: 入方向加密数据的处理
- 如果满足 reverse crypto map ACL 但是收到的数据没有加密,仍然会被丢弃
- IP 数据包接受接口入方向的 ACL 检查
- 如果数据是未加密的,直接转发即可
- 如果数据是加密的,执行解密操作
- 解密后的数据接受 inbound access crypto map ACL 检查(该 ACL 位于 crypto map 配置块中,默认 permit all )
- 转发解密后的数据
Figure 4: 出方向加密数据的处理
- 所有出方向的数据接受 crypto map ACL 检查,如果匹配表示需要加密
- 不需要加密的数据,直接交给
- 加密后的数据接受 outbound access crypto map ACL 检查(该 ACL 位于 crypto map 配置块中,默认 permit all )
- 加密数据
- 加密后的数据也要接受接口 outbound ACL 检查
- 二层封装
2.3 NAT-T (UDP4500)
Figure 5: 实验拓扑
初始配置(关闭NAT-T)
从 Inside2 发起去往 Inside1 的流量,第一阶段协商是成功的,只是加密数据 (ESP) 没法送达:
Site2(config)#do sh crypto session Crypto session current status Interface: Ethernet0/0 Session status: UP-ACTIVE Peer: 202.100.1.1 port 500 Session ID: 0 IKEv1 SA: local 192.168.1.1/500 remote 202.100.1.1/500 Active IPSEC FLOW: permit ip 2.2.2.0/255.255.255.0 1.1.1.0/255.255.255.0 Active SAs: 2, origin: crypto map Site2(config)#do sh cry engine conn active Crypto Engine Connections ID Type Algorithm Encrypt Decrypt LastSeqN IP-Address 3 IPsec DES+MD5 0 0 0 192.168.1.1 4 IPsec DES+MD5 10 0 0 192.168.1.1 有加密数据产生 1002 IKE SHA+DES 0 0 0 192.168.1.1 Internet(config)# sh xl 1 in use, 2 most used Flags: D - DNS, e - extended, I - identity, i - dynamic, r - portmap, s - static, T - twice, N - net-to-net 可以看到 udp 500 的槽位 UDP PAT from Inside:192.168.1.1/500 to Outside:202.100.1.10/500 flags ri idle 0:02:55 timeout 0:00:30
使用 packet-tracer 模拟:
Internet# packet-tracer input Inside rawip 192.168.1.1 50 202.100.1.1 detailed
...
Result:
input-interface: Inside
input-status: up
input-line-status: up
output-interface: Outside
output-status: up
output-line-status: up
Action: drop
Drop-reason: (nat-xlate-failed) NAT failed
因此原因在于 ESP 是三层数据,无法对其进行 NAT 操作,必须开启 NAT-T 功能,即添加 UDP4500 头部。
2.4 NAT 对加密设备的影响 3
NAT 操作执行顺序:
Inside-to-Outside | Outside-to-Inside |
---|---|
|
|
3 L2L 高可用相关特性 4
Figure 6: 实验拓扑
预配
3.1 反向路由注入 (RRI)
当 IPSec 会话建立成功后( 生成 Active SA 后 ),在本地自动添加一条去往目标网络(对端peer的感兴趣流所在的网段)的,且下一跳为对端加密点的 静态 路由。
如果将此静态路由添加到动态路由协议中,则 Inside 网络将动态获知当前处于 Active 状态的出口网关。
比如上图所示的拓扑中,Inside 路由器上并不需要配置默认路由,当 Branch 与 Active 网关建立 IPSec 后,会自动在 Active 上添加静态路由。通过将此自动生成的静态路由 重分布 进 OSPF 中,则内网能知道去往 1.1.1.0/24
的下一条为 202.100.1.1
。
RRI 的 局限性 在于为保证正常通信,必须由 Branch 触发安全会话的建立,因为只有这样才能产生静态路由。
感觉 RRI 和高可用没太多关系,只是为了给内部网络自动引导路由。
! ########### Active RRI Configuration ########### crypto map My_Map 10 set reverse-route tag 10 ! in order to distinguish in route-map reverse-route ! enable RRI ! route-map rri-to-ospf permit 10 match tag 10 ! router os 1 redistribute static subnets route-map rri-to-ospf !
观察路由信息:
Active(config-crypto-map)#do sh ip ro static ... S* 0.0.0.0/0 [1/0] via 61.128.1.10 1.0.0.0/24 is subnetted, 1 subnets S 1.1.1.0 [1/0] via 202.100.1.1 新增加的静态路由 Inside(config)#do sh ip ro os Codes: L - local, C - connected, S - static, R - RIP, M - mobile, B - BGP D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2 E1 - OSPF external type 1, E2 - OSPF external type 2 i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2 ia - IS-IS inter area, * - candidate default, U - per-user static route o - ODR, P - periodic downloaded static route, H - NHRP, l - LISP a - application route + - replicated route, % - next hop override, p - overrides from PfR Gateway of last resort is not set 1.0.0.0/24 is subnetted, 1 subnets O E2 1.1.1.0 [110/20] via 10.1.1.10, 00:00:17, Ethernet0/0 重分布进来的路由
3.2 DPD (Keepalive 机制)
可以和 RRI 一起使用,以保证注入的路由的时效性。否则如果中间链路出现问题,两端加密点的 SA 仍然是 active 状态,此时注入进 Inside 网络的路由其实是无效的。启用 DPD 后,可以及时发现链路故障并尽快删除失效的 SA 。
3.3 Default peer
将 peer 设为 default ,会优先与 default peer 建立 IPSec ,比如设置了三个 peer (peerA, peerB, peerC) ,A 为 default 。当 A 的链路出现问题(也可能是 DPD 探测出了链路故障),则会尝试与 B 建立会话。如果 B 再次出现问题,此时仍然优先尝试 A ,失败后再尝试 C 。
3.4 高可用性配置示例
! ####################### Branch ####################### crypto isakmp key Cisco123 address 137.78.5.1 ! key for another peer crypto isakmp keepalive 10 periodic ! DPD ! crypto map My_Map 10 ipsec-isakmp set peer 61.128.1.1 default set peer 137.78.5.1 !
! ####################### Active ####################### crypto isakmp keepalive 10 periodic ! DPD crypto map My_Map 10 set reverse-route tag 10 ! in order to distinguish in route-map reverse-route ! enable RRI ! route-map rri-to-ospf permit 10 match tag 10 ! router os 1 redistribute static subnets route-map rri-to-ospf !
! ####################### Standby ####################### crypto ikev1 enable Outside crypto ikev1 policy 10 authentication pre-share encryption des hash sha group 1 ! tunnel-group 202.100.1.1 type ipsec-l2l tunnel-group 202.100.1.1 ipsec-attributes ikev1 pre-shared-key Cisco123 ! DPD isakmp keepalive threshold 10 retry 2 ! access-list VPN_Traffic extended permit ip 2.2.2.0 255.255.255.0 1.1.1.0 255.255.255.0 ! crypto ipsec ikev1 transform-set My_Transform_Set esp-des esp-md5-hmac ! crypto map My_Crypto_Map 10 match address VPN_Traffic crypto map My_Crypto_Map 10 set peer 202.100.1.1 crypto map My_Crypto_Map 10 set ikev1 transform-set My_Transform_Set ! RRI crypto map My_Crypto_Map 10 set reverse-route crypto map My_Crypto_Map interface Outside crypto map My_Crypto_Map 10 set connection-type answer-only ! access-list RRI standard permit 1.1.1.0 255.255.255.0 ! route-map rri-to-ospf permit 10 match ip address RRI ! router os 1 redistribute static subnets route-map rri-to-ospf !
尝试 shutdown Internet e0/1 或 e0/2 接口,可以看到 Branch 会自动切换 peer ,同时 Inside 上被重分布进 OSPF 的那条路由也会动态变化,指向正确的网关。
4 动态地址 VPN
4.1 Dynamic MAP
适用于 Hub 有固定 IP 但是 Spoke 是动态 IP 的情况,通常使用 EZVPN 的方式,也可以使用动态 MAP 解决。
dynamic map 不用设 peer ,谁发过来就认为对方是 peer 。也不用设置感兴趣流,以对端发来的为准。
该方案配置在 Hub 端,Spoke 端正常配置 L2L VPN 即可。该方案适用于简单的网络拓扑,因为不能运行动态路由协议,这也是 L2L VPN 所不支持的(不能传递组播,广播流量)。
配置要点:
- 动态 Map 必须间接通过静态 Map 调用到接口
- 原来静态 Map 下的配置,改到动态 Map 下做
- 无需 set peer
- 无需设置感兴趣流,会自动从对方 SA 消息中学习
- 动态 Map 只能被动建立 VPN 会话,不能主动发起
- 多用于中心站点,等待分支站点连接
Figure 7: 实验拓扑
预配
Branch L2L VPN 配置(无特殊配置)
! ############## Branch L2L VPN ############### crypto isakmp policy 10 authentication pre-share ! crypto isakmp key Cisco123 address 202.100.1.1 ! ip access-list extended VPN_ACL per ip 2.2.2.0 0.0.0.255 1.1.1.0 0.0.0.255 ! crypto ipsec transform-set My_Transform_Set esp-des esp-md5-hmac ! crypto map My_Map 10 ipsec-isakmp set peer 202.100.1.1 set transform-set My_Transform_Set match address VPN_ACL ! int e0/0 crypto map My_Map !
! ######### Dynamic crypto map configuration for Hub ############ crypto isakmp policy 10 authentication pre-share ! crypto isakmp key Cisco123 address 0.0.0.0 0.0.0.0 ! crypto ipsec transform-set My_Transform_Set esp-des esp-md5-hmac ! crypto dynamic-map My_Dynamic_Map 10 set transform-set My_Transform_Set ! no need to set peer here ! no need to set ACL here ! crypto map My_Map 100 ipsec-isakmp dynamic My_Dynamic_Map ! int e0/0 crypto map My_Map !
4.2 DDNS
5 SVTI VPN
【 SVTI VPN 】和【 GRE Over IPSec 】原理类似,优势是不需要额外的 4 字节 GRE 头部,可以说提高了发送效率。
5.1 IKEv1
Figure 8: 实验拓扑
5.2 IKEv2
Figure 9: 拓扑
预配
! ########### Branch SVTI IKEv2 Configuration ############# crypto ikev2 proposal My_Proposal ! can omit defining proposal and just use the default one encryption 3des aes-cbc-256 integrity sha256 sha512 group 2 5 14 ! crypto ikev2 policy My_Policy ! can omit defining policy and just use the default one which refers to default proposal proposal My_Proposal ! crypto ikev2 keyring My_Keyring peer Hub address 61.128.2.20 pre-shared-key Cisco123 ! ! crypto ipsec transform-set My_Transform_Set esp-des esp-md5-hmac ! can omit defining transform-set and just use default one mode tunnel ! crypto ikev2 profile My_IKEv2_Profile match identity remote address 61.128.2.20 identity local address 202.100.1.1 authentication local pre-share authentication remote pre-share keyring local My_Keyring ! crypto ipsec profile My_IPSEc_Profile set ikev2-profile My_IKEv2_Profile ! int tun0 ip add 172.16.2.1 255.255.255.0 tunnel source e0/0 tunnel mode ipsec ipv4 tunnel destination 61.128.2.20 tunnel protection ipsec profile My_IPSEc_Profile !
! ####################### Hub SVTI IKEv2 Configuration #######################
crypto ikev2 proposal My_Proposal ! can omit defining proposal and just use the default one
encryption 3des aes-cbc-256
integrity sha256 sha512
group 2 5 14
!
crypto ikev2 policy My_Policy ! can omit defining policy and just use the default one which refers to default proposal
proposal My_Proposal
!
crypto ikev2 keyring My_Keyring
peer Branch
address 202.100.1.1
pre-shared-key Cisco123
!
!
crypto ipsec transform-set My_Transform_Set esp-des esp-md5-hmac ! can omit defining transform-set and just use default one
mode tunnel
!
crypto ikev2 profile My_IKEv2_Profile
match identity remote address 202.100.1.1
identity local address 61.128.2.20
authentication local pre-share
authentication remote pre-share
keyring local My_Keyring
!
crypto ipsec profile My_IPSEc_Profile
set ikev2-profile My_IKEv2_Profile
!
int tun0
ip add 172.16.2.20 255.255.255.0
tunnel source e0/0
tunnel mode ipsec ipv4
tunnel destination 202.100.1.1
tunnel protection ipsec profile My_IPSEc_Profile
!
配置动态路由
! ######### Branch/Hub ############ int r e0/1,tun0 ip os 1 a 0 ! router os 1 pass e0/1 !
6 GETVPN
必须在全局可路由环境下使用(通常在内网使用),本质是为了加密,常见于在 MPLS 网络中提供加密功能。
GETVPN 有如下几个特点:
- 基于 native routing (即全局可路由)
- 保留原始数据 IP 头部(即不影响 QoS )
- Group 内部使用相同的安全策略,Group 内成员预先协商 IPSec SA ,实现 any-to-any 传输
- 高效率支持对组播的加密