InfraLab

IPsec / IKEv2 仕様

36 / 36 items

InfraLab Reference Series

Category: IPsec / IKEv2

Updated: 2026-05-14

infralab.jp

ipsec-ikev2

36 items

IPsec / IKEv2 仕様

Abstract

IPsec/IKEv2 の AH/ESP、SA/SPI/SAD/SPD、IKE_SA_INIT/IKE_AUTH、Tunnel/Transport、NAT-T、DPD と Cisco/strongSwan 設定例を整理。

Table of Contents

  1. 1. 概要 (RFC)3
  2. 2. AH3
  3. 3. ESP5
  4. 4. SA / SPI / SAD / SPD4
  5. 5. IKEv2 メッセージ8
  6. 6. モード (Tunnel / Transport)4
  7. 7. NAT-T4
  8. 8. Cisco / strongSwan 設定例5
  9. 9. References24

1. 概要 (RFC)

1.1. IPsec / IKEv2 とは

IP 層で認証、暗号化、完全性、リプレイ防止を提供するプロトコル群。IKEv2 は SA と鍵を自動交渉する。

IPsec Architecture: RFC 4301。IKEv2: RFC 7296。ESP: RFC 4303。AH: RFC 4302

1.2. 主要 RFC

IPsec アーキテクチャ、AH、ESP、IKEv2、暗号アルゴリズム推奨、NAT-T を参照する。

RFC 4301, RFC 4302, RFC 4303, RFC 7296, RFC 8247, RFC 3948

1.3. IKE と Child SA

IKE SA は制御用の保護チャネル、Child SA は実データを保護する AH/ESP SA。

IKE SA: IKEv2 messages protection。Child SA: ESP/AH traffic selector + keys

2. AH

2.1. AH 概要

Authentication Header は IP パケットの完全性と送信元認証を提供するが、ペイロード暗号化はしない。

IP protocol 51。RFC 4302。NAT と相性が悪く、実運用では ESP が主流

2.2. AH ヘッダ

Next Header、Payload Len、SPI、Sequence Number、ICV を持つ。

Next Header 8bit / Payload Len 8bit / Reserved 16bit / SPI 32bit / SeqNo 32bit / ICV 可変長

RFC 4302 AH Header ASCII 図:

   0                   1                   2                   3
   0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |  Next Header  |  Payload Len  |           Reserved            |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                   Security Parameters Index                   |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                        Sequence Number                        |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                   Integrity Check Value ...                   |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

2.3. AH と NAT

AH は IP ヘッダの不変フィールドも認証対象に含めるため、NAT によるアドレス変更で検証に失敗する。

NAT Traversal は ESP over UDP 4500 が前提。AH over NAT は通常不可

3. ESP

3.1. ESP 概要

Encapsulating Security Payload は暗号化、完全性、認証、リプレイ防止を提供する IPsec の主力プロトコル。

IP protocol 50。RFC 4303。NAT-T 時は UDP/4500 カプセル化

3.2. ESP ヘッダ構造

SPI と Sequence Number の後に暗号化 payload、padding、Next Header、ICV が続く。

SPI 32bit / SeqNo 32bit / Payload Data 可変 / Padding 0-255B / Pad Length 8bit / Next Header 8bit / ICV 可変

RFC 4303 ESP Packet Format ASCII 図:

   0                   1                   2                   3
   0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                   Security Parameters Index                   |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                        Sequence Number                        |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                       Payload Data ...                        |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |          Padding ...          |  Pad Length   |  Next Header  |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                   Integrity Check Value ...                   |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

3.3. ESP SPI

受信側が SA を検索するための 32bit 識別子。宛先 IP、プロトコル、SPI の組で SA を特定する。

SPI 32bit。0 は予約。受信側が値を割り当てる

3.4. ESP Sequence Number

リプレイ防止に使う単調増加番号。大容量通信では Extended Sequence Number を使う。

SeqNo 32bit。ESN は 64bit sequence を論理的に使用。Anti-replay window で検査

3.5. ESP AEAD

