目錄

前言
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 無助於減少 IPSec Tunnel 數量,仍需要 n(n-1)/2 Tunnel,而 GETVPN 則可把 Tunnel 數量減至 n Tunnel (設 n 為 VPN Router 數量)。
  3. DMVPN 把 Multicast Traffic 複製到不同的 mGRE Tunnel,籍此支援 Multicast,而 GETVPN 可直接使用 Underlay 的 Multicast Protocol,例如:PIM。