这是个很奇怪的事情,应聘了一家搞 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,账户,密码以及密钥就可以了。