Lan-to-LanのIPSec設定です。IPSecを設定する場合には大きく分けて下記の手順を行います。
(1)ISAKMPポリシーの設定
(2)IPSecトランスフォームセットの設定
(3)IPSecの通信を施すACLを設定
(4)暗号マップ(crypto map)を設定
(5)暗号マップ(crypto map)をインタフェースに適用
もう少し詳しい説明は各RouterのConfigの後に記述することにします。
[RouterA]
crypto isakmp policy 1 authentication pre-share crypto isakmp key test address 1.1.1.2 ! crypto ipsec transform-set test-basic esp-des esp-sha-hmac ! crypto map map-basic 1 ipsec-isakmp set peer 1.1.1.2 set transform-set test-basic match address 150 ! interface Ethernet0/0 ip address 10.1.1.1 255.255.255.0 half-duplex ! interface Ethernet0/1 ip address 1.1.1.1 255.255.255.0 half-duplex crypto map map-basic ! ip route 10.1.2.0 255.255.255.0 1.1.1.2 ! access-list 150 permit ip 10.1.1.0 0.0.0.255 10.1.2.0 0.0.0.255
[RouterB]
crypto isakmp policy 1 authentication pre-share crypto isakmp key test address 1.1.1.1 ! crypto ipsec transform-set test-basic esp-des esp-sha-hmac ! crypto map map-basic 1 ipsec-isakmp set peer 1.1.1.1 set transform-set test-basic match address 150 ! interface Ethernet0/0 ip address 10.1.2.1 255.255.255.0 half-duplex ! interface Ethernet0/1 ip address 1.1.1.2 255.255.255.0 half-duplex crypto map map-basic ! ip route 10.1.1.0 255.255.255.0 1.1.1.1 ! ! access-list 150 permit ip 10.1.2.0 0.0.0.255 10.1.1.0 0.0.0.255
■設定
各手順で使うコマンドの簡単な説明。
(1)ISAKMPポリシーの設定
# crypto isakmp policy [priority]
番号[priority]優先度を示し、低い数字ほど優先。
isakmpコンフィグレーションモード(config-isakmp)で、暗号化、ハッシュ化のアルゴリズムを指定したり認証方式を指定します。
# crypto isakmp key [string] address [peer-address]
通信相手のIPとpresharekeyを指定。
省略している設定をすべて書き出すとこんな感じになります。
(config)# crypto isakmp policy 1
(config-isakmp)# encryption des
(config-isakmp)# hash sha
(config-isakmp)# authentication pre-share
(config-isakmp)# group 1
(config-isakmp)# lifetime 86400
(config)# crypto isakmp key test address 1.1.1.2
(2)IPSecトランスフォームセットの設定
# crypto ipsec transform-set <transform-set-name> <transform1> [<transform2>] [<transform3>]
セキュリティプロトコル、暗号化、ハッシュアルゴリズムを指定します。
ここでは、esp、des、sha-hmacをそれぞれの設定値としました。
(3)IPSecの通信を施すACLを設定
(4)暗号マップ(crypto map)を設定
# crypto map [name] [seq-number] ipsec-isakmp
ここでもIKEのときと同じくseq-numberで優先度を決めて記述する。IKEを利用してIPsec SAを確立するのでipsec-isakmpを指定。
あとは適用するアドレスとトランスフォームセット(transform-set-name)、ACLを指定します。
(5)暗号マップ(crypto map)をインタフェースに適用
(config-if)# crypto map [name]
インターフェースに暗号マップを適用。
※動作確認用コマンド
#show crypto isakmp policy
isakmp SAの状態を確認
#show crypto isakmp sa
IPSEC SAの状態を確認
#show crypto engine connections active
ISAKMP SAとIPsec SAの概要表示
■Debugモードにして各フェーズを確認
Crypto ISAKMP debugging is on
■ISAKMP は対向機器とのネゴシエーションを開始
*Mar 1 00:00:45.759: ISAKMP: received ke message (1/1) *Mar 1 00:00:45.759: ISAKMP:(0:0:N/A:0): SA request profile is (NULL) *Mar 1 00:00:45.759: ISAKMP: Created a peer struct for 1.1.1.2, peer port 500 *Mar 1 00:00:45.759: ISAKMP: New peer created peer = 0x64AED538 peer_handle = 0x80000002 *Mar 1 00:00:45.763: ISAKMP: Locking peer struct 0x64AED538, IKE refcount 1 for isakmp_initiator *Mar 1 00:00:45.763: ISAKMP: local port 500, remote port 500 *Mar 1 00:00:45.763: ISAKMP: set new node 0 to QM_IDLE *Mar 1 00:00:45.763: insert sa successfully sa = 64AECE44 *Mar 1 00:00:45.767: ISAKMP:(0:0:N/A:0):Can not start Aggressive mode, trying Main mode. *Mar 1 00:00:45.767: ISAKMP:(0:0:N/A:0):found peer pre-shared key matching 1.1.1.2 *Mar 1 00:00:45.771: ISAKMP:(0:0:N/A:0): constructed NAT-T vendor-07 ID *Mar 1 00:00:45.771: ISAKMP:(0:0:N/A:0): constructed NAT-T vendor-03 ID *Mar 1 00:00:45.771: ISAKMP:(0:0:N/A:0): constructed NAT-T vendor-02 ID *Mar 1 00:00:45.771: ISAKMP:(0:0:N/A:0):Input = IKE_MESG_FROM_IPSEC, IKE_SA_REQ_MM *Mar 1 00:00:45.771: ISAKMP:(0:0:N/A:0):Old State = IKE_READY New State = IKE_I_MM1
■メイン モード メッセージ 1(MM1):初期のやり取り
HDR,SAを送信する。HDRはISAKMP ヘッダ。
SAは1 つ以上のプロポーザルを含む SA ネゴシエーション・ペイロードであり、Proposalペイロード、Transformペイロードが含まれます。
*Mar 1 00:00:45.775: ISAKMP:(0:0:N/A:0): beginning Main Mode exchange *Mar 1 00:00:45.775: ISAKMP:(0:0:N/A:0): sending packet to 1.1.1.2 my_port 500 peer_port 500 (I) MM_NO_STATE
■メイン モード メッセージ 2(MM2):初期のやり取りへの応答
*Mar 1 00:00:55.903: ISAKMP (0:0): received packet from 1.1.1.2 dport 500 sport 500 Global (I) MM_NO_STATE *Mar 1 00:00:55.915: ISAKMP:(0:0:N/A:0):Input = IKE_MESG_FROM_PEER, IKE_MM_EXCH *Mar 1 00:00:55.915: ISAKMP:(0:0:N/A:0):Old State = IKE_I_MM1 New State = IKE_I_MM2 *Mar 1 00:00:55.919: ISAKMP:(0:0:N/A:0): processing SA payload. message ID = 0 *Mar 1 00:00:55.923: ISAKMP:(0:0:N/A:0): processing vendor id payload *Mar 1 00:00:55.923: ISAKMP:(0:0:N/A:0): vendor ID seems Unity/DPD but major 245 mismatch *Mar 1 00:00:55.923: ISAKMP (0:0): vendor ID is NAT-T v7 *Mar 1 00:00:55.923: ISAKMP:(0:0:N/A:0):found peer pre-shared key matching 1.1.1.2 *Mar 1 00:00:55.927: ISAKMP:(0:0:N/A:0): local preshared key found *Mar 1 00:00:55.927: ISAKMP : Scanning profiles for xauth ... *Mar 1 00:00:55.927: ISAKMP:(0:0:N/A:0):Checking ISAKMP transform 1 against priority 1 policy *Mar 1 00:00:55.927: ISAKMP: encryption DES-CBC *Mar 1 00:00:55.927: ISAKMP: hash SHA *Mar 1 00:00:55.931: ISAKMP: default group 1 *Mar 1 00:00:55.931: ISAKMP: auth pre-share *Mar 1 00:00:55.931: ISAKMP: life type in seconds *Mar 1 00:00:55.931: ISAKMP: life duration (VPI) of 0x0 0x1 0x51 0x80 *Mar 1 00:00:55.935: ISAKMP:(0:0:N/A:0):atts are acceptable. Next payload is 0 *Mar 1 00:00:56.011: ISAKMP:(0:1:SW:1): processing vendor id payload *Mar 1 00:00:56.011: ISAKMP:(0:1:SW:1): vendor ID seems Unity/DPD but major 245 mismatch *Mar 1 00:00:56.011: ISAKMP (0:134217729): vendor ID is NAT-T v7 *Mar 1 00:00:56.015: ISAKMP:(0:1:SW:1):Input = IKE_MESG_INTERNAL, IKE_PROCESS_MAIN_MODE *Mar 1 00:00:56.015: ISAKMP:(0:1:SW:1):Old State = IKE_I_MM2 New State = IKE_I_MM2
■メイン モード メッセージ 3(MM3):NAT 検出および Diffie-Hellman 交換
HDR,KE,Niをします。
KE(KeyExchange)はdiffie-hellmanの公開鍵が含まれます。NiはNonce(乱数)で秘密対象鍵を作る際の要素としても使われます。ISAKMPヘッダに含まれるCookieと混同するが、CookieはIKEの相手が本当にIKEをしようとしているか(こちらが返答したCookkieのペアを返信してくるか)を見ているだけ。
*Mar 1 00:00:56.023: ISAKMP:(0:1:SW:1): sending packet to 1.1.1.2 my_port 500 peer_port 500 (I) MM_SA_SETUP *Mar 1 00:00:56.027: ISAKMP:(0:1:SW:1):Input = IKE_MESG_INTERNAL, IKE_PROCESS_COMPLETE *Mar 1 00:00:56.027: ISAKMP:(0:1:SW:1):Old State = IKE_I_MM2 New State = IKE_I_MM3
■メイン モード メッセージ 4(MM4):NAT 検出および Diffie-Hellman 交換
Diffie-Hellmanの計算で共有した秘密の値、nonceやPre-Sharedkeyを使ってSKYIDを作成、これを元にフェーズ2で使う鍵を3個(SKYID_d,SKYID_a,SKYID_e)作成。
以後のパケットはISAKMPヘッダ以後がSKYID_eで暗号化されます。Pre-Sharedkeyはこの時点で選択していなければならないので対向するIPアドレスを元に選択します。
*Mar 1 00:00:56.219: ISAKMP (0:134217729): received packet from 1.1.1.2 dport 500 sport 500 Global (I) MM_SA_SETUP *Mar 1 00:00:56.219: ISAKMP:(0:1:SW:1):Input = IKE_MESG_FROM_PEER, IKE_MM_EXCH *Mar 1 00:00:56.219: ISAKMP:(0:1:SW:1):Old State = IKE_I_MM3 New State = IKE_I_MM4 *Mar 1 00:00:56.223: ISAKMP:(0:1:SW:1): processing KE payload. message ID = 0 *Mar 1 00:00:56.311: ISAKMP:(0:1:SW:1): processing NONCE payload. message ID = 0 *Mar 1 00:00:56.311: ISAKMP:(0:1:SW:1):found peer pre-shared key matching 1.1.1.2 *Mar 1 00:00:56.315: ISAKMP:(0:1:SW:1):SKEYID state generated *Mar 1 00:00:56.319: ISAKMP:(0:1:SW:1): processing vendor id payload *Mar 1 00:00:56.319: ISAKMP:(0:1:SW:1): vendor ID is Unity *Mar 1 00:00:56.319: ISAKMP:(0:1:SW:1): processing vendor id payload *Mar 1 00:00:56.319: ISAKMP:(0:1:SW:1): vendor ID is DPD *Mar 1 00:00:56.323: ISAKMP:(0:1:SW:1): processing vendor id payload *Mar 1 00:00:56.323: ISAKMP:(0:1:SW:1): speaking to another IOS box! *Mar 1 00:00:56.323: ISAKMP:(0:1:SW:1):Input = IKE_MESG_INTERNAL, IKE_PROCESS_MAIN_MODE *Mar 1 00:00:56.327: ISAKMP:(0:1:SW:1):Old State = IKE_I_MM4 New State = IKE_I_MM4
■メイン モード メッセージ 5(MM5):ID の送信
HDR*, IDii, AUTHの送信。
HDR*はペイロードが暗号化される場合の表記、IDiiは識別ペイロード。
AUTH、はHash値で事前共有鍵で通信相手を確かめるために使います。お互いのCookieやDiffie-Hellman公開値等を事前共有鍵を用いてHash化した値を送りあい、受信側が同じ計算をして合致するかで認証します。
*Mar 1 00:00:56.331: ISAKMP:(0:1:SW:1):Send initial contact *Mar 1 00:00:56.331: ISAKMP:(0:1:SW:1):SA is doing pre-shared key authentication using id type ID_IPV4_ADDR *Mar 1 00:00:56.335: ISAKMP (0:134217729): ID payload :IDペイロード next-payload : 8 :次のペイロードはHASHペイロードであることを示す type : 1 address : 1.1.1.1 protocol : 17 port : 500 length : 12 *Mar 1 00:00:56.335: ISAKMP:(0:1:SW:1):Total payload length: 12 *Mar 1 00:00:56.339: ISAKMP:(0:1:SW:1): sending packet to 1.1.1.2 my_port 500 peer_port 500 (I) MM_KEY_EXCH *Mar 1 00:00:56.343: ISAKMP:(0:1:SW:1):Input = IKE_MESG_INTERNAL, IKE_PROCESS_COMPLETE *Mar 1 00:00:56.343: ISAKMP:(0:1:SW:1):Old State = IKE_I_MM4 New State = IKE_I_MM5
■メイン モード メッセージ 6(MM6):リモート ピア ID、フェーズ 1 が確立
*Mar 1 00:00:56.495: ISAKMP (0:134217729): received packet from 1.1.1.2 dport 500 sport 500 Global (I) MM_KEY _EXCH *Mar 1 00:00:56.499: ISAKMP:(0:1:SW:1): processing ID payload. message ID = 0 *Mar 1 00:00:56.503: ISAKMP (0:134217729): ID payload next-payload : 8 type : 1 address : 1.1.1.2 protocol : 17 port : 500 length : 12 *Mar 1 00:00:56.503: ISAKMP:(0:1:SW:1):: peer matches *none* of the profiles *Mar 1 00:00:56.503: ISAKMP:(0:1:SW:1): processing HASH payload. message ID = 0 *Mar 1 00:00:56.507: ISAKMP:(0:1:SW:1):SA authentication status: authenticated *Mar 1 00:00:56.507: ISAKMP:(0:1:SW:1):SA has been authenticated with 1.1.1.2 *Mar 1 00:00:56.511: ISAKMP: Trying to insert a peer 1.1.1.1/1.1.1.2/500/, and inserted successfully 64AED53 8. *Mar 1 00:00:56.511: ISAKMP:(0:1:SW:1):Input = IKE_MESG_FROM_PEER, IKE_MM_EXCH *Mar 1 00:00:56.511: ISAKMP:(0:1:SW:1):Old State = IKE_I_MM5 New State = IKE_I_MM6 *Mar 1 00:00:56.519: ISAKMP:(0:1:SW:1):Input = IKE_MESG_INTERNAL, IKE_PROCESS_MAIN_MODE *Mar 1 00:00:56.519: ISAKMP:(0:1:SW:1):Old State = IKE_I_MM6 New State = IKE_I_MM6 *Mar 1 00:00:56.523: ISAKMP:(0:1:SW:1):Input = IKE_MESG_INTERNAL, IKE_PROCESS_COMPLETE *Mar 1 00:00:56.523: ISAKMP:(0:1:SW:1):Old State = IKE_I_MM6 New State = IKE_P1_COMPLETE
■IKEフェーズ1が完了、フェーズ2(クイックモード)へ
最初にIPSec SAの提案、NonceやHashを送付
*Mar 1 00:00:56.531: ISAKMP:(0:1:SW:1):beginning Quick Mode exchange, M-ID of -953635807 *Mar 1 00:00:56.539: ISAKMP:(0:1:SW:1): sending packet to 1.1.1.2 my_port 500 peer_port 500 (I) QM_IDLE *Mar 1 00:00:56.539: ISAKMP:(0:1:SW:1):Node -953635807, Input = IKE_MESG_INTERNAL, IKE_INIT_QM *Mar 1 00:00:56.539: ISAKMP:(0:1:SW:1):Old State = IKE_QM_READY New State = IKE_QM_I_QM1 *Mar 1 00:00:56.543: ISAKMP:(0:1:SW:1):Input = IKE_MESG_INTERNAL, IKE_PHASE1_COMPLETE *Mar 1 00:00:56.543: ISAKMP:(0:1:SW:1):Old State = IKE_P1_COMPLETE New State = IKE_P1_COMPLETE
■SAのレスポンス、NonceやHashを送付
これによりIPSec SAで利用する秘密対象鍵の計算が完了します。秘密対象鍵はSKYID_dやNonceペイロード、SPI等から計算されますが、SPIは上下で異なる値なので上下2つのSAは異なる秘密対象鍵を保持することになります。
*Mar 1 00:00:56.731: ISAKMP (0:134217729): received packet from 1.1.1.2 dport 500 sport 500 Global (I) QM_IDL E *Mar 1 00:00:56.735: ISAKMP:(0:1:SW:1): processing HASH payload. message ID = -953635807 *Mar 1 00:00:56.735: ISAKMP:(0:1:SW:1): processing SA payload. message ID = -953635807 *Mar 1 00:00:56.739: ISAKMP:(0:1:SW:1):Checking IPSec proposal 1 *Mar 1 00:00:56.739: ISAKMP: transform 1, ESP_DES *Mar 1 00:00:56.739: ISAKMP: attributes in transform: *Mar 1 00:00:56.739: ISAKMP: encaps is 1 (Tunnel) *Mar 1 00:00:56.739: ISAKMP: SA life type in seconds *Mar 1 00:00:56.739: ISAKMP: SA life duration (basic) of 3600 *Mar 1 00:00:56.743: ISAKMP: SA life type in kilobytes *Mar 1 00:00:56.743: ISAKMP: SA life duration (VPI) of 0x0 0x46 0x50 0x0 *Mar 1 00:00:56.743: ISAKMP: authenticator is HMAC-SHA *Mar 1 00:00:56.743: ISAKMP:(0:1:SW:1):atts are acceptable. *Mar 1 00:00:56.747: ISAKMP:(0:1:SW:1): processing NONCE payload. message ID = -953635807 *Mar 1 00:00:56.751: ISAKMP:(0:1:SW:1): processing ID payload. message ID = -953635807 *Mar 1 00:00:56.751: ISAKMP:(0:1:SW:1): processing ID payload. message ID = -953635807 ※IDペイロードが2つあるように見えます。ひとつは自身のIP(この例だと1.1.1.2、 もうひとつは相手のネットワーク(10.1.1.0/24)とする実装が多いということが YAMAHAのHPに書いてありました。 http://www.rtpro.yamaha.co.jp/RT/docs/ipsec/interop.html *Mar 1 00:00:56.759: ISAKMP: Locking peer struct 0x64AED538, IPSEC refcount 1 for for stuff_ke *Mar 1 00:00:56.759: ISAKMP:(0:1:SW:1): Creating IPSec SAs *Mar 1 00:00:56.759: inbound SA from 1.1.1.2 to 1.1.1.1 (f/i) 0/ 0 (proxy 10.1.2.0 to 10.1.1.0) *Mar 1 00:00:56.759: has spi 0x97B25376 and conn_id 0 and flags 2 *Mar 1 00:00:56.763: lifetime of 3600 seconds *Mar 1 00:00:56.763: lifetime of 4608000 kilobytes *Mar 1 00:00:56.763: has client flags 0x0 *Mar 1 00:00:56.763: outbound SA from 1.1.1.1 to 1.1.1.2 (f/i) 0/0 (proxy 10.1.1.0 to 10.1.2.0) *Mar 1 00:00:56.763: has spi -1331250251 and conn_id 0 and flags A *Mar 1 00:00:56.767: lifetime of 3600 seconds *Mar 1 00:00:56.767: lifetime of 4608000 kilobytes *Mar 1 00:00:56.767: has client flags 0x0
■受領の応答HASHを送付し完了
*Mar 1 00:00:56.771: ISAKMP:(0:1:SW:1): sending packet to 1.1.1.2 my_port 500 peer_port 500 (I) QM_IDLE *Mar 1 00:00:56.771: ISAKMP:(0:1:SW:1):deleting node -953635807 error FALSE reason "No Error" *Mar 1 00:00:56.771: ISAKMP:(0:1:SW:1):Node -953635807, Input = IKE_MESG_FROM_PEER, IKE_QM_EXCH *Mar 1 00:00:56.775: ISAKMP:(0:1:SW:1):Old State = IKE_QM_I_QM1 New State = IKE_QM_PHASE2_COMPLETE *Mar 1 00:00:56.779: ISAKMP: Locking peer struct 0x64AED538, IPSEC refcount 2 for from create_transforms *Mar 1 00:00:56.779: ISAKMP: Unlocking IPSEC struct 0x64AED538 from create_transforms, count 1 RouterA#