【ネットワーク入門】GRE over IPSECについて深掘りしてみた

  • URLをコピーしました!
目次

はじめに

こんにちは。ネットワークエンジニアの「だいまる」です。

今回は、先日のGREに続くのですが、「GRE over IPSEC」について勉強したのでそのまとめをしたいと思います。

GRE over IPsecとは

GRE over IPsecとは、GREを使ったネットワーク上でIPsecを利用した機能となります。

このネットワークが必要な理由は、「ダイナミックルーティングプロトコル(OSPFやIS-IS、BGP)を利用した拠点間IPsec-VPNの構築」をしたいためです。

IPsecの主な特徴にデータの暗号化とトンネリングがありますが、トンネリングではユニキャスト通信のみしか対応していません。

Router1
Router1
Router2
Router2
IPSecの場合:ユニキャストパケットのみ
IPSecの場合:ユニキャストパケットのみ
マルチキャストパケット通信不可のため
IPSec上のトンネルはDrop
マルチキャストパケット通信不可のため IPSec上のトンネルはDrop
Text is not SVG – cannot display

そのため、OSPFやIS-IS、BGPといったダイナミックルーティングではマルチキャストパケットを必要とするため利用できず、経路設計は全てStaticとなり設計から運用までの稼働が大幅に増えることになります。

そこで今回まとめる「GRE over IPsec」を利用するのです。

Router1
Router1
Router2
Router2
GRE overIPSecの場合
マルチキャストパケットも可能
GRE overIPSecの場合…
マルチキャストパケット通信可のため
ダイナミックルーティングも利用可能
マルチキャストパケット通信可のため ダイナミックルーティングも利用可能
Text is not SVG – cannot display

GRE over IPsecの基本設定

ここではIPsecについては細かく説明せずに、GRE over IPSecの基本的な設定方法とCMLによる実機確認を行っていきたいと思います。

基本的な設定は「GREの設定とIPSecの設定の2ステップ」になります。

GREの設定

GREの設定は前回の記事をご参照お願い致します。

IPSecの設定

IPSecの設定は「Cryptoファイル」の利用「IPSecプロファイル」の利用の2パターンに分かれます。

ここでは両方の設定方法を記載していきます。

Step0:IPSecの対象とするACLを定義(Cryptoファイルのみ)

このACLは、IPSecで保護される対象を記載するACLとなります。

(config)# ip access-list extended <ACL名> permit gre host <トンネル Source IP> host <トンネル Dst IP>

Step1:ISAKMPポリシーの作成(Cryptoファイル・IPSecプロファイル)

以下コマンドでISAKMPポリシーの作成を行います。

(config)#crypto isakmp policy <Priority値>
(config-isakmp)# encryption { des | 3des | aes }
(config-isakmp)# hash { sha | sha 256 | sha 384 | sha 512 | md5 }
(config-isakmp)# authentication { pre-share | rsa-encr | rsa-sig }
(config-isakmp)# group { 1 | 2 | 5 | 14 | 15 | 16 | 19 | 20 | 24 }

Priority値はポリシーの優先度を表し、1〜1000で指定でき、優先度が最も高いのは「1」となります。

暗号化アルゴリズムの指定は、CCNPの教材には5種類ぐらい指定できると書いてあったのですが、実際3種類でした。

また、ハッシュアルゴリズムは5つ指定可能であり、認証方式とグループを指定すれば、ポリシーの作成は完了です。

グループの指定は、Diffie-Hellmanの何ビットを利用するかを指定するための設定になります。

Step2:PSK KEYの作成と設定(Cryptoファイル・IPSecプロファイル)

(config)# crypto isakmp key <キー文字> address <ピア先のアドレス> [mask]

この設定で指定する「キー文字」はピア双方で同一の文字列を指定します。

また、ピア先は基本的にGREトンネルの物理IFアドレスになります。

Step3:トランスフォームセットの設定(Cryptoファイル・IPSecプロファイル)

(config)# crypto ipsec transform-set <トランスフォームセット名> <AHアルゴリズム> <ESPアルゴリズム>
(cfg-crypto-trans)# mode [ tunnel | transport ]

ここでは、IPSecのモード指定やAH・ESPで利用するアルゴリズムの指定を行います。

