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(ISAKMP ポリシーと事前共有鍵)の設定
- フェーズ2(transform set、暗号化対象の ACL、crypto map)の設定とインタフェースへの適用
- 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 の間に張ります。
設定する値は次のとおりです。フェーズ1とフェーズ2の値は、R1 と R2 で同じにします。
| フェーズ | 項目 | 設定値 |
|---|---|---|
| フェーズ1 | 暗号化アルゴリズム | AES 256 ビット |
| フェーズ1 | ハッシュアルゴリズム | SHA-512 |
| フェーズ1 | Diffie-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 の設定)。
ネットワーク設定
相手の 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 10 | ISAKMP ポリシーを作る。番号は優先度で、1〜10000 の小さい番号ほど優先される |
| encr aes 256 | 暗号化アルゴリズムを AES 256 ビットにする |
| hash sha512 | ハッシュアルゴリズムを SHA-512 にする |
| authentication pre-share | 認証方法を事前共有鍵にする |
| group 14 | Diffie-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-Phase2 | R1-R2-Phase2 という名前で transform set を作る |
| esp-aes 192 | ESP の暗号化アルゴリズムを AES 192 ビットにする |
| esp-sha384-hmac | ESP の完全性のアルゴリズムを 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
この 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-isakmp | R1_TO_R2 という crypto map のシーケンス番号 10 を作る。ipsec-isakmp は、IKE を使って IPsec SA を作ることを表す |
| set peer 192.168.12.2 | IPsec トンネルの接続先(ピア)を指定する |
| set transform-set R1-R2-Phase2 | STEP 3 の transform set を使う |
| match address 100 | STEP 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 / src | ISAKMP SA を結んでいる2台のアドレス(192.168.12.1 と 192.168.12.2) |
| state QM_IDLE | フェーズ1が完了して ISAKMP SA ができ、フェーズ2(クイックモード)に使える状態 |
| status ACTIVE | ISAKMP 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 500 | IPsec のピアと、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): N | PFS(フェーズ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: ACTIVE | SA が有効 |
セッションの確認
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-ACTIVE | IKE SA と IPsec SA がどちらもアップしていて、正常な状態 |
| IKEv1 SA … Active | IKEv1 の 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 map | crypto map R1_TO_R2 10 ipsec-isakmp | set peer に相手のアドレスを指定する |
| インタフェース | crypto map R1_TO_R2(Fa0/0.12) | 対向に向かうインタフェースに適用する |
コメント