IPSec 基本設定

Lan-to-LanのIPSec設定です。IPSecを設定する場合には大きく分けて下記の手順を行います。

(1)ISAKMPポリシーの設定
(2)IPSecトランスフォームセットの設定
(3)IPSecの通信を施すACLを設定
(4)暗号マップ(crypto map)を設定
(5)暗号マップ(crypto map)をインタフェースに適用

もう少し詳しい説明は各RouterのConfigの後に記述することにします。

IPSec_01_01

[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#

スポンサーリンク






シェアする

  • このエントリーをはてなブックマークに追加

フォローする