コンテンツにスキップ

Cisco機器でIKEv2 IPsec VPNを設定する

Cisco IOS / IOS XE ルータで、IKEv2 と IPsec VTI を使った拠点間 VPN を設定する。

crypto map ではなく VTI(Virtual Tunnel Interface)を使う。VTI 構成では、暗号化対象の通信を ACL で直接指定するのではなく、Tunnel インターフェースへ向く経路によって VPN へ流す通信を決める。

Cisco IOS / IOS XE の proposal、policy、keyring、profile、transform-set の関係は、 Cisco IOSのIPsec設定要素 を参照する。 crypto map やトラブルシュートで出てくる ACL の基本は、標準ACLと拡張ACL を参照する。


flowchart LR
    subgraph site_a["Site A"]
        lan_a["LAN 192.168.1.0/24"] --> r1["R1 WAN 203.0.113.1"]
        r1 --> tun_a["Tunnel0 10.255.0.1/30"]
    end

    tunnel["IPsec VTI: IKEv2 creates SA and ESP protects data"]

    subgraph site_b["Site B"]
        tun_b["Tunnel0 10.255.0.2/30"] --> r2["R2 WAN 203.0.113.2"]
        r2 --> lan_b["LAN 192.168.2.0/24"]
    end

    tun_a --> tunnel --> tun_b

項目 R1 R2
機器 Cisco IOS / IOS XE ルータ Cisco IOS / IOS XE ルータ
WANインターフェース GigabitEthernet0/0 GigabitEthernet0/0
WAN IPアドレス 203.0.113.1 203.0.113.2
LANインターフェース GigabitEthernet0/1 GigabitEthernet0/1
LAN側IPアドレス 192.168.1.1 192.168.2.1
LANネットワーク 192.168.1.0/24 192.168.2.0/24
Tunnelインターフェース Tunnel0 Tunnel0
Tunnel IPアドレス 10.255.0.1/30 10.255.0.2/30
IKEバージョン IKEv2 IKEv2
認証方式 事前共有鍵 事前共有鍵
事前共有鍵 ChangeMe-StrongKey ChangeMe-StrongKey

事前に確認しておくこと。

  • R1 と R2 の WAN IP 同士で疎通できる
  • 途中の機器で UDP 500、UDP 4500、ESP が必要に応じて通る
  • LAN 側インターフェースと基本的なルーティングは設定済みである
  • 既存の NAT overload がある場合、対向 LAN 宛通信を NAT 対象から除外する

flowchart TD
    subgraph ike["IKEv2 configuration"]
        proposal["IKEv2 proposal"]
        policy["IKEv2 policy"]
        keyring["IKEv2 keyring"]
        ikeprofile["IKEv2 profile"]
        ikesa["IKEv2 SA"]
    end

    subgraph ipsec["IPsec VTI configuration"]
        transform["IPsec transform set"]
        ipsecprofile["IPsec profile"]
        tunnelif["Tunnel0 with mode ipsec ipv4"]
        route["Route to remote LAN"]
    end

    proposal --> policy --> ikesa
    keyring --> ikeprofile --> ikesa
    ikeprofile --> ipsecprofile
    transform --> ipsecprofile --> tunnelif
    route --> tunnelif
要素 役割
IKEv2 proposal IKEv2 の制御通信で使う暗号方式などの候補
IKEv2 policy IKEv2 proposal を採用する設定
IKEv2 keyring 対向ルータと事前共有鍵を対応づける設定
IKEv2 profile 相手識別、認証方式、keyring をまとめる設定
IPsec transform set ESP で実データを保護する方式
IPsec profile transform set と IKEv2 profile を Tunnel に適用するためのまとまり

IKE で使う暗号方式、完全性確認方式、DH グループを IKEv2 proposal として定義する。

R1 と R2 の両方で設定する。

conf t
crypto ikev2 proposal IKEV2-PROP
encryption aes-cbc-256
integrity sha256
group 14
exit
設定 意味
crypto ikev2 proposal IKEV2-PROP IKEV2-PROP というローカル名で IKEv2 proposal を作成し、proposal の設定モードへ入る。名前自体は対向へ送られないため、両端で同じ名前にする必要はない。
encryption aes-cbc-256 IKEv2 SA の暗号化方式として、256 bit 鍵の AES-CBC を指定する。保護するのは IKEv2 の制御通信であり、VPN を通る実データではない。
integrity sha256 IKEv2 メッセージの改ざんを検出する完全性確認方式として、SHA-256 ベースの HMAC を指定する。対向ルータの認証方式は IKEv2 profile で別に指定する。
group 14 IKEv2 SA の鍵素材を作る Diffie-Hellman 鍵交換に、2048 bit MODP group 14 を使う。これは暗号化方式ではなく、共有秘密を合意する方式である。

