看了很多文章,也踩了很多坑,可能因为环境的不同导致,但也有一部分是文章本身就有很多错误,还好最终自己把这浑水蹚过去了
1、安装EPEL源
yum install -y make gcc gmp-devel xmlto bison flex xmlto libpcap-devel lsof vim-enhanced man
yum install -y xl2tpd
yum install -y libreswan
2、修改ipsec配置文件
打开文件
vim /etc/ipsec.conf
在config setup中添加一句:nat_traversal=yes,充许传透nat建立l2tp连接
3、创建ipsec与l2tp服务关联的配置文件
在第2步中最后一行可以看到 include /etc/ipsec.d/*.conf 这句话,所以创建的配置文件就在 /etc/ipsec.d/ 目录下
vim /etc/ipsec.d/l2tp_psk.conf
文件填写以下内容,仅需修改 left 参数为 eth0的 内网IP地址
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.4.197 # 192.168.4.197 是内网IP地址,即eth0网卡Ip地址
leftprotoport=17/1701
right=%any
rightprotoport=17/%any
4、设置预共享密钥
创建保存预共享密钥的文件,名字可自定义,扩展名为.secrets
vim /etc/ipsec.d/ipsec.secrets
文件填写以下内容,其中,IP地址为内网地址,即eth0网卡IP地址,双引号中为密钥,自行设置。(注意空格,否则后面有报错)
192.168.4.197 %any: PSK "test123"
5、修改内核支持
打开文件
vim /etc/sysctl.conf
对照下面的内容,应该直接在文件结尾,补充最后5行就可以
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
6、检验ipsec服务配置
systemctl restart ipsec
ipsec verify
输出如图:
在这一步只遇到过因为第4步中空格问题导致的红色报错,没有遇到其他问题
7、修改l2tp配置文件
打开文件
vim /etc/xl2tpd/xl2tpd.conf
四个修改点:
- [global]模块中
- 取消 listen-addr 注释,并设置为内网IP(eth0的IP)
- 取消 ipsec saref = yes 注释
- [lns default]模块中
- ip_range:客户端连接此服务后分配给客户端的ip地址范围,
- local ip:设置本VPN服务的IP
8、修改xl2tpd配置文件
打开文件
vim /etc/ppp/options.xl2tpd
改两个点就可以了
- 第一行添加上:require-mschap-v2
- DNS服务器写俩就行
- 谷歌:8.8.8.8
- 阿里:233.5.5.5
- 百度:180.76.76.76
9、设置连接此vpn服务器的账户与密码
打开文件:
vim /etc/ppp/chap-secrets
依次写用户名、服务名、密码、IP地址,实际上服务名与IP地址都写成星号即可,主要设置用户名与密码,以空格间隔开
10、防护墙与地址转发规则
(1)关闭firewalld
systemctl stop firewalld
systemctl mask firewalld
(2)配置iptables
安装iptables服务
yum install -y iptables
yum install -y iptables-services
走一遍流程,做一些初始化,防止后面有错误
iptables -P INPUT ACCEPT
iptables -F
iptables -F
iptables -X
iptables -Z
执行命令进行规则配置,其中前三行有网段配置,这里要与 第7步 中 设置lns default中的一致
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE
iptables -I FORWARD -s 192.168.1.0/24 -j ACCEPT
iptables -I FORWARD -d 192.168.1.0/24 -j ACCEPT
iptables -A INPUT -p udp -m policy --dir in --pol ipsec -m udp --dport 1701 -j ACCEPT
iptables -A INPUT -p udp -m udp --dport 1701 -j ACCEPT
iptables -A INPUT -p udp -m udp --dport 500 -j ACCEPT
iptables -A INPUT -p udp -m udp --dport 4500 -j ACCEPT
iptables -A INPUT -p esp -j ACCEPT
iptables -A INPUT -m policy --dir in --pol ipsec -j ACCEPT
iptables -A FORWARD -i ppp+ -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
上述命令执行完后,保存规则并重启iptables
service iptables save
systemctl restart iptables
11、服务启动检查
走完上面的流程,检查 iptables、ipsec、xl2tpd 三个服务是否是正常开启状态
systemctl status iptables
systemctl status ipsec
systemctl status xl2tpd
如果有报错或未启动,尝试启动或重启,或根据具体错误解决
# 重启
systemctl restart iptables
systemctl restart ipsec
systemctl restart xl2tpd
# 启动
systemctl start iptables
systemctl start ipsec
systemctl start xl2tpd
设置 ipsec与xl2tpd 服务开机自启动
systemctl enable ipsec
systemctl enable xl2tpd
12、配置完毕,到Win10测试连接
在win10中,进入【设置】-【网络和Internet】-【VPN】,添加一个新的VPN连接
- 连接名自己定义即可
- 服务器名称或地址就是搭建L2TP的服务器外网地址
- VPN类型选择L2TP
- 登录信息配置在服务器上配置过的一个用户名与密码即可,保存
然后,在当前【VPN】页面点击下面的「更改适配器选项」,在我们配置的那个链接上右键进入属性,在进入 安全 ,点击「高级设置」,勾选第一项,填写在VPN服务器设置过的 PSK密钥 ,点击确定,下面 勾选 允许使用这些协议,最后点击确定
以上配置完成后,点击连接即可,在显示已连接后,可查看当前的IP状态