アルゴリズムの候補が多いため、実際の実機で確認いただければと思います。

Step4-1:Crypto Mapの作成と設定(Cryptoファイルのみ対応)

ここではStep0〜Step3で作成してきたものをCrypto Mapで適用していきます。

(config)# crypto map <map名> <seq番号> [ ipsec-isakmp]
(config-crypto-map)#match address <ACL名> 
Router1(config-crypto-map)#set peer <ピア先アドレス>
Router1(config-crypto-map)#set transform-set <transform名>
Router1(config-crypto-map)#end

ACL名はStep0で作成したACLを適用し、ピア先アドレスはGREトンネルを張っている対向の物理IFアドレスとなります。

また、トランスフォームセットはStep3で作成したものを適用します。

Step4-2:IPSecプロファイルの作成と設定(IPSecプロファイルのみ対応)

IPSecプロファイルによる設定の場合は、以下のコマンドでトランスフォーム名を設定するのみとなります。

(config)# crypto ipsec profile <IPSecプロファイル名>
(ipsec-profile)# set transform-set <トランスフォーム名>

Step5-1:Crypto Mapの適用(Cryptoファイルのみ対応)

最後にGREで使っている物理IFに対し、Crypto Mapを適用してあげることでGRE over IPSecの設定が完了となります。

(config)# interface <IF名>
(config-if)# crypto map <crypto map名>

Step5-2:IPSecプロファイルの適用

IPSecプロファイルの場合は、物理IFではなくTunnel IFに対しIPSecプロファイルを適用してあげることになります。

(config)# interface <IF名>
(config-if)# tunnel protection ipsec profile <プロファイル名>

IOSを使って実機確認してみよう

今回用いた構成は前回のGREの記事とほぼ同様です。(一部IPアドレスが異なりますが)

前回同様、ISP1とISP2の間はOSPFが走っており、Router1とISP1間、Router2とISP2間は特にプロトコルは動いておらず、Router1とRouter2間GREを張っている構成となります。

Router1
Router1
ISP1
ISP1
ISP2
ISP2
Router2
Router2
192.168.1.0/30
192.168.1.0/30
インターネット模擬
インターネット模擬
10.2.0.0/30
10.2.0.0/30
.2
.2
.1
.1
Gi0/1
Gi0/1
Gi0/1
Gi0/1
Lo0:10.1.0.1/32
Lo0:10.1.0.1/32
Lo0:10.1.0.4/32
Lo0:10.1.0.4/32
.1
.1
.2
.2
Gi0/1
Gi0/1
Gi0/1
Gi0/1
10.3.0.0/30
10.3.0.0/30
GREトンネル
GREトンネル
Text is not SVG – cannot display

この点に関しても前回の記事と同じなのでここでは説明を割愛します。

GREの設定は終えている前提とした上で、IPSecの設定を行なっていきます。

今回はIPSecのCryptoファイルを使った設定で確認を行なっていきます。

Step0:IPSecの対象となるACL定義

Router1#conf t
Enter configuration commands, one per line.  End with CNTL/Z.
Router1(config)#ip access-list extended IPSec_Test
Router1(config-ext-nacl)#permit gre host 10.2.0.2 host 10.3.0.2
Router1(config-ext-nacl)#end

IPSecの対象となるACLを定義することがCryptoファイルを使った設定では必要となります。

GREトンネルの始点と終点のアドレスを指定することでそのトンネルを通過するパケットがIPSecの対象となるのです。

Step1:ISAKMPポリシーの作成

基本設定のセクションで説明した通りに設定するのですが、今回はencryptionを「aes」、hashを「sha256」、authenticationを「pre-share」とし、グループ番号を「14」で指定しております。

Router1#conf t
Enter configuration commands, one per line.  End with CNTL/Z.
Router1(config)#crypto isakmp policy 1
Router1(config-isakmp)#encryption ?
  3des  Three key triple DES
  aes   AES - Advanced Encryption Standard.
  des   DES - Data Encryption Standard (56 bit keys).

