前几天一直想着使用自己的CentOS7系统搭建一个VPN试一试,结果找了超级多的帖子试了超级多的代码最后才发现都不可以,然后在网上搜索了大神的一键安装脚本,运行之后发现可以使用,但是本人性格比较执拗,就偷偷的看了看大神的脚本然后自己又重新试了一个下午,终于自己成功的搭建好了一个VPN(◕ˇ∀ˇ◕)。害怕自己以后会忘记,所以记录下来方便日后查找。
⚠️:本文所有代码前面的#代表主机的输入提示,在使用时不需要输入。
0、一键安装以及声名
本人也是在拜读了大神的一件安装脚本之后才自己进行安装,如果有想直接一键安装的小伙伴就直接参照:这是链接
1、准备
首先我们先在主机中输入下面命令,如果返回的是yes,证明你的主机支持pptp服务。
# modprobe ppp-compress-18 && echo yes
然后输入下面的命令,如果返回的是cat: /dev/net/tun: File descriptor in bad state,证明开启了TUN
# cat /dev/net/tun
2、安装ppp libreswan xl2tpd firewalld(大部分CentOS7.2已经安装了firewall)
使用如下命令一键安装:
yum -y install ppp libreswan xl2tpd firewalld
安装成功会显示如下:
3、配置iPsec
在主机输入
# vi /etc/ipsec.conf
进入vi编辑页面,长按键盘上的d删除文本中的所有文件,然后按键盘的i进行输入,将下面文本粘贴进去:
将下面的XXX.XXX.XXX换成你想使用的本地IP地址的前几个,将YYY.YYY.YYY.YYY换成你主机的公网IP 地址。例如我就是将XXX.XXX.XXX换成了192.168.3,将YYY.YYY.YYY.YYY换成了我的测试主机的IP地址。⚠️:最好记住你设置的XXX.XXX.XXX,在后面还会有用的到的地方哈。
version 2.0
config setup
protostack=netkey
nhelpers=0
uniqueids=no
interfaces=%defaultroute
virtual_private=%v4:10.0.0.0/8,%v4:192.168.0.0/16,%v4:172.16.0.0/12,%v4:!XXX.XXX.XXX.0/24
conn l2tp-psk
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=%defaultroute
leftid=YYY.YYY.YYY.YYY
leftprotoport=17/1701
right=%any
rightprotoport=17/%any
dpddelay=40
dpdtimeout=130
dpdaction=clear
sha2-truncbug=yes
修改完成之后按下ESC按键,然后输入:wq保存退出。
然后修改/etc/ipsec.secrets文件。在控制台输入:
# vi /etc/ipsec.secrets
然后仍旧长按d来删除文件(vi编辑器中dd代表删除一行)。然后将下面的文本粘贴进去:
⚠️:将下面的PASSWORD变成你自己想要设置的PSK密码,最好复杂一点,但要确保自己能够记住!(PSK密码即预共享密钥)
%any %any : PSK "PASSWORD"
然后保存退出。
4、配置xl2tp
下一步我们修改文件/etc/xl2tpd/xl2tpd.conf。在控制台输入:
# vi /etc/xl2tpd/xl2tpd.conf
同样,我们长按d删除所有的文本,然后粘贴下面的文本输入进去:
⚠️:将上面记着的XXX.XXX.XXX带入下面。例如我的就应该将XXX.XXX.XXX变成192.168.3
[global]
port = 1701
[lns default]
ip range = XXX.XXX.XXX.2-XXX.XXX.XXX.254
local ip = XXX.XXX.XXX.1
require chap = yes
refuse pap = yes
require authentication = yes
name = l2tpd
ppp debug = yes
pppoptfile = /etc/ppp/options.xl2tpd
length bit = yes
然后我们保存退出。
然后修改文件/etc/ppp/options.xl2tpd。在控制台输入:
# vi /etc/ppp/options.xl2tpd
仍旧是长按d删除文本,然后将下面的文本粘贴进去:
ipcp-accept-local
ipcp-accept-remote
require-mschap-v2
ms-dns 8.8.8.8
ms-dns 8.8.4.4
noccp
auth
hide-password
idle 1800
mtu 1410
mru 1410
nodefaultroute
debug
proxyarp
connect-delay 5000
然后保存退出。
5、设置账号密码
在控制台输入如下命令:
# rm -f /etc/ppp/chap-secrets
# vi /etc/ppp/chap-secrets
然后我们在新文本中输入下面内容:
⚠️:将下面的USER和USER_PASSWORD换成你的账号和密码就可以,可以复杂一点但是自己要记住!
# Secrets for authentication using CHAP
# client server secret IP addresses
USER l2tpd USER_PASSWORD *
6、修改内核数据
修改文件/etc/sysctl.conf,使用如下命令:
# vi /etc/sysctl.conf
⚠️:这个文本不要全部删除,在文本的最后按下i然后粘贴如下文本:
# Added by L2TP VPN
net.ipv4.ip_forward=1
net.ipv4.tcp_syncookies=1
net.ipv4.icmp_echo_ignore_broadcasts=1
net.ipv4.icmp_ignore_bogus_error_responses=1
然后我们自己创建一个脚本来想文本中输入命令:
# vi 1.sh
在新的sh文件中输入如下命令:
for each in `ls /proc/sys/net/ipv4/conf/`;
do
echo "net.ipv4.conf.${each}.accept_source_route=0" >> /etc/sysctl.conf
echo "net.ipv4.conf.${each}.accept_redirects=0" >> /etc/sysctl.conf
echo "net.ipv4.conf.${each}.send_redirects=0" >> /etc/sysctl.conf
echo "net.ipv4.conf.${each}.rp_filter=0" >> /etc/sysctl.conf
done
然后保存退出。
然后在控制台输入:
# chmod +x 1.sh && ./1.sh && rm -rf 1.sh
# sysctl -p
可以看见内核修改生效。
7、修改防火墙数据,开启相应端口
然后我们在创建并修改文件:/etc/firewalld/services/xl2tpd.xml。在控制台输入如下命令:
# vi /etc/firewalld/services/xl2tpd.xml
在文本中粘贴如下代码:
<?xml version="1.0" encoding="utf-8"?>
<service>
<short>xl2tpd</short>
<description>L2TP IPSec</description>
<port protocol="udp" port="4500"/>
<port protocol="udp" port="1701"/>
</service>
然后我们保存退出,并赋予文件相应的权限,代码如下:
chmod 640 /etc/firewalld/services/xl2tpd.xml
现在我们几乎就已经大功告成了,最后我们只需要设置一下系统打开服务并且添加相应的防火墙规则就OK了。最后我们在控制台输入如下代码:
# systemctl enable ipsec
# systemctl enable xl2tpd
# systemctl enable firewalld
# firewall-cmd --reload
# firewall-cmd --permanent --add-service=ipsec
# firewall-cmd --permanent --add-service=xl2tpd
# firewall-cmd --permanent --add-masquerade
# firewall-cmd --reload
# systemctl restart ipsec
# systemctl restart xl2tpd
8、大功告成,ENJOY IT!
「本文所有代码我都重新测试过一遍,对于KVM架构的CentOS7实测可用,如果有什么问题或者错误欢迎各位大神的不吝赐教,我的个人资料中有邮箱,欢迎各位的指教。」