Linux VPS 配置 L2TP Over IPSec VPN

Ubuntu 14.04 x64

安装软件包
sudo apt-get install xl2tpd openswan ppp

IPSec / Openswan
打开 /etc/ipsec.conf 文件,做如下配置:

config setup
nat_traversal=yes
virtual_private=%v4:10.0.0.0/8,%v4:192.168.0.0/16,%v4:172.16.0.0/12,%v4:!10.152.2.0/24
# 这里包含的网络地址允许配置为远程客户端所在的子网。换句话说,
# 这些地址范围应该是你的NAT路由器后面的客户端的地址。
oe=off
protostack=netkey

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
# Apple 的 iOS 不会发送 delete 提醒,
# 所以我们需要通过死亡对端(dead peer)检测来识别断掉的客户端
dpddelay=30
dpdtimeout=120
dpdaction=clear
# 设置 ikelifetime 和 keylife 和 Windows 的默认设置一致
ikelifetime=8h
keylife=1h
type=transport
# 替换 IP 地址为你的本地IP (一般是,私有地址、NAT内的地址)
left=x.x.x.x
# 用于升级过的 Windows 2000/XP 客户端
leftprotoport=17/1701
# 要支持老的客户端,需要设置 leftprotoport=17/%any
right=%any
rightprotoport=17/%any
# 强制所有连接都NAT,因为 iOS
forceencaps=yes
注意你的ipsec.conf文件,”config setup” 和 “L2TP-PSK-NAT”、 “L2TP-PSK-NAT”应该顶着行头写,而其它行应该以8个空格缩进。

打开 /etc/ipsec.secrets,配置:

x.x.x.x %any: PSK “somegoodpassword”
这里x.x.x.x 替换为你的服务器的IP地址,并设置一个复杂的密码。

sysctl -w net.ipv4.conf.all.accept_redirects=0
sysctl -w net.ipv4.conf.all.send_redirects=0

启动 IPSEC 服务:

/etc/init.d/ipsec start
使用如下命令确认 ipsec 是否工作正常:

sudo ipsec verify
应该没有任何错误才行:

Checking your system to see if IPsec got installed and started correctly:
Version check and ipsec on-path [OK]
Linux Openswan U2.6.28/K2.6.32-32-generic-pae (netkey)
Checking for IPsec support in kernel [OK]
NETKEY detected, testing for disabled ICMP send_redirects [OK]
NETKEY detected, testing for disabled ICMP accept_redirects [OK]
Checking that pluto is running [OK]
Pluto listening for IKE on udp 500 [OK]
Pluto listening for NAT-T on udp 4500 [OK]
Checking for ‘ip’ command [OK]
Checking for ‘iptables’ command [OK]
Opportunistic Encryption Support [DISABLED]

L2TP
修改 /etc/xl2tpd/xl2tpd.conf :

[global]
ipsec saref = no

[lns default]
ip range = 10.152.2.2-10.152.2.254
local ip = 10.152.2.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/ppp/options.xl2tpd,做如下配置:

refuse-mschap-v2
refuse-mschap
ms-dns 8.8.8.8
ms-dns 8.8.4.4
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验证文件里面。

-A INPUT -p udp -m state –state NEW -m udp –dport 1701 -j ACCEPT
-A INPUT -p udp -m state –state NEW -m udp –dport 500 -j ACCEPT
-A INPUT -p udp -m state –state NEW -m udp –dport 4500 -j ACCEPT

发表评论

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据