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. 概要 (RFC)
1.1. IPsec / IKEv2 とは
IP 層で認証、暗号化、完全性、リプレイ防止を提供するプロトコル群。IKEv2 は SA と鍵を自動交渉する。
IPsec Architecture: RFC 4301。IKEv2: RFC 7296。ESP: RFC 4303。AH: RFC 43021.2. 主要 RFC
IPsec アーキテクチャ、AH、ESP、IKEv2、暗号アルゴリズム推奨、NAT-T を参照する。
RFC 4301, RFC 4302, RFC 4303, RFC 7296, RFC 8247, RFC 39481.3. IKE と Child SA
IKE SA は制御用の保護チャネル、Child SA は実データを保護する AH/ESP SA。
IKE SA: IKEv2 messages protection。Child SA: ESP/AH traffic selector + keys2. 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-replay4.2. SAD
Security Association Database。実際の SA と鍵、アルゴリズム、寿命、リプレイ状態を保持する。
lookup key: destination IP + IPsec protocol + SPI。Linux: ip xfrm state4.3. SPD
Security Policy Database。どの通信を保護、破棄、バイパスするかを traffic selector で定義する。
Policy actions: PROTECT / BYPASS / DISCARD。Linux: ip xfrm policy4.4. Traffic Selector
保護対象の送信元/宛先アドレス、ポート、プロトコル範囲。IKEv2 で TSi/TSr として交渉される。
TSi / TSr payload。例: 10.0.0.0/24 === 10.1.0.0/245. IKEv2 メッセージ
5.1. IKE_SA_INIT
IKEv2 の最初の交換。暗号提案、DH 鍵交換、nonce、NAT 検出を行う。
Exchange Type 34。Payloads: SAi1, KEi, Ni, NAT_DETECTION_*。Response: SAr1, KEr, Nr5.2. IKE_AUTH
ID と認証情報を交換し、最初の Child SA を作る。証明書、PSK、EAP などを使う。
Exchange Type 35。Payloads: IDi/IDr, AUTH, CERT, CERTREQ, SA, TSi, TSr5.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 195.7. DH Group
鍵交換の強度と計算負荷を決める。現代運用では ECP や Curve25519 が好まれる。
14=2048-MODP, 15=3072, 16=4096, 19=256 ECP, 20=384 ECP, 21=521 ECP, 31=Curve255195.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 payload7.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_action8. 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-ACL8.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-PROF8.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-ecp2568.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 508.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 clamping9. References
- IPsec
- IKEv2
- RFC 4301
- RFC 4302
- RFC 4303
- RFC 7296
- RFC 8247
- RFC 3948
- AH
- ESP
- SA
- SPI
- SAD
- SPD
- IKE_SA_INIT
- IKE_AUTH
- CREATE_CHILD_SA
- NAT-T
- UDP 4500
- DPD
- strongSwan
- FlexVPN
- VPN
- 暗号