这是个很奇怪的事情,应聘了一家搞 CDN 的公司,结果上去看了一下根本不对路。就立刻辞了,但是发现它给员工开的 L2TP VPN 确实非常好用。
于是就自己也搭一个,方便自用。下面记录一下安装过程,环境是CentOS 7
一、装L2TP
# yum install epel-release
# yum install xl2tpd libreswan
二、修改核心参数
# vi /etc/sysctl.conf
vm.swappiness = 0
net.ipv4.neigh.default.gc_stale_time=120
net.ipv4.conf.all.rp_filter=0
net.ipv4.conf.default.rp_filter=0
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.all.arp_announce=2
net.ipv4.tcp_max_tw_buckets = 5000
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 1024
net.ipv4.tcp_synack_retries = 2
net.ipv4.conf.lo.arp_announce=2
net.ipv4.ip_forward = 1
net.ipv4.conf.default.accept_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.default.accept_source_route = 0
# sysctl -p
三、配置 IPSEC
# vi /etc/ipsec.d/l2tp_psk.conf
conn L2TP-PSK-NAT
rightsubnet=vhost:%priv
also=L2TP-PSK-noNAT
conn L2TP-PSK-noNAT
authby=secret
pfs=no
auto=add
keyingtries=3
dpddelay=30
dpdtimeout=120
dpdaction=clear
rekey=no
ikelifetime=8h
keylife=1h
type=transport
left=192.168.10.232
leftprotoport=17/1701
right=%any
rightprotoport=17/%any
注意上面的 left=192.168.10.232,这是服务器的ip地址,要更换为自己服务器的地址(如果在防火墙后,写内网地址,非映射后的公网IP)
然后修改密钥,之后建立L2TP的 iphone 连接时会用到:
# vim /etc/ipsec.secrets
192.168.10.232 %any: PSK "123456789"
验证一下:
# ipsec setup start
# ipsec verify

看到上面两行红字不要慌张,Ignore,忽略掉即可。是内核特性中的reverse path filter特性,没关系。
然后让 ipsec 自启动
# systemctl enable ipsec
四、配置xl2tpd
# 先备份
# mv /etc/xl2tpd/xl2tpd.conf /etc/xl2tpd/xl2tpd.conf.old
# vim /etc/xl2tpd/xl2tpd.conf
[global]
listen-addr = 192.168.10.232
ipsec saref = yes
[lns default]
ip range = 192.168.100.128-192.168.100.254
local ip = 192.168.100.99
require chap = yes
refuse pap = yes
require authentication = yes
name = LinuxVPNserver
ppp debug = yes
pppoptfile = /etc/ppp/options.xl2tpd
length bit = yes
注意更换上面 192.168.10.232 的服务器ip地址,同时记住name=LinuxVPNserver
# 先备份
# mv /etc/ppp/options.xl2tpd /etc/ppp/options.xl2tpd.old
# vim /etc/ppp/options.xl2tpd
ipcp-accept-local
ipcp-accept-remote
ms-dns 8.8.8.8
ms-dns 4.2.2.4
noccp
#noauth
crtscts
idle 1800
mtu 1410
mru 1410
nodefaultroute
debug
lock
proxyarp
connect-delay 5000
最后编辑用户名和密码
vim /etc/ppp/chap-secrets
# Secrets for authentication using CHAP
# client server secret IP addresses
test LinuxVPNserver test *
注意格式,第一列是用户名,第二列是上面xl2tpd.conf中记住的name名,第三列是密码,第四列是获取到的ip地址
然后启动
# systemctl start xl2tpd
# systemctl enable xl2tpd
# systemctl status xl2tpd
五、配置防火墙
iptables -A INPUT -p gre -j ACCEPT
iptables -A OUTPUT -p gre -j ACCEPT
iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -s 192.168.100.0/24 -j ACCEPT
iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o eth0 -j MASQUERADE
注意上面的eth0,根据服务器的具体情况进行修改
然后这样就完成了。
六、配置iphone手机

配置好服务器ip,账户,密码以及密钥就可以了。