接続方式としては、IKEv2 EAP-MSCHAPv2です。
strongSwanのインストールや証明書の作成については記載しません。
strongSwan側
strongSwanのコンパイル時は以下を指定しています。(不要な物も入っています。)# ./configure --prefix=/usr --sysconfdir=/etc --enable-eap-mschapv2 --enable-eap-peap --enable-eap-radius --enable-eap-tls --enable-eap-ttls --enable-openssl --enable-eap-identity --enable-aesni
以下は、各設定ファイルです。チューニングの余地はあります。
斜体の部分は環境に応じて設定してください。
/etc/ipsec.conf
conn ios10 left=%defaultroute leftcert=server.pem leftauth=pubkey leftsubnet=192.168.0.0/24 #leftfirewall=yes #lefthostaccess=yes leftsendcert=always leftid=vpn.example.com right=%any rightsourceip=192.168.255.0/24 rightauth=eap-mschapv2 keyexchange=ikev2 eap_identity=%any auto=add ike=aes256-sha256-modp2048! esp=aes256-sha256! dpdaction=clear dpddelay=30s dpdtimeout=10s rekey=no
/etc/ipsec.secrets
: RSA server-private.key username: EAP "password"
iPhone側
iPhoneに設定をインストールするための構成プロファイル(mobileconfig, plist)を作成します。プロファイルの最後の方のMIIから始まる部分は、Base64 (PEM)のCA証明書の内容を貼り付けます。
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>PayloadDisplayName</key> <string>Strongswan</string> <key>PayloadIdentifier</key> <string>com.example.vpn</string> <key>PayloadUUID</key> <string>9f93912b-5fd2-4455-99fd-13b9a47b4581</string> <key>PayloadType</key> <string>Configuration</string> <key>PayloadVersion</key> <integer>1</integer> <key>PayloadContent</key> <array> <dict> <key>PayloadIdentifier</key> <string>com.example.vpn.conf1</string> <key>PayloadUUID</key> <string>29e4456d-3f03-4f15-b46f-4225d89465b7</string> <key>PayloadType</key> <string>com.apple.vpn.managed</string> <key>PayloadVersion</key> <integer>1</integer> <key>UserDefinedName</key> <string>Strongswan EAP</string> <key>VPNType</key> <string>IKEv2</string> <key>IKEv2</key> <dict> <key>RemoteAddress</key> <string>vpn.example.com</string> <key>RemoteIdentifier</key> <string>vpn.example.com</string> <key>LocalIdentifier</key> <string></string> <key>ServerCertificateIssuerCommonName</key> <string>vpn.example.com</string> <key>ServerCertificateCommonName</key> <string>vpn.example.com</string> <key>AuthenticationMethod</key> <string>None</string> <key>ExtendedAuthEnabled</key> <integer>1</integer> <key>AuthName</key> <string>username</string> <key>AuthPassword</key> <string>password</string> <key>IKESecurityAssociationParameters</key> <dict> <key>EncryptionAlgorithm</key> <string>AES-256</string> <key>IntegrityAlgorithm</key> <string>SHA2-256</string> <key>DiffieHellmanGroup</key> <integer>14</integer> </dict> <key>ChildSecurityAssociationParameters</key> <dict> <key>EncryptionAlgorithm</key> <string>AES-256</string> <key>IntegrityAlgorithm</key> <string>SHA2-256</string> <key>DiffieHellmanGroup</key> <integer>14</integer> </dict> </dict> </dict> <dict> <key>PayloadIdentifier</key> <string>com.example.vpn</string> <key>PayloadUUID</key> <string>64988b2c-33e0-4adf-a432-6fbcae543408</string> <key>PayloadType</key> <string>com.apple.security.pem</string> <key>PayloadVersion</key> <integer>1</integer> <key>PayloadContent</key> <data> MII*************************************************************(省略)**************************************** </data> </dict> </array> </dict> </plist>
上記をテキストファイルに貼り付け、strongswan.mobileconfig というファイル名で保存し、
iPhoneにメールなどで転送します。
あとは、iPhoneでプロファイルをインストールすれば、接続準備は完了です。
2017/01/09 追記
ipsec.conf の以下はコメントアウトしました。leftfirewall=yes lefthostaccess=yes理由は、iptablesのルール追加に時間が掛かり、その間にiPhoneがタイムアウトで接続を切ってしまうからです。
あらかじめ、iptablesに以下のように許可しておいて、接続時のiptablesの更新をしないようにすれば、タイムアウトせずにすぐVPNが張れます。
iptables -A INPUT -s 192.168.255.0/24 -j ACCEPT iptables -A FORWARD -s 192.168.255.0/24 -j ACCEPT iptables -A FORWARD -d 192.168.255.0/24 -j ACCEPT
2017/12/30 追記
strongSwan 5.6.1 以降、MODP-1024がIKEのプロポーザルから外されたため、DiffieHellmanGroup 2 が使えなくなってしまいました。以下の通り変更しています。
- /etc/ipsec.conf
ike=aes256-sha256-modp2048!
- 構成プロファイル
<key>DiffieHellmanGroup</key> <integer>14</integer>
キー | 名前 | 型 | 値 |
---|---|---|---|
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Rasman\Parameters\ | NegotiateDH2048_AES256 | REG_DWORD | 1 |
また、CPUがAES-NIに対応しているにも関わらず、有効にしていなかったので、コンパイルのオプションを追加しました。
--enable-aesni
2018/03/18 追記
こちらで、各OSで使用できるクライアント証明書をまとめました。各OSでIKEv2のVPN接続で使用できた認証方式と証明書と内容をまとめました。
2018/08/15 追記
iPhoneでクライアント証明書の認証が成功しました。iPhoneで strongSwan (IPsec VPN) に接続する (Machine Certificates)
iPhoneでstrongSwanに証明書で接続する設定を記載しています。