当前位置: 首页 技术教程 正文

云服务器搭建VPN(Linux版)

VPN信息网 |
2120

由于内网的网络限制(如不能访问视频网站),就想能不能通过租用服务器来实现对内网限制的突破。想起现在如火如荼的云计算,就打算租用一台云主机,然后在其上搭建一个VPN服务器,最后通过客户端连接到该VPN服务器实现目标。

云主机的选择

由于第一次使用云主机,不敢花太多银子,就选择了阿里云服务器,因为阿里云搞活动,有6个月的免费试用期,虽然其他很多的云服务器提供商都提供试用服务,但基本上只有一个星期或者一个月的使用期限。

如果不是阿里云服务器的用户,可以参考下列的云服务器选择和配置方法对自己的云服务器进行配置;

如果已经创建了服务器,并且网络已将调通,可以直接跳至VPN服务器软件的安装部分。

阿里云平台的注册之类的部分略过,从选择服务器类型开始。

网络的配置

网络配置设置

网络配置设置

在选择网络配置上,有这么一项:公网IP地址,有 分配不分配 两种选择,注意下面的一段红字 :

分配的公网IP地址不能和ECS实例解除绑定关系,如需更加灵活的静态公网IP方案,建议选择“不分配”公网IP地址,配置并 绑定弹性公网IP地址

这里解释一下:

  1. 如果设置为分配IP地址,那么系统会自动为你分配一个公网IP供你使用(公网ip资源那么紧张,居然能够免费分配,惊喜),你可以通过该IP地址访问该云服务器,例如通过ssh远程连接、开启80端口启动web服务等等。
  2. 你也可以选择不分配,那么系统不会为你分配公网IP,那如何将云主机使用起来呢?
    通过弹性IP(EIP,Elastic IP) 。因为免费领取的套餐里面包含了EIP分配,你可以将分配的EIP绑定到云主机 ( 后文中的云主机全部用ECS代替,ECS是Elastic Computer Server的缩写 ),那么你就可以通过EIP访问ECS了;

两种方式的区别:方式1中,系统为你分配的公网IP地址,在你使用的过程中是不能够修改的,方式2中,系统不为你分配公网IP,你需要自己申请EIP,然后绑定到ECS,中间过程中如果想换个公网IP号,完全可以解绑,重新绑定新申请的EIP。

建议:对于初学者来说,没必要经常换IP号,所以方便起见,建议使用方式1 。

其他的设置就根据自己的实际情况进行就OK了,我选择的OS是 Ubuntu 16.04 64bit

创建完成后,进入控制台,能够看到刚才你所创建的主机:

ESC运行实例

ESC运行实例

现在,我们的ECS已经开始运行了,默认是开启ssh服务的,让我们通过配置的密码来登录一下,Windows下通过putty登陆,linux下通过终端启动ssh来登陆:

ssh登陆

ssh登陆

在第一次登陆ssh时,会显示服务器的指纹信息(ECDSA key fingerprint)供连接用户进行确认,用于防止中间人攻击,填写 yes 即可,之后该电脑的同一个用户登陆,不再显示确认信息。

设置安全组

阿里ECS默认打开的是ssh的22端口,以及ICMP的所有端口(用于ping)和3389端口,如果希望外部设备能够访问ECS的TCP/UDP服务,或者是其他协议的访问,必须先通过 安全组 策略的设置:

进入安全组策略设置

进入安全组策略设置

点击 配置规则

配置规则

配置规则

如下图所示:

image.png

image.png

其中第一条是我所添加的,表示打开服务器的所有协议的所有端口。该规则会使ECS的安全性降低,对于要充当稳定的Web服务器的主机来说,当然是不合适的,我为了测试方便(省得一个一个去打开所用到的端口),就把所有端口都打开了。

网络测试

要进行网络测试,首先通过ssh登陆到ECS主机,通过 nc 测试tcp/udp是否能正常连接,Windows下可以装Cygwin或者是Win10自带的linux子系统,android用户安装termux,就可以在命令行下使用nc命令了。

测试TCP

如下图所示,是对ECS的9900 TCP端口服务进行的测试,client-send 是本地发送给ECS的内容,ECS-send 是ECS发送给本地的内容:

TCP测试

TCP测试

测试UDP

如下图所示,是对ECS的9900 UDP端口进行的测试:

UDP测试

UDP测试

当然,你也可以选择一个你感兴趣的端口进行测试,完成测试后,我们就可以开始为ECS搭建我们自己的vpn服务器了!

VPN服务器–openvpn的安装

原始的安装vpn服务器的方式非常麻烦,而且容易出错,所以通过一个脚本进行vpn服务器软件的安装。

该脚本是一个GitHub项目,可以查看说明:openvpn-install ,也可以直接按下面的步骤进行;

1、 下载安装脚本

