从零开始搭建VPN(采坑全记录)

由于业务需要,需要翻墙到日本亚马逊站点访问,采用的很多梯子均不满意。想想也有一台腾讯云香港服务器,是否可以在服务器上自己搭建VPN服务,说干就干。

先普及一下什么是VPN,VPN能干什么呢?

VPN中文翻译叫做:虚拟专用网络。功能是,在公用网络上建立专用网络,进行加密通讯。
适用的场合:
       1.你的公司网络在一个局域网,不能外部访问。有一天你外出度假了,想访问一下公司的内部网络,外网是不能直接访问的。如果公司的网络有一台主机设置了VPN,你就可以通过连上这台VPN主机,来访问公司内部网络啦。
      2.如果你的主机是在国外,你可以在这台主机上配置VPN,然后你的电脑连上VPN之后就可以啦。
      3.某台服务器(如游戏服务器)限制了一些IP连接到它上面,这时你配置VPN,连上VPN之后,就可以继续访问那台服务器咯。

服务器系统为ubuntu16.04,于是在网上搜索了一篇如何在Ubuntu系统上搭建VPN,依葫芦画瓢。

1、用root账户登陆服务器
2、安装PPTPD
apt-get install pptpd
3、编辑pptpd.conf文件
vi /etc/pptpd.conf
取消注释下面内容
 localip 192.168.0.1
 remoteip 192.168.0.234-238,192.168.0.245
这几句的意思是:当外部计算机通过pptp连接到vpn后所能拿到的ip地址范围和服务器的ip地址设置。
4、添加用于登陆的账户
vi /etc/ppp/chap-secrets
格式如下:
# client server secret IP addresses
root  pptpd  123456  *
从左到右依次是用户名(自己指定)、VPN服务器(填写pptpd)、密码(自己指定)、IP(不做IP限制,填*即可)。中间用空格分别隔开。
5、设置DNS解析,编辑pptpd-options文件
vi /etc/ppp/pptpd-options
找到ms-dns,取消掉注释,并修改DNS地址,或者服务器本身的DNS,这里我推荐大家用Google提供的免费 DNS 8.8.8.8 和 8.8.4.4
更改为如下内容
ms-dns 8.8.8.8
ms-dns 8.8.4.4
6、开启转发
vi /etc/sysctl.conf
取消注释以下内容
net.ipv4.ip_forward=1              //这句话意思是:打开内核IP转发
更新一下配置
sudo sysctl -p
7、安装iptables并设置
apt-get install iptables
sudo iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j MASQUERADE
后面这句话作用是:立刻让LINUX支持NAT(platinum)
8、重新启动服务
/etc/init.d/pptpd restart
9、大功告成,VPN服务器就这么配置好了。
接下来,利用IP地址,刚才设置的VPN账号和密码,就可以连你的VPN啦。
遇到的问题解决如下:
速度如果太慢的话:
/sbin/iptables -I FORWARD -p tcp –syn -i ppp+ -j TCPMSS –set-mss 1356
然后在客户端测试连接一下,以win10系统为例,点开“网络设置”,添加vpn设置信息。
 接下来测试访问www.google.com成功,说明所配置的VPN已经成功。

采坑记录

1、第二天,由于业务需要,重启了一下VPN服务器,重启之后,服务器上所有业务全部访问不了,客户端同时也连接不上,服务器IP甚至都ping不通,有种不祥的预感。于是赶紧使用腾讯云服务器的VNC方式登陆(谢天谢地,VNC方式还能登陆,说明服务器不是被黑客攻击),查看日志,发现了重启之后有一条网络错误,于是用“ifconfig”查看服务器网络状态,发现只有lo网卡,并没有出现预想中eth0网卡,想到可能是网卡有问题,重启网络服务,“service networking restart”,提示失败,继续报错,网络服务无法启动,VPN无法使用。

2、 尝试着在腾讯云的控制台改了一下服务器的内网IP地址,希望通过改变内网地址可以让服务器网卡信息初始化一次。不出所料,修改了服务器网卡内网地址之后,网卡被初始化了一次,一切正常。担心重启之后不行,重新重启了服务器,所有服务又访问不了。此时根据前次的经验初始化一次网卡信息,可以获得访问,于是直接在vnc模式下使用了命令“dhclient eth0”相当于初始化了一次网卡,服务一切正常了。可是VPN无法使用。

3、此时想到服务器可能只是网络服务无法启动导致网卡无法获取到信息,于是想到使用“service networking restart”,仍然失败。查看配置信息 “cat /etc/network/interfaces”,配置信息有一条“pre-up iptables-restore < /etc/iptables.rules” 引起了我的注意。此条信息是为了使iptables正常使用vpn添加的规则,猜想可能是iptables规则导致,于是清理了iptables规则信息。继续“service networking restart”还是失败。突发奇想注释掉iptables的规则试试,测试“service networking restart”,重启成功,终于确定是网络服务的配置信息有误。
4、此时查看VPN服务,不能使用,查看iptable规则信息 ,“iptables -L -n”发现规则为空,没有保存规则,添加iptables规则,使用“iptables – save > /etc/iptables.rules”。保存规则到iptables.rules文件。重启了服务器,还是不能加载iptables规则信息,于是继续查看网卡的配置信息, “cat /etc/network/interfaces”,发现这条语句“pre-up iptables-restore < /etc/iptables.rules”又没有任何问题,于是查看官方文档,发现使用Ubuntu16.04的“pre-up”、“post-up”、“pre-down”、“post-down”、“up”、“down”等操作,不需要直接在配置文件中添加,配置文件 “/etc/network/interfaces”已经不支持此种写法。同时在“/etc/network”目录下多了个目录“if-down.d”、 “if-post-down.d”、“if-pre-up.d”、“ if-up.d” 、“interfaces.d”需要将每个配置写在相关目录的脚本中,于是在“if-pre-up.d”添加脚本信息“iptables-restore”内容为:

#!/bin/sh
iptables-restore < /etc/iptables.rules

之后重启network服务,重启成功了。

5、至此VPN服务仍然不能使用。查看服务状态,service iptables status ,service pptpd。发现两个服务并没有正常启动,于是将服务器加入自启动。使用”chkconfig iptables on,提示chkconfig 命令无法使用,查看相关资料找到Ubuntu使用“sysv-rc-conf”替代了chkconfig命令。于是使用“sysv-rc-conf  iptables on”(关闭服务使用 sysv-rc-conf  iptables off )、sysv-rc-conf  pptpd on”。于是重启iptables 和pptpd服务,VPN正常使用了。再次reboot重启,再一次链接VPN,还是失败,查看服务状态,iptables正常启动了。而且iptables转发规则也是正常的。pptpd服务没有启动,于是在/etc/rc.local添加了/usr/sbin/pptpd启动服务,reboot服务器。尝试连接VPN,正常了链接了。

至此采坑完毕,VPN终于设置正常了。此次搭建VPN服务初始直接照搬网上的教程,一路顺利,没想到后面留下很多坑,中途还找了腾讯云售后的小哥哥帮忙确定问题,一路下来,了解了iptables的设置、network如何正确配置,Ubuntu16.04如何添加系统服务(sysv-rc-conf )、eth0找不到的时候解决方法、添加自启动服务器到rc.local等等,由此可见配置任何服务都不能直接照搬网上教程,需要经过自己的摸索方可配置成功。网络教程上的东西远远没有自己摸索来的真贵和记忆深刻。

 

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注