Router1(config-isakmp)#encryption aes
Router1(config-isakmp)#hash ?
  md5     Message Digest 5
  sha     Secure Hash Standard
  sha256  Secure Hash Standard 2 (256 bit)
  sha384  Secure Hash Standard 2 (384 bit)
  sha512  Secure Hash Standard 2 (512 bit)

Router1(config-isakmp)#hash sha256
Router1(config-isakmp)#authentication ?
  pre-share  Pre-Shared Key
  rsa-encr   Rivest-Shamir-Adleman Encryption
  rsa-sig    Rivest-Shamir-Adleman Signature

Router1(config-isakmp)#authentication pre
Router1(config-isakmp)#authentication pre-share
Router1(config-isakmp)#group ?
  1   Diffie-Hellman group 1 (768 bit)
  14  Diffie-Hellman group 14 (2048 bit)
  15  Diffie-Hellman group 15 (3072 bit)
  16  Diffie-Hellman group 16 (4096 bit)
  19  Diffie-Hellman group 19 (256 bit ecp)
  2   Diffie-Hellman group 2 (1024 bit)
  20  Diffie-Hellman group 20 (384 bit ecp)
  21  Diffie-Hellman group 21 (521 bit ecp)
  24  Diffie-Hellman group 24 (2048 bit, 256 bit subgroup)
  5   Diffie-Hellman group 5 (1536 bit)
Router1(config-isakmp)#group 14

Step2:PSK KEYの作成と設定

PSK KEYの作成と設定ではRouter1から見たリモートのピア先アドレスを指定しています。

Router1(config)#crypto isakmp key ipsec_test address 10.3.0.2 255.255.255.252
Router1(config)#end

Step3:トランスフォームセットの設定(Cryptoファイル・IPSecプロファイル)

今回はトンネルモードを指定しています。

Router2#conf t
Enter configuration commands, one per line.  End with CNTL/Z.
Router2(config)#crypto ipsec transform-set ipsec_test ah-sha-hmac esp-aes
Router2(cfg-crypto-trans)#mode tunnel
Router2(cfg-crypto-trans)#end

Step4:Crypto Mapの作成と設定(Cryptoファイルのみ対応)

ピア先は先ほどから設定していますが、「10.3.0.2」となり、今回のトランスフォーム名は「ipsec_test」としました。

Router1(config)#crypto map ipsec_map_test 1 ipsec-isakmp
% NOTE: This new crypto map will remain disabled until a peer
	and a valid access list have been configured.
Router1(config-crypto-map)#match address IPsec_Test
Router1(config-crypto-map)#set peer 10.3.0.2
Router1(config-crypto-map)#set transform-set ipsec_test
Router1(config-crypto-map)#end

Step5:Crypto Mapの適用

Router1#conf t
Enter configuration commands, one per line.  End with CNTL/Z.
Router1(config)#interface gigabitEthernet 0/1
Router1(config-if)#crypto map ipsec_map_test
Router1(config-if)#end

状態確認


Router1#show ip ospf neighbor

Neighbor ID     Pri   State           Dead Time   Address         Interface
10.1.0.4          0   FULL/  -        00:00:36    192.168.100.2   Tunnel0
Router1#show ip route ospf
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 10.2.0.1 to network 0.0.0.0

      10.0.0.0/8 is variably subnetted, 4 subnets, 2 masks
O        10.1.0.4/32 [110/1001] via 192.168.100.2, 00:02:29, Tunnel0

Router1#show crypto isakmp sa detail
Codes: C - IKE configuration mode, D - Dead Peer Detection
       K - Keepalives, N - NAT-traversal
       T - cTCP encapsulation, X - IKE Extended Authentication
       psk - Preshared key, rsig - RSA signature
       renc - RSA encryption
IPv4 Crypto ISAKMP SA

C-id  Local           Remote          I-VRF  Status Encr Hash   Auth DH Lifetime Cap.

1001  10.2.0.2        10.3.0.2               ACTIVE aes  sha256 psk  14 23:57:05
       Engine-id:Conn-id =  SW:1

IPv6 Crypto ISAKMP SA

Router1#

Router1#show crypto ipsec sa

