【Linux】CentOS7でVPN(L2TP/IPsec)サーバーを構築してみる

今までUbuntuにPPTPでVPNサーバーを構築していたのですが
iPhone(ios 10)からPPTPが使えなくなったので
勉強がてらにOSから仕込み直すことに

今回は
【CentOS7 PPTPを辞めてL2TP/IPSecに変更する】
を参考にさせて頂きました。
ありがとうございました。

作業はすべてrootで行ってます。

パッケージのインストール

L2TP/IPsecの環境を作るには、3つのパッケージが必要みたいス
そのうち「xl2tpd」というパッケージは「EPEL」からインストールします。
EPELのリポジトリのインストール

# yum install epel-release



xl2tpdパッケージの情報を表示する

# yum info xl2tpd --enablerepo=epel
読み込んだプラグイン:fastestmirror
epel/x86_64/metalink                                                                                                                                    | 4.2 kB  00:00:00     
epel                                                                                                                                                    | 4.3 kB  00:00:00     
(1/3): epel/x86_64/group_gz                                                                                                                             | 170 kB  00:00:00     
(2/3): epel/x86_64/updateinfo                                                                                                                           | 625 kB  00:00:00     
(3/3): epel/x86_64/primary_db                                                                                                                           | 4.3 MB  00:00:19     
Loading mirror speeds from cached hostfile
 * base: ftp.tsukuba.wide.ad.jp
 * epel: ftp.riken.jp
 * extras: ftp.tsukuba.wide.ad.jp
 * updates: ftp.iij.ad.jp
 :
 :



xl2tpdのインストール

# yum -y install xl2tpd --enablerepo=epel
読み込んだプラグイン:fastestmirror
Loading mirror speeds from cached hostfile
 * base: ftp.tsukuba.wide.ad.jp
 * epel: ftp.riken.jp
 * extras: ftp.tsukuba.wide.ad.jp
 * updates: ftp.iij.ad.jp
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> パッケージ xl2tpd.x86_64 0:1.3.6-8.el7 を インストール
--> 依存性解決を終了しました。
 :
 :



libreswanパッケージの情報を表示する

# yum info libreswan
読み込んだプラグイン:fastestmirror
Loading mirror speeds from cached hostfile
 * base: ftp.tsukuba.wide.ad.jp
 * epel: ftp.riken.jp
 * extras: ftp.tsukuba.wide.ad.jp
 * updates: ftp.iij.ad.jp
利用可能なパッケージ
名前                : libreswan
 :
 :



libreswanのインストール

# yum -y install libreswan
読み込んだプラグイン:fastestmirror
Loading mirror speeds from cached hostfile
 * base: ftp.tsukuba.wide.ad.jp
 * epel: ftp.riken.jp
 * extras: ftp.tsukuba.wide.ad.jp
 * updates: ftp.iij.ad.jp
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> パッケージ libreswan.x86_64 0:3.15-5.el7_1 を インストール
 :
 :



lsofパッケージの情報を表示する

#  yum info lsof
読み込んだプラグイン:fastestmirror
Loading mirror speeds from cached hostfile
 * base: ftp.tsukuba.wide.ad.jp
 * epel: ftp.riken.jp
 * extras: ftp.tsukuba.wide.ad.jp
 * updates: ftp.iij.ad.jp
利用可能なパッケージ
名前                : lsof
 :
 :



lsofのインストール

# yum -y install lsof
読み込んだプラグイン:fastestmirror
Loading mirror speeds from cached hostfile
 * base: ftp.tsukuba.wide.ad.jp
 * epel: ftp.riken.jp
 * extras: ftp.tsukuba.wide.ad.jp
 * updates: ftp.iij.ad.jp
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> パッケージ lsof.x86_64 0:4.87-4.el7 を インストール
--> 依存性解決を終了しました。


L2TPの設定

以下の設定ファイルを弄る必要があるみたいです。

  1. xl2tpd.conf
  2. options.xl2tpd
  3. chap-secrets

順番に設定して行きたいと思います。


1.xl2tpd.confの設定

# cd /etc/xl2tpd/
# cp -p ./xl2tpd.conf ./xl2tpd.conf.original
# vim ./xl2tpd.conf
[global]
; 認証情報の書かれたファイルを指定する
auth file = /etc/ppp/chap-secrets

[lns default]
; リモート接続のクライアントに割り振るIPアドレスの範囲を指定する
ip range = 192.168.0.102-192.168.0.103
; リモート接続のサーバに割り振るIPアドレス(xl2tpd自身のIPアドレス)を指定する
local ip = 192.168.0.100
require chap = yes
refuse pap = yes
require authentication = yes
name = xl2tpd
ppp debug = yes
; pppdの設定ファイルのパスを指定する
pppoptfile = /etc/ppp/options.xl2tpd
; L2TPパケットのペイロード(実データ)にあるビット長ヘッダーを確認する
length bit = yes

2.options.xl2tpdの設定

