技術 約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 ファミリー)

中国向けには OpenConnectV2Ray を検討すること。

IKEv3 について

IKEv3 は RFC 9370 として提案されているが、まだドラフト段階。実用は当面 IKEv2 が続く。

推奨される用途

IKEv2 が適しているケース:

  • 日本国内や検閲のない環境での VPN
  • iOS / macOS / Windows のネイティブ対応を活かしたい場合
  • モバイルデバイスでの安定した再接続が必要な場合

→ まとめ: 対中国通信 VPN規格によるつながりやすさの比較

参考