目录

前言
GETVPN 原理
Key Server 设定
  Step 1:设定 Interesting Traffic
  Step 2:设定 IKE Phase 1 和 Phase 2 参数
  Step 3:设定 Pre-share Key
  Step 4:定义 Crypto Map
Group Member 设定
  Step 1:设定 IKE Phase 1
  Step 2:设定 GDOI
  Step 3:定义 Crypto Map
GETVPN 与 DMVPN 之比较

前言

Cisco 的 Group Encrypted Transport VPN (GETVPN) 技术可以简化 IPSec 设定,让网管人员更容易管理和配置 IPSec。为了建立 Fully Mesh IPSec 网络,每只 Router 都要对其馀所有 Router 建立 IPSec Tunnel,涉及大量的 ISAKMP Key 管理及 IPSec 组态。试计算一下,如网络里有 n 只 Router 之间需要 IPSec 保护,IPSec Tunnel 总数为 n(n-1)/2,设定极为费时及容易出错,网管人员生活大打折扣 😭。本文将会介绍 GETVPN 的原理和设定,假设读者已对 IPSec 理论有所了解。

GETVPN 原理

传统 IPSec 设定需要在每只 Router 设定 IPSec 参数,包括 Interesting Traffic 和 Encryption Policy 等等,GETVPN 化繁为简的方法是先定义一只 Key Server (KS),然後把 IPSec Policy 都设定在 KS 之中。其他 Router (又称为 Group Member,或 GM) 用 GDOI (Group Domain of Interpretation) Protocol 向 KS 认证并取得 Policy 设定,然後建立单一 IPSec Tunnel 与其他 GM 沟通。

本文将用以下网络作例子来设定 GETVPN,R4 是 KS,R1 与 R2 分别是 GM1 和 GM2。

getvpn

Router 以 EIGRP 打通,原设定如下:

hostname R3
!
interface Ethernet1/1
 ip address 192.168.13.3 255.255.255.0
!
interface Ethernet1/2
 ip address 192.168.23.3 255.255.255.0
!
interface Ethernet1/3
 ip address 192.168.34.3 255.255.255.0
!
router eigrp 1
 network 0.0.0.0

R1丶R2 及 R4 设定相若,以下只显示 R1 设定:

hostname R1
!
interface Loopback0
 ip address 10.0.1.1 255.255.255.0
!
interface Ethernet1/0
 ip address 192.168.13.1 255.255.255.0
 duplex full
!
router eigrp 1
 network 0.0.0.0

Key Server 设定

Step 1:设定 Interesting Traffic

跟一般 IPSec 相同,先设定 Interesting Traffic 去定义想要建立 IPSec 的 Network,此例子所有 VPN Network 均为 10.0.x.x,因此使用以下 ACL:

KS(config)#ip access-list extended VPN-Traffic
KS(config-ext-nacl)#permit ip 10.0.0.0 0.0.255.255 10.0.0.0 0.0.255.255

Step 2:设定 IKE Phase 1 和 Phase 2 参数

参数的意思已在 IPSec 的文章中解释过,不在此重复说明。

R4(config)#crypto isakmp policy 1
R4(config-isakmp)#encryption aes
R4(config-isakmp)#hash md5
R4(config-isakmp)#authentication pre-share
R4(config-isakmp)#group 2
R4(config)#crypto ipsec transform-set TS esp-aes esp-sha-hmac 

Step 3:设定 Pre-share Key

理论上,我们可以对不同的 GM 使用不同的 Key,这里为方便,一律使用 ccie 这个 Key,因此 Address 设为 0.0.0.0,即所有 Address。

R4(config)#crypto isakmp key ccie address 0.0.0.0

Step 4:定义 Crypto Map

这部份最复杂,先定义 Profile。

R4(config)#crypto ipsec profile PROFILE-IPSEC
R4(ipsec-profile)#set transform-set TS

KS 会定期产生 Encryption Key 派给 GM,并用 Asymmetric Encryption 加密,因此,我们要先为 KS 产生出 Private and Public Key Pair。

R4(config)#crypto key generate rsa label KEYPAIR modulus 1024

然後设定 GDOI:

R4(config)#crypto gdoi group GROUP_GDOI
R4(config-gdoi-group)#identity number 1234  1️⃣
R4(config-gdoi-group)#server local
R4(gdoi-local-server)#rekey authentication mypubkey rsa KEYPAIR  2️⃣
R4(gdoi-local-server)#rekey transport unicast  3️⃣
R4(gdoi-local-server)#sa ipsec 10
R4(gdoi-local-server)#address ipv4 192.168.34.4  4️⃣
R4(gdoi-sa-ipsec)#profile PROFILE-IPSEC
R4(gdoi-sa-ipsec)#match address ipv4 VPN-Traffic  5️⃣

1️⃣ 使用同一组 GDOI 的 GM 需使用与 KS 相同的 Identity Number
2️⃣ 用此组 Asymmetric Key Pair 去产生 Encryption Key 派给 GM
3️⃣ 用 unicast 派发
4️⃣ KS 用来接收 GDOI Request 的 IP Address
5️⃣ 设定什麽 Traffic 会推动 IPSec 流程,此 Policy 会下载到每只 GM

定义 Crypto Map,然後把 Crypto Map 放进 Interface。

R4(config)#crypto map CMAP 10 gdoi 
% NOTE: This new crypto map will remain disabled until a valid
        group has been configured.
R4(config-crypto-map)#set group GROUP_GDOI
R4(config)#int ethernet 1/0
R4(config-if)#crypto map CMAP

Group Member 设定

基本上,所有 GM 都使用相同的设定。