# cd /etc/ppp/
# cp -p /etc/ppp/options.xl2tpd /etc/ppp/options.xl2tpd.original
# vim /etc/ppp/options.xl2tpd
ipcp-accept-local
ipcp-accept-remote
# リモート側にDNSアドレスを提供する
ms-dns 192.168.0.1
# ms-dns  192.168.1.1
# ms-dns  192.168.1.3
# ms-wins 192.168.1.2
# ms-wins 192.168.1.4
# CCP(圧縮制御プロトコル)を無効にする
noccp
# リモート側に認証を求める
auth
# ハードウェアフロー制御の設定
crtscts
# IPパケットの無通信時間(秒)を過ぎた時に切断する
idle 1800
# MTU(最大転送単位)値を指定する(サンプルの値をそのまま指定)
mtu 1410
# MRU(最大受信単位)値を指定する(サンプルの値をそのまま指定)
mru 1410
# リモート側接続をデフォルトゲートウェイとして経路追加しない
nodefaultroute
# シスログに接続のデバッグ情報を出力する
debug
lock
# 代理ARPを有効にする(リモート接続のIPがローカルネットワークにあるように見える)
proxyarp
# 接続スクリプト完了後からppp通信受けとりまでの待機時間をミリ秒で設定
connect-delay 5000
# 認証のために使用するローカルシステム名(何でも良いが認証情報ファイルで合わせる必要あり)を設定する
name xl2tpd
# 認証でのPAPは拒否する
refuse-pap
# 認証でのCHAPは拒否する
refuse-chap
# 認証でのMS-CHAPは拒否する
refuse-mschap
# 認証でのMS-CHAPv2を許可する
require-mschap-v2

3.chap-secretsの設定
“ユーザー名”と”パスワード”は任意の値を設定してください
# ダブルクォーテーションの付与は必要です。

# vim /etc/ppp/chap-secrets
# Secrets for authentication using CHAP
# client        server  secret                  IP addresses
"ユーザー名" "xl2tpd" "パスワード" *




IPSecの設定

IPSecの設定では以下を弄る必要があるみたいです。

  1. ipsec.conf
  2. l2tp-psk.conf
  3. default.secrets

1.ipsec.confの設定

# cd /etc/
# cp -p ./ipsec.conf /etc/ipsec.conf.original
# vim /etc/ipsec.conf
config setup
        protostack=netkey
        nat_traversal=yes
        dumpdir=/var/run/pluto/
        virtual_private=%v4:10.0.0.0/8,%v4:192.168.0.0/16,%v4:172.16.0.0/12,%v4:25.0.0.0/8,%v4:100.64.0.0/10,%v6:fd00::/8,%v6:fe80::/10
include /etc/ipsec.d/*.conf

2.l2tp-psk.confの設定

# cd /etc/ipsec.d/
# vim l2tp-psk.conf
conn L2TP-PSK-LEFT
        # left側(VPNクライアント)のサブネット 
        leftsubnet=0.0.0.0/0
        # 10秒間隔(iphoneの再接続対応)
        dpddelay=10
        # 30秒で応答がなければタイムアウト(iphoneの再接続対応)
        dpdtimeout=30
        # タイムアウトで接続情報をクリア(iphoneの再接続対応)
        dpdaction=clear
        # ESPを強制的にカプセル化するかどうか
        forceencaps=yes
        # left側(VPNクライアント)のIPアドレス(何でもこい)
        left=%any
        # left側(VPNクライアント)のプロトコル17(UDP)でポート番号(何でもこい)
        leftprotoport=17/%any
        # インクルードみたいな感じ
        also=L2TP-PSK-RIGHT

conn L2TP-PSK-RIGHT
        # 認証方式は共通鍵方式
        authby=secret
        # PFS(Perfect Forward Security)は相手側がIKEv1が使えることが前提となるため
        pfs=no
        # 接続待ち状態
        auto=add
        # 接続を3回までリトライ
        keyingtries=3
        # ホスト間のIPSec-VPNなので
        type=transport
        # right側(VPNサーバ)のIPアドレス
        right=192.168.0.100
        # right側(VPNサーバ)のプロトコル17(UDP)でポート番号(1701)
        rightprotoport=17/1701

3.default.secretsの設定
# ダブルクォーテーションの付与は必要です。

# cd /etc/ipsec.d/
# vim default.secrets
: PSK "パスワード"




カーネルパラメーターの設定

いろいろ怒られて今の形に追いつきました。
[enp12s0]の部分は個人によって変わってくると思います。

#sysctl -a > /tmp/sysctl_a.20161016.old
# vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.all.rp_filter = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.default.rp_filter = 0
net.ipv4.conf.enp12s0.accept_redirects = 0
net.ipv4.conf.enp12s0.send_redirects = 0
net.ipv4.conf.enp12s0.rp_filter = 0
net.ipv4.conf.lo.accept_redirects = 0
net.ipv4.conf.lo.send_redirects = 0
net.ipv4.conf.lo.rp_filter = 0
net.ipv4.conf.ip_vti0.rp_filter = 0

設定の反映

# sysctl -p




締め

# systemctl enable xl2tpd
# systemctl enable ipsec
# systemctl restart ipsec
# systemctl restart xl2tpd





長かった…

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*