CentOS 7でL2TP/IPsecのVPNサーバを作った話
前提
- VPNサーバーの構築方法と、接続方法について解説しています
- VPNの種類は「事前共有キーを使った L2TP/IPsec」です
サーバー
OS: CentOS 7
さくらのVPS を使って構築しました
512MBのプランで問題なく動いています
クライアント
OS: Windows10
(Android 9でも接続確認しました)
ざっくりL2TP/IPsecの解説
L2TP (Layer 2 Tunneling Protocol)
VPNでデータを送受信するために使われるプロトコルです。
「Tunneling」と入ってある通り、2つの拠点をトンネルで繋げるようなイメージです。
使用するポートのデフォルトはUDPの1701です
IPsec (Security Architecture for IP)
暗号化して通信をするためのプロトコルです。
L2TPはトンネルを作ってくれましたが、通信内容は暗号化されていないので、
このIPsecと組み合わせて使われることが多いです。
使用するポートのデフォルトはUDPの500,4500です
この組み合わせをL2TP/IPsecと呼びます。
事前準備
インストール
epelリポジトリが入っていなかったら追加してください
$ sudo yum install epel-release $ sudo yum update
パッケージ
$ sudo yum install xl2tpd libreswan
バックアップ
これから
- /etc/xl2tpd/xl2tpd.conf
- /etc/ppp/options.xl2tpd
- /etc/ppp/chap-secrets
- /etc/ipsec.conf
を編集するので、これらのファイルのバックアップを取っておいてください。
L2TPの設定
/etc/xl2tpd/xl2tpd.conf
[global]
listen-addr = ●●●.●●●.●●●.●●● (サーバーのグローバルIP)
(略)
[lns default]
ip range = 192.168.1.128-192.168.1.254
local ip = 192.168.1.99
require chap = yes
refuse pap = yes
require authentication = yes
name = xl2tpd
ppp debug = yes
pppoptfile = /etc/ppp/options.xl2tpd
length bit = yes
ip range: 接続したクライアントに割り振るローカルIPの幅を決めます
local ip: VPNサーバーに割り当てるIPです
複雑なネットワーク構成を作る必要がなければ、そこまで考える必要は無いです。
local ipがip rangeの中に入らないようにだけ気を付けましょう。
/etc/ppp/options.xl2tpd
noccp auth #crtscts コメントアウト idle 1800 mtu 1410 mru 1410 nodefaultroute debug #lock コメントアウト proxyarp connect-delay 5000 #追加 name xl2tpd logfile /var/log/xl2tpd.log
※最新のバージョンではcrtsctsとlockをコメントしないとうまく動作しません
mtuとmruはデフォルト値から変更していませんが、私は問題なく接続できています。
接続状況が不安定な場合(途中で切れるなど)はこの値を疑ってください
$ sudo touch /var/log/xl2tpd.log
ログファイルの作成もしておいてください
ユーザー名、パスワードの設定
/etc/ppp/chap-secrets
# Secrets for authentication using CHAP # client server secret IP addresses "ユーザー名" "xl2tpd" "パスワード" *
ユーザー名とパスワードは
Windowsの画面でいう
ここのユーザー名とパスワードにあたります。
IPsecの設定
/etc/ipsec.conf
include /etc/ipsec.d/*.conf
コメントアウトを外す(最初から外れているかも)
ipsec.d以下にconfファイルを作成します
touch /etc/ipsec.d/l2tp-ipsec.conf
/etc/ipsec.d/l2tp-ipsec.conf
conn L2TP-PSK-NAT rightsubnet=0.0.0.0/0 dpddelay=10 dpdtimeout=20 dpdaction=clear 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=●●●.●●●.●●●.●●● (サーバーのグローバルIP) leftprotoport=17/1701 right=%any rightprotoport=17/%any
事前共有キーの作成
$ sudo touch /etc/ipsec.d/default.secrets
/etc/ipsec.d/default.secrets
: PSK "事前共有キー"
事前共有キーは
ここです。行頭のコロンはしっかり付けてください。
カーネルパラメータの設定
$ sudo touch /etc/sysctl.d/60-ipsec.conf
ipsecに関する変更を書くconfを作成
/etc/sysctl.d/60-ipsec.conf
net.ipv4.ip_forward = 1 net.ipv4.conf.all.accept_redirects = 0 net.ipv4.conf.all.rp_filter = 0 net.ipv4.conf.all.send_redirects = 0 net.ipv4.conf.default.accept_redirects = 0 net.ipv4.conf.default.rp_filter = 0 net.ipv4.conf.default.send_redirects = 0 net.ipv4.conf.eth0.accept_redirects = 0 net.ipv4.conf.eth0.rp_filter = 0 net.ipv4.conf.eth0.send_redirects = 0 net.ipv4.conf.lo.accept_redirects = 0 net.ipv4.conf.lo.rp_filter = 0 net.ipv4.conf.lo.send_redirects = 0
「eth0」はネットワークアダプタ名です。
環境によって名前が違う可能性があるのでifconfigとかで確認して変更してください
$ sudo sysctl --system
で変更を反映させます。
ファイアウォールの設定
$ sudo firewall-cmd --permanent --add-service=ipsec $ sudo firewall-cmd --permanent --add-port=1701/udp $ sudo firewall-cmd --permanent --add-port=4500/udp $ sudo firewall-cmd --permanent --add-masquerade $ sudo firewall-cmd --reload
起動
$ sudo systemctl enable ipsec $ sudo systemctl enable xl2tpd $ sudo systemctl restart ipsec $ sudo systemctl restart xl2tpd
パケットフィルタの設定
パケットフィルタの設定をしている方は、新たにポートを追加する必要があります。
さくらVPSの管理画面から「パケットフィルタ」を選択します
UDPの500,1701,4500を追加して
「設定を保存する」をクリックしてください。
Windowsから接続
VPNの追加
「設定」→「ネットワークとインターネット」
もしくはタスクバーのネットワークアイコンを右クリック→「ネットワークとインターネットの設定を開く」
「VPN」→「VPNを追加する」
(画像ではもう追加されていますが、気にしないでください)
VPN プロバイダー:「Windows(ビルドイン)」に変更
接続名: 覚えやすい名前
サーバー名またはアドレス: 設定したサーバーのipアドレス
VPNの種類:「事前共有キーを使った L2TP/IPsec」に変更
事前共有キー: default.secretsで設定したキー
サインイン情報の種類: 「ユーザー名とパスワード」に変更
ユーザー名(オプション): chap-secretsで設定したもの
パスワード(オプション): chap-secretsで設定したもの
で保存します。
プロパティ
VPNが作成されるとネットワーク接続のところに表示されるので
そこからプロパティを開きます
「セキュリティ」タブの
「チャレンジ ハンドシェイク認証プロトコルにチェック」を付ける
で、設定は完了です。
繋がる
作成されたVPNを選択して「接続」をクリック
または、タスクバーのネットワークアイコンにVPNが追加されるので、そこから「接続」をクリック
で繋がるはずです。
接続に失敗する場合は
1.サーバーの設定(ポートの開放、ipsec、xl2tpdが正常に起動しているか)
2.自宅のルーターの設定(VPNに対応していない、もしくは設定が必要な機種があります)
を疑ってください
接続が不安定な場合は
1.MTU、MRUの数値があっていない
2.サーバーが物理的に遠い(海外のサーバーを使用している)
などが考えられます
それでは、よいVPNライフを!