在命令行中输入:
wget https://git.io/vpn -O openvpn-install.sh
即可下载openvpn的安装脚本,但有时候下载的速度很慢,所以,可以直接到 github 上下载 openvpn-install项目的压缩包,解压以后,就能看到里面有一个 openvpn-install.sh 文件。

2、安装openvpn

不管是哪种方式进行的下载,我们都得到了 openvpn-install.sh,现在我们就能在服务器上进行安装了(由于ECS服务器上的VPN已经在使用,安装及截图都在本地虚拟机上进行,过程与在ECS上安装完全相同),对于已经装了openvpn,但是没有成功的同学,可以使用 openvpn-install.sh 先将原有的服务删除,重新进行安装。

在命令行输入:

sudo bash ./openvpn-install.sh

弹出如下文本界面:

输入要侦听的网卡

输入要侦听的网卡

设置待侦听的网卡IP地址 IP address 设为 0.0.0.0,表示侦听本机所有网络;

vpn网络设置

vpn网络设置

vpn服务所使用的网络协议我们设置为推荐的UDP协议,端口号、DNS都使用默认设置,最后,我们输入客户端名称就可以了,如上截图所设置的名称为 vpnclient ,之后,脚本开始执行安装过程;

在最后,安装结束安装时候,会要求提供外部的IP地址(因为经过了NAT网络),只需要填写你通过ssh连接ECS时所用的IP地址即可。

外部地址输入

外部地址输入

默认已经创建好了一个帐号(就是刚才你输入的vpnclient),在用户目录 下面可以看到一个文件 vpnclient.ovpn,我们将该文件交给需要连接的客户端,就能够使其连接到我们的VPN服务器上来。

当然,你还可以使用 openvpn-install.sh 进行 新用户添加、删除已存在的用户、卸载openvpn。总之,操作人性化,轻松加愉快。

openvpn-install选项

openvpn-install选项

3、查看openvpn服务是否安装成功

我们通过命令:

sudo netstat -anp | grep vpn

看到openvpn的1194号udp服务端口已经开启:

查看vpn网络端口状态

查看vpn网络端口状态

并且,通过 ifconfig 看到:

ifconfig结果

ifconfig结果

除了原来的 eth0 设备和 lo 设备,有了一个新设备 tun0,这就是openvpn创建的,说明vpn服务已经成功安装。

客户端连接vpn服务器

通过Windows连接:
先下载 openvpn-client.msi 客户端软件(因为msi文件百度云不能共享,压缩了一下,请解压后享用),或者google下载最新的客户端。

完成安装后,打开 OpenVPN Client

VPN客户端界面

VPN客户端界面

将在服务器上生成的ovpn文件拷贝到客户端电脑上,之后,选择该文件添加到 openvpn客户端:

添加本地ovpn文件

添加本地ovpn文件

例如,我添加了一个melone.ovpn文件(当然,前面生成的是vpnclient文件,就添加vpnclient.ovpn文件),结果如下:

添加了melon客户端后

添加了melon客户端后

连接后,客户端显示为:

连接成功

连接成功

和服务器的 10.8.0.1 在同一个网络,我们通过 ipconfig 查看地址信息:

Windows的网络状态

Windows的网络状态

和原来相比多了 10.8.0.2,并且,通过 ping 10.8.0.1 能够ping通,说明我们的VPN架设成功,可以享用远程ECS服务器上所提供的服务了。

不能上网问题

问题:客户端和远程服务器连接都正常,但是客户端的机器不能上网?

答:这和linux端的防火墙有关,找到 /etc/iptables.rule ,将所有的192.168.42.0/24 的IP全部换成 10.8.0.0/24的IP,如下图所示:

-A POSTROUTING -s 192.168.42.0/24 -o enp0s3 -j MASQUERADE
-A POSTROUTING -s 192.168.43.0/24 -o enp0s3 -m policy --dir out --pol none -j MA
... ...
-A FORWARD -s 192.168.42.0/24 -d 192.168.42.0/24 -i ppp+ -o ppp+ -j ACCEPT
-A FORWARD -d 192.168.43.0/24 -i enp0s3 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -s 192.168.43.0/24 -o enp0s3 -j ACCEPT

修改为:

-A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
-A POSTROUTING -s 10.8.0.0/24 -o eth0 -m policy --dir out --pol none -j MASQUERADE
... ...
-A FORWARD -s 10.8.0.0/24 -d 10.8.0.0/24 -i ppp+ -o ppp+ -j ACCEPT
-A FORWARD -d 10.8.0.0/24 -i eth0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -s 10.8.0.0/24 -o eth0 -j ACCEPT

然后,重启一下服务器。

当然,如果你所建立的VPN局域网就是 192.168.43.0/24 的网络号,那就不需要修改了。

完!

 

anyShare分享到:

声明:原创文章请勿转载,如需转载请注明出处!