この例は AES-CBC を使うため、prf を省略すると Cisco IOS / IOS XE は integrity と同じ SHA-256 を PRF に使う。PRF は IKEv2 の鍵素材や認証処理に必要な値を生成する。両端では proposal 名ではなく、暗号化方式、完全性確認方式、PRF、DH グループに共通の組み合わせが必要になる。

この proposal は、IKEv2 の制御通信を保護するための候補である。IPsec で実データを保護する方式は、後で作成する transform set で指定する。


IKEv2 proposal を IKEv2 policy に紐づける。

R1 と R2 の両方で設定する。

crypto ikev2 policy IKEV2-POLICY
proposal IKEV2-PROP
exit

IKEv2 ネゴシエーションでは、両端で一致する proposal が選ばれる。暗号方式、完全性確認方式、DH グループが合わないと IKEv2 SA は確立しない。


対向ルータと事前共有鍵を IKEv2 keyring に定義する。

R1 では、対向の R2 を peer として登録する。

crypto ikev2 keyring IKEV2-KEYRING
peer R2
address 203.0.113.2
pre-shared-key ChangeMe-StrongKey
exit
exit

R2 では、対向の R1 を peer として登録する。

crypto ikev2 keyring IKEV2-KEYRING
peer R1
address 203.0.113.1
pre-shared-key ChangeMe-StrongKey
exit
exit

pre-shared-key ChangeMe-StrongKey は、自分の認証情報の生成と、相手から受け取った認証情報の検証に同じ PSK を使う設定である。方向ごとに異なる PSK を使う場合は、pre-shared-key local と pre-shared-key remote を分けて設定する。


相手の識別条件、認証方式、keyring を IKEv2 profile にまとめる。

R1 の設定。

crypto ikev2 profile IKEV2-PROFILE
match identity remote address 203.0.113.2 255.255.255.255
identity local address 203.0.113.1
authentication remote pre-share
authentication local pre-share
keyring local IKEV2-KEYRING
dpd 10 3 on-demand
exit

R2 の設定。

crypto ikev2 profile IKEV2-PROFILE
match identity remote address 203.0.113.1 255.255.255.255
identity local address 203.0.113.2
authentication remote pre-share
authentication local pre-share
keyring local IKEV2-KEYRING
dpd 10 3 on-demand
exit

match identity remote address は、対向ルータを識別する条件である。ここが実際の対向 WAN IP と合っていないと、正しい profile が選ばれない。

identity local address は任意であり、local IKE identity を指定した WAN IP アドレスに固定する。PSK 認証では既定でも IKE パケットの送信元 IP アドレスが local identity になるため、この構成では省略しても同じ identity が使われる。

dpd 10 3 on-demand は任意である。peer から 10 秒間 IKEv2 / IPsec traffic を受信していない状態で送信が必要になると生存確認を行い、応答がなければ 3 秒間隔で再送する。省略しても SA は確立するが、応答しない peer の検出と SA の削除が遅れる場合がある。


ESP で実データを保護する方式を IPsec transform set として定義する。

R1 と R2 の両方で設定する。

crypto ipsec transform-set IPSEC-TS esp-aes 256 esp-sha256-hmac
mode tunnel
exit
設定 意味
crypto ipsec transform-set IPSEC-TS ... IPSEC-TS というローカル名で、IPsec SA が実データを保護するときの ESP アルゴリズムの組み合わせを定義する。名前は両端で同じでなくてもよいが、選ばれるアルゴリズムとモードには互換性が必要である。
esp-aes 256 ESP の暗号化方式として、256 bit 鍵の AES-CBC を使う。実データの機密性を提供する設定であり、256 は AES の鍵長を表す。
esp-sha256-hmac ESP の完全性確認とデータ送信元認証に HMAC-SHA-256 を使う。改ざんを検出するための設定であり、データを暗号化する設定ではない。
mode tunnel 元の IP パケット全体を ESP で保護し、その外側に新しい IP ヘッダーを付ける。外側の IP ヘッダーは暗号化されず、転送に使われる。

