サイト間IPSec VPNの設定手順

サイト間IPSec VPNを設定ための手順は以下のようになります。ここでは、crypto mapの設定について解説します。

  • ISAKMPポリシーを設定する
  • IPSecトランスフォームセットを設定する
  • 暗号ACLを設定する
  • 暗号マップ(crypto map)を設定する
  • 暗号マップ(crypto map)をインタフェースに適用する
  • IPSecの通信を可能にするためのACLを設定し、インタフェースに適用する

Step1:ISAKMPポリシーの設定

ISAKMPポリシーを設定するには、グローバルコンフィグレーションモードで次のコマンドを入力します。

ISAKMPポリシーの設定

(config)#crypto isakmp policy < priority >
(config-isakmp)#encryption {des | 3des | aes128 | aes 192 | aes 256 }
(config-isakmp)#hash { md5 | sha | sha256 }
(config-isakmp)#authentication { pre-share | rsa-encr | rsa-sig }
(config-isakmp)#group { 1 | 2 | 5 }
(config-isakmp)#lifetime < sec >

各パラメータのデフォルト値は、次のように決まっています。

  • encryption : default = 56-bit DES-CBC
  • hash : default = SHA-1
  • authentication : default = RSA signatures
  • group : default = group 1
  • lifetime : default = 86,400 秒 (1日)

パラメータの設定を省略すると、デフォルト値が適用されます。

そして、ISAKMP SAを確立するピア認証でPSK(pre shared key)を利用する場合には、ピア間で共通の秘密鍵を設定します。そのためのコマンドは、次の通りです。

ピア認証 事前共有鍵

(config)#crypto isakmp key < keystring > address < peer-address >

< keystring > : 事前共有鍵
< peer-address > : 対向のVPNゲートウェイのIPアドレス

Step2:IPSecトランスフォームセットの設定

IPSecトランスフォームセットの設定は、グローバルコンフィグレーションモードで次のコマンドを入力します。

IPSecトランスフォームセットの設定

(config)#crypto ipsec transform-set < transform-set-name > < transform1 > [< transform2 >] [< transform3 >] [< transform4 >]
( config-crypto-trans)#set mode {tunnel|transport}

< transform-set-name > : トランスフォームセット名
< transform1 > ~ < transform4 > : セキュリティプロトコル

< transform1 > ~ < transform4 >によってIPSecのセキュリティプロトコルとしてESP、AHのどちらを使うか、暗号化アルゴリズム、ハッシュアルゴリズムの指定です。指定できるトランスフォームセットのパラメータとして、主なものは次の通りです。

AH

  • ah-md5-hmac
  • ah-sha-hmac

ESP暗号化

  • esp-aes
  • esp-aes 192
  • esp-aes 256
  • esp-des
  • esp-3des

ESP認証

  • esp-md5-hmac
  • esp-sha-hmac

たとえば、「transformset1」という名前でセキュリティプロトコルとしてESPを利用し、3DESの暗号化、md5のハッシュアルゴリズムを用いるトランスフォームセットの設定は次のようになります。

(config)#crypto ipsec transform-set transformset1 esp-3des esp-md5-hmac

設定したトランスフォームセットは、crypto mapの中で関連づけてはじめて、意味を持ちます。

Step3:暗号ACLを設定する

暗号ACLは、拡張アクセスリストで設定します。暗号ACLの目的は、IPSecによって保護するパケットを指定することです。そのため、パケットフィルタリングで利用するACLとpermit/denyの意味が異なるので注意してください。

暗号ACLでのparmitは、IPSecによって保護する、つまりESPやAHのヘッダを付加するパケットです。一方、暗号ACLでdenyとなるパケットは、IPSecによって保護されずそのままで転送されることになります。denyであっても、パケットが捨てられるわけではありません。

たとえば、送信元IPアドレスが192.168.1.0/24のサブネットで、送信先IPアドレスが192.168.2.0/24のサブネットであるIPパケットをIPSecの対象とする暗号ACLは次のようになります。