Step 1:设定 IKE Phase 1

GM 必先与 KS 建立 ISAKMP,才能获取 Policy 资讯,所以 IKE Phase 1 设定不能幸免。

R1(config)#crypto isakmp policy 1
R1(config-isakmp)#encryption aes
R1(config-isakmp)#hash md5
R1(config-isakmp)#authentication pre-share 
R1(config-isakmp)#group 2

并需设定 Pre-share Key。

R1(config)#crypto isakmp key ccie address 192.168.34.4

Step 2:设定 GDOI

设定 GDOI Group,如刚才所说 Identity Number 要相同,Server Address 则是 KS 的 Address。

R1(config)#crypto gdoi group GROUP_GDOI
R1(config-gdoi-group)#identity number 1234
R1(config-gdoi-group)#server address ipv4 192.168.34.4

Step 3:定义 Crypto Map

定义 Crypto Map,然後把 Crypto Map 放进 Interface。

R1(config)#crypto map CMAP 10 gdoi 
% NOTE: This new crypto map will remain disabled until a valid
        group has been configured.
R1(config-crypto-map)# set group GROUP_GDOI
R1(config)#int ethernet 1/0
R1(config-if)#crypto map CMAP

如果设定没问题的话,该可以看见此 GM 向 KS 进行 Registration。

*Oct 27 19:09:14.663: %CRYPTO-5-GM_REGSTER: Start registration to KS 192.168.34.4 for group GROUP_GDOI using address 192.168.13.1
R1(config-if)#
*Oct 27 19:09:14.671: %CRYPTO-6-GDOI_ON_OFF: GDOI is ON

也可看到 ISAKMP 建立。

R1#show crypto isakmp sa
IPv4 Crypto ISAKMP SA
dst             src             state          conn-id status
192.168.34.4    192.168.23.2    GDOI_IDLE         1001 ACTIVE
192.168.23.2    192.168.34.4    GDOI_REKEY        1002 ACTIVE

在 R2 使用相同的 GM 设定,然後从 R1 的 Loopback0 Ping R2 的 Loopback0 (产生 Interesting Traffic),IPSec Tunnel 便出现了。

R1#ping 10.0.2.2 source 10.0.1.1
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 10.0.2.2, timeout is 2 seconds:
Packet sent with a source address of 10.0.1.1 
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 16/27/52 ms
R1#
R1#show crypto ipsec sa

interface: Ethernet1/0
    Crypto map tag: CMAP, local addr 192.168.13.1

   protected vrf: (none)
   local  ident (addr/mask/prot/port): (10.0.0.0/255.255.0.0/0/0)
   remote ident (addr/mask/prot/port): (10.0.0.0/255.255.0.0/0/0)
   current_peer 0.0.0.0 port 848
     PERMIT, flags={}
    #pkts encaps: 5, #pkts encrypt: 5, #pkts digest: 5
    #pkts decaps: 5, #pkts decrypt: 5, #pkts verify: 5
    #pkts compressed: 0, #pkts decompressed: 0
    #pkts not compressed: 0, #pkts compr. failed: 0
    #pkts not decompressed: 0, #pkts decompress failed: 0
    #send errors 0, #recv errors 0

     local crypto endpt.: 192.168.13.1, remote crypto endpt.: 0.0.0.0
     path mtu 1500, ip mtu 1500, ip mtu idb Ethernet1/0
     current outbound spi: 0x0(0)
     PFS (Y/N): N, DH group: none

     inbound esp sas:

     inbound ah sas:

     inbound pcp sas:

     outbound esp sas:

     outbound ah sas:

     outbound pcp sas:

     local crypto endpt.: 192.168.13.1, remote crypto endpt.: 0.0.0.0
     path mtu 1500, ip mtu 1500, ip mtu idb Ethernet1/0
     current outbound spi: 0x9300630A(2466276106)
     PFS (Y/N): N, DH group: none

     inbound esp sas:
      spi: 0x9300630A(2466276106)
        transform: esp-aes esp-sha-hmac ,
        in use settings ={Tunnel, }
        conn id: 1, flow_id: 1, sibling_flags 80000040, crypto map: CMAP
        sa timing: remaining key lifetime (sec): (3235)
        Kilobyte Volume Rekey has been disabled
        IV size: 16 bytes
        replay detection support: N
        Status: ACTIVE(ACTIVE)

     inbound ah sas:

     inbound pcp sas:

     outbound esp sas:
      spi: 0x9300630A(2466276106)
        transform: esp-aes esp-sha-hmac ,
        in use settings ={Tunnel, }
        conn id: 2, flow_id: 2, sibling_flags 80000040, crypto map: CMAP
        sa timing: remaining key lifetime (sec): (3235)
        Kilobyte Volume Rekey has been disabled
        IV size: 16 bytes
        replay detection support: N
        Status: ACTIVE(ACTIVE)

     outbound ah sas:

     outbound pcp sas:

GETVPN 与 DMVPN 之比较

由於 GETVPN 与 DMVPN 都有着简化 Remote Site 设定的效果,在应用上 GETVPN 比 DMVPN 在以下优胜之处:

  1. 基於 GETVPN 使用 Tunnel Mode with Address Preservation,即原 IP Header (Inner IP Header) 被复制到 Outer IP Header,因此 VPN Network 可直接被 Routing 而不像 DMVPN 那样需要在 VPN 之上另外建立一层 Overlay Routing Protocol。
  2. DMVPN 把 Multicast Traffic 复制到不同的 mGRE Tunnel,籍此支援 Multicast,而 GETVPN 可直接使用 Underlay 的 Multicast Protocol,例如:PIM。