IKEv2 proposal 内の AES / SHA-256 は IKEv2 SA を保護し、transform set 内の esp-aes / esp-sha256-hmac は IPsec SA を通る実データを保護する。同じ種類のアルゴリズム名が現れても、対象となる SA が異なる。


transform set と IKEv2 profile を IPsec profile にまとめる。

R1 と R2 の両方で設定する。

crypto ipsec profile IPSEC-PROFILE
set transform-set IPSEC-TS
set ikev2-profile IKEV2-PROFILE
set pfs group14
exit

IPsec profile は、後で Tunnel インターフェースへ適用する。PFS を有効にする場合は、両端で同じ DH グループを指定する。


7. Tunnelインターフェースを作成する

Section titled “7. Tunnelインターフェースを作成する”

IPsec VTI を作成し、IPsec profile を適用する。

R1 の設定。

interface Tunnel0
ip address 10.255.0.1 255.255.255.252
tunnel source GigabitEthernet0/0
tunnel destination 203.0.113.2
tunnel mode ipsec ipv4
tunnel protection ipsec profile IPSEC-PROFILE
no shutdown
exit

R2 の設定。

interface Tunnel0
ip address 10.255.0.2 255.255.255.252
tunnel source GigabitEthernet0/0
tunnel destination 203.0.113.1
tunnel mode ipsec ipv4
tunnel protection ipsec profile IPSEC-PROFILE
no shutdown
exit

tunnel source は自分側の WAN インターフェース、 tunnel destination は対向ルータの WAN IP である。


対向拠点の LAN 宛通信を Tunnel インターフェースへ流す。

R1 では、拠点B LAN を Tunnel0 へ向ける。

ip route 192.168.2.0 255.255.255.0 Tunnel0

R2 では、拠点A LAN を Tunnel0 へ向ける。

ip route 192.168.1.0 255.255.255.0 Tunnel0

VTI 構成では、この経路制御が暗号化対象の通信を決める。crypto map 構成のような interesting traffic 用 ACL は使わない。


R1 と R2 の両方で設定を保存する。

end
write memory

show interface Tunnel0
show ip interface brief | include Tunnel0

期待する状態は、Tunnel0 が up/up になることである。

show crypto ikev2 sa

期待する状態は、対向ルータとの IKEv2 SA が READY になることである。

show crypto ipsec sa

確認する主な点は次のとおり。

  • local crypto endpoint が自分の WAN IP になっている
  • remote crypto endpoint が対向の WAN IP になっている
  • encaps / decaps のカウンタが増える
  • 暗号化対象の通信を流したときにパケット数が増える

R1 で確認する。

show ip route 192.168.2.0

R2 で確認する。

show ip route 192.168.1.0

対向 LAN 宛の経路が Tunnel0 へ向いていることを確認する。

R1 側 LAN から R2 側 LAN へ ping する。

ping 192.168.2.1 source 192.168.1.1

R2 側からも逆方向を確認する。

ping 192.168.1.1 source 192.168.2.1

ルータ自身から ping する場合、実際に存在する LAN 側インターフェースの IP アドレスを source に指定する。


症状 確認する場所
IKEv2 SA ができない WAN 到達性、UDP 500 / 4500、IKEv2 proposal、profile の match identity、事前共有鍵
IKEv2 SA はできるが IPsec SA ができない transform set、IPsec profile、PFS、Tunnel インターフェースへの profile 適用
SA はあるが通信できない 対向 LAN への経路、戻り経路、ACL、NAT 除外、LAN 側のデフォルトゲートウェイ
encaps だけ増えて decaps が増えない 相手側の戻り経路、相手側 IPsec 設定、途中経路のフィルタ
NAT 配下でつながらない NAT-T、UDP 4500、対向の識別条件、NAT 機器のポート変換

IOSv で再現しやすい AES-CBC-256、SHA-256、group 14、事前共有鍵を使用する。対応機器で新規構成を作る場合は、AES-GCM、明示した PRF、group 19 / 20 などの ECDH を検討する。AES-GCM では独立した integrity algorithm や ESP HMAC を組み合わせない。多数の対向を管理する環境では証明書認証も候補になる。詳細は PRFとAEAD を参照する。