一、安装xl2tpd(ppp+xl2tpd) 和 ipsec (libreswan)
由于yum源中没有xl2tpd包,我们需要手动下载xl2tpd rpm安装包。
链接:https://pan.baidu.com/s/1QMsOeEWLpfwbEagiUE4kow?pwd=vnjf
提取码:vnjf
安装 ppp
yum install wget lsof net-tools vim nss nss-devel ppp ppp-devel iptables iptables-services -y
安装 xl2tpd
yum localinstall xl2tpd-1.3.8-2.el7.x86_64.rpm -y
安装 libreswan
yum install -y libreswan
二、配置 ipsec (libreswan)
2.1 新建文件并且配置 ipsec
vim /etc/ipsec.d/ipsec-vpn.conf
没有 vim 命令直接安装 yum install -y vim 配置内容如下( 需要修改ip):
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
ikelifetime=8h
keylife=1h
type=transport
left = 这里填写服务器的外网 IP
leftprotoport=17/1701
right=%any
rightprotoport=17/%any
2.2 新建文件并配置共享密钥
vim /etc/ipsec.d/ipsec-vpn.secrets
文件内容如下
# 这里填写公网ip %any: PSK "这里填写一个字符串作为密钥"
0.0.0.0 %any: PSK "这是你的共享密钥"
设置开机启动
# 开机启动
systemctl enable ipsec
# 启动服务
systemctl start ipsec
# 查看日志
journalctl -u ipsec -n 100 -f
2.3 启动 IPsec 后,还需要对 IPsec 进行验证,以确保 IPsec 能够正常工作:
ipsec verify
如果输出如下:
Verifying installed system and configuration files
Version check and ipsec on-path [OK]
Libreswan 3.25 (netkey) on 3.10.0-1160.el7.x86_64
Checking for IPsec support in kernel [OK]
NETKEY: Testing XFRM related proc values
ICMP default/send_redirects [NOT DISABLED]
Disable /proc/sys/net/ipv4/conf/*/send_redirects or NETKEY will act on or cause sending of bogus ICMP redirects!
ICMP default/accept_redirects [NOT DISABLED]
Disable /proc/sys/net/ipv4/conf/*/accept_redirects or NETKEY will act on or cause sending of bogus ICMP redirects!
XFRM larval drop [OK]
Pluto ipsec.conf syntax [OK]
Two or more interfaces found, checking IP forwarding [OK]
Checking rp_filter [ENABLED]
/proc/sys/net/ipv4/conf/all/rp_filter [ENABLED]
/proc/sys/net/ipv4/conf/br-1467d2b70deb/rp_filter [ENABLED]
/proc/sys/net/ipv4/conf/default/rp_filter [ENABLED]
/proc/sys/net/ipv4/conf/docker0/rp_filter [ENABLED]
/proc/sys/net/ipv4/conf/eth0/rp_filter [ENABLED]
/proc/sys/net/ipv4/conf/ip_vti0/rp_filter [ENABLED]
/proc/sys/net/ipv4/conf/veth81161d5/rp_filter [ENABLED]
/proc/sys/net/ipv4/conf/vethf9c527b/rp_filter [ENABLED]
rp_filter is not fully aware of IPsec and should be disabled
Checking that pluto is running [OK]
Pluto listening for IKE on udp 500 [OK]
Pluto listening for IKE/NAT-T on udp 4500 [OK]
Pluto ipsec.secret syntax [OBSOLETE]
003 WARNING: using a weak secret (PSK)
Checking 'ip' command [OK]
Checking 'iptables' command [OK]
Checking 'prelink' command does not interfere with FIPS [OK]
Checking for obsolete ipsec.conf options [OK]
ipsec verify: encountered 19 errors - see 'man ipsec_verify' for help
验证结果中会出现 各种结果。但是这里看不出这些字母颜色的区别,在 shell 中,分为绿色、红色、黄色。其中绿色、黄色不用管、红色需要解决错误。分别执行对应的命令(此处可能不同用户出现的问题不一致,不全的百度搜索)
#下方错误
NETKEY: Testing XFRM related proc values
ICMP default/send_redirects [NOT DISABLED]
Disable /proc/sys/net/ipv4/conf/*/send_redirects or NETKEY will act on or cause sending of bogus ICMP redirects!
ICMP default/accept_redirects [NOT DISABLED]
# 执行对应的命令(一次性复制完进行执行)
for each in /proc/sys/net/ipv4/conf/*
do
echo 0 > $each/send_redirects
echo 0 > $each/accept_redirects
done
# ===============================================================================================================================
# 下方错误
Checking rp_filter [ENABLED]
/proc/sys/net/ipv4/conf/all/rp_filter [ENABLED]
/proc/sys/net/ipv4/conf/br-1467d2b70deb/rp_filter [ENABLED]
/proc/sys/net/ipv4/conf/default/rp_filter [ENABLED]
/proc/sys/net/ipv4/conf/docker0/rp_filter [ENABLED]
/proc/sys/net/ipv4/conf/eth0/rp_filter [ENABLED]
/proc/sys/net/ipv4/conf/ip_vti0/rp_filter [ENABLED]
/proc/sys/net/ipv4/conf/veth81161d5/rp_filter [ENABLED]
/proc/sys/net/ipv4/conf/vethf9c527b/rp_filter [ENABLED]
# 执行对应命令(上面的每一行都要执行 echo 0 >,我后面的省略了,)
echo 0 >/proc/sys/net/ipv4/conf/vethf9c527b/rp_filter
修改完成后,再进行一次 ipsec 验证即可看到结果,所有的输出项都变成绿色、黄色再执行之后步骤
2.4 开启 IPv4 的 ip_forward,这个选项用于做 IP 包的转发:
sysctl net.ipv4.ip_forward=1
sysctl -p
三、配置 xl2tpd
vi /etc/xl2tpd/xl2tpd.conf
# 注意这个 ip range 不要与本地 ip 和服务器的其他 ip 冲突
# 这是一个例子:
ip range = 192.168.79.100-192.168.79.200 #这里是VPN 分配给客户端的ip地址池
local ip = 192.168.79.1 # 这里是 VPN 服务器在 VPN 网络中的ip,不是公网ip
vi /etc/ppp/options.xl2tpd
# 修改 ms-dns,可以修改为其他合适的 dns 地址
ms-dns 114.114.114.114
# 增加 require-mschap-v2 选项,否则 windows 无法连接
require-mschap-v2
# 注释以下两个参数
# crtscts
# lock
# 增加日志保存路径 没有文件夹得手动创建
logfile /home/logs/vpn/xl2tpd.log
四、配置PPP
vim /etc/ppp/chap-secrets
# 按文件中说明填写用户名密码即可
# 例如
# 用户名 * 密码 分配给用户的ip(如果是* 则会是动态ip /etc/xl2tpd/xl2tpd.conf 这个里面配置了ip池)
# Secrets for authentication on server using CHAP
# client server secret IP addresses
test * "test" 192.168.79.100
# 下面的配置也得需要 不然服务会一直报错找不到密码
# Secrets for authentication on client using CHAP
# client server secret IP addresses
* test "test"
启动
# 开机启动
systemctl enable xl2tpd
# 启动服务
systemctl start xl2tpd
# 查看日志
journalctl -u xl2tpd -n 100 -f
五 配置防火墙
iptables -t filter -A INPUT -p udp -m multiport --dports 500,4500,1701 -j ACCEPT
iptables -t nat -A POSTROUTING -j MASQUERADE
iptables -t filter -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
六、window 连接
第一次连接需要修改 注册表 ,
Win+R 输入 regedit 然后找到 这个变量 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\PolicyAgent
右键 新建 DWORD (32位)值
AssumeUDPEncapsulationContextOnSendRule=00000002
新建完保存之后就重启电脑,然后进行下图连接VPN