学习xl2tpd VPN时,网上搜到的教程上来就贴一堆不明所以的配置,照葫芦画瓢折腾成功后很快又忘了。
现在结合官方提供的说明文档,由简入繁地一步步记录下来,以加强巩固。
环境
客户端 192.168.0.207 CentOS 6.3
服务器 192.168.0.213 CentOS 7.2
软件
pppd
实现PPP会话的软件,在l2tp VPN中,其数据包经由L2TP隧道传输,两者结合即PPPoL2TP(Point-to-Point Protocol over L2TP),可类比PPPoE(Point-to-Point Protocol over Ethernet)。
客户与服务器都需要安装pppd,下载源码解压后执行:
./configure
make
sudo make install
通过源码安装的执行文件一般在/usr/local/sbin目录下。
xl2tpd
https://github.com/xelerance/xl2tpd
构建L2TP隧道的软件,L2TP隧道负责传输pppd生成的PPP数据包,一个xl2tpd进程可开启多个pppd进程,对应多个PPP会话。xl2tpd与其启动的pppd进程间通过伪终端(pseudo-tty)进行数据通信,两者关系可参考《Linux伪终端设备及其在L2TP中的应用》一文。
客户端与服务器都需要安装xl2tpd,下载源码解压后执行:
make
sudo make install
通过源码安装的执行文件一般在/usr/local/sbin目录下。
配置
服务器
服务器xl2tpd配置文件:
/etc/xl2tpd/xl2tpd.conf
简单配置如下:
[lns default] ip range = 172.16.0.1-172.16.0.254 local ip range = 172.17.0.1
LNS(L2TP Network Server)信息为服务端的主要配置,LNS可以有多个,以 [lns xxx] 格式为名,[lns default] 为默认的LNS配置。
本次配置中LNS包含以下两项信息:
ip range,分配给L2TP隧道彼端(客户端)的IP地址范围,注意不能像PPTP那样写成172.16.0.1-254这样的格式,起始地址和结束地址都要使用完整的IP描述。
local ip range,与彼端IP相对应的L2TP隧道本地IP地址范围,注意这是一个范围,可以配置成172.17.0.1-172.17.0.254,也可以仅仅配置一个IP。
xl2tpd.conf文件中以分号";"作为注释开头。
客户端
客户端xl2tpd配置文件:
/etc/xl2tpd/xl2tpd.conf
[lac vpntest] lns = 192.168.1.213
LAC(L2TP Access Concentrator)为客户端配置信息,格式为[lac xxx] ,xxx即LAC的名字,可以配置多个LAC信息。若是改动了LAC的名字,需要重启xl2tpd服务方能生效。
本次的LAC配置中只包含一项信息:lns, 即该LAC所连接LNS的IP地址或域名,不同的LAC能连接不同的LNS
测试
1)在客户端和服务端的机器上分别执行xl2tpd命令,xl2tp服务会以后台方式运行,在第一次运行前确认/var/run目录是否存在,若/var下没有run目录,需要手动创建,否则xl2tp服务会启动失败(在/var/log/message中会有日志提示)。
2)在客户端机器上执行命令:echo 'c vpntest' > /var/run/xl2tpd/l2tp-control,xl2tpd从l2tp-control文件中收到命令会创建ppp进程,如果成功在客户端和服务端会各自生产一个pppX的虚拟网卡,如下图所示:
客户端:
服务端:
172.16.0.1和172.17.0.1是可以相互通信的。
关闭客户端的命令为: echo 'd vpntest' > /var/run/xl2tpd/l2tp-control
'c vpntest'与'd vpntest'中的vpntest即配置文件/etc/xl2tpd/xl2tpd.conf中[lac xxx]相应的LAC名xxx。
另外,只要相关配置存在,一个xl2tpd既可以作为LAC也可以作为LNS。
取消数据压缩
上述配置中,PPP协议默认对数据进行了压缩,不利于捕包观察和调试,可通过如下方式取消压缩:
方法一,通过服务器配置取消压缩:
1)在服务器编辑pppd的配置文件/etc/ppp/options.xl2tpd,增加一行“noccp”;
#不要对数据进行压缩
noccp
pppd的配置文件中以"#"作为注释开头。
2)在服务器编辑xl2tpd的配置文件/etc/xl2tpd/xl2tpd.conf,增加pppd的配置文件路径:
[lns default] ip range = 172.16.0.1-172.16.0.254 local ip range = 172.17.0.1 ;pppd配置文件路径 pppoptfile = /etc/ppp/options.xl2tpd
方法二,通过客户端配置取消压缩:
编辑客户端的pppd配置文件/etc/ppp/peers/vpntest.xl2tpd,增加一行"noccp",然后在/etc/xl2tpd/xl2tpd.conf中相应的LAC配置节下增加vpntest.xl2tpd的路径全名:
pppoptfile = /etc/ppp/peers/vpntest.xl2tpd
(这里的vpntest.xl2tpd与LNS的options.xl2tpd性质一样都是pppd的配置文件,不过从网上的诸多教程看,LAC的pppd配置文件一般存放于/etc/ppp/peers目录下,而LNS的pppd配置文件一般存放于/etc/ppp目录下)
为tty设备加锁
pppd使用tty设备与xl2tpd进行数据通信,tty默认没有被加锁。
在pppd的配置文件中(LNS为/etc/ppp/options.xl2tpd,LNC为/etcppp/peers/vpntest.xl2tpd),添加如下配置:
#为tty加锁
lock
如此一来,当pppd打开一个tty设备后,就会生成一个UUCP类型的文件锁以阻止其他进程访问该设备。
更多参考
在安装xl2tpd和pppd的系统中,可通过查阅man手册来获取更多的参考信息:
man xl2tpd,介绍xl2tpd程序的使用
man xl2tpd.conf,介绍xl2tpd.conf配置文件
man pppd,介绍pppd程序的使用,内容比较多,其中的OPTIONS各个选项可以写入配置文件,然后在xl2tpd.conf中使用pppoptfile指明路径名。