(config)#access-list 100 permit ip 192.168.1.0 0.0.0.255 192.168.2.0 0.0.0.255

やはり、最後に暗黙のdenyがあります。この暗号ACLでpermitされているパケットがIPSec化されます。暗黙のdenyでdenyされるその他のパケットは、IPSec化されずにそのまま転送されます。

暗号ACLは、トランスフォームセットと同じくcrypto mapで関連づける必要があります。

Step4:暗号マップ(crypto map)を設定する

暗号マップ(crypto map)とは、これまでに設定したトランスフォームセットや暗号ACL、IPSec SAを構成するピアの情報をひとまとめにしたものです。また、IPSec SAを構成するためにIKEを利用するかどうかも決められます。crypto mapを設定するには、グローバルコンフィグレーションモードで次のように設定します。

暗号マップ(crypto map)の設定

(config)#crypto map < map-name > < sequence > ipsec-isakmp
(config-crypto-map)#match address < ACL >
(config-crypto-map)#set transform-set < transform-set-name >
(config-crypto-map)#set peer < ip-address >
(config-crypto-map)#set security-association lifetime [second < second >| kilobytes < kilobytes >]

< map-name > : 暗号マップの名前
< sequence > : シーケンス番号
ipsec-isakmp : IPSec SAの生成をIKE(ISAKMP)で行う
< ACL >:暗号ACLの番号
< transform-set-name >:トランスフォームセット名
< ip-address >:対向のVPNゲートウェイのIPアドレス
< second >:IPSec SAのライフタイム(時間 秒)
< kirobytes >:IPSec SAのライフタイム(転送量 キロバイト)

暗号マップの処理は< sequence >が小さい順から処理します。< sequence >ごとに対向となるVPNゲートウェイを決めて、どんなパケットをIPSecで保護して通信するかを決めることになります。複数の拠点をIPSec VPNで接続するときには、crypto mapの< sequence >ごとに設定します。

図 crypto mapのsequence
図 crypto mapのsequence

Step5:暗号マップ(crypto map)をインタフェースに適用する

crypto mapを作成しただけでは、IPSec SAを作成することはできません。crypto mapをインタフェースに適用し、crypto map内で指定されているIPパケットがやってきてはじめてIPSec SAを作成するようになります。

インタフェースにcrypto mapを適用するには、インタフェースコンフィグレーションモードで次のように設定します。

暗号マップ(crypto map)をインタフェースに適用

(config-if)#crypto map < crypto-map-name >

< crypto-map-name > : 適用するcrypto map名

ここで、注意することはcrypto mapを適用するインタフェースです。crypto mapの適用はIPSec化するパケットの出力インタフェースにします。サイト間IPSec VPNはインターネットを経由することがほとんどです。そのため、crypto mapを適用するインタフェースは、インターネットに接続される(方向の)インタフェースです。

Step6:IPSecの通信を可能にするためのACLを設定し、インタフェースに適用する

crypto mapをインターネットに接続されるインタフェースに適用にされるわけですが、通常、インターネットに接続されるインタフェースにはACLを設定しています。インターネット側から不要なパケットを受信しないようにするためです。IPSecの通信を行う場合、インターネット側のインタフェースのACLにIPSecを許可する条件を追加してあげる必要があります。

IPSecを許可するには、次のプロトコルをpermitする必要があります。

  • IKE:UDPポート500
  • AH:IPプロトコル番号51
  • ESP:IPプロトコル番号50

典型的なACLの例は次のようになります。

(config)#access-list 100 permit ahp any any
(config)#access-list 100 permit esp any any
(config)#access-list 100 permit udp any any eq isakmp

例ではアドレスをany anyとしていますが、アドレスの指定をきちんとVPNゲートウェイだけに限定して設定したほうがよいです。ACLはインタフェースへの適用も忘れないようにしてください。


サイト間IPSec VPNの具体的な設定例について、以下の記事を参照してください。