作者 | Loco

来源 | 小周码字

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

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

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

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

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


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

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


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

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


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


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



但是体验完效果之后你发现了一个很大的问题,那就是你与服务器通信的时候并不能达到家里网络带宽的上限,非常受中间服务器带宽的限制,于是你抱着给中间服务器加点带宽的想法打开了云服务器的控制台。然而在看了看云服务器的带宽费之后你还是放弃了,想要达到很高带宽的话成本极高,而你的服务总不能用按量付费的网络来中转吧?毕竟有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字…就当是半个科普文了吧。如果觉得写得不错记得点个在看、留个言哦~

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

  • 最担心的事情终于发生了,APP已经可以一键“脱掉”你的衣服了

  • 我造的假我自己打,Adobe推出“反PS”

  • 李彦宏被泼水,是“多数人的暴力”还是“群众的宣泄”

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

  1. 阿里云服务器怎么更换操作系统?阿里云服务器更换操作系统文档

    阿里云ECS服务器操作系统如何选择?笔者分享阿里云操作系统选择说明及选择方法: 公共镜像指的就是:操作系统(Window或Linux) 阿里云服务器操作系统镜像地址:Linux系统镜像&Win ...

  2. 云服务器有什么作用?云服务器是干什么的?

    许久不更新都手痒,坚持为大家分享一些有价值的东西,期间很多小伙伴也私信我一些问题,自己也提升了不少,能得到大家的认可也是一件很有成就感的事情.为大家推荐比较好便宜的云服务器,目的是花最少的钱去创造更多 ...

  3. 华为云服务器默认密码怎么修改,云服务器怎么修改登录密码

    云服务器怎么修改登录密码 内容精选 换一换 本节为您介绍如何在本机使用远程登录工具MSTSC登录Windows弹性云服务器.弹性云服务器状态为"运行中".如果弹性云服务器采用密钥方 ...

  4. 云服务器可以安装操作系统么,云服务器能装操作系统吗

    云服务器能装操作系统吗 内容精选 换一换 如果Linux操作系统云服务器未安装密码重置插件,可以参见本节内容重新设置密码.本节操作重置的是root用户的密码,您可以重置完root密码后登录云服务器后再 ...

  5. F5服务器上架文档,f5云服务器

    f5云服务器 内容精选 换一换 该操作只在跨AZ部署HA场景下才需要执行.EVS无法实现跨AZ磁盘共享,所以在跨AZ部署HA场景中,需要规划三台弹性云服务器,在每台云服务器上各绑定一块SCSI盘并配置 ...

  6. 学生服务器选用什么系统,学生云服务器系统选择

    学生云服务器系统选择 内容精选 换一换 超高性能计算型主要用于满足高端计算(例如工业仿真.分子建模.计算流体力学)的需要,除了提供强大的CPU能力外,还提供了多种选择,使用EDR InfiniBand ...

  7. 购买云服务器,为什么要购买云服务器

    第一点: 首先云服务器价格普遍要比自己搭建的要来的低, 适合入门, 如果需要提高配置只需网上点点就行了, 重启等操作转眼就能完成. 第二点: 成本问题, 云服务器不用考虑复杂的服务器维护费用, 也不用 ...

  8. xftp不能上传文件到服务器,xftp传文件到云服务器

    xftp传文件到云服务器 内容精选 换一换 安装传输工具在本地主机和Windows云服务器上分别安装数据传输工具,将文件上传到云服务器.例如QQ.exe.在本地主机和Windows云服务器上分别安装数 ...

  9. 如何查询云服务器的操作系统,如何查询云服务器的操作系统

    如何查询云服务器的操作系统 内容精选 换一换 本节操作介绍云服务器新内核启动失败时如何设置使用第二内核启动.本节操作适用于CentOS EulerOS操作系统,且系统内安装至少两个内核.登录控制台,重 ...

  10. 查服务器的作用有哪些,云服务器优点和功能有哪些,可以看看这些或许你会明白...

    原标题:云服务器优点和功能有哪些,可以看看这些或许你会明白 云服务器是众多服务器的一种,云服务器又叫云计算服务器或云主机.云服务器使用云计算技术,云服务器整合了数据中心三大核心要素:计算.网络与存储. ...

最新文章

  1. 自学考试计算机实践课,自学考试的计算机实践课怎么考大神们帮帮忙
  2. python语法书籍推荐_python语法的书
  3. stylelint初体验
  4. 组件与组件之间的通信以及vue2.0中的变化、示例
  5. 【原创】Linux安装Redis
  6. win7系统临时文件夹的打开方法
  7. JS代码实例:实现随机加载不同的CSS样式
  8. 操作系统第二章课后答案
  9. 等保测评--网络安全等级保护定级指南
  10. idea 安装Vue插件 超详细
  11. java实现邮箱推送
  12. win10电源设置选项无效--高级电源选项
  13. UOJ#449 喂鸽子
  14. 【iOS】XCode14 iOS16适配 pod签名 12.1闪退
  15. 【FND】EBS中Java并发程序开发
  16. 敏捷开发?敏捷管理?什么是敏捷?(一)
  17. H3C(s1850)初始化配置流程
  18. H5页面保存base64图片到本地
  19. 【环境配置】python+matplotlib简单安装教程
  20. PTC Mathcad Prime7.0,简单易用的用户界面

热门文章

  1. Android 5.1 Gallery2 模块编译不过解决办法
  2. 远程删除用户照片?刚刚,拼多多承认了!
  3. MySQL:Left Join 这个坑,千万别踩!
  4. 别人在抢红包,程序员在研究红包算法
  5. Google 中国开发者大会最后一天报名!
  6. 复杂网络代码_据报道称“浏览器内核有上千万行代码”,浏览器内核真的很复杂吗?...
  7. *第七周*数据结构实践项目二【建设链式队列算法库】
  8. 每天一道Rust-LeetCode(2019-06-02)
  9. Maven 常用的命令
  10. 入门 Angular 2 杂记