Ubuntu16.04でのL2TP+IPsec VPNサーバーの構築
本業とは関係ありませんが、遊び&趣味の話題です。
色々なサイトで調べて、自分なりの解決法やこれから構築する人の参考になれば
また自分の覚書も含めたメモです。
これからも、時間があれば色々上げていこうと思います。
Samba
Postgresql
など
ios10以降PPTPが使えなくなって、Openvpnを使っていましたが、興味があったので
Ubuntu16.04に入れてみました。
回線や使うマシンにもよると思いますが、うちの環境だと150M位のスループットが出ています。
独学なので間違っている部分も多々あるかもしれません。
構築環境
ルーター IP 192.168.100.1
VPNサーバー IP 192.168.100.10
WINSサーバー IP 192.168.100.20
Ubuntu16.04にStrongswan+Xl2tpdをatp-getでインストール
su #作業をしやすくするためにスーパーユーザーになります。 apt-get install -y strongswan xl2tpd
Stongswan(IPsec)の設定
ちなみにごちゃごちゃした設定ファイルが嫌いなのでコメント等は削除し
必要な項目だけを書き換えています。
ipsec.conf
不要な設定も有るかもしてないけど、ここまで追加したら接続が安定しました。
type=transport以降の設定は無くても動くが、Android以外の端末だと
不安定な状態になったので追加したら、iphoneやWin10で安定した接続が出来た。
vi /etc/ipsec.conf config setup nat_traversal=yes conn %default auto=add conn L2TP-NAT closeaction=clear dpdaction=clear type=transport rekey=no leftauth=psk rightauth=psk right=%any rightprotoport=17/%any
ipsec.secrets
事前共通キーの設定
何故か全て大文字にしないとエラーが出て起動ができなかった。
原因を探るまで4時間潰してしまいました。
vi /etc/ipsec.secrets : PSK "PASSWORD"
Xl2tpd(L2TP)の設定
xl2tpd.conf
vi /etc/xl2tpd/xl2tpd.conf [lns default] ip range = 192.168.100.50-192.168.100.60 *クライアントに配布するIPアドレスの範囲 local ip = 192.168.100.10 *サーバーのアドレス length bit = yes refuse pap = yes refuse chap = yes require authentication = yes name = l2tp pppoptfile = /etc/ppp/options.l2tpd.lns
options.l2tpd.lns
VPNからインターネットに出ない場合はDNS不要
WINS-DNSを指定することにより、Windwsのネットワークに表示されるようになる。
vi /etc/ppp/options.l2tpd.lns name l2tp refuse-pap refuse-chap refuse-mschap require-mschap-v2 nodefaultroute proxyarp ms-dns 192.168.100.1 ms-dns 8.8.8.8 ms-wins 192.168.100.20 netmask 255.255.255.0 lock nobsdcomp mtu 1410 *1280の方が安定すると思う。 mru 1410 *1280の方が安定すると思う。 logfile /var/log/xl2tpd.log
chap-secrets
接続ユーザーの設定
ユーザー名とパスワードを””で囲む
vi /etc/ppp/chap-secrets "hogehoge1" * "password1" * "hogehoge2" * "password2" *
ルーティングの設定
VPNに接続しただけでは何も出来ないので接続した端末のルーティングを設定します。
sysctl
vi /etc/sysctl.conf net.ipv4.ip_forward=1
IPマスカレードの設定
/sbin/iptables -t nat -A POSTROUTING -s 192.168.100.0/255.255.255.0 -j MASQUERADE
自動起動するためにスクリプトを作成
IPマスカレードの設定を保存する。
/sbin/iptables-save -c > /etc/iptables.rules
設定を読み込むスクリプト作成
vi /etc/network/if-pre-up.d/iptables_start #!/bin/sh /sbin/iptables-restore < /etc/iptables.rules exit 0
実行権限を与える
chmod +x
/etc/network/if-pre-up.d/iptables_start
デーモンを再起動
systemctl restart strongswan systemctl restart xl2tpd sysctl -p
ポートの開放
NATのUDP500、UDP4500、UDP1701
をVPNサーバーにフォワード