【IPSec】サイト間IPSec(Crypto-Map)

2台の Cisco ルータの間で、サイト間 IPsec VPN を crypto map で設定します。R1 の Loopback0(1.1.1.1/32)と R2 の Loopback0(2.2.2.2/32)の間の通信だけを暗号化する構成で、フェーズ1、フェーズ2、インタフェースへの適用と順に設定し、最後に show コマンドで SA の状態を確認します。

この記事でわかること
  1. フェーズ1(ISAKMP ポリシーと事前共有鍵)の設定
  2. フェーズ2(transform set、暗号化対象の ACL、crypto map)の設定とインタフェースへの適用
  3. show crypto isakmp sa/show crypto ipsec sa/show crypto session の見方
前提

この記事は設定と確認が中心です。IKE のフェーズ1・フェーズ2でやり取りされる内容と、ESP の仕組みは、次の記事で説明しています。

検証構成

R1 と R2 は、サブインタフェース Fa0/0.12(192.168.12.0/24)でつながっています。暗号化するのは 1.1.1.1 と 2.2.2.2 の間の通信で、IPsec のトンネルは 192.168.12.1 と 192.168.12.2 の間に張ります。

IPsec(ESP・トンネルモード)Loopback01.1.1.1/32Loopback02.2.2.2/32192.168.12.0/24.1.2R1R2Fa0/0.12Fa0/0.12crypto map R1_TO_R2crypto map R2_TO_R1暗号化する通信1.1.1.1 ⇔ 2.2.2.2(Loopback0 どうし)トンネルの両端192.168.12.1 ⇔ 192.168.12.2(IPsec ピア)
図1 検証構成

設定する値は次のとおりです。フェーズ1とフェーズ2の値は、R1 と R2 で同じにします。

フェーズ項目設定値
フェーズ1暗号化アルゴリズムAES 256 ビット
フェーズ1ハッシュアルゴリズムSHA-512
フェーズ1Diffie-Hellman グループ14(2048 ビット)
フェーズ1認証方法事前共有鍵(キーは CISCO)
フェーズ2暗号化アルゴリズムAES 192 ビット(ESP)
フェーズ2完全性(改ざん検知)のアルゴリズムHMAC-SHA-384
フェーズ2カプセル化モードトンネルモード
フェーズ2暗号化する通信(Proxy ID)1.1.1.1/32 と 2.2.2.2/32 の間(双方向)

サイト間VPN設定

crypto map を使う設定では、いくつかの部品を作り、それを crypto map にまとめてインタフェースに適用します。部品の関係は次のとおりです(R1 の設定)。

フェーズ1(ISAKMP SA)フェーズ2(IPsec SA)crypto isakmp policy 10 encr aes 256 / hash sha512 authentication pre-share group 14crypto isakmp key CISCO address 192.168.12.2crypto ipsec transform-set R1-R2-Phase2 esp-aes 192 esp-sha384-hmac mode tunnelaccess-list 100 permit ip host 1.1.1.1 host 2.2.2.2crypto map R1_TO_R2 10 ipsec-isakmp set peer 192.168.12.2 set transform-set R1-R2-Phase2 match address 100interface Fa0/0.12 crypto map R1_TO_R2IKE適用ピアごとの設定をまとめる
図2 crypto map を使った設定の部品(R1)

ネットワーク設定

相手の Loopback0 に届くように、ルーティングを設定します。ここでは、対向のルータに向けたデフォルトルートを設定します。

R1

R1(config)# ip route 0.0.0.0 0.0.0.0 192.168.12.2

R2

R2(config)# ip route 0.0.0.0 0.0.0.0 192.168.12.1

crypto map は、適用したインタフェースから出ていくパケットに対して働きます。そのため、1.1.1.1 から 2.2.2.2 あてのパケットが、crypto map を適用する Fa0/0.12 から出ていくようにルーティングしておく必要があります。

フェーズ1設定

フェーズ1では、IPsec SA を作るための話し合いに使う ISAKMP SA(IKE SA)を確立します。最低限、暗号化アルゴリズム、ハッシュアルゴリズム、Diffie-Hellman グループ、認証方法の4つを決めます。これらは crypto isakmp policy で設定します。

R1

R1(config)# crypto isakmp policy 10
R1(config-isakmp)# encr aes 256
R1(config-isakmp)# hash sha512
R1(config-isakmp)# authentication pre-share
R1(config-isakmp)# group 14

R2

