技術
約5分で読めます
IKEv2(strongSwan)サーバーの構築メモ
VPN 構築メモシリーズの番外編として、IKEv2 についてもメモが出てきたのでまとめておく。
注意: IKEv2 は IPSec ベースのため、中国の GFW(Great Firewall)に検出されやすい。中国向け通信には非推奨。日本国内や検閲のない環境での利用向け。
IKEv2 とは
IKEv2(Internet Key Exchange version 2)は IPSec VPN のための鍵交換プロトコル。モバイルデバイスでの再接続が得意で、iOS や macOS、Windows にネイティブ対応している。
他のプロトコルとの違い:
- IKEv2: IPSec ベース。モバイル向け。OS 標準で対応
- OpenConnect: SSL/TLS ベース。HTTPS に偽装できる
- WireGuard: 独自プロトコル。シンプルで高速
サーバー構築手順
CentOS 7 での手順。strongSwan を使用する。
インストール
yum -y install epel-release
yum -y install strongswan
yum update -y openssl
パッケージが見つからない場合:
yum clean all
# 再度実行
証明書の配置
Let’s Encrypt で取得した証明書を配置する。
# サーバー証明書
vi /etc/strongswan/ipsec.d/certs/cert.pem
# 中間証明書(CA)
vi /etc/strongswan/ipsec.d/cacerts/chain.pem
# 秘密鍵
vi /etc/strongswan/ipsec.d/private/privkey.pem
注意: Let’s Encrypt の証明書は3ヶ月で更新が必要。certbot の自動更新を設定しておくこと。
ipsec.conf の設定
vi /etc/strongswan/ipsec.conf
# Add connections here.
conn %default
keyexchange=ikev2
ike=aes128-sha256-ecp256,aes256-sha384-ecp384,aes128-sha256-modp2048,aes128-sha1-modp2048,aes256-sha384-modp4096,aes256-sha256-modp4096,aes256-sha1-modp4096,aes128-sha256-modp1536,aes128-sha1-modp1536,aes256-sha384-modp2048,aes256-sha256-modp2048,aes256-sha1-modp2048,aes128-sha256-modp1024,aes128-sha1-modp1024,aes256-sha384-modp1536,aes256-sha256-modp1536,aes256-sha1-modp1536,aes256-sha384-modp1024,aes256-sha256-modp1024,aes256-sha1-modp1024!
esp=aes128gcm16-ecp256,aes256gcm16-ecp384,aes128-sha256-ecp256,aes256-sha384-ecp384,aes128-sha256-modp2048,aes128-sha1-modp2048,aes256-sha384-modp4096,aes256-sha256-modp4096,aes256-sha1-modp4096,aes128-sha256-modp1536,aes128-sha1-modp1536,aes256-sha384-modp2048,aes256-sha256-modp2048,aes256-sha1-modp2048,aes128-sha256-modp1024,aes128-sha1-modp1024,aes256-sha384-modp1536,aes256-sha256-modp1536,aes256-sha1-modp1536,aes256-sha384-modp1024,aes256-sha256-modp1024,aes256-sha1-modp1024,aes128gcm16,aes256gcm16,aes128-sha256,aes128-sha1,aes256-sha384,aes256-sha256,aes256-sha1!
dpdaction=clear
dpddelay=300s
rekey=no
conn IPSec-IKEv2
keyexchange=ikev2
left=%any
leftsubnet=0.0.0.0/0
leftid=vpn.example.com
leftcert=cert.pem
leftsendcert=always
right=%any
rightid=%any
rightdns=1.1.1.1,8.8.8.8
rightsourceip=192.168.10.0/19
auto=add
conn IPSec-IKEv2-EAP
also="IPSec-IKEv2"
rightauth=eap-mschapv2
eap_identity=%any
auto=add
ポイント:
leftidはサーバーのドメイン名に変更rightsourceipはクライアントに割り当てる IP 範囲rightdnsはクライアントに配布する DNS
ipsec.secrets の設定
vi /etc/strongswan/ipsec.secrets
# ipsec.secrets - strongSwan IPsec secrets file
: RSA privkey.pem
username : EAP "password"
ユーザーを追加する場合は同じ形式で追記:
user1 : EAP "password1"
user2 : EAP "password2"
ログ設定
vi /etc/strongswan/strongswan.d/charon-logging.conf
# Default loglevel.
default = 2
# flush_line = no
flush_line = yes
# time_format =
time_format = %F %T
カーネルパラメータの設定
vi /etc/sysctl.conf
net.ipv4.ip_forward=1
設定を反映:
sysctl -p
ファイルディスクリプタの上限設定
vi /etc/security/limits.conf
root soft nofile 51200
root hard nofile 51200
ファイアウォールの設定
firewalld を使用する場合:
firewall-cmd --permanent --zone=public --add-service=ipsec
firewall-cmd --permanent --zone=public --add-port=500/udp
firewall-cmd --permanent --zone=public --add-port=4500/udp
firewall-cmd --permanent --add-masquerade
firewall-cmd --direct --permanent --add-rule ipv4 mangle FORWARD 1 -p tcp -m tcp --tcp-flags SYN,RST SYN -s 192.168.10.0/19 -m tcpmss --mss 1301:1536 -j TCPMSS --set-mss 1300
echo 1 >/proc/sys/net/ipv4/ip_no_pmtu_disc
firewall-cmd --reload
firewalld が無効な場合は先に起動:
systemctl status firewalld
systemctl start firewalld
systemctl enable firewalld
サービスの起動
systemctl enable strongswan
systemctl start strongswan
クライアント接続
iOS / macOS
設定 → VPN → VPN構成を追加 → IKEv2
- サーバ: vpn.example.com
- リモートID: vpn.example.com
- ローカルID: (空欄)
- ユーザ認証: ユーザ名
- ユーザ名: ipsec.secrets に設定したユーザ名
- パスワード: ipsec.secrets に設定したパスワード
Windows
設定 → ネットワークとインターネット → VPN → VPN接続を追加
- VPNプロバイダー: Windows(ビルトイン)
- 接続名: 任意
- サーバー名またはアドレス: vpn.example.com
- VPNの種類: IKEv2
- サインイン情報の種類: ユーザー名とパスワード
Android
設定 → ネットワークとインターネット → VPN → VPNを追加
- 名前: 任意
- タイプ: IKEv2/IPSec MSCHAPv2
- サーバーアドレス: vpn.example.com
- IPSec識別子: vpn.example.com
ユーザー管理スクリプト
大量のユーザーを管理する場合のスクリプト例:
vi ikev2.sh
#!/bin/bash
cd /etc/strongswan
rm -f ipsec.secrets
wget -O ipsec.secrets https://example.com/api/users
systemctl stop strongswan
systemctl start strongswan
chmod +x ikev2.sh
./ikev2.sh
2025年現在の注意点
中国での使用について
IKEv2 は中国向け通信には非推奨。
理由:
- IPSec プロトコルは GFW に容易に検出される
- UDP 500/4500 ポートが特徴的
- 2024年に Microsoft が L2TP/IPsec を非推奨にした(同じ IPSec ファミリー)
中国向けには OpenConnect や V2Ray を検討すること。
IKEv3 について
IKEv3 は RFC 9370 として提案されているが、まだドラフト段階。実用は当面 IKEv2 が続く。
推奨される用途
IKEv2 が適しているケース:
- 日本国内や検閲のない環境での VPN
- iOS / macOS / Windows のネイティブ対応を活かしたい場合
- モバイルデバイスでの安定した再接続が必要な場合
→ まとめ: 対中国通信 VPN規格によるつながりやすさの比較