Raspberry PiでL2TPのVPNサーバーを立ててみた

VPSを解約してしまったので以前の立てたOpenVPNは使えなくなってしまいました。
そこで、今回はL2TPとIPsecを使ったVPNサーバーを立てることにしたのです。使うのはRaspberry Pi Bモデルのメモリ512MB版です。

以下設定メモ

パッケージ導入

まずはopenswanとxl2tpdのパッケージを導入します。

# apt-get install openswan xl2tpd

パケットフォワードの設定

sysctl.confを編集してパケットのフォワードを許可する設定をして、内容を反映させます。

# nano -w /etc/sysctl.conf
net.ipv4.ip_forward = 1
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv4.conf.eth0.send_redirects = 0
net.ipv4.conf.eth0.accept_redirects = 0
net.ipv4.conf.lo.send_redirects = 0
net.ipv4.conf.lo.accept_redirects = 0
# sysctl -p

IPsecの設定

続いてIPsecを設定します。

# nano -w /etc/ipsec.conf

内容はprotostack=netkeyとすることと末尾に

include /etc/ipsec.d/*.conf

を追加しました。
今回は設定ファイルを外部に持たせていますが、直接ipsec.confに書き込んでもいいようです。

設定ファイルを作成して編集します。

# touch /etc/ipsec.d/l2tp-ipsec.conf
# nano -w /etc/ipsec.d/l2tp-ipsec.conf
conn L2TP-PSK-NAT
    rightsubnet=0.0.0.0/0
    also=L2TP-PSK-noNAT

conn L2TP-PSK-noNAT
    forceencaps=yes
    authby=secret
    pfs=no
    auto=add
    keyingtries=3
    ike=aes-sha1;modp3072
    phase2=esp
    phase2alg=aes-sha1;modp3072
    rekey=no
    ikelifetime=8h
    keylife=1h
    type=transport
    left=%サーバーのIPアドレス%
    leftprotoport=17/1701
    right=%any
    rightprotoport=17/%any
    dpddelay=40
    dpdtimeout=130
    dpdaction=clear


ipsec.secretsに事前共有鍵を設定します。

# nano -w /etc/ipsec.secrets
%サーバーのIPアドレス% %any: PSK "%事前共有鍵%"


ここでIPsecを再起動して動作を確認します。

# /etc/init.d/ipsec restart
# ipsec verify

Failedが出なければ大丈夫なようです。

xl2tpdの設定

xl2tpdの設定ファイルを編集します。
最初は[global]と[lns default]もコメントアウトされていますが、この2行のコメントアウトも解除しないとちゃんと動作しないかもしれません。

# nano -w /etc/xl2tpd/xl2tpd.conf
[global]
debug avp = yes
debug network = yes
debug packet = yes
debug state = yes
debug tunnel = yes

[lns default]
ip range = %クライアントに割り当てるIPアドレスの範囲%
local ip = %サーバーのIPアドレス%
require chap = yes
require authentication = yes
name = %サーバーのホストネーム%
pppoptfile = /etc/ppp/options.xl2tpd.lns
length bit = yes

指定したpppoptfileを編集します。

# nano -w /etc/ppp/options.xl2tpd.lns
name rpi2
refuse-pap
refuse-chap
refuse-mschap
require-mschap-v2
ms-dns %DNSサーバーのIPアドレス%
proxyarp
nodefaultroute
lock
nobsdcomp
mtu 1280
mru 1280

MTUとMRUは値を変える事で接続のスピードが変わるかもしれません。


ユーザー認証に使うchapの設定ファイルを編集します。

# nano -w /etc/ppp/chap-secrets
%ユーザーID%      *       %パスワード%              *


ここでxl2tpdを再起動します。

# /etc/init.d/xl2tpd restart

スタートした旨表示されればOKです。

その他

xl2tpdとipsec自動起動させる設定をします。

# update-rc.d xl2tpd defaults
# update-rc.d ipsec defaults

ここまで来たらルーターUDP/500、UDP/4500をL2TPのサーバーに向けてポートを開くなり、VPNパススルーを使うなりの設定をすればOKのはずです。
この設定で自宅のRaspberry Piを設定し、会社のWindows7と持ち歩いてるiPhone5でRaspberry Piへの接続に成功しました。
後はMacBook Airも外部から自宅にVPN接続できるようにすれば各種公共無線LANを使ってインターネットに接続するときに今までよりは安全性が高くなった、かもしれません。