R2(config)# crypto isakmp policy 10
R2(config-isakmp)# encr aes 256
R2(config-isakmp)# hash sha512
R2(config-isakmp)# authentication pre-share
R2(config-isakmp)# group 14
コマンド意味
crypto isakmp policy 10ISAKMP ポリシーを作る。番号は優先度で、1〜10000 の小さい番号ほど優先される
encr aes 256暗号化アルゴリズムを AES 256 ビットにする
hash sha512ハッシュアルゴリズムを SHA-512 にする
authentication pre-share認証方法を事前共有鍵にする
group 14Diffie-Hellman グループ 14(2048 ビット)で鍵を交換する

ポリシーの各項目には既定値があります(暗号化 DES、ハッシュ SHA-1、認証 RSA 署名、DH グループ 1、ライフタイム 86400 秒)。既定値は今では弱いものが多いので、使う値を明示して設定します。この記事ではライフタイムを設定していないので、既定の 86400 秒(1日)になります。

次に、認証に使う事前共有鍵を、相手(ピア)のアドレスと一緒に設定します。address には対向ルータのアドレスを指定し、鍵の文字列は両方のルータで同じにします。

R1

R1(config)# crypto isakmp key CISCO address 192.168.12.2

R2

R2(config)# crypto isakmp key CISCO address 192.168.12.1
補足

Diffie-Hellman 鍵交換の仕組みは、【初心者】Diffie-Hellman 鍵交換をイメージで解説 で説明しています。また、CISCO は検証用の鍵です。実際の環境では、推測されにくい長い文字列にします。

これでフェーズ1の設定は完了です。次はフェーズ2に進みます。

フェーズ2設定(transform set)

フェーズ2では、実際のデータを暗号化して送るための IPsec SA を確立します。最低限、暗号化アルゴリズム、完全性(改ざん検知)のアルゴリズム、カプセル化モード(トンネル/トランスポート)、暗号化する通信(Proxy ID)を決めます。

最初に、暗号化と完全性のアルゴリズムの組み合わせを transform set として作ります。カプセル化モードも transform set の中で設定します。

R1

R1(config)# crypto ipsec transform-set R1-R2-Phase2 esp-aes 192 esp-sha384-hmac
R1(cfg-crypto-trans)# mode tunnel

R2

R2(config)# crypto ipsec transform-set R1-R2-Phase2 esp-aes 192 esp-sha384-hmac
R2(cfg-crypto-trans)# mode tunnel
コマンド意味
crypto ipsec transform-set R1-R2-Phase2R1-R2-Phase2 という名前で transform set を作る
esp-aes 192ESP の暗号化アルゴリズムを AES 192 ビットにする
esp-sha384-hmacESP の完全性のアルゴリズムを HMAC-SHA-384 にする
mode tunnelトンネルモードにする(Cisco ルータの既定値なので、省略しても同じ)

transform set の名前(R1-R2-Phase2)は、ルータの中で参照するための名前です。対向ルータと合わせる必要があるのは中身のアルゴリズムで、名前は違っていてもかまいません。この記事では、わかりやすいように同じ名前にしています。

暗号化する通信の指定(ACL)

次に、暗号化する通信(Proxy ID)を拡張アクセスリストで指定します。送信元に自分側のアドレス、宛先に相手側のアドレスを書くので、R1 と R2 では送信元と宛先が逆になります。

R1

R1(config)# access-list 100 permit ip host 1.1.1.1 host 2.2.2.2

R2

R2(config)# access-list 100 permit ip host 2.2.2.2 host 1.1.1.1
R1R21.1.1.12.2.2.2R1:permit ip host 1.1.1.1 host 2.2.2.2R2:permit ip host 2.2.2.2 host 1.1.1.1送信元と宛先を入れ替えた、鏡に映したような ACL にする
図3 R1 と R2 の ACL は送信元と宛先を入れ替えた形にする

この ACL で permit した通信が暗号化の対象になり、それ以外の通信は暗号化されずにそのまま送られます。R1 の送信の対象と R2 の受信の対象が一致するよう、両方の ACL を鏡に映したような形(ミラー)にします。また、any を使うと、意図しない通信まで暗号化の対象になるので避けます。

crypto map の作成

crypto map を作り、ここまでの部品と IPsec トンネルの接続先をまとめます。

R1

R1(config)# crypto map R1_TO_R2 10 ipsec-isakmp 
R1(config-crypto-map)# set peer 192.168.12.2
R1(config-crypto-map)# set transform-set R1-R2-Phase2
R1(config-crypto-map)# match address 100

R2

