使用openswan搭建l2tp/ipsec服务

使用方法

在需要使用服务的终端上,新建VPN配置,类型选择L2TP。

  • 描述 – 随便填写
  • 服务器 – 下文中的host_ip
  • 账户 – 下文中的username
  • 密码 – 下文中的password
  • 密钥 – 下文中的key

安装

安装openswan和xl2tpd,ppp(其中有些系统可能已经装好):

1
yum install -y openswan ppp xl2tpd

配置ipsec

新建ipsec配置文件/etc/ipsec.d/l2tp.conf,并确保根配置文件/etc/ipsec.conf已经include之:

/etc/ipsec.d/l2tp.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
conn L2TP-PSK-NAT
rightsubnet=vhost:%priv
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=<host_ip>
leftid=<host_ip>
leftprotoport=17/1701
right=%any
rightprotoport=17/%any
dpddelay=40
dpdtimeout=130
dpdaction=clear

注意替换其中的<host_ip>为公网ip,例如:123.123.123.123。

配置ppp

编辑ppp配置文件/etc/ppp/options.xl2tpd:

/etc/ppp/options.xl2tpd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
ipcp-accept-local
ipcp-accept-remote
ms-dns 8.8.8.8noccp
auth
# crtscts
idle 1800
mtu 1410
mru 1410
# nodefaultroute
debug
# lock
proxyarp
connect-delay 5000
require-mschap-v2
asyncmap 0
hide-password
name l2tpd

配置l2tp

编辑l2tp配置文件/etc/xl2tpd/xl2tpd.conf,修改global部分:

/etc/xl2tpd/xl2tpd.conf
1
2
3
listen-addr = <host_ip>
auth file = /etc/ppp/chap-secrets
port = 1701

注意替换其中的<host_ip>为公网ip,例如:123.123.123.123。

配置密钥

编辑/etc/ipsec.secrets文件,增加下面内容:

1
<host_ip> %any: PSK "<key>"

注意替换其中的<host_ip>为公网ip,例如:123.123.123.123。

<key>为共享密钥,可以是任意字符串。

编辑/etc/ppp/chap-secrets文件,增加下面内容:

1
2
# client     server     secret               IP addresses
<username> l2tpd <password> *

<username>为用户名,可以是任意字符串。

<password>为密码,可以是任意字符串。

配置系统

修改系统配置,执行下面命令:

1
2
3
4
5
6
7
8
sysctl -w net.ipv4.ip_forward=1
sysctl -w net.ipv4.conf.all.rp_filter=0
sysctl -w net.ipv4.conf.default.rp_filter=0
sysctl -w net.ipv4.conf.eth0.rp_filter=0
sysctl -w net.ipv4.conf.all.send_redirects=0
sysctl -w net.ipv4.conf.default.send_redirects=0
sysctl -w net.ipv4.conf.all.accept_redirects=0
sysctl -w net.ipv4.conf.default.accept_redirects=0

防火墙开放端口,新建文件/usr/lib/firewalld/services/l2tpd.xml:

/usr/lib/firewalld/services/l2tpd.xml
1
2
3
4
5
6
<?xml version="1.0" encoding="utf-8"?>
<service>
<short>L2TPD</short>
<description>L2TPD Port</description>
<port protocol="udp" port="1701"/>
</service>

在firewall中开启相应的服务:

1
2
3
4
firewall-cmd --permanent --add-service=l2tpd
firewall-cmd --permanent --add-service=ipsec
firewall-cmd --permanent --add-masquerade
firewall-cmd --reload

启动

启动系统服务,并设置为开机自启动

1
2
systemctl enable ipsec xl2tpd
systemctl restart ipsec xl2tpd

调试

如果启动不成功,可以使用journal查看日志调试:

1
journalctl -f