AES-GCM や ChaCha20-Poly1305 など AEAD は暗号化と完全性を一体で提供する。

RFC 8247 推奨確認。AES-GCM-16、ChaCha20-Poly1305 など。ICV/tag は algorithm 依存

4. SA / SPI / SAD / SPD

4.1. SA

Security Association は片方向の保護パラメータ集合。双方向通信には inbound/outbound の SA が必要。

SA fields: SPI, destination, protocol(AH/ESP), mode, keys, algorithms, lifetimes, anti-replay

4.2. SAD

Security Association Database。実際の SA と鍵、アルゴリズム、寿命、リプレイ状態を保持する。

lookup key: destination IP + IPsec protocol + SPI。Linux: ip xfrm state

4.3. SPD

Security Policy Database。どの通信を保護、破棄、バイパスするかを traffic selector で定義する。

Policy actions: PROTECT / BYPASS / DISCARD。Linux: ip xfrm policy

4.4. Traffic Selector

保護対象の送信元/宛先アドレス、ポート、プロトコル範囲。IKEv2 で TSi/TSr として交渉される。

TSi / TSr payload。例: 10.0.0.0/24 === 10.1.0.0/24

5. IKEv2 メッセージ

5.1. IKE_SA_INIT

IKEv2 の最初の交換。暗号提案、DH 鍵交換、nonce、NAT 検出を行う。

Exchange Type 34。Payloads: SAi1, KEi, Ni, NAT_DETECTION_*。Response: SAr1, KEr, Nr

5.2. IKE_AUTH

ID と認証情報を交換し、最初の Child SA を作る。証明書、PSK、EAP などを使う。

Exchange Type 35。Payloads: IDi/IDr, AUTH, CERT, CERTREQ, SA, TSi, TSr

5.3. CREATE_CHILD_SA

追加 Child SA 作成、rekey、IKE SA rekey に使う交換。

Exchange Type 36。Payloads: SA, Ni/Nr, KE optional, TSi/TSr。PFS 有効時 KE を含む

5.4. INFORMATIONAL

DELETE、エラー通知、DPD、設定通知などに使う汎用交換。

Exchange Type 37。Payloads: N, D, CP など。空 INFORMATIONAL request/response は liveness check に利用

5.5. IKEv2 ヘッダ

Initiator/Responder SPI、Next Payload、Version、Exchange Type、Flags、Message ID、Length を持つ。

IKE Header 28B: IKE SA Initiator SPI 8B / Responder SPI 8B / Next Payload 1B / Version 1B / Exchange Type 1B / Flags 1B / Message ID 4B / Length 4B

RFC 7296 IKE Header ASCII 図:

   0                   1                   2                   3
   0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                     IKE SA Initiator SPI                      |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                     IKE SA Initiator SPI                      |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                     IKE SA Responder SPI                      |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                     IKE SA Responder SPI                      |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  | Next Payload  |    Version    | Exchange Type |     Flags     |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                          Message ID                           |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                            Length                             |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

5.6. 暗号提案

IKE と ESP で暗号、PRF、完全性、DH group を提案し、両端で一致する組を選ぶ。

Transform Types: ENCR, PRF, INTEG, DH。例: AES-GCM, PRF-HMAC-SHA2-256, DH group 19

5.7. DH Group

鍵交換の強度と計算負荷を決める。現代運用では ECP や Curve25519 が好まれる。

14=2048-MODP, 15=3072, 16=4096, 19=256 ECP, 20=384 ECP, 21=521 ECP, 31=Curve25519

5.8. Perfect Forward Secrecy

Child SA rekey 時にも新しい DH を実行し、過去の鍵漏えいが将来/過去の通信復号に波及しにくくする。

CREATE_CHILD_SA with KE payload。PFS group は Child SA proposal に含める

6. モード (Tunnel / Transport)

6.1. Tunnel Mode

元 IP パケット全体を ESP で包み、新しい外側 IP ヘッダを付ける。拠点間 VPN の標準。

Outer IP header + ESP + Inner IP packet。Gateway-to-gateway で利用

