UbuntuServerでL2TPサーバーを構築するという記事を出しましたが、CentOSでの構築方法をここで説明させていただきます。

VultrというVPSサービスを使っています。Lightsailではなぜかクライアント側が繋がらなかったので諦めました。

OpenVPNは安全性で言うと、現時点では一番強力と言っても過言ではありませんが、一つ問題があります。その問題は、使いにくいところです。構築するのもVPNを使う側も証明書を入れたりと少々ややこしいのが欠点です。

L2TPサーバーはOpenVPNに比べると貧弱姓が疑われている部分がありますが、AndroidやiOSやWindowsのようなクライアントの標準機能(外部アプリやソフトなし)で簡単に繋ぐことが可能なので、おすすめです。

構築開始!

1 必要な物をインストールする

yum -y install xl2tpd libreswan

2 L2TPを設定する

L2TPサーバーの設定をしていきます。

2.1 xl2tpdのメインの設定を変更する

共通する設定

/etc/xl2tpd/xl2tpd.conf

[global]
;パスの指定
auth file = /etc/ppp/chap-secrets
;グローバルIPアドレスをここに指定する
listen-addr = xx.xx.xx.xx
[lns default]
;L2TPクライアントから割り当てられるIPアドレスの範囲を指定する
ip range = 192.168.1.128-192.168.1.254
;L2TPサーバー側の仮想ネットワークのIPアドレスを指定する
local ip = 192.168.1.99
;chap認証を拒否するのか
refuse chap = yes
;pap認証を拒否するのか
refuse pap = yes
;認証を許可するのか
require authentication = yes
;ホスト名
name = LinuxVPNserver
;デバッグを取るか、取らないか
ppp debug = yes
pppのオプションファイルの場所を指定
pppoptfile = /etc/ppp/options.xl2tpd
;おまじない
length bit = yes

2.2 options.xl2tpdの設定をする

vi /etc/ppp/options.xl2tpd

ipcp-accept-local
ipcp-accept-remote
#DNSサーバを指定
ms-dns 8.8.8.8
ms-dns 8.8.4.4
# ms-dns  192.168.1.1
# ms-dns  192.168.1.3
# ms-wins 192.168.1.2
# ms-wins 192.168.1.4
#noccp
auth
#crtscts
idle 1800
#mtuとmruの設定
mtu 1410
mru 1410
nodefaultroute
#デバッグを許可
debug
#lock
proxyarp
connect-delay 5000
#ホスト名
name xl2tpd
#pap認証を拒否
refuse-pap
#chap認証を拒否
refuse-chap
#mschap認証を拒否
refuse-mschap
#mschap-v2認証を許可
require-mschap-v2
persist
#ログファイルを指定する
logfile /var/log/xl2tpd.log

2.3 ユーザ名とパスワードを指定する

/etc/ppp/chap-secrets

ユーザをtest1、パスワードをtestと仮定します。

    # Secrets for authentication using CHAP
    # client        server  secret                  IP addresses
    test1            xl2tpd  "test"                       *

IP addressesの*部分はすべてのクライアントIPアドレスからの認証を許可するという意味です。

3 ipsecの設定をする

3.1 ipsecのコンフィグを書いていく

/etc/ipsec.d/l2tp-ipsec.conf

conn L2TP-PSK-NAT
  dpddelay=10
  dpdtimeout=20
  dpdaction=clear
  rightsubnet=0.0.0.0/0
  forceencaps=yes
  also=L2TP-PSK-noNAT

conn L2TP-PSK-noNAT
  authby=secret
  pfs=no
  auto=add
  keyingtries=3
  rekey=no
  ikelifetime=8h
  keylife=1h
  type=transport
  left=%defaultroute
  leftprotoport=17/1701
  right=%any
  rightprotoport=17/%any

left=%defaultroute とすることで、自動的にサーバーIPを調べてくれます。

3.2 事前共有鍵を設定する

ここでは例として事前共有鍵をtestとします。

/etc/ipsec.d/default.secrets

: PSK "test"

4 Firewallの設定

開放するポートがUDPの4500と1701なので、開けていきます。IPマスカレードが必要になってくるので、firewall側で設定しておきます。

念のためにサービスのipsecもファイアウォールの除外設定に追加しておきます。

firewall-cmd --add-service=ipsec --permanent
firewall-cmd --add-port=4500/udp --permanent
firewall-cmd --add-port=1701/udp --permanent
firewall-cmd --add-masquerade --permanent
firewall-cmd --reload

5 サービスの開始

systemctl start xl2tpd
systemctl enable xl2tpd

これで完成です。

まとめ

思っている以上に簡単に構築することができました。

IPsec側の設定がよくわかっていないので、分かり次第、こちらに追加していく予定です。

自宅とはopenvpnで接続しているので、これL2TPでアクセスされたクライアント側から自宅のサーバーにアクセスできるようになりました。

みなさんも、楽しいVPNライフを!