目錄

前言
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。