加入收藏 | 设为首页 | 会员中心 | 我要投稿 温州站长网 (https://www.0577zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 云计算 > 正文

骚操作!使用家里的服务器也能像用云服务器一样方便!

发布时间:2022-10-26 14:35:53 所属栏目:云计算 来源:未知
导读: 很多做技术的朋友们家里都会有一台自己的服务器,或者说是一台长期开机提供服务的设备,这台服务器可能是用来做NAS、可能是用来做测试、也可能是用来挂一些长期运行的服务的。但通常情况下

很多做技术的朋友们家里都会有一台自己的服务器,或者说是一台长期开机提供服务的设备,这台服务器可能是用来做NAS、可能是用来做测试、也可能是用来挂一些长期运行的服务的。但通常情况下,你在外面是没法直接使用这台服务器上的服务的,原因有很多,最典型的问题就是没有公网IP和端口受限,本文中所描述的操作,解决的是端口受限问题。

提示0:非常规操作,并不能做到在客户端什么都不做的情况下直接产生这种效果,也就是说还是不能做到让任意一个人直接通过域名访问家里服务器上的Web服务。

提示1:文中所描述的效果并不是通过第三方服务器进行转发做到的,而是直接访问你自己家里的服务器。

提示2:如果你的家宽无法获取到公网IP,请联系运营商切换成公网IP或使用打洞(内网穿透)技术让客户端与服务器直接建立连接,本文不能解决此问题。(如果有人需要的话后面也可以写一篇相关文章)

提示3:文中部分敏感词做了微调,阅读时请自行脑内转换。

众所周知,国内的网络运营商出于各种原因,对普通用户的网络体验进行了限制,本文开头所说的端口限制就是其中一个,这个端口限制指的是:即使你获取到了公网IP,你还是不能让一些常见的对外提供服务的端口对公网开放。而如果你自己想在公网的另一台设备上访问一个你服务器开放在80/443端口上的Web服务,并且这个服务只是自己或几个少数的人使用的时候,这个限制就很烦人了。

可能会有没接触过这方面的朋友会无法理解这个限制到底会导致出现什么问题,我给你讲个小故事吧:

云计算服务器配置_云服务和云计算_云计算云服务

有一天你在家里搞了个NAS,可能是群晖的或者是什么别的品牌的,甚至可能是自己拿开源项目搭的,总之这东西有个Web端,你可以直接在这个Web端上很方便地操作你的文件。

然后呢,你家里的网络是有公网IP的,可以在外网环境下直接访问这个NAS,但由于运营商的限制,虽然你已经有了公网IP,但是还是无法做到绑了个域名之后直接不带端口地在浏览器上访问(因为80和443端口都被封了),只能是把端口改成别的,然后像:1234这样访问你家NAS的Web端,很麻烦,是吧?

云计算云服务_云服务和云计算_云计算服务器配置

另外你还在你的NAS上搭了一个别的带Web端的服务,或者是你那本来就是个全功能的服务器,上面搭了什么Gitlab、NextCloud之类的各种服务。然后基于上面的情况,你想要在外网环境下访问这些不同的Web服务,就需要指定两个不同的端口,而且还得记着哪个端口号是哪个,因为你就算绑了子域名,也无法做到像这样访问,你的域名后面还是得加个指定的端口号,是不是发现更麻烦了?

云服务和云计算_云计算服务器配置_云计算云服务

这时候你了解到了FRP这个工具, 它可以帮你把流量通过一个中间服务器进行转发,这样只需要把域名绑在中间服务器上,直接访问中间服务器的80/443端口就可以做到通过域名直接访问家里服务器上Web服务的效果了。于是你使用FRP加上一个云服务器转发了你家里服务器上的两个Web服务,并且能通过和这样的方式直接访问了。

云服务和云计算_云计算云服务_云计算服务器配置

云计算云服务_云计算服务器配置_云服务和云计算

但是体验完效果之后你发现了一个很大的问题,那就是你与服务器通信的时候并不能达到家里网络带宽的上限,非常受中间服务器带宽的限制,于是你抱着给中间服务器加点带宽的想法打开了云服务器的控制台。然而在看了看云服务器的带宽费之后你还是放弃了,想要达到很高带宽的话成本极高,而你的服务总不能用按量付费的网络来中转吧?毕竟有NAS在上面呢,传文件比较多的话,这流量费可贵了!而且不用这种方式你也能直接带端口访问,还不受中间服务器的带宽限制,就是麻烦点而已…

于是你又切换回了域名+端口的方案,每天忍受着访问带端口的Web的痛苦,直到有一天你想到了一个方法,使用【虚拟专用网】直接通过内网访问,然后修改客户端的hosts文件强制指定自己的域名到内网IP上,效果确实是你想要的,但似乎不太优雅?毕竟每次想调整域名都需要修改每个客户端的hosts文件,实在是麻烦,你看了各种和你相同境况的人写的文章,却发现好像你自己用的这个方法已经比他们的优雅很多了,似乎没法再继续优化下去了,直到你看到了这篇文章…

讲了这么久故事,该开始正式内容了,有什么办法能让这个访问的步骤更简单、方便、优雅呢?

其实很简单,你需要自己搭建一个DNS服务器并自定义域名解析,让你的这几个服务能在内网通过域名访问,然后通过【虚拟专用网】隧道把这个DNS解析传播给客户端,并让你自己的DNS优先级变为最高(超过你实体网卡上指定的DNS),这样就可以让你的客户端在建立隧道后就能无感知地通过隧道直接使用域名访问某个特定的Web服务了。

接下来是具体操作流程:

首先,我服务器上已经使用Docker搭好了一个Gitlab和一个NextCloud,并按常规服务器的方式配置好了Nginx的域名转发,如果是一个没有被限制端口并且有公网IP的服务器,这时候只需要绑个域名已经可以直接访问了。

然后,我的路由器使用的固件支持使用ssh连上去操作,而路由器本身也是有DNS服务器功能的,所以我尝试了一下直接利用这个DNS服务器来搞事情,这里我直接用ps|grep dns命令就找到了一个Dnsmasq的服务。

通过翻阅Dnsmasq相关的文档,我发现这东西是可以做自定义解析的,而且非常简单,只需要加一行像address=/git.crawler-lab.com/192.168.1.1这样的配置,就可以轻松地实现自定义解析了。

于是我的配置文件变成了这样:

重启dnsmasq后在内网环境下测试一下效果:

云服务和云计算_云计算云服务_云计算服务器配置

确实是可行的,直接就把这个域名解析到内网里的服务器上了。(这也是让内网环境下无感知地使用域名访问内网设备的方法)

然后要怎么样才能让并不在家里的另一个客户端也能做到这种效果呢?这里我选择的是使用【虚拟专用网】建立一个隧道云计算服务器配置,如果你不想使用我的这种方式,其实也还是可以通过FRP来做,FRP是有点对点连接方式的,只需要转发80/443端口和DNS服务器的53端口,并指定自己的DNS为127.0.0.1就行了,这个FRP方案是我想到的另一种方案,但并没有尝试过,或许会有坑。

因为估计很多人都不会搭【虚拟专用网】的关系,这里还是讲一下怎么搭吧。我这边使用的是【Open虚拟专用网】,服务端可以搭在服务器上,也可以搭在路由器上,由于我的路由器可以直接创建【虚拟专用网】服务,这里就直接把【虚拟专用网】的服务端搭在路由器上了,如果你路由器没有这种功能,可以参考一下网上的教程然后搭在服务器上。

云服务和云计算_云计算服务器配置_云计算云服务

在路由器上设置好之后,我们在客户端这边连上刚刚搭建好的【虚拟专用网】服务。

云计算云服务_云计算服务器配置_云服务和云计算

这里我用的是tun模式,实际操作时用tap模式也是可以的,我只是为了做一些特殊操作时更方便一些。(虽然tap模式下分配的IP是一个虚拟网段的,但你实际上还是可以访问原先的内网,并不影响使用)

这时候你已经可以通过IP直接访问到你服务器上的Web服务了,但通过域名访问可能还是不行,你还需要做一个简单的操作——把你自己的DNS优先级调高。

这里我选择直接将【Open虚拟专用网】创建的虚拟网卡的跃点数调低,这样所有流量就会优先走虚拟网卡了,设置如下:

云计算服务器配置_云计算云服务_云服务和云计算

将跃点数调到1之后ping一下服务器试试:

云计算云服务_云计算服务器配置_云服务和云计算

完美可用,在不改hosts文件的情况下直接就把域名解析到了内网IP上,以后这个客户端就只需要连接上【虚拟专用网】就好了,其他的啥都不用做(包括刚刚的调整跃点数)!而且【虚拟专用网】可以开机启动,自动连接,也就是说只要一开机就能直接通过域名访问家里的服务器,做到完全无感知,速度还不会受一个中间服务器的限制!再也不用担心家里拥有百兆上传的带宽却无处施展了!

这篇本来可以用一句话解决的,但是估计很多人会看不懂,所以我补了很多内容上去,现在全文将近4000字…就当是半个科普文了吧。如果觉得写得不错记得点个在看、留个言哦~

这个时代各种东西变化太快,而网络上的垃圾信息又很多,你需要有一个良好的知识获取渠道,很多时候早就是一种优势,还不赶紧关注我的公众号并置顶/星标一波~

(编辑:温州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!