[success]最近一直在研究内网穿透,因为我在自己的服务器上面部署了很多服务,想自己去访问,但是一个一个穿透过去实在麻烦,而且直接暴露在公网上也有很多安全问题。所以我把目光转向了VPN[/success]
说实话我一直以为VPN就是拿来翻墙的,虽然现在的确有很多人拿来翻墙用,不过我自己谷歌了一下,才发现并非如此,下面是VPN的介绍。
是一种常用于连接中、大型企业或团体与团体间的私人网络的通讯方法。它利用隧道协议(Tunneling Protocol)来达到保密、发送端认证、消息准确性等私人消息安全效果,这种技术可以用不安全的网络(例如:互联网)来发送可靠、安全的消息。需要注意的是,加密消息与否是可以控制的,如果是没有加密的虚拟专用网消息依然有被窃取的危险。VPN属于远程访问技术,简单地说就是利用公用网络架设专用网络。例如某公司员工出差到外地,他想访问企业内网的服务器资源,这种访问就属于远程访问。
说的直白一点就是我的路由器如果启动了VPN服务器,如果我连接到了这个VPN就相当于我自己连接了这个路由器,然后就可以像平常一样,直接访问服务器里面的各种资源。而且你访问网站时其实是通过我的路由器来访问,然后发送数据给你。所以这也是为什么VPN可以拿来翻墙的原因。当然如果你的路由器开启了SSR服务,你也顺便可以拿这个VPN来翻墙。。。
路由器开启VPN服务
说实话,感觉路由器刷了潘多拉固件就是爽,不仅路由器变成了一个mini的linux系统,而且还有了非常多的功能。潘多拉固件自带VPN服务,所以我可以直接打开。
[infobox title=”注意”]VPEN协议只能选openVEN,PPTP和L2TP因为端口固定,还有国内网络提供商会自动把这个东西给过滤掉(这也是为什么国内的VPN基本上没用的原因)。所以你是无论如何都连接不上的。。。我刚开始用PPTP死活连接不上,搞得我一度以为是自己的问题。。。还有L2TP虽然连接上了,但是根本无法访问网络(或者说网速几乎为0)。所以这里我们就只能选择openVPN了。
当然,虽然公网访问是会被屏蔽,但是如果你只是在局域网内访问,那么就没问题。比如我的wifi就在校园网的局域网下面,那么我就只需要记住路由器的IP地址就可以了,然后直接访问这个地址就可以了
[/infobox]
这些设置其实都不用管,默认就可以了,当然要注意自己把默认端口改一下,这样网速会快一点。。。
还有要注意的一点就是,我们要自己生成一下秘钥
然后导出client.ovpn文件就可以了。然后我们下载一下openVPN的客户端。
然后自己导入配置文件,选择你自己生成的clien.openvpen文件就可以了。
然后就可以在局域网内访问了。。。当然因为我的路由器设置的是动态的ip,所以局域网访问还得时刻知道ip地址。。。
内网穿透
只是在局域网访问就没什么意思了,我想在任何地方访问那么该怎么办呢?这个时候就要请出内网穿透这个大佬了。内网穿透其实也很简单,我这里使用的是frp,nps还没有时间去研究。。。
frp我之前写过一篇文章讲解如何使用,这里我就不多说,我们需要下载服务端和客户端。服务端我下载的是amd64的版本,路由器是不能用这个的,我的路由器不是amd架构,而且还是32位。。
自己根据自己的路由器和服务器情况进行选择(linux下可以输入 uname -a查看系统架构和位数)
然后把服务端放在阿里云服务器上,客户端放到路由器里面。
服务端和路由器的配置文件分别如下。
服务端
[block]
[common]
bind_port = 7000
token=xxxx(服务端和客户端必须相同才可以访问)
[/block]
客户端
[block]
[common]
server_addr = xxxxx #服务器IP地址
server_port = 7000 #通信端口
token= xxxxxxx
[vpn_port1]
type = udp
local_port = 1924 #这个是本地的openvpn端口
remote_port = 1924 #这个是你服务器的映射端口
[/block]
配置好后,自己直接让两个服务都挂在后台即可。
这里说一下让服务在后台运行的指令。
[highlight lanaguage=”bash”]
#这个是当终端退出时继续运行这条命令 nohup command > out.file 2>&1 & #这里是把错误和日志都打印在out.file这个文件中 #注意,必须要按照这个规范写,当然还有简写的形式 nohup command &
[/highlight]
2>&1 是将标准出错重定向到标准输出,这里的标准输出已经重定向到了out.file文件,即将标准出错也输出到out.file文件中。最后一个&, 是让该命令在后台执行。 试想2>1代表什么,2与>结合代表错误重定向,而1则代表错误重定向到一个文件1,而不代表标准输出;换成2>&1,&与1结合就代表标准输出了,就变成错误重定向到标准输出.