手动?

虽然 L2TP 已经是一个上古的 VPN 协议了,但是总会有连接这种服务的需求。Linux 上似乎除了 OpenWrt 这种侧重于路由器功能的发行版并没有傻瓜级的客户端,一般用的是命令行工具 xL2tpd。这个需要进行一些设置,因此我在这里分享一下手动连接并设置路由的过程。

准备

安装 xL2TPd

1
$ opkg install xl2tpd

拥有一个使用 L2TP (without IPsec) 连接协议的 VPN

由于目前我使用的是不带 IPsec 的,所以暂时不会提及 strongSwan 这些 IPsec 相关内容,以后用到时我会找时间补。

步骤

设置 xL2tpd,添加连接

/etc/xl2tpd/xl2tpd.conf 里添加如下模板的内容:

1
2
3
4
5
[lac {entry_name}]
lns = {server_address}
ppp debug = no
pppoptfile = /etc/ppp/{file_name}
length bit = yes

其中 server_address 为 VPN 的地址,entry_name 和 file_name 按照自己的实际情况命名即可。

设置 PPP 连接

根据上一步设置的 file_name,向 /etc/ppp/{file_name} 里添加如下模板的内容:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
noccp
noauth
mtu 1410
mru 1410
persist
nopcomp
noaccomp
defaultroute
usepeerdns
connect-delay 5000
replacedefaultroute
name "{username}"
password "{mypassword}"

name 和 password 字段的内容需要在两端加引号。

重载配置

1
$ service xl2tpd restart

连接 VPN

根据之前的结果,执行如下命令即可连接 VPN:

1
$ xl2tpd-control connect {entry_name}

运行后可以查看 ip linkip address,如果出现了 ppp0 接口且有地址说明连接成功。

(OpenWrt)设置接口及防火墙

打开 OpenWrt 的 luci 界面,进入「网络」-「接口」,点击「添加新接口…」。「新接口的协议」选择「不配置协议」;「包括以下接口」选择此前连接时新出现的接口(例如 ppp0),点击「提交」。

然后进入「网络」-「防火墙」,在下面的「区域」部分点击「添加」,勾选 「IP 动态伪装」;「覆盖网络」选择上一步创建的接口;「允许转发到目标区域」和 「允许从源区域转发」都选择 lan,点击「保存并应用」。

设置开机自启

/etc/rc.local 里添加如下内容:

1
2
sleep 5
xl2tpd-control connect {entry_name}

由于需要先有网络连接才能开启 VPN,这里设置了 5 秒的启动等待时间,可以按照自己实际情况修改。

一些发行版可能没有这个文件,可以参考我的这篇文章

参考教程