IPsecの設定(IKEフェーズ1の設定)
IPsecによる通信を開始するには、最初にISAKMP SAを生成する必要があります。そのためにはIKEフェーズ1のパラメータを定義し、相手機器と一致するように設定を行います。ここで設定した内容に基づき、ISAKMP SAが確立され、後のフェーズ2でIPsec SAを作成できるようになります。
ISAKMPポリシーの作成
ISAKMPポリシーは、以下のコマンドで作成します。
(config)# crypto isakmp policy priority
- priorityは「1~10000」で指定可能
- 数字が小さいほど優先度が高く、複数定義がある場合は最も低い番号から順にマッチングされる
例えば「crypto isakmp policy 1」と設定すると、最優先のポリシーになります。
暗号化アルゴリズムの設定
ISAKMP SAで利用する暗号化方式を指定します。デフォルトは「des」です。
(config-isakmp)# encryption [ des | 3des | aes 128 | aes 192 | aes 256 ]
ハッシュアルゴリズムの設定
認証や鍵計算に使用するハッシュ方式を指定します。デフォルトは「sha」です。
(config-isakmp)# hash [ md5 | sha | sha256 | sha384 | sha512 ]
認証方式の設定
IKEフェーズ1で相手を認証する方法を指定します。デフォルトは「rsa-sig」です。
(config-isakmp)# authentication [ rsa-sig | rsa-encr | pre-share ]
- rsa-sig:RSA署名を利用した方式
- rsa-encr:RSA暗号化ナンスを利用した方式
- pre-share:事前共有鍵(Pre-shared Key)を利用する方式
Pre-shared Keyの設定
認証方式に「pre-share」を選んだ場合は、事前に共有する鍵を設定します。
(config)# crypto isakmp key password address address
- password:共有するパスフレーズ
- address:相手機器のIPアドレス
Diffie-Hellmanグループの設定
鍵交換に利用するDHグループを指定します。デフォルトは「1」です。
(config-isakmp)# group [ 1 | 2 | 5 ]
ISAKMP SAのライフタイム設定
ISAKMP SAが有効でいられる時間を設定します。デフォルトは86400秒(24時間)です。
(config-isakmp)# lifetime seconds
短くすると鍵の再生成が頻繁に行われ、セキュリティは高まりますが処理負荷が増えます。
DPD(Dead Peer Detection)の設定
DPDを設定すると、相手とのトンネルが切断された場合に自動で検出・削除できます。通常は無効ですが、VPNでダイナミックルーティングを使わない環境では「periodic」を指定するのが推奨です。
(config)# crypto isakmp keepalive seconds [ retries ] [ periodic | on-demand ]
ISAKMP SAのパラメータ一覧
| 項目 | 選択肢 | デフォルト値 |
|---|---|---|
| encryption(暗号化方式) | des, 3des, aes 128/192/256 | des |
| hash(ハッシュ方式) | sha, md5 | sha |
| lifetime(有効時間) | 60~86400秒 | 86400秒 |
| authentication(認証方式) | rsa-sig, rsa-encr, pre-share | rsa-sig |
| group(DHグループ) | 1, 2, 5 | 1 |
| crypto isakmp key | Pre-shared key と相手アドレス | ― |
設定例
以下の例では、暗号化に3DES、ハッシュにSHA、認証方式にPre-shared keyを使用し、DHグループを2、ライフタイムを12時間(43200秒)に設定しています。さらにPre-shared keyを「cisco」とし、相手アドレスを「100.1.1.1」、DPDを30秒ごとに送信するようにしています。
Cisco(config)# crypto isakmp policy 1
Cisco(config-isakmp)# encryption 3des
Cisco(config-isakmp)# hash sha
Cisco(config-isakmp)# authentication pre-share
Cisco(config-isakmp)# group 2
Cisco(config-isakmp)# lifetime 43200
Cisco(config)# crypto isakmp key cisco address 100.1.1.1
Cisco(config)# crypto isakmp keepalive 30 periodic
IPsecの設定(IKEフェーズ2の設定)
IKEフェーズ1でISAKMP SAが確立された後、IKEフェーズ2ではIPsec SAを生成するための設定を行います。ここでは「どの通信を暗号化するか」「どの暗号方式を使うか」を具体的に定義し、最終的に暗号マップをインターフェースへ適用することでVPNトンネルが確立します。
トランスフォームセットの定義
IPsec SAを確立するために、まずトランスフォームセットを作成します。これは「暗号化方式」「認証方式」「セキュリティプロトコル」を組み合わせたものです。
(config)# crypto ipsec transform-set name transform1 transform2
代表的な選択肢は以下の通りです。
| 種類 | 選択肢 |
|---|---|
| ESP暗号化 | esp-aes / esp-aes-192 / esp-aes-256 / esp-des / esp-3des / esp-null / esp-seal |
| ESP認証 | esp-md5-hmac / esp-sha-hmac |
| AH認証 | ah-md5-hmac / ah-sha-hmac |
設定例
Cisco(config)# crypto ipsec transform-set IPSEC esp-3des esp-md5-hmac
この例ではESPを使い、暗号化に3DES、認証にMD5を利用しています。
通信モードの指定
デフォルトではトンネルモードが利用されるため、特別な指定をしない限りトンネルモードになります。必要に応じて明示的に指定可能です。
(cfg-crypto-trans)# mode [ tunnel | transport ]
IPsec SAのライフタイム設定(オプション)
デフォルトでは以下が適用されます。
- 時間:3600秒(1時間)
- データ量:4608000KB
変更したい場合は次のように設定します。
(config)# crypto ipsec security-association lifetime [ seconds 秒 | kilobytes バイト数 ]
IPsec対象トラフィックの定義(ACL)
どの通信を暗号化するかはACLで定義します。permitで一致したトラフィックは暗号化され、denyに一致したトラフィックは暗号化されません。
設定例
Cisco(config)# access-list 101 permit ip 172.16.1.0 0.0.0.255 172.16.2.0 0.0.0.255
この例では、172.16.1.0/24 から 172.16.2.0/24 への通信をIPsec対象にしています。
暗号マップの設定
トランスフォームセット・ACL・ピアの情報を組み合わせるのが暗号マップです。優先度はシーケンス番号で決まり、数字が小さいほど優先度が高くなります。
(config)# crypto map map-name seq-number ipsec-isakmp
(config-crypto-map)# match address acl-number
(config-crypto-map)# set transform-set name
(config-crypto-map)# set peer address
オプションとして以下を設定可能です。
- SAライフタイムの個別指定
- PFS(Perfect Forward Secrecy)の有効化
(config-crypto-map)# set security-association lifetime [ seconds 秒 | kilobytes バイト数 ]
(config-crypto-map)# set pfs [ group1 | group2 | group5 ]
インターフェースへの適用
最後に、作成した暗号マップをVPNトンネルを張るインターフェースへ適用します。
(config)# interface interface-id
(config-if)# crypto map map-name
設定例
以下は、IKEフェーズ1とフェーズ2を通して実際にIPsec VPNを設定した例です。
! IKE Phase 1 の設定
Cisco(config)# crypto isakmp policy 1
Cisco(config-isakmp)# encryption 3des
Cisco(config-isakmp)# hash sha
Cisco(config-isakmp)# authentication pre-share
Cisco(config-isakmp)# group 2
Cisco(config-isakmp)# lifetime 43200
Cisco(config)# crypto isakmp key cisco address 100.1.1.1
Cisco(config)# crypto isakmp keepalive 30 periodic
! IKE Phase 2 の設定
Cisco(config)# crypto ipsec transform-set IPSEC esp-3des esp-md5-hmac
! IPsec対象トラフィックの定義
Cisco(config)# access-list 101 permit ip 172.16.1.0 0.0.0.255 172.16.2.0 0.0.0.255
! 暗号マップの設定
Cisco(config)# crypto map M-ipsec 1 ipsec-isakmp
Cisco(config-crypto-map)# set peer 100.1.1.1
Cisco(config-crypto-map)# set transform-set IPSEC
Cisco(config-crypto-map)# match address 101
! インターフェースへの適用
Cisco(config)# interface GigabitEthernet0/0
Cisco(config-if)# crypto map M-ipsec
異機種間で迷わないための事前準備
IPsec-VPNを複数メーカーで組むときは、各社独自の呼び方や初期値に振り回されがちです。そこで、構築前に共通のパラメータ表を用意しておくと、設定の突き合わせが一気に楽になります。フェーズ1(ISAKMP SA)とフェーズ2(IPsec SA)で決める内容を左右に分け、相手と合意してから作業に入るのが鉄則です。CCNAでは「どの段階で何を決めるか」がよく問われます。
| IKE Phase1(ISAKMP SA) | IKE Phase2(IPsec SA) |
|---|---|
| 暗号化アルゴリズム(DES/3DES/AES) | セキュリティプロトコル(AH/ESP) |
| ハッシュ(MD5/SHA-1) | 暗号化(DES/3DES/AES/Null) |
| 認証方式(Pre-shared Key / 署名 / 公開鍵 など) | 認証(HMAC-MD5 / HMAC-SHA1) |
| DHグループ(1/2/5) | PFSグループ(任意:1/2/5) |
| ISAKMP SAライフタイム | IPsec SAライフタイム |
| Pre-shared Key | IPsec通信モード(トンネル/トランスポート) |
| ISAKMPピアアドレス | IPsecピアアドレス |
| DPDの有無 | IPsec対象トラフィック(ACL) |
| フェーズ1モード(Main/Aggressive) | フェーズ2モード(Quickのみ) |
一般的な方針として、事前共有鍵方式(Pre-shared Key)とDHグループ2の組み合わせが採用される場面が多く、拠点間VPNはMainモード、リモートアクセスはAggressiveモードがよく使われます。PFSは要件がなければ無効のままにするケースが目立ちます。ISAKMPとIPsecのピアは同一アドレスでそろえるとトラブルが減ります。
PPPoE回線で拠点間IPsec-VPNを張るときの全体像
国内のアクセス回線としてPPPoEが使われることが多いため、外側インターフェースはDialerで確立し、その上に暗号マップを適用する形になります。ルータはインターネット側にデフォルトルートを向けたうえで、暗号マップ(crypto map)に「ピア」「トランスフォームセット」「対象ACL」をひとまとめにし、Dialerインターフェースへ貼り付けます。これにより、指定サブネット間のみが暗号化され、他の通信は平文のままインターネットへ流せます(必要に応じてACLを調整)。
サンプル構成とコンフィグ(拠点A:192.168.1.0/24 ⇔ 拠点B:192.168.2.0/24)
以下は拠点A側の例です。ISAKMPは3DES/SHA、事前共有鍵、DH2、ライフタイム12時間。フェーズ2はESP-3DES + MD5。DPDは30秒周期で送信します。インターネット側はPPPoEのDialer1、暗号マップはDialer1へ適用します。
! === 拠点A(R1) ===
crypto isakmp policy 1
encr 3des
hash sha
authentication pre-share
group 2
lifetime 43200
!
crypto isakmp key cisco address 200.1.1.1
crypto isakmp keepalive 30 periodic
!
crypto ipsec transform-set IPSEC esp-3des esp-md5-hmac
!
access-list 101 permit ip 172.16.1.0 0.0.0.255 172.16.2.0 0.0.0.255
!
crypto map M-ipsec 1 ipsec-isakmp
set peer 200.1.1.1
set transform-set IPSEC
match address 101
!
interface Loopback1
ip address 100.1.1.1 255.255.255.255
!
interface GigabitEthernet0/0
pppoe enable group global
pppoe-client dial-pool-number 1
no cdp enable
!
interface GigabitEthernet0/1
ip address 192.168.1.254 255.255.255.0
ip tcp adjust-mss 1356
!
interface Dialer1
ip unnumbered Loopback1
ip access-group A-security in
ip mtu 1454
encapsulation ppp
dialer pool 1
dialer-group 1
no cdp enable
ppp authentication chap callin
ppp chap hostname cisco@cisco.com
ppp chap password cisco
crypto map M-ipsec
!
ip route 0.0.0.0 0.0.0.0 Dialer1
!
ip access-list extended A-security
permit esp host 200.1.1.1 host 100.1.1.1
permit udp host 200.1.1.1 host 100.1.1.1 eq isakmp
!
dialer-list 1 protocol ip permit
拠点B側はアドレスと方向を入れ替えるだけです。設定値を左右で鏡写しにすると覚えやすく、突き合わせも容易です。
! === 拠点B(R2) ===
crypto isakmp policy 1
encr 3des
hash md5
authentication pre-share
group 2
!
crypto isakmp key cisco address 100.1.1.1
crypto isakmp keepalive 30 periodic
!
crypto ipsec transform-set IPSEC esp-3des esp-md5-hmac
!
access-list 101 permit ip 172.16.2.0 0.0.0.255 172.16.1.0 0.0.0.255
!
crypto map M-ipsec 1 ipsec-isakmp
set peer 100.1.1.1
set transform-set IPSEC
match address 101
!
interface Loopback1
ip address 200.1.1.1 255.255.255.255
!
interface GigabitEthernet0/0
pppoe enable group global
pppoe-client dial-pool-number 1
no cdp enable
!
interface GigabitEthernet0/1
ip address 192.168.2.254 255.255.255.0
ip tcp adjust-mss 1356
!
interface Dialer1
ip unnumbered Loopback1
ip access-group A-security in
ip mtu 1454
encapsulation ppp
dialer pool 1
dialer-group 1
no cdp enable
ppp authentication chap callin
ppp chap hostname cisco@cisco.com
ppp chap password cisco
crypto map M-ipsec
!
ip route 0.0.0.0 0.0.0.0 Dialer1
!
ip access-list extended A-security
permit esp host 100.1.1.1 host 200.1.1.1
permit udp host 100.1.1.1 host 200.1.1.1 eq isakmp
!
dialer-list 1 protocol ip permit
PPPoEで固定グローバルIPを契約しているなら、Loopbackを使わずip address negotiatedでDialerに直接アドレス取得させる設計も可能です。契約が固定型であれば付与IPは毎回同一になります。
端末ごとのパラメータを表で整理する(覚え方のコツ)
| R1(拠点A) IKE Phase1 | R1 IKE Phase2 |
|---|---|
| 暗号: 3DES / ハッシュ: MD5 / 認証: Pre-shared Key / DH: 2 | プロトコル: ESP / 暗号: 3DES / 認証: MD5-HMAC |
| ISAKMP SA LT: 86400秒 / DPD: 30 | IPsec SA LT: 3600秒 / モード: トンネル |
| ISAKMPピア: 200.1.1.1 / PSK: cisco | IPsecピア: 200.1.1.1 / 対象: 192.168.1.0/24 → 192.168.2.0/24 |
| R2(拠点B) IKE Phase1 | R2 IKE Phase2 |
|---|---|
| 暗号: 3DES / ハッシュ: MD5 / 認証: Pre-shared Key / DH: 2 | プロトコル: ESP / 暗号: 3DES / 認証: MD5-HMAC |
| ISAKMP SA LT: 86400秒 / DPD: 30 | IPsec SA LT: 3600秒 / モード: トンネル |
| ISAKMPピア: 100.1.1.1 / PSK: cisco | IPsecピア: 100.1.1.1 / 対象: 192.168.2.0/24 → 192.168.1.0/24 |
つながらないときの切り分け手順
まずは「フェーズ1が成立しているか」を確認します。IKEが上がらない限り、フェーズ2は始まりません。CCNAでは出力の読み取りがよく出るため、表示語句と意味を結びつけて覚えましょう。
| パターン | 画面の見え方 | 何を示すか/対処の方向性 |
|---|---|---|
| ① 何も表示されない | show crypto isakmp sa に何も出ない | まだトラフィック未発生かマッチしていない可能性。対象サブネット間でPingを打ち、ACLとルーティングを再確認。 |
| ② MM_NO_STATE | 交渉開始に失敗 | PSK不一致やISAKMP到達不可が典型。両端のcrypto isakmp key、到達用ACL、必要なら一時的にフィルタ解除も検討。まれに再起動で復帰する事例あり。 |
| ③ QM_IDLE | フェーズ1成功 | 次はフェーズ2の確認へ進む。 |
フェーズ2はshow crypto ipsec saで確認します。ESP利用時はinbound/outboundのSAsに自分のトランスフォームセットが反映され、パケット統計が増えていくのが正常です。
# pkts encaps: X, #pkts encrypt: X, #pkts digest: X
# pkts decaps: X, #pkts decrypt: X, #pkts verify: X
動作中セッションの有無はshow crypto engine connections activeで見られます。ここが空なら、暗号処理まで到達していません。
現場で使う確認コマンドの要点
| コマンド | 目的 |
|---|---|
| show crypto isakmp policy | フェーズ1ポリシー(暗号・ハッシュ・認証・DHなど) |
| show crypto isakmp sa | フェーズ1の状態(MM_NO_STATE / QM_IDLEなど) |
| show crypto ipsec transform-set | フェーズ2トランスフォームの定義確認 |
| show crypto ipsec sa | フェーズ2のSAと統計値(暗号化・復号の増分) |
| show crypto session detail | セッションの詳細状態と原因切り分け材料 |
IPsec-VPNとインターネット接続を両立させる考え方
拠点間VPNだけを構成した場合、社内サブネット同士の通信は通せても、拠点から外部インターネットへは出ていけません。これを同時に実現するには、PPPoEで外部へ出る経路を用意しつつ、LAN側の送信トラフィックをNATでグローバル化し、VPN向けのトラフィックだけはNATから除外する、という順序で制御します。ここで重要なのは「VPN向けはNAT対象外」「それ以外はNAT」の線引きです。
NAT設計の要点(NAT除外→インターネット宛てを変換)
NATのアクセスリストでは、まず最初にVPNで暗号化したい通信をdenyで除外し、その後ろでpermit anyを定義して通常の外向き通信を変換します。ACLは上から評価されるため、この並び順が肝になります。IPsecの対象ACLと混同しやすいので名称と役割をはっきり分けておきましょう。
| ACL名の例 | 役割 | 典型的な書き方 |
|---|---|---|
| A-ipsec | IPsecで暗号化すべき通信の定義 | permit ip 192.168.1.0/24 192.168.2.0/24 |
| A-nat | NAT変換対象の定義(先頭でVPN通信を除外) | deny ip 192.168.1.0/24 192.168.2.0/24 の次に permit ip 192.168.1.0/24 any |
| A-security | 回線側の保護用(ISAKMP・ESPを通す) | permit udp <peer> eq isakmp と permit esp |
インターフェースの役割とPPPoE特有の注意点
LAN側インターフェースはip nat inside、回線側(PPPoEのDialer)はip nat outsideで役割を明確にします。PPPoEはヘッダ分のオーバーヘッドがあるため、回線側MTUは小さくなり、LAN側ではip tcp adjust-mss 1356のようにMSSを調整して断片化や速度低下を避けます。グローバルIPの付与方法が2通りあり、NATのoverload先が変わる点も要確認です。
| グローバルIPの持ち方 | 代表的な設定 | NATのoverload指定先 |
|---|---|---|
| Dialerで動的取得(ip address negotiated) | interface Dialer1 にアドレスが付与 | ip nat inside source list A-nat interface Dialer1 overload |
| ループバックで固定IPを持つ(unnumberedでDialerに貸与) | Loopback1に固定IP、Dialer1 ip unnumbered Loopback1 | ip nat inside source list A-nat interface Loopback1 overload |
具体的な流れ(設定の読み解き)
最初にIKEフェーズ1・2(ISAKMP SAとIPsec SA)を整え、トランスフォームセット・暗号マップ・対象ACLを用意してDialerにcrypto mapを適用します。続いてNATのACLを作り、ip nat inside sourceでoverloadを定義。最後に回線側へデフォルトルートを向ければ、VPNと一般インターネットの両方が機能します。ここまでで「VPNはNAT除外」「外向きはNAT」という分岐が完成します。
代表スニペット(考え方が掴める最小構成)
! VPNで用いるISAKMP/IKE
crypto isakmp policy 1
encr 3des
hash md5
authentication pre-share
group 2
!
crypto isakmp key cisco address 200.1.1.1
crypto isakmp keepalive 30 periodic
! フェーズ2(ESP 3DES+MD5 例)
crypto ipsec transform-set IPSEC esp-3des esp-md5-hmac
! VPN対象トラフィック(拠点間)
ip access-list extended A-ipsec
permit ip 192.168.1.0 0.0.0.255 192.168.2.0 0.0.0.255
! NAT除外→インターネット宛てだけ変換
ip access-list extended A-nat
deny ip 192.168.1.0 0.0.0.255 192.168.2.0 0.0.0.255
permit ip 192.168.1.0 0.0.0.255 any
! 回線側保護(ISAKMP/ESPのみ穴あけ)
ip access-list extended A-security
permit esp host 200.1.1.1 host 100.1.1.1
permit udp host 200.1.1.1 host 100.1.1.1 eq isakmp
! 暗号マップにピア・トランスフォーム・対象ACLを束ねる
crypto map M-ipsec 1 ipsec-isakmp
set peer 200.1.1.1
set transform-set IPSEC
match address A-ipsec
! インターフェース
interface GigabitEthernet0/1
ip address 192.168.1.254 255.255.255.0
ip nat inside
ip tcp adjust-mss 1356
interface Dialer1
ip unnumbered Loopback1
ip access-group A-security in
ip mtu 1454
ip nat outside
encapsulation ppp
dialer pool 1
ppp authentication chap callin
ppp chap hostname cisco@cisco.com
ppp chap password cisco
crypto map M-ipsec
! 経路とNATのひも付け
ip route 0.0.0.0 0.0.0.0 Dialer1
ip nat inside source list A-nat interface Loopback1 overload
この例ではLoopbackに固定グローバルを持つ想定です。Dialerで動的取得に切り替える場合は、NATのoverload先だけinterface Dialer1へ変更します。
ステートフル検査(CBAC)で回線側ACLの穴あけを簡素化
回線側に細かな穴あけACLを手作業で作るのは現実的ではありません。CBAC(Context-Based Access Control)を有効化すれば、内部から開始したセッションに対して戻りトラフィックを自動で許可でき、設定が大幅に楽になります。やることは「検査したいプロトコルを指定」し、「LAN側インターフェースにインスペクションを適用」するだけです。
ip inspect name CBAC tcp
ip inspect name CBAC udp
ip inspect name CBAC ftp
interface GigabitEthernet0/1
ip inspect CBAC in
CBACをLAN側inで掛けても、回線側outで掛けても効果は同じです。構成資料ではout適用の例も多く見かけます。現場では、より新しい機能としてゾーンベースファイアウォール(ZBFW)が使われることもありますが、CCNA対策ではCBACの基本動作を押さえておけば十分です。
つまずきやすいポイントと確認観点
VPNが上がってもインターネットへ出られない場合、NAT除外ACLの順番ミスやip nat inside/outsideの付け忘れが典型です。show crypto isakmp saでフェーズ1(MM_NO_STATEやQM_IDLE)、show crypto ipsec saでフェーズ2(トンネルの入出力統計)を確認し、NAT周りはshow ip nat translationsやshow run | sec natで実体を照合します。PPPoEではMTU/MSS調整が不足すると、特定サイトだけ繋がらないといった事象が出やすいため、ip mtuとip tcp adjust-mssの値にも目を向けましょう。