iOS から接続できる IKEv2 VPN サーバーの作り方を紹介します。
準備
iOS デバイスにクライアント証明書をそれぞれ発行するのは面倒なので、クライアント側はユーザー名とパスワードで認証することにして、サーバー証明書だけ準備しておきます。
サーバー証明書
OpenSSL 等を用いて適当に作成します。作成方法は簡単に検索で見つかるのでここでは書きませんが、 CN はサーバー名になるので気をつけましょう。既存のサーバー証明書があれば流用する事もできます。
秘密鍵を /etc/ipsec.d/private/
に、証明書を /etc/ipsec.d/certs/
にコピーしておきます。以降の説明では、それぞれのファイル名が server.key
および server.pem
であるものとします。
StrongSwan 設定
StrongSwan をインストールしたら必要な設定を書き込みます。
/etc/ipsec.secrets
サーバーの秘密鍵とユーザー認証のためのパスワードを以下のように設定します。 (実際には容易に推測できないパスワードを用います。)
: RSA server.key
vpnuser1 : EAP "open.sesami"
/etc/ipsec.conf
以下のように設定します。 (詳細な項目は省略しています。)
conn %default
leftsubnet = 198.51.100.0/24
leftauth = pubkey
leftid = vpn.example.com # サーバー証明書の CN
leftcert = server.pem
ike = aes-aes256-sha256-aesxcbc-sha1-modp2048-modp1024
esp = aes-aes256-sha256-aesxcbc-sha1
conn roadwarrior
leftsubnet = 0.0.0.0/0, ::/0
leftsendcert = always
rightsourceip = 198.51.100.192/26
rightdns = 198.51.100.2, 198.51.100.3
conn roadwarrior-eap
also = roadwarrior
rightauth = eap-mschapv2
eap_identity = %any
auto = add
iOS 設定
VPN 構成でタイプ「IKEv2」認証「ユーザ名」として、リモート ID にサーバー証明書の CN を間違えずに記入すれば接続できるようになると思いますが、サーバー証明書のルート CA 証明書をインストールする必要があるかもしれません。