在CentOS 7 上部署 L2TP/IPSec 服务
安装strongswan和xl2tpd(yum安装需要启用epel源)
yum install strongswan xl2tpd
修改/etc/strongswan/ipsec.conf 文件,如下
config setup
conn %default
ikelifetime=60m
keylife=20m
rekeymargin=3m
keyingtries=1
conn l2tp
keyexchange=ikev1
left=%defaultroute
leftsubnet=0.0.0.0/0
leftprotoport=17/1701
authby=secret
leftfirewall=no
right=%any
rightprotoport=17/%any
type=transport
auto=add
修改/etc/strongswan/ipsec.secrets 文件(没有此文件就新建一个)
# ipsec.secrets - strongSwan IPsec secrets file
: PSK 'presharedkeys'
编辑/etc/xl2tpd/xl2tpd.conf文件的 [lns default] 部分
[lns default]
ip range = 172.16.0.100-172.16.0.199
local ip = 172.16.0.1
require chap = yes
refuse pap = yes
require authentication = yes
name = LinuxVPNserver
ppp debug = yes
pppoptfile = /etc/ppp/options.xl2tpd
ppp部分,这里只设定了chap验证部分
编辑/etc/ppp/options.xl2tpd
ms-dns 114.114.114.114
ms-dns 223.5.5.5
noccp
auth
crtscts
idle 600
mtu 1200
mru 1200
nodefaultroute
debug
lock
proxyarp
connect-delay 2500
编辑/etc/ppp/chap-secrets
# Secrets for authentication using CHAP
# client server secret IP addresses
user * password *
设置防火墙,以iptables为例
iptables -t filter -A INPUT -p esp -j ACCEPT
iptables -t filter -A INPUT -p udp --dport 500 -j ACCEPT
iptables -t filter -A INPUT -p udp --dport 1701 -j ACCEPT
iptables -t filter -A INPUT -p udp --dport 4500 -j ACCEPT
iptables -t filter -A FORWARD -s 172.16.0.0/24 -j ACCEPT
iptables -t filter -A FORWARD -d 172.16.0.0/24 -j ACCEPT
iptables -t nat -A POSTROUTING -s 172.16.0.0/24 -o enp0s3 -j MASQUERADE
开启IP转发,编辑 /etc/sysctl.conf
net.ipv4.ip_forward = 1
执行sysctl - p 使之生效
开启服务
systemctl start strongswan.service
systemctl start xl2tpd.service
systemctl enable strongswan.service
systemctl enable xl2tpd.service
客户端连接的时候选L2TP/IPSec VPN with pre-shared keys ,PSK(预共享密钥)是/etc/strongswan/ipsec.secrets中的PSK,用户名和密码在/etc/ppp/chap-secrets中
ipsec穿过nat很麻烦,如果服务器在nat后,可以只用l2tp,不启用ipsec(strongswan)。只配置xl2tp和ppp,不配置ipsec。
iptables转发过滤规则暂时没时间试验,可以设为默认允许转发。 iptables -t filter -P FORWARD ACCEPT
nat外网1701映射到内网1701
客户端连接的时候选l2tp,而不是 L2TP/IPSec VPN with pre-shared keys。不需要PSK,用户名和密码和原来一样。
如果服务器有多个网卡,/etc/xl2tpd/xl2tpd.conf 的 [global]部分指明VPN使用的网卡。
[global]
listen-addr = 10.1.1.244
/etc/strongswan/ipsec.conf的conn部分把left改成VPN网卡的地址
…………
conn l2tp
keyexchange=ikev1
left=10.1.1.244
…………