一、安装软件包
sudo apt-get install xl2tpd ppp
二、修改配置
sudo vim /etc/xl2tpd/xl2tpd.conf
[global] ipsec saref = no [lns default] ip range = 192.168.0.2-192.168.0.254 local ip = 192.168.0.1 require chap = yes refuse pap = yes require authentication = yes ppp debug = yes pppoptfile = /etc/ppp/options.xl2tpd length bit = yes
配置说明如下:
ip range = 可以连接VPN服务的客户端IP地址范围
local ip = VPN 服务器的IP,必须在客户端IP范围之外
refuse pap = 拒绝 pap 认证
ppp debug = 测试时打开
选择一个复杂的挑战-响应式验证字符串。虽然没有最短长度限制,不过它应该至少有16个字符,也应该足够复杂才能保证安全。
打开文件 /etc/xl2tpd/l2tp-secrets ,填入你的密码:
vim /etc/xl2tpd/l2tp-secrets
* * exampleforchallengestring
打开文件 /etc/ppp/options.xl2tpd,做如下配置:
vim /etc/ppp/options.xl2tpd
refuse-mschap-v2 refuse-mschap ms-dns 223.5.5.5 ms-dns 223.6.6.6 asyncmap 0 auth crtscts idle 1800 mtu 1200 mru 1200 lock hide-password local #debug name l2tpd proxyarp lcp-echo-interval 30 lcp-echo-failure 4
ms-dns 选项设置要给客户端分配的 DNS 服务器,当客户端连接时,就会被分配这些 DNS。如果要加入多个 DNS,就每行一个,分别写几行。
如果你要给客户端推送wins设置,可以分别设置如下选项。
mtu 和 mru 按照openswan.org的说法,减小 mru/mtu 的大小非常重要。因为 l2tp/ipsec 会封装几次,可能导致性能下降,减小这个配置的大小可以一次性传输全部的包。
proxyarp 可以将连接的客户端的IP地址和以太网地址加入的系统的ARP表中。这会影响到本地局域网内其它客户端。
name l2tpd 用在 PPP验证文件里面。
三、添加用户
打开文件 /etc/ppp/chap-secrets ,做如下配置:
vim /etc/ppp/chap-secrets
user1 l2tpd chooseagoodpassword * user2 * chooseagoodpassword *
每行包括如下字段:
客户端 = 用户名称
服务器 = 在上面的 /etc/ppp/options.xl2tpd 定义的名字
密码 = 用户密码,你应该设置一个足够复杂的密码
IP 地址 = * 表示用户可以从任何地址连接,否则设置用户只能从特定的地址连接
注意:你可以添加多个用户。
四、IP转发
打开文件 /etc/sysctl.conf,修改配置:
vim /etc/sysctl.conf
net.ipv4.ip_forward=1
载入新的配置:
sysctl -p
然后开启NAT转发.
sudo iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j MASQUERADE
192.168.0.0/24是你在上面设置的IP段,让这个段转发
注意eth0是你连接外网的那块网卡,不一定是0也有可能是1或者看你的机器哪块网卡连的外网了。这样就以NAT的方式请求外网的东西了。不知道你的机器哪块网卡连的外网的话ifconfig一下看看哪个网卡是外网IP就知道了。
设置永久转发
先将防火墙规则保存到/etc/iptables.up.rules文件中
iptables-save > /etc/iptables.up.rules
然后修改脚本/etc/network/interfaces,在对应网卡末尾添加一行,在网络启动时应用防火墙规则:
pre-up iptables-restore < /etc/iptables.up.rules
五、启动VPN
sudo /etc/init.d/xl2tpd restart
六、排除故障
如果遇到了问题,以下命令可以帮助你找到问题:
sudo tcpdump -i ppp0 sudo tail -f /var/log/auth.log sudo tail -f /var/log/syslog
你可以可以在服务器上使用如下命令来监控:
sudo tcpdump -i eth0 host xxx.xxx.xxx.xxx and not port ssh
这里xxx.xxx.xxx.xxx 是你的客户端的公网地址。