LoginSignup
24
28

More than 5 years have passed since last update.

strongSwanでVPN (IKEv2)を構築する

Last updated at Posted at 2016-01-17

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)

参考資料

24
28
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
24
28