6.2. Transport Mode

元 IP ヘッダは保持し、上位ペイロードを ESP/AH で保護する。ホスト間や NAT-T カプセル化で使われる。

Original IP header + ESP + TCP/UDP payload。L2TP/IPsec などで利用

6.3. Policy-based VPN

暗号 ACL や SPD の traffic selector に一致した通信だけを IPsec に通す方式。

Cisco crypto map classic。Selector mismatch は CHILD_SA 作成失敗や片方向通信の原因

6.4. Route-based VPN

仮想 tunnel interface へ routing し、IPsec は tunnel interface の下で保護する方式。運用が単純化しやすい。

Cisco VTI/FlexVPN、strongSwan XFRM/VTI。動的 routing と相性が良い

7. NAT-T

7.1. NAT 検出

IKE_SA_INIT で両端が IP/port のハッシュを交換し、経路上の NAT 有無を検出する。

NAT_DETECTION_SOURCE_IP / NAT_DETECTION_DESTINATION_IP notify payload

7.2. UDP 4500

NAT が検出されると IKE と ESP を UDP 4500 に移行し、ESP を UDP カプセル化する。

RFC 3948。UDP/500 -> UDP/4500。Non-ESP Marker 4B zero は IKE over UDP 4500 識別に使用

7.3. Keepalive

NAT 変換エントリを維持するため、短い NAT-T keepalive が送られる。

UDP 4500 NAT keepalive: 1 octet 0xff が一般的。間隔は実装依存

7.4. DPD

Dead Peer Detection は相手の生存性を確認し、死んだ SA を削除して再確立を促す。

IKEv2 では INFORMATIONAL liveness check。strongSwan: dpd_delay / dpd_timeout / dpd_action

8. Cisco / strongSwan 設定例

8.1. Cisco classic crypto map 例

従来型の policy-based IPsec。暗号 ACL と crypto map を外側 interface に適用する。

crypto ikev2 proposal P; encryption aes-gcm-256; group 19; crypto map CMAP 10 ipsec-isakmp; set peer 203.0.113.1; match address VPN-ACL

8.2. Cisco FlexVPN 例

IKEv2 profile と IPsec profile を tunnel interface に適用する route-based VPN。

crypto ikev2 profile PROF; match identity remote address 203.0.113.1 255.255.255.255; authentication local pre-share; interface Tunnel10; tunnel protection ipsec profile IPSEC-PROF

8.3. strongSwan swanctl.conf 最小例

拠点間 PSK の route-based/policy-based どちらにも応用できる swanctl の最小構成。

connections.site.local_addrs=198.51.100.1; remote_addrs=203.0.113.1; proposals=aes256gcm16-prfsha256-ecp256; children.net.local_ts=10.0.0.0/24; remote_ts=10.1.0.0/24; esp_proposals=aes256gcm16-ecp256

8.4. Linux 確認コマンド

IKE デーモンの状態と kernel XFRM state/policy の両方を見る。

swanctl --list-sas / ip xfrm state / ip xfrm policy / tcpdump -ni any udp port 500 or udp port 4500 or proto 50

8.5. 典型トラブルシュート

Phase1/IKE SA、Child SA、traffic selector、NAT-T、暗号提案、ルーティング、MTU/MSS の順に切り分ける。

確認: proposal mismatch, NO_PROPOSAL_CHOSEN, TS_UNACCEPTABLE, INVALID_KE_PAYLOAD, UDP 500/4500, ESP proto 50, MSS clamping

9. References

  1. IPsec
  2. IKEv2
  3. RFC 4301
  4. RFC 4302
  5. RFC 4303
  6. RFC 7296
  7. RFC 8247
  8. RFC 3948
  9. AH
  10. ESP
  11. SA
  12. SPI
  13. SAD
  14. SPD
  15. IKE_SA_INIT
  16. IKE_AUTH
  17. CREATE_CHILD_SA
  18. NAT-T
  19. UDP 4500
  20. DPD
  21. strongSwan
  22. FlexVPN
  23. VPN
  24. 暗号
Related