LinuxマシンをどこぞのVPNサーバーに接続したくてこれをやった。CentOS6用なのでCentOS7以降の場合はiptablesのくだりやネットワークサービス再起動のくだりが変わってくるかと。
基本情報
OS | CentOS release 6.8 (Final) |
IPSecソフトウェア | Libreswan 3.15 (netkey) on 2.6.32-642.el6.i686 |
L2TPソフトウェア | xl2tpd-1.3.8 |
VPN接続情報
Target | 接続先IP |
PSK | 事前共有鍵 |
Account01 | L2TPユーザー名 |
Password01 | L2TPユーザーに対応するパスワード |
ソフトウェアインストール
yum -y install openswan
rpm -Uvh https://ftp.yz.yamagata-u.ac.jp/pub/linux/fedora-projects/epel/6/i386/epel-release-6-8.noarch.rpm
yum -y install xl2tpd
ipsecコンフィグ調整
既存コンフィグバックアップ
cp /etc/ipsec.conf /etc/ipsec.conf.org
IPSecコンフィグ修正(以下2行のみ記述)
config setup
include /etc/ipsec.d/*.conf
IPSec事前共有鍵設定修正
[自身がVPN接続先と通信する際に使うローカルIP] [接続先 IP] : PSK "事前共有鍵"
IPSec接続設定修正
vi /etc/ipsec.d/connection.conf
IPSec接続設定内容(2行目(authby行)以下は行頭にタブが必要)
conn PEER_L2TP
authby=secret
pfs=no
rekey=no
keyingtries=3
type=transport
# left=%defaultroute
left=[自身がVPN接続先と通信する際に使うローカルIP]
leftprotoport=17/1701
right=接続先 IP
rightprotoport=17/1701
auto=add
L2TP関連コンフィグ修正・新規作成
既存コンフィグバックアップ
cp /etc/xl2tpd/xl2tpd.conf /etc/xl2tpd/xl2tpd.conf.org
既存コンフィグ削除&新規コンフィグ作成
rm -rf /etc/xl2tpd/xl2tpd.conf ; vi /etc/xl2tpd/xl2tpd.conf
新規コンフィグ内容
lns = [接続先 IP]
require chap = yes
refuse pap = yes
require authentication = yes
ppp debug = yes
pppoptfile = /etc/ppp/options.xl2tpd.conn-1
length bit = yes
redial = yes
redial timeout = 10
max redials = 3
PPP接続設定ファイル作成
vi /etc/ppp/options.xl2tpd.conn-1
PPP接続設定ファイル内容
name [L2TPユーザ名]
noauth
crtscts
mtu 1410
mru 1410
nodefaultroute
lock
proxyarp
logfile /var/log/xl2tpd.conn-1.log
PPP接続用認証ファイル作成
echo '[L2TPユーザ名] * [L2TPユーザ名に対応するPW] *' >> /etc/ppp/chap-secrets
Linuxのネットワーク設定修正
ルーティングの有効化
for line in `ls /proc/sys/net/ipv4/conf/*/send_redirects`; do echo 0 > $line ;done
for line in `ls /proc/sys/net/ipv4/conf/*/rp_filter`; do echo 0 > $line ;done
for line in `ls /proc/sys/net/ipv4/conf/*/accept_redirects`; do echo 0 > $line ;done
echo "net.ipv4.ip_forward=1" > /etc/sysctl.conf
sysctl -p
ここまできたらL2TP over IPsec クライアントとしての設定はほぼ完成。ここで、VPNクライアント兼NATルータになるLinuxのデフォルトルートを削除しておく。なぜならLinuxがVPN接続した後のLinuxとしてのデフォルトルートをVPN接続先にしておきたいから。
デフォルトゲートウェイ削除
ネットワークアダプタのコンフィグ修正
vi /etc/sysconfig/network-scripts/ifcfg-[任意のi/f名称]
ネットワークサービス再起動
/etc/init.d/network restart # CentOS6
systemctl restart network # CentOS7
VPN接続用スクリプト作成
touch startVpn.sh
chmod 755 startVpn.sh
vi startVpn.sh
スクリプト内容
service ipsec stop
service xl2tpd stop
service ipsec start
service xl2tpd start
sleep 5
ip route add [接続先 IP]/32 via [Linux所属NWのゲートウェイ]
echo "c L2TP1" > /var/run/xl2tpd/l2tp-control
ipsec auto --up PEER_L2TP
sleep 5
route add -net 0.0.0.0 netmask 0.0.0.0 dev ppp0
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
iptables -A FORWARD -j ACCEPT
VPN切断用スクリプト作成
touch stopVpn.sh
chmod 755 stopVpn.sh
vi stopVpn.sh
スクリプト内容
echo "d L2TP1" > /var/run/xl2tpd/l2tp-control
ipsec auto --down PEER_L2TP
sleep 3
service ipsec stop
service xl2tpd stop
iptables -t nat -D POSTROUTING -o ppp0 -j MASQUERADE
iptables -D FORWARD -j ACCEPT
ip route del [接続先 IP]/32 via [Linux所属NWのゲートウェイ]
iptables全開放
設定ファイル修正
vi /etc/sysconfig/iptables
設定ファイル内容
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
COMMIT
サービス再起動
/etc/init.d/iptables restart
ルーター化
状態確認
grep "net.ipv4.ip_forward" /etc/sysctl.conf
設定変更
sed -i -e "s/net\.ipv4\.ip_forward = 0/net.ipv4.ip_forward = 1/" /etc/sysctl.conf
もっかい確認
grep "net.ipv4.ip_forward" /etc/sysctl.conf
OS起動時にルーター化させる
vi /etc/rc.d/rc.local
/etc/rc.d/rc.localファイル内容
#!/bin/sh
echo 1 >/proc/sys/net/ipv4/ip_forward
デフォルトゲートウェイ削除
ネットワーク設定ファイル修正
vi /etc/sysconfig/network
ファイル内容
HOSTNAME=[任意]
FORWARD_IPV4=yes
GATEWAY=
GATEWAYDEV=
APIPA無効化
echo 'NOZEROCONF=yes' >> /etc/sysconfig/network
ネットワークサービス再起動
/etc/init.d/network restart
VPN接続手順
bash startVpn.sh
VPN切断手順
bash stopVpn.sh