CentOS下L2TP VPN客户端的安装配置2019-04-28
http://www.zfsphp.com/44.html
本文为在Linux
下搭建VPN
客户端,协议使用L2TP
,系统环境为CentOS 7
,步骤如下:
1. 安装客户端软件xl2tpd
,ppp
[root@iZ23v2l73xvZ ~]# yum install -y xl2tpd ppp
2. 配置xl2tpd
编辑 /etc/xl2tpd/xl2tpd.conf
文件,内容如下:
[lac bjvpn] name = sun lns = 60.191.127.190 pppoptfile = /etc/ppp/peers/bjvpn.l2tpd ppp debug = no
参数说明:
bjvpn 连接名称,后面控制连接时需要
name vpn帐号的用名户,由vpn服务器分配
lns vpn服务器ip地址
pppoptfile 连接选项
3. 配置连接选项
编辑 /etc/ppp/peers/bjvpn.l2tpd
文件,内容如下:
remotename bjvpn user "sun" password "pass" unit 0 nodeflate nobsdcomp noauth persist nopcomp noaccomp maxfail 5 debug
参数说明:
remotename vpn名称
user vpn帐号用户名
password vpn帐号密码
4 启动
在命令行依次输入如下命令:
[root@iZ23v2l73xvZ ~]# xl2tpd [root@iZ23v2l73xvZ ~]# echo 'c bjvpn' >/var/run/xl2tpd/l2tp-control
查看 /var/log/messages
中是否有异常。
如果一切正常,使用ifconfig
查看ppp0
是否已经启动。
[root@iZ23v2l73xvZ ~]# ifconfig eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 10.252.140.34 netmask 255.255.248.0 broadcast 10.252.143.255 ether 00:16:3e:00:48:04 txqueuelen 1000 (Ethernet) RX packets 6272894717 bytes 450830441559 (419.8 GiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 4751780943 bytes 17514808533925 (15.9 TiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 eth1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 121.40.67.66 netmask 255.255.252.0 broadcast 121.40.67.255 ether 00:16:3e:00:24:94 txqueuelen 1000 (Ethernet) RX packets 8059796 bytes 1101212197 (1.0 GiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 5073542 bytes 499312689 (476.1 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 loop txqueuelen 1 (Local Loopback) RX packets 31365 bytes 5216182 (4.9 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 31365 bytes 5216182 (4.9 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 ppp0: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST> mtu 1500 inet 10.252.140.34 netmask 255.255.255.255 destination 172.30.0.1 ppp txqueuelen 3 (Point-to-Point Protocol) RX packets 18364 bytes 7805002 (7.4 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 26262 bytes 3489595 (3.3 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
注意,这时可能还不能直接访问vpn
服务端的内部其它网段的主机。如我在vpn
服务端的ip
为192.168.20.53
,但是我要访问192.168.8.0/24
网络的主机。这就需要手动添加路由。比如192.168.19.151
,我可以使用下面的命令:
[root@iZ23v2l73xvZ ~]# route add -host 192.168.19.151 dev ppp0
最后使用ping
命令查看网络连接效果:
[root@iZ23v2l73xvZ ~]# ping 192.168.19.151 PING 192.168.19.151 (192.168.19.151) 56(84) bytes of data. 64 bytes from 192.168.19.151: icmp_seq=1 ttl=127 time=5.60 ms 64 bytes from 192.168.19.151: icmp_seq=2 ttl=127 time=5.55 ms 64 bytes from 192.168.19.151: icmp_seq=3 ttl=127 time=5.42 ms 64 bytes from 192.168.19.151: icmp_seq=4 ttl=127 time=5.40 ms
https://www.cnblogs.com/shiyiwen/p/5826412.html?utm_source=itdadao&utm_medium=referral
client:
1
2
3
|
#安装epel源
#安装客户端l2tpd 这里我们还是用xl2tpd,当然2边都需要ppp协议
yum
install
xl2tpd ppp
|
vim /etc/xl2tpd/xl2tpd.conf
1
2
3
4
5
|
[lac sywvpn]
name = admin;
lns = 192.168.42.191;
pppoptfile =
/etc/ppp/peers/sywvpn
.l2tpd;
ppp debug =
yes
;
|
vim /etc/ppp/peers/sywvpn.l2tpd
1
2
3
4
5
6
7
8
9
10
11
12
|
#下面对应的参数是服务端配置过的<br>remotename sywvpn
user
"admin"
password
"yingzi"
unit 0
lock
nodeflate
nobsdcomp
noauth
persist
nopcomp
noaccomp
debug
|
#启动客户端
1
|
/etc/init
.d
/xl2tpd
start
|
# 启动还没开始拨号。
开始拨号
1
|
echo
'c sywvpn'
>
/var/run/xl2tpd/l2tp-control
|
# 查看client拨号日志
1
2
3
4
5
6
7
8
9
10
11
|
Aug 31 15:38:59 app7 xl2tpd[3464]: Connecting to host 192.168.42.191, port 1701
Aug 31 15:38:59 app7 xl2tpd[3464]: Connection established to 192.168.42.191, 1701. Local: 52638, Remote: 44491 (ref=0
/0
).
Aug 31 15:38:59 app7 xl2tpd[3464]: Calling on tunnel 52638
Aug 31 15:38:59 app7 xl2tpd[3464]: Call established with 192.168.42.191, Local: 28263, Remote: 3204, Serial: 2 (ref=0
/0
)
Aug 31 15:38:59 app7 pppd[4629]: pppd 2.4.5 started by root, uid 0
Aug 31 15:38:59 app7 pppd[4629]: Using interface ppp0
Aug 31 15:38:59 app7 pppd[4629]: Connect: ppp0 <-->
/dev/pts/2
Aug 31 15:39:02 app7 pppd[4629]: CHAP authentication succeeded: Access granted
Aug 31 15:39:02 app7 pppd[4629]: CHAP authentication succeeded
Aug 31 15:39:02 app7 pppd[4629]:
local
IP address 192.168.1.128
Aug 31 15:39:02 app7 pppd[4629]: remote IP address 192.168.1.99
|
#查看server端日志
1
2
3
4
5
6
7
8
9
|
Aug 31 15:38:41 Monitor xl2tpd[30013]: control_finish: Connection closed to 172.16.38.7, port 1701 (Goodbye!), Local: 63296, Remote: 51768
#之前断的
Aug 31 15:38:59 Monitor xl2tpd[30013]: Connection established to 172.16.38.7, 1701. Local: 44491, Remote: 52638 (ref=0
/0
). LNS session is
'default'
Aug 31 15:38:59 Monitor xl2tpd[30013]: Call established with 172.16.38.7, Local: 3204, Remote: 28263, Serial: 2
Aug 31 15:38:59 Monitor pppd[30138]: pppd 2.4.5 started by root, uid 0
Aug 31 15:38:59 Monitor pppd[30138]: Using interface ppp0
Aug 31 15:38:59 Monitor pppd[30138]: Connect: ppp0 <-->
/dev/pts/1
Aug 31 15:39:02 Monitor pppd[30138]: Cannot determine ethernet address
for
proxy ARP
Aug 31 15:39:02 Monitor pppd[30138]:
local
IP address 192.168.1.99
Aug 31 15:39:02 Monitor pppd[30138]: remote IP address 192.168.1.128
|
#ifconfig 客户端
1
2
3
4
5
6
7
|
ppp0 Link encap:Point-to-Point Protocol
inet addr:192.168.1.128 P-t-P:192.168.1.99 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1410 Metric:1
RX packets:1341 errors:0 dropped:0 overruns:0 frame:0
TX packets:1341 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:3
RX bytes:112434 (109.7 KiB) TX bytes:112440 (109.8 KiB)
|
#ping 服务端
1
2
3
4
5
6
7
|
[root@app7 var]
# ping 192.168.1.99
PING 192.168.1.99 (192.168.1.99) 56(84) bytes of data.
64 bytes from 192.168.1.99: icmp_seq=1 ttl=64
time
=4.26 ms
64 bytes from 192.168.1.99: icmp_seq=2 ttl=64
time
=4.01 ms
64 bytes from 192.168.1.99: icmp_seq=3 ttl=64
time
=3.88 ms
64 bytes from 192.168.1.99: icmp_seq=4 ttl=64
time
=3.91 ms
64 bytes from 192.168.1.99: icmp_seq=5 ttl=64
time
=3.86 m
|
#断开拨号
1
|
echo
'd sywvpn'
>
/var/run/xl2tpd/l2tp-control
|
#查看该文件应该属于数据库过度文件
1
|
prw------- 1 root root 0 Aug 31 15:38
/var/run/xl2tpd/l2tp-control
|
https://www.cnblogs.com/think8848/p/6347880.html
CentOS 7.2 1511部署L2TP/IPsec服务器及客户端
快过年了,感觉从去年开始,我们公司就变成了“别人的公司”,基本上提前一星期就放假了,好开心。正好可以利用这一段时间,把前段时间一些疑惑的问题解决下:)
然而挡在面前的一个拦路虎是:很多时候不能愉快的Google或者下载一些包,除非找到好的***方法。然而面对琳(liang)琅(you)满(bu)目(qi)的***工具,到底哪一个才好用呢,本着对自已负责的态度,我认真学了研究了一番,特将这个过程记录下来,供未来自已参考,也可以方便和我有相同需求的童鞋。
首先说说我的基本情况:
本来我一直从某宝上买一款年费***工具,商家就不提了,基本上做这个生意的人都蛮低调的,一般情况下也都价格公道(差不多月均15元左右),而且服务也好,缺点是和很多人共用***路线,速度很慢,每次用之前得花很多时间找好点的线路。最大的问题是商家提供的工具无法在Linux下使用。经过一番查找,发现很多人都在说买个美国VPS自已架服务器的方案。大概看了下貌似不太难,而且价格尚在可以承受的范围之内,所以就折腾起来。一开始绝对没想到过程会有这么麻烦,花了两三天时间才搞好。
我的需求是,平时办工一般用Win10,开发和学习会用到Linux(这里特指CentOS 7.2 1511),所以我需要在Win10上能够愉快的使用Google,在CentOS上能飞速的下载(能有20k以上就满足了)一个国外服务器上的包。
首先要找合适的VPS,我按照前人的网帖找到了四个比较学用的,分别是bandwagonhost.com(大名鼎鼎的搬瓦工)、www.linode.com(传说中的高富帅)、www.digitalocean.com(请允许我叫它穷矮挫)、www.vultr.com(经济适用男)。顺便提一下,我的网络是江苏电信100M光纤,基本上能满足所有上网的需求。
搬瓦工的好处是便宜,每个月2.99刀,一年19.99刀。按照7块来换算,一年140左右,和某宝上买的工具差不多,甚至还要便宜。管理和维护很方便,而且特意为墙内的人准备了一键SS(SS是什么?请自行百度,这里推荐一个技术站)和一键OpenVPN功能。特点是在Windows上速度马马虎虎,但比某宝上大家公用的快好多。经过半个晚上的折腾在Linux上把OpenVPN的客户端也装了起来,但是速度非常慢,大家只有20k以下,只能说,以前两天下载不了的包,现在半天可以下载下来了。然而好景不常,过了大概不到一个星期,OpenVPN就歇菜了,无论是Windows还是Linux,基本上就连不上了。估计是被嗅到后墙了。所以搬瓦工光荣阵亡。
后来一查才知道,PPTP、OpenVPN之类的工具,基本上也就是这个命运,最好还是采用L2TP/IPsec类型。然而要使用这个类型,一般情况下需要Xen或KVM技术的VPS才可以,不支持OpenVZ,而搬瓦工采用的OpenVZ,所以搬瓦工在接下来也没有什么用武之地了。这里顺便说一下,如果只是单纯的Windows上浏览网页,那我还是推荐使用搬瓦工的SS。
2.99刀基本上没有发挥啥作用,接下来的实验中,找便宜的又怕浪费,所以直接上Linode,网上随便找个优惠码,注册就可以得到官方送的10刀(前提是你必须充值至少5刀)。
本来想在VPS上使用CentOS 7.2 1511实现SS和L2TP/IPsec服务器,然而使用这个脚本之后,发现仅能实现SS,而VPN死活都不可用,无奈只能试试CentOS 6.5,结果比较满意,SS和VPN都可以在Windows上正常使用了,心里虽然不爽,但是想想主要目的就是为了***,6.5就6.5吧。然而接下来的事情不能忍,费尽周折在CentOS上配出来L2TP/IPsec客户端,但是仅能Ping通Google,却没有办法下载!说多了都是泪,就不多说了,我们还是说最终的情况吧。
经过在GitHub上一阵搜索,最后找到一个教程,包含了服务端和客户端完整过程,经过实测能用。这里特将在不同VPS上的过程简要介绍一下:
Linode:
使用官方提供的CentOS7(下图中下接列表中的选项),100%不能工作,要使用下图中红框中的脚本
在搜索页面中,使用下图中的下图中的条件,然后选择hwdsl2这一个
然后使用下面这个页面愉快的安装吧,值得一提的是:在安装好VPS,进入系统后会自动安装L2TP和IPsec服务,所以此时尽量啥也不要动,等10分钟后再动
如果想要看有没有安装好,使用 ipsec status 命名,如果能看到类似下面的情况,说明就安装好了
Vultr:
Vultr网上找到一个20刀的优惠券,但是只有30天有效期,不管那么多了,反正现在只是测试,所以就用PayPal开通一个帐号。
安装过程就没有这么顺利了,首先是Vultr默认的CentOS是1611版本,其次是VPN没问题,然而使用上述的SS脚本之后,SS不工作,觉得还是CentOS版本的问题。于是就换自定义ISO吧,方法如下:
推荐使用这里的ISO地址,因为镜像在国外,Vultr服务器下载起来比较快。
如果是要下载到自已电脑上,那么就使用这个,国内下载速度快。
接下来我们在Vultr VPS上自已手动部署一台CentOS 7.2 1511
1. 找到Deploy New Instance按钮,然后进入部署页面
2. 选择实例的参数,建议选择“Los Angeles”机房,Server Size我选择5刀,土豪随意。选好后点击“Deploy Now”开始部署
3. 然后就能看到这个界面
稍等片刻,就可以看到状态变为"Running"了
之后点击服务器,进入管理界面
4. 此次在页面右上角找控制台,然而点击进入
5. 一般情况下你就能看到下面这个界面了,如果一直连不上,那就Reinstall下,然后再试。如果实在连不上,建议找一个临时的***方法,翻出去应该就好了
6. 安装过程不多说了,只有一点:记得把网卡打开就行,安装完成后重启
7. 重启后,一定要把ISO退掉,不然开机又进入光盘启动了。
8. 至此,CentOS安装成功,进入Shell
接下来,介绍如何在最小化安装的CentOS 7.2 1511上部署L2TP/IPsec
1. 安装必要的工具
yum install vim net-tools wget unzip -y
2. 下载安装脚本,下载地址是http://files.cnblogs.com/files/think8848/StackScript.zip
wget -O StackScript.zip http://files.cnblogs.com/files/think8848/StackScript.zip
3. 解压文件
unzip StackScript.zip
4. 执行安装文件
chmod +x StackScript
./StackScript
要说Linux有什么好,那就是在768M的内存上,居然还能跑的唰唰的,这要是Windows Server,估计会卡出来翔!
稍等片刻,安装完成
5. 用Windows 10测试一下连接,这里要提前大家,一定要按照教程配置客户端。
6. 然而这个安装脚本是从Linode上拔下来的,PSK、用户名和密码都让人很难受,现在要换成我们自已想要的
a. 先修改PSK,将PSK后面的字符替换掉
vim /etc/ipsec.secrets
b. 修改用户名和密码 ,将用户名和密码修改为自已想要的字符
vim /etc/ppp/chap-secrets
c. 重启IPsec和xl2tpd服务
systemctl restart ipsec xl2tpd
d. 将客户端的PSK、用户名、密码换成新的再连,应该就能上了。
接下来介绍如何在CentOS 7.2 1511客户机上安装L2TP/IPsec客户端
1. 照例安装基本工具
yum install vim net-tools ftp epel-release -y
2. 安装L2TP和IPsec客户端(其实也可以用于服务端,只不过本例中,服务器端使用的是libreswan,而客户端使用的是strongswan)
yum install strongswan xl2tpd -y
3. 配置客户端
a. /etc/strongswan/ipsec.conf 文件
config setup conn %default ikelifetime=60m keylife=20m rekeymargin=3m keyingtries=1 keyexchange=ikev1 authby=secret ike=aes128-sha1-modp1024,3des-sha1-modp1024! esp=aes128-sha1-modp1024,3des-sha1-modp1024! conn myvpn keyexchange=ikev1 left=%defaultroute auto=add authby=secret type=transport leftprotoport=17/1701 rightprotoport=17/1701 right=你服务器的IP
注意,在Windows下面做的配置文件,复制到CentOS中后可能不能用!
如果你复制了这段代码,然后发现下图这个情况,请使用 vim 打开 vim /etc/strongswan/ipsec.conf 然后ESC后使用 :set ff=unix 修复,最后保存退出,再开启服务就应该可以了。
b. /etc/strongswan/ipsec.secrets 文件
: PSK "你的PSK"
c. /etc/xl2tpd/xl2tpd.conf 文件
[lac myvpn] lns = 你服务器的IP ppp debug = yes pppoptfile = /etc/ppp/options.xl2tpd.client length bit = yes
d. /etc/ppp/options.xl2tpd.client 文件
ipcp-accept-local ipcp-accept-remote refuse-eap require-chap noccp noauth mtu 1280 mru 1280 noipdefault defaultroute usepeerdns connect-delay 5000 name 你的帐户 password 你的密码
4. 启动客户端
systemctl start strongswan xl2tpd
查看客户端状态
systemctl status strongswan xl2tpd
5. 打开通道,successfully总是让人无比欣慰
strongswan up myvpn
6. 创建xl2tpd控制文件
mkdir -p /var/run/xl2tpd
touch /var/run/xl2tpd/l2tp-control
7. 连接
echo "c myvpn" /var/run/xl2tpd/l2tp-control
稍等片刻,大概就是3秒,就可以看到已经连上去了(为了看到这个结果,我是折腾了两三天!)
8. 设置路由
route delete default route add 你服务器的IP gw 你的网关 ip route add default via 192.168.42.1 dev ppp0
9. 验证,如果顺利返回了你服务器的IP,说明已经成功了!
wget -qO- http://ipv4.icanhazip.com; echo
Ping www.google.com结果如下,Ping值略大,白天大概在150左右,半夜不知道为什么会慢了许多。
10.关闭连接
echo "d myvpn" > /var/run/xl2tpd/l2tp-control strongswan down myvpn systemctl stop strongswan xl2tpd route delete default route delete 你服务器的IP ip route add default via 你的网关 dev eno16777736
很麻烦是吧,这里有提供两个脚本,实现快速连接和断开
a. 连接(vpnc.sh)
#!/bin/bash SUDO='' if [ "$USER" != "root" ] then SUDO='sudo' fi $SUDO systemctl start strongswan.service $SUDO systemctl start xl2tpd.service sleep 1 $SUDO strongswan up vultr $SUDO tee /var/run/xl2tpd/l2tp-control > /dev/null <<< "c vultr" while ! $(ip route | grep -i ppp0 &>/dev/null) do sleep 1 done ip link | grep -i ppp0 $SUDO route delete default $SUDO route add 你服务器的IP gw 你的网关 $SUDO ip route add default via 192.168.42.1 dev ppp0 ip route | grep -i ppp0 ip address | grep -i ppp0 #2017年1月25日添加,有效加快PING速度 cat > /etc/resolv.conf <<EOF nameserver 8.8.8.8 nameserver 8.8.4.4 EOF wget -qO- http://ipv4.icanhazip.com; echo
n.断开
#!/bin/bash SUDO='' if [ "$USER" != "root" ] then SUDO='sudo' fi $SUDO ip route del default $SUDO ip route del 你服务器的IP $SUDO tee /var/run/xl2tpd/l2tp-control > /dev/null <<< "d vultr" $SUDO strongswan down vultr ip link | grep -i ppp0 ip route | grep -i ppp0 $SUDO systemctl stop strongswan.service $SUDO systemctl stop xl2tpd.service $SUDO ip route add default via 你的网关 dev eno16777736
OK,没有了后顾之忧,马力开足学(shang)习(wang)吧!
DigitalOcean:
好吧,我为什么要说DigitalOcean是穷矮挫,首先,DigitalOcean的IP被Google封了,也就是说,你注册了这个VPS后,Google默认是上不了的,但是没有Google的***还能叫***吗?虽然网上有如何破解的办法,但是这一点实在让人无法原谅。其次,他家的VPS不提供定制ISO,也就是说,他们提供了什么版本,你就用什么版本,如果你想自已上传一个,没门!最后,Linode是10刀/月,内容2G,Vultr是5刀/月,内存是768M,而DO是5刀/月,内存是512M,So,玩儿蛋去吧...要不要选DO,您自已决定吧。
本来打算写个测评报告的,但是真是太累了,就不写了,简单看下结果吧:
VPN连接的PING值
丢包
CPU
内存
服务器Ping值
总结:
Linode稳定的让人感动,CPU、内存、硬盘、流量都比较满意,Vultr有一定的波动,而且硬件配置也比Linode弱不少
但是价格的差异是放在那儿的,Linode10要刀/月,而Vultr只需要5刀/月,然而Linode这个配置可以干的事情很多,更何况他的稳定性真是没得说。至于DigitalOcean嘛,听说它不限制流量。看自已的需求选择吧。
----------------------------------2017-01-25补充----------------------------------
连上服务器后,Ping域名很慢,但是Ping IP地址速度就快多了,觉得可能是DNS上的问题,经测试,把网卡的DNS改为208.67.222.222和208.67.220.220就好多了。
--------------------------------2017-01-25补充结束--------------------------------
----------------------------------2017-02-19新发现----------------------------------
Linode有5刀的方案了。。。
----------------------------------2017-07-28更新----------------------------------
宝贝女儿也想***,这一个帐户明显不够用了,所以还是要找如何能多人共享方法,经过一阵折腾,终于找到方法了。
1. 在 /etc/ppp/chap-secrets 中添加第二个用户,格式为: " username " l2tpd " password " *
2. 执行 openssl passwd -1 " password " 得到一串MD5加密的字符串,如: $1$5NwpneO7$YD82DhVJxCQpQ4zahB1N01
3. 复制这一段字符串到 /etc/ipsec.d/passwd 中,新行如下: username: $1$5NwpneO7$YD82DhVJxCQpQ4zahB1N01 :xauth -psk ,红色是手工添加的。
4. systemctl restart ipsec xl2tpd
5. 再有问题就自求多福吧^_^