R2(config)# crypto map R2_TO_R1 10 ipsec-isakmp 
R2(config-crypto-map)# set peer 192.168.12.1
R2(config-crypto-map)# set transform-set R1-R2-Phase2
R2(config-crypto-map)# match address 100
コマンド意味
crypto map R1_TO_R2 10 ipsec-isakmpR1_TO_R2 という crypto map のシーケンス番号 10 を作る。ipsec-isakmp は、IKE を使って IPsec SA を作ることを表す
set peer 192.168.12.2IPsec トンネルの接続先(ピア)を指定する
set transform-set R1-R2-Phase2STEP 3 の transform set を使う
match address 100STEP 4 の ACL 100 に一致する通信を暗号化する

インタフェースへの適用

作った crypto map を、対向ルータに向かうインタフェースに適用します。

R1

R1(config)# interface fastEthernet 0/0.12
R1(config-subif)# crypto map R1_TO_R2

R2

R2(config)# interface fastEthernet 0/0.12
R2(config-subif)# crypto map R2_TO_R1

適用すると、次のようなログが出力されます。

*Jun 12 12:43:11.731: %CRYPTO-6-ISAKMP_ON_OFF: ISAKMP is ON
補足

1つのインタフェースに適用できる crypto map(同じ名前のセット)は1つだけです。拠点が増えて接続先が複数になる場合は、同じ crypto map 名でシーケンス番号を変えたエントリ(crypto map R1_TO_R2 20 ipsec-isakmp など)を追加します。

確認

疎通確認

R1 から R2 へ Ping を実行します。暗号化の対象は 1.1.1.1 と 2.2.2.2 の間の通信なので、送信元に 1.1.1.1 を指定します。

R1#ping 2.2.2.2 source 1.1.1.1
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 2.2.2.2, timeout is 2 seconds:
Packet sent with a source address of 1.1.1.1 
.!!!!
Success rate is 80 percent (4/5), round-trip min/avg/max = 20/23/28 ms

最初の1つは失敗し、残りの4つが成功しています。最初のパケットで IKE のネゴシエーションが始まり、IPsec SA ができるまでの間に送ったパケットが届かなかったためと考えられます。SA ができた後は、続けて Ping が成功します。

注意

source 1.1.1.1 を付けずに ping 2.2.2.2 を実行すると、送信元は出力インタフェースのアドレス 192.168.12.1 になります。この通信は ACL 100 に一致しないので暗号化されず、そのまま送られます。IPsec の確認では、ACL に一致する送信元と宛先で通信します。

ISAKMP SA の確認

ISAKMP SA(フェーズ1)の状態を確認します。

R1#show crypto isakmp sa 
IPv4 Crypto ISAKMP SA
dst             src             state          conn-id status
192.168.12.2    192.168.12.1    QM_IDLE           1001 ACTIVE


IPv6 Crypto ISAKMP SA
表示意味
dst / srcISAKMP SA を結んでいる2台のアドレス(192.168.12.1 と 192.168.12.2)
state QM_IDLEフェーズ1が完了して ISAKMP SA ができ、フェーズ2(クイックモード)に使える状態
status ACTIVEISAKMP SA が有効

フェーズ1の途中で止まっている場合は、state が MM_NO_STATE や MM_KEY_EXCH などのメインモードの状態のままになります(下の「うまくいかないとき」)。

IPsec SA の確認

IPsec SA(フェーズ2)の状態は show crypto ipsec sa で確認します。#pkts encaps/encrypt と #pkts decaps/decrypt のカウンタが増えていれば、暗号化と復号ができています。

R1#show crypto ipsec sa 


interface: FastEthernet0/0.12
    Crypto map tag: R1_TO_R2, local addr 192.168.12.1


   protected vrf: (none)
   local  ident (addr/mask/prot/port): (1.1.1.1/255.255.255.255/0/0)
   remote ident (addr/mask/prot/port): (2.2.2.2/255.255.255.255/0/0)
   current_peer 192.168.12.2 port 500
     PERMIT, flags={origin_is_acl,}
    #pkts encaps: 9, #pkts encrypt: 9, #pkts digest: 9
    #pkts decaps: 9, #pkts decrypt: 9, #pkts verify: 9
    #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.12.1, remote crypto endpt.: 192.168.12.2
     path mtu 1500, ip mtu 1500, ip mtu idb FastEthernet0/0.12
     current outbound spi: 0x4B9CEBB2(1268575154)
     PFS (Y/N): N, DH group: none


     inbound esp sas:
      spi: 0x1C4AF696(474674838)
        transform: esp-192-aes esp-sha384-hmac ,
        in use settings ={Tunnel, }
        conn id: 1, flow_id: SW:1, sibling_flags 80000040, crypto map: R1_TO_R2
        sa timing: remaining key lifetime (k/sec): (4263399/2797)
        IV size: 16 bytes
        replay detection support: Y
        Status: ACTIVE(ACTIVE)


     inbound ah sas:


     inbound pcp sas:


     outbound esp sas:
      spi: 0x4B9CEBB2(1268575154)
        transform: esp-192-aes esp-sha384-hmac ,
        in use settings ={Tunnel, }
        conn id: 2, flow_id: SW:2, sibling_flags 80000040, crypto map: R1_TO_R2
        sa timing: remaining key lifetime (k/sec): (4263399/2797)
        IV size: 16 bytes
        replay detection support: Y
        Status: ACTIVE(ACTIVE)


     outbound ah sas:
          
     outbound pcp sas:
