strongSwanでVPN (IKEv2)を構築する

  • 12
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

1.はじめに

前回はL2TP/IPSecなVPNを作成しました。
今回はIKEv2(IPSec EAP MSCHAPv2)なVPNを構築します。

以下のクライアントから接続できることを確認しています。

VPNサーバーのOSは以下の通りです。

  • UbuntuServer 15.04
  • SELinux は無効化

2.手順

2.1.必要なアプリの導入

$ sudo apt-get install strongswan-plugin-eap-mschapv2

2.2.各種設定

認証用ファイル作成

サーバー側用に秘密鍵や証明書を作成します。strongSwanには証明書の作成向けにipsec pkiがあります。作成したファイルは以下の場所に適切に配置します。

  • /etc/ipsec.d/cacerts/: 認証局証明書
  • /etc/ipsec.d/certs/: サーバー証明書
  • /etc/ipsec.d/private/: 認証局・サーバーの秘密鍵

Windows用のひねりを入れる必要があります。
以下の操作をroot権限で行い、Windows対応の証明書を作成します。証明書はサーバーの適切な場所へ配置します。

setupCert.sh
#!/bin/bash

#各種 key,crt,サーバードメインを埋めて実行します。
#ファイル名
readonly CA_KEY=#認証局秘密鍵.key
readonly CA_CRT=#認証局証明書.crt
readonly VPN_KEY=#サーバー秘密鍵.key
readonly VPN_CRT=#サーバー証明書.crt
#作業場、VPNサーバードメイン
readonly SRV_DOMAIN=#サーバードメイン
readonly OUTPATH=./keyCrts

#初期化
rm /etc/ipsec.d/cacerts/*
rm /etc/ipsec.d/certs/*
rm /etc/ipsec.d/private/*
mkdir ./keyCrts

#ルート証明書作成
cakey=${OUTPATH}/${CA_KEY}
cacrt=${OUTPATH}/${CA_CRT}
ipsec pki --gen > $cakey
ipsec pki --self --in $cakey --ca --dn "C=JP, O=strongSwan, CN=strongSwanVPN CA" > $cacrt

cp $cakey /etc/ipsec.d/private/
cp $cacrt /etc/ipsec.d/cacerts/
chmod 600 /etc/ipsec.d/private/$CA_KEY
chmod 600 /etc/ipsec.d/cacerts/$CA_CRT
chown root:root /etc/ipsec.d/private/$CA_KEY
chown root:root /etc/ipsec.d/cacerts/$CA_CRT

#サーバー証明書作成
# 署名にひねりがあるため注意。
# 参考資料:
# 1). https://wiki.strongswan.org/projects/strongswan/wiki/Win7CertReq
srvkey=${OUTPATH}/${VPN_KEY}
srvcrt=${OUTPATH}/${VPN_CRT}
ipsec pki --gen > $srvkey
ipsec pki --pub --in $srvkey | \
    ipsec pki \
    --issue --cacert $cacrt --cakey $cakey --san $SRV_DOMAIN \
    --flag serverAuth --dn "C=JP, O=strongSwan, CN=${SRV_DOMAIN}" > $srvcrt

cp $srvkey /etc/ipsec.d/private/
cp $srvcrt /etc/ipsec.d/certs/
chmod 600 /etc/ipsec.d/private/$VPN_KEY
chmod 600 /etc/ipsec.d/certs/$VPN_CRT
chown root:root /etc/ipsec.d/private/$VPN_KEY
chown root:root /etc/ipsec.d/certs/$VPN_CRT

設定ファイル編集

/etc/ipsec.conf
# IPSec IKEv2
conn EAP-MSCHAPv2
   leftsubnet=0.0.0.0/0
   auto=add
   # 省略可(default: pubkey)。認証方式。サーバー側は公開鍵認証。
   leftauth=pubkey
   # 必須。証明書。
   leftcert=#サーバー証明書.crt
   # 必須。認証方式。クライアントはEAP-MSCHAPv2認証。
   rightauth=eap-mschapv2
   # 必須。VPNクライアントへ振るIPアドレスの範囲。IKEv2認証を使用する際には必要。
   # サーバーの所属ネットとは異なるアドレスにする。
   rightsourceip=192.168.x.0/24
   # 必須。Windows対応に必要。Androidでは不要
   eap_identity=%any

認証設定ファイル編集

/etc/ipsec.secrets
# サーバー秘密鍵、ユーザー名、パスワード部分を
# 埋めたものをipsec.secretsへ追記する。

%any : RSA KeyAAA #サーバー秘密鍵.key
UserNameBBB : EAP "PasswordCCC" #ユーザー名 & パスワード

sysctl の編集

/etc/sysctl.conf
#サーバーがVPNクライアントと内部ネットワークを繋ぐルーター
#として機能できるよう以下の設定をsysctl.confへ追記する。
net.ipv4.ip_forward=1

その他の作業

  • 作成したルート証明書をクライアントへインストール
  • ルーターを設定変更
    VPNサーバーの所属ネットのルーターにはVPNクライアントへ振られるVirtualIPの経路設定を行う必要があります。
    192.168.x.0/24 → 192.168.x.x

2.3.ハマりどころ

3.感想

strongSwanとIKEv2の感想は以下の通り。

  • 良かった点
    • 単体でVPNを構築できるためにシンプルで設定しやすい。(strongSwan IKEv2)
    • 他のソフトと比較してapt-getから入れられるため、更新が楽。(strongSwan)
    • L2TP/IPSecより早いらしい。(速度測定してみましたが微妙...(IKEv2)
  • 悪かった点
    • MTU調整をクライアント側で行わなければならない。(IKEv2)
    • 色々拘らなければSoftEther VPNは楽でよかった...(strongSwan)

参考資料