VPN
ipsec
strongswan

IPsec / XAuth でサクッと VPN サーバを立てる

More than 1 year has passed since last update.

手軽に VPN をサーバを立ててみようと思い、比較的サクッと作れそうな IPsec XAuth PSK を strongSwan で作ってみたのでメモ。

OS は Ubuntu 16.04 。


strongSwan を設定する


インストール

# apt install strongswan strongswan-plugin-xauth-generic


設定


/etc/ipsec.conf

config setup

nat_traversal=yes

conn %default
leftsubnet=0.0.0.0/0
auto=add
# クライアントに割り振られる IP の範囲
# サーバが所属するネットワークのアドレスと被らないようにする
rightsourceip=192.168.0.0/24
rightdns=8.8.8.8
dpdaction=clear

conn XAuth
leftauth=psk
rightauth=psk
rightauth2=xauth



共有鍵とユーザーの設定


/etc/ipsec.secret

: PSK "ABABABABA" # ここに共有鍵を入れる

foo : XAUTH "foo_user_password"
bar : XAUTH "bar_user_password"



ポートを開ける


  • UDP 500 (IKE)

  • UDP 4500 (IPsec NAT-T)

今回は XAuth なので必要ないが L2TP を使う場合は UDP 1701 も開ける必要がある。


Virtual IP の経路を設定する

この時点で VPN へ接続することはできるが、まだ VPN からインターネットに出ることができない。VPN クライアント(今回の場合 192.168.0.0/24)からのパケットをインターネットに繋がるネットワーク(今回の場合 eth0)に流すために NAT の設定をする。

Ubuntu の場合は ufw という iptables のラッパーが入っているのでそれを使う。


/etc/ufw/sysctl.conf

net/ipv4/ip_forward=1 # コメントアウトを外す


before.rules に NAT 設定を追加する。

今回の場合、VPN クライアントには 192.168.0.0/24 を割り当て、インターネットに繋がるインタフェースは eth0 だったので以下のように設定した。


/etc/ufw/before.rules

# NAT table rules

*nat
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -s 192.168.0.0/24 -o eth0 -j MASQUERADE
COMMIT


ufw を使っていなかった場合

サーバーの手前にファイアウォールがあったり AWS でセキュリティグループを設定していたりして ufw は有効になっていない(有効にする必要がなかった)場合では、NAT の機能は使いたいが IP 制限などはかけてほしくないので以下のように設定を変更する。


/etc/default/ufw

DEFAULT_INPUT_POLICY="ACCEPT"

DEFAULT_FORWARD_POLICY="ACCEPT"


ufw を有効にする

ここで設定をミスっていると ssh できなくなったりするので注意

# ufw enable


クライアントを設定する

Mac の場合はこんな感じで。


補足: 他の認証方式について

実ははじめは IKEv2 (IPSec EAP MSCHAPv2) で作っていたのだが、クライアントの問題で XAuth で作り直すことにした。

Android は OS 標準で IKEv2 には対応しておらずクライアントアプリを入れる必要があったり、Mac OS X El Capitan では IKEv2 が使えないバグがあったりして、まだ「とりあえず IKEv2 にしておけば良い」という世界観ではなさそう。

ちなみに L2TP/IPsec もやってみたが、XAuth ほど簡単ではないもののそれほど難しくなかった。ググッて出てくる情報も多いし L2TP でも良いと思う。


[追記1] Windows 10 だと XAuth IPsec 使えんかった\(^o^)/

Windows 10 でテストしようと思ったら選択肢が「PPTP」「L2TP/IPsec RSA」「L2TP/IPsec PSK」「SSTP」「IKEv2」しかなく、見事に爆死。

幅広い OS に標準で対応している方式を選ぶなら結局 L2TP/IPsec にするしかないようだ。


[追記2] ついでに各 OS の対応状況をまとめた

IPsec 認証方式の各 OS の対応状況 - Qiita