注:2010/1更新: MacのOS”Mojave”ではうまくIPSec通信できないことが分かりました。
もしかしたらどこか設定がよくないかもです。
Debian version 9 ( Stretch )でVPNサーバーを構築しました。L2TP over IPSecのVPNです。
VPSサーバーはローカルLAN内に設置しているので、ルーターのポートフォワーディングの設定もしました。
概略図
IPSecの設定は、とにかく設定しないといけないファイルが多くてめげそうになりました。
しかも一発で動かないし…
これだけのファイルについて設定します。
インストール
# apt-get install strongswan xl2tpd
strongswanは、openswanの後継?のIPSecパッケージなのかな?
なのでopenswanよりもstrongswanを使った方がいいみたい。
/etc/xl2tpd/xl2tpd.conf
1 2 3 4 5 6 7 8 9 10 11 12 |
[global] ; Global parameters: auth file = /etc/ppp/chap-secrets ; * Where our challenge secrets are [lns default] ; Our fallthrough LNS definition ip range = 192.168.0.141-192.168.0.149 ; * Allocate from this IP range local ip = 192.168.0.101 ; * Our local IP to use length bit = yes ; * Use length bit in payload? refuse pap = yes ; * Refuse PAP authentication refuse chap = yes ; * Refuse CHAP authentication require authentication = yes ; * Require peer to authenticate name = l2tp ; * Report this as our hostname pppoptfile = /etc/ppp/options.l2tpd.lns ; * ppp options file |
ip range でVPS接続するクライアントに割り当てるIPアドレス帯を設定します。
local ip は自サーバーのIPアドレスです。
/etc/ppp/chap-secrets
1 2 |
# client server secret IP addresses hogeuser * hogepass * |
VPN接続をするときのユーザー/パスワードを設定します。
上記はユーザー”hogeuser”、パスワード”hogepass”で接続できるようにする例です。
ファイルの所有権は root 、パーミッションは 600にしておいた方が良い。
/etc/ppp/options.l2tpd.lns
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
name l2tp ipcp-accept-local ipcp-accept-remote refuse-pap refuse-chap refuse-mschap require-mschap-v2 nodefaultroute ms-dns 8.8.8.8 nobsdcomp mtu 1426 mru 1426 logfile /var/log/xl2tpd.log netmask 255.255.255.0 persist |
ms-dnsはDNSサーバーのIPアドレスを設定します。
mtuはサーバーによって異なりますので各自最適な値を設定してください。
ここを参考にしました。Linux – MTU 最適値の導出!
logfileで指定したログファイルをtouchコマンドで作成しておきます。
# touch /var/log/xl2tpd.log
/etc/ipsec.conf
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
config setup conn L2TP-NAT rightsubnet=0.0.0.0/0 also=L2TP-noNAT conn L2TP-noNAT forceencaps=yes authby=secret auto=add keyexchange=ikev1 keyingtries=3 ike=aes128-sha1-modp3072 esp=aes128-sha1-modp3072 rekey=no ikelifetime=8h lifetime=1h type=transport left=192.168.0.101 leftprotoport=17/1701 right=%any rightprotoport=17/%any dpddelay=40 dpdtimeout=130 dpdaction=clear |
left=192.168.0.101 は自サーバーのIPアドレスを設定してください。
/etc/ipsec.secrets
1 |
: PSK "AAA" |
この例では“AAA”というシークレットキーを定義しています。
ファイルの所有権は root 、パーミッションは 600にしておいた方が良い。
/etc/strongswan.conf
1 2 3 4 5 6 7 8 |
charon { load_modular = yes plugins { include strongswan.d/charon/*.conf } dns1=8.8.8.8 dns2=4.4.4.4 } |
デフォルトの状態ではもともとなかった記述dns1とdns2の2行を追加しました。
/etc/sysctl.conf
カーネルパラメータの設定です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
# 修正するもの net.ipv4.ip_forward = 1 # 追記するもの net.core.xfrm_larval_drop = 1 net.ipv4.conf.all.send_redirects = 0 net.ipv4.conf.default.send_redirects = 0 net.ipv4.conf.eth0.send_redirects = 0 net.ipv4.conf.eth1.send_redirects = 0 net.ipv4.conf.lo.send_redirects = 0 net.ipv4.conf.all.accept_redirects = 0 net.ipv4.conf.default.accept_redirects = 0 net.ipv4.conf.eth0.accept_redirects = 0 net.ipv4.conf.eth1.accept_redirects = 0 net.ipv4.conf.lo.accept_redirects = 0 net.ipv4.conf.all.rp_filter = 0 net.ipv4.conf.default.rp_filter = 0 net.ipv4.conf.eth0.rp_filter = 0 net.ipv4.conf.lo.rp_filter = 0 |
eth0とかeth1とかの設定は必要なのかなぁ…よく分からんけどこれで動いたので。
ちなみに私のネットワーク環境はeth0の代わりにbr0とかbr1とかの名前になっててこれにIPアドレスが紐ついているんで、実際は上記eth0の記述は要らないのかも知れません。
上記の設定の反映は
# sysctl -p
コマンドで行ないます。
サービスの起動
# /etc/init.d/ipsec start
# /etc/init.d/xl2tpd start
以下のコマンドでもいいかも知れない。(違いがよく分かってない)
# systemctl start strongswan.service
# systemctl start xl2tpd.service
NATの設定
ルータのポートマッピング設定は以下のポートをVPNサーバーへ向けることで通信できました。
udp 500 (IKE)
udp 1701 (L2TPパケットの最初の待ち受け)
udp 4500 (IPsec NAT-T)
udp 50 (ESP)
tcp 50 (ESP)
ログで確認
# journalctl -u strongswan -f -l
以下のログも使えます。
/var/log/xl2tpd.log
/var/log/syslog
また、xl2tpdを
# /usr/sbin/xl2tpd -D
として起動すると詳細ログが出ます。
僕は、設定エラーをsyslogのログで指摘されて、それを修正したらうまく動くようになりました。
# ipsec status
コマンドは、見方がよく分からんかったです。
# ipsec verify
コマンドは、「そんなコマンドは無い」ていうエラーが出ました。(strongswanじゃなくてopenswanのコマンド?)
クライアントの設定
iPhone
iPhone X iOS version 11.1 での設定
タイプは”L2TP”で設定します。
Mac OS X (Sierra)
VPN Typeは”L2TP over IPSec” で設定します。
参考にした記事
xl2tpd + strongswan でVPN構築し、iPhone6から接続 (今のところ同一LAN以外では接続できない。) – Qiita
strongSwan + xl2tpd でVPN(L2TP/IPsec)を構築する – Qiita
linuxでVPNサーバ – Qiita
Debian GNU/Linux Wheezy で StrongSwan にてL2TP / IPsec サーバ設定の備忘録 | Open the Next
DebianでL2TP/IPSecなVPNサーバ | ねころくぶろぐ
備考
そもそも、YamahaルータNVR500にPPTPのVPN機能が備わっていたのでそれを使っていたのですが、2016年にリリースされたMac OS 10.12(Sierra)からPPTPはサポートされなくなったので、仕方なくL2TP oveer IPsecでVPNできるようにしました。