表示意味
Crypto map tag: R1_TO_R2この SA を作った crypto map
local ident / remote ident暗号化する通信(Proxy ID)。ACL 100 の送信元 1.1.1.1 と宛先 2.2.2.2
current_peer 192.168.12.2 port 500IPsec のピアと、IKE で使っている UDP ポート
#pkts encaps / encrypt / digestカプセル化・暗号化・完全性チェック値(HMAC)の計算をして送ったパケット数
#pkts decaps / decrypt / verify受け取って復号し、完全性を確認したパケット数
local crypto endpt. / remote crypto endpt.トンネルの両端のアドレス(192.168.12.1 と 192.168.12.2)
PFS (Y/N): NPFS(フェーズ2での Diffie-Hellman の再実行)は使っていない
inbound / outbound esp sas受信用と送信用の ESP の SA。IPsec SA は方向ごとに1つずつ作られ、それぞれ別の SPI を持つ
transform使っているアルゴリズム(AES 192 ビット、HMAC-SHA-384)
in use settings ={Tunnel, }トンネルモードで動作している
remaining key lifetime (k/sec)SA の残りのライフタイム(キロバイト/秒)。既定は 4,608,000 キロバイトと 3600 秒で、どちらかに達すると SA を作り直す
Status: ACTIVESA が有効

セッションの確認

show crypto session を使うと、フェーズ1とフェーズ2の状態をまとめて簡単に確認できます。

R1#show crypto session 
Crypto session current status


Interface: FastEthernet0/0.12
Session status: UP-ACTIVE     
Peer: 192.168.12.2 port 500 
  IKEv1 SA: local 192.168.12.1/500 remote 192.168.12.2/500 Active 
  IPSEC FLOW: permit ip host 1.1.1.1 host 2.2.2.2 
        Active SAs: 2, origin: crypto map
表示意味
Session status: UP-ACTIVEIKE SA と IPsec SA がどちらもアップしていて、正常な状態
IKEv1 SA … ActiveIKEv1 の SA(フェーズ1)が有効
IPSEC FLOW暗号化の対象になっている通信(ACL 100 の内容)
Active SAs: 2有効な IPsec SA の数(受信用と送信用の2つ)

うまくいかないとき

状態よくある原因確認すること
show crypto isakmp sa に何も表示されない暗号化の対象になる通信が発生していない(Ping の送信元が違う、ルーティングで crypto map を適用したインタフェースから出ていない)Ping の送信元と宛先が ACL に一致しているか、ルーティング、crypto map の適用先
state が MM_NO_STATE のまま対向から応答がない(UDP 500 が届かない)、ISAKMP ポリシーが一致しないピアまでの疎通、途中のフィルタ、両方の crypto isakmp policy の値
state が MM_KEY_EXCH のまま事前共有鍵が一致しないcrypto isakmp key の文字列と address
QM_IDLE だが IPsec SA ができないtransform set のアルゴリズムや ACL が対向と一致しない両方の transform set、ACL がミラーになっているか(debug crypto ipsec で確認できる)
encaps は増えるが decaps が増えない対向から戻りの通信が来ていない対向ルータのルーティング、対向側の show crypto ipsec sa のカウンタ

まとめ

設定コマンド(R1)対向と合わせるもの
フェーズ1のポリシーcrypto isakmp policy 10暗号化、ハッシュ、DH グループ、認証方法
事前共有鍵crypto isakmp key CISCO address 192.168.12.2鍵の文字列(address は相手のアドレス)
フェーズ2のアルゴリズムcrypto ipsec transform-set R1-R2-Phase2 esp-aes 192 esp-sha384-hmacアルゴリズムとモード(名前は合わせなくてよい)
暗号化する通信access-list 100 permit ip host 1.1.1.1 host 2.2.2.2送信元と宛先を入れ替えたミラーにする
crypto mapcrypto map R1_TO_R2 10 ipsec-isakmpset peer に相手のアドレスを指定する
インタフェースcrypto map R1_TO_R2(Fa0/0.12)対向に向かうインタフェースに適用する

コメント