iOS
VPN
strongswan
IKEv2

StrongSwan で作る iOS 対応 IKEv2 VPN サーバー

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 証明書をインストールする必要があるかもしれません。