はじめに
こんにちは。ネットワークエンジニアの「だいまる」です。
今回は、先日のGREに続くのですが、「GRE over IPSEC」について勉強したのでそのまとめをしたいと思います。
GRE over IPsecとは
GRE over IPsecとは、GREを使ったネットワーク上でIPsecを利用した機能となります。
このネットワークが必要な理由は、「ダイナミックルーティングプロトコル(OSPFやIS-IS、BGP)を利用した拠点間IPsec-VPNの構築」をしたいためです。
IPsecの主な特徴にデータの暗号化とトンネリングがありますが、トンネリングではユニキャスト通信のみしか対応していません。
そのため、OSPFやIS-IS、BGPといったダイナミックルーティングではマルチキャストパケットを必要とするため利用できず、経路設計は全てStaticとなり設計から運用までの稼働が大幅に増えることになります。
そこで今回まとめる「GRE over IPsec」を利用するのです。
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を張っている構成となります。
この点に関しても前回の記事と同じなのでここでは説明を割愛します。
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発打ったのを取得しました。
取得した結果は・・・・・しっかりAHとESPでEncapされていました!!
最後に
意外とGREやGRE over IPsecって触れることがないので今回いい勉強になりました。
次回は、順番が逆になりましたが、IPSecについてまとめていこうと思います!
引き続きよろしくお願いします!
- 【データセンタネットワーク】手を動かしてEVPN-VXLANを理解しよう!
- 一軒家でストレスのない安定した無線Wifiを構築した話
- 【ネットワーク】BGP Unnumbered(RFC5549・8950)について
- 【イベント参加】Janog54に参加して学んだことや感じたことのまとめ
- 【ネットワーク応用】EVPN-VXLANとは?(EVPN/VXLAN概要編)
- 【ネットワーク入門】BGP拡張コミュニティ(RFC4360)