interface: GigabitEthernet0/1
    Crypto map tag: ipsec_map_test, local addr 10.2.0.2

   protected vrf: (none)
   local  ident (addr/mask/prot/port): (10.2.0.2/255.255.255.255/47/0)
   remote ident (addr/mask/prot/port): (10.3.0.2/255.255.255.255/47/0)
   current_peer 10.3.0.2 port 500
     PERMIT, flags={origin_is_acl,}
    #pkts encaps: 1058, #pkts encrypt: 1058, #pkts digest: 1058
    #pkts decaps: 1058, #pkts decrypt: 1058, #pkts verify: 1058
    #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.: 10.2.0.2, remote crypto endpt.: 10.3.0.2
     plaintext mtu 1422, path mtu 1500, ip mtu 1500, ip mtu idb GigabitEthernet0/1
     current outbound spi: 0x99AF012C(2578383148)
     PFS (Y/N): N, DH group: none

     inbound esp sas:
      spi: 0xCCEDEBB5(3438144437)
        transform: esp-aes ,
        in use settings ={Tunnel, }
        conn id: 1, flow_id: SW:1, sibling_flags 80004070, crypto map: ipsec_map_test
        sa timing: remaining key lifetime (k/sec): (4356814/3117)
        IV size: 16 bytes
        replay detection support: Y
        Status: ACTIVE(ACTIVE)

     inbound ah sas:
      spi: 0xEEF91E17(4009303575)
        transform: ah-sha-hmac ,
        in use settings ={Tunnel, }
        conn id: 1, flow_id: SW:1, sibling_flags 80004070, crypto map: ipsec_map_test
        sa timing: remaining key lifetime (k/sec): (4356814/3117)
        replay detection support: Y
        Status: ACTIVE(ACTIVE)

     inbound pcp sas:

     outbound esp sas:
      spi: 0x91AEC91B(2444151067)
        transform: esp-aes ,
        in use settings ={Tunnel, }
        conn id: 2, flow_id: SW:2, sibling_flags 80004070, crypto map: ipsec_map_test
        sa timing: remaining key lifetime (k/sec): (4356814/3117)
        IV size: 16 bytes
        replay detection support: Y
        Status: ACTIVE(ACTIVE)

     outbound ah sas:
      spi: 0x99AF012C(2578383148)
        transform: ah-sha-hmac ,
        in use settings ={Tunnel, }
        conn id: 2, flow_id: SW:2, sibling_flags 80004070, crypto map: ipsec_map_test
        sa timing: remaining key lifetime (k/sec): (4356814/3117)
        replay detection support: Y
        Status: ACTIVE(ACTIVE)

     outbound pcp sas:

上記では、GRE over IPSecの設定完了後のOSPFネイバーがあがっている点とOSPFの経路をもらっている点の確認が取れます。

では、実際IPSecの設定はうまくいっているのかというと「show crypto isakmp sa detail」でStatusがActiveになっていることから問題ないことが確認取れます。

「show crypto ipsec sa」ではもう少し細かい情報を見ることができます。

では、実際パケットはEncapsulationされているのでしょうか?と思い、パケットキャプチャしてみました。

キャプチャしたパケットはICMP(Ping)をRouter2からRouter1に1000発打ったのを取得しました。

Router1
Router1
ISP1
ISP1
ISP2
ISP2
Router2
Router2
10.1.0.0/30
10.1.0.0/30
インターネット模擬
インターネット模擬
100.64.1.0/30
100.64.1.0/30
.1
.1
.2
.2
Gi0/1
Gi0/1
Gi0/1
Gi0/1
Lo0:10.1.1.1/24
Lo0:10.1.1.1/24
Lo0:10.2.2.1/24
Lo0:10.2.2.1/24
.1
.1
.2
.2
Gi0/1
Gi0/1
Gi0/1
Gi0/1
100.64.2.0/30
100.64.2.0/30
GRE over IPsecトンネル
GRE over IPsecトンネル
Router2からRouter1からPing送信
Router2からRouter1からPing送信
Text is not SVG – cannot display

取得した結果は・・・・・しっかりAHとESPでEncapされていました!!

最後に

意外とGREやGRE over IPsecって触れることがないので今回いい勉強になりました。

次回は、順番が逆になりましたが、IPSecについてまとめていこうと思います!

引き続きよろしくお願いします!

  • URLをコピーしました!

この記事を書いた人

目次