LoginSignup
15

More than 5 years have passed since last update.

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

Last updated at Posted at 2016-08-09

手軽に 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

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
15