需求背景
在上一个章节我们讲究了私有云的部署,但是会有一个问题,我如果在外面,如何访问家里电脑上部署的私有云服务?其实这个问题在扩大化说 就是 如何可以在家庭网络以外 可以访问到 家庭网络:公网 访问 内网。
内网转外网
顾名思义:就是想办法把自己的内网机器 可以直接 让外网可以访问。由于我们互联网技术不是我们国家发明的,在加入互联网之后我们分配到的公网IP也不多,不像美国人口少IP还多,基本每家都有公网IP(好羡慕)。
在我们国家需要公网IP必须要购买服务器或者家里安装电信网络。而我家的情况安装了电信公司提供的网络服务有一个 不固定的公网IP。我们的文章我主要解释我家里的网络情况。后面会介绍几种非网络服务商提供的公网IP的方式。
电信网络公网IP
如上图,通过ip138可以查询到,我的出口IP是上图。切记非电信供应商截图的IP不一定是通过你家,可能是通过多种路由设备转入到你家,这种就不行的。可以看到电信猫的管理界面IP和 ip138查询的一样,就说明我家的IP是公网IP
如上图,我家里的网络是 电信提供的猫 接入了一个 TP-LINK。家里的所有上网设备都是接入 TP-LINK进行上网。
网络请求转发
最上面是TP-LINK的管理界面,下面是电信猫的管理界面。我会设置所有从 外网请求 的所有流量都转发到 TP-LINK这个设备。
我举个例子,假如我的公网IP是 a.b.c.d。你通过任何方式的TCP和UDP协议 访问这个IP的任何端口数据包,都会转发到 TP-LINK这个路由设备。
为什么要设置这个东西?
因为我们的私有云电脑是属于TP-LINK 局域网的。如果我们想要通过访问公网IP或者域名 可以访问到这个服务,就必须进行 数据包转发。需要从电信猫转发到TP-LINK,然后TP-LINK在转发到对应的私有云电脑上就可以了。
如上图,最上面的截图是nextcloud需要一个网址,可以看到我的网址是 http://xxx.home.54php.cn。 可以看到我将 home.54php.cn(54php.cn是我个人注册的) 所有子域名都解析到了我的公网ip上了(这里有个问题,就是电信的IP有时候会变的,如何解决这个问题会讲解的)
我们可以想象一下,通过访问 http://xxx.home.54php.cn:10000 也就是 a.b.c.d 这个公网IP的 10000端口。首先 a.b.c.d 所有的请求都会转发到TP-LINK,然后TP-LINK管理界面有 虚拟服务器的功能【上面有截图】,可以看到通过TP-LINK 按照端口 将请求再次转发到对应机器。只要请求到了具体服务器上了指定端口(例如80),那就是服务器上的各种服务配合的事情了。例如通过nginx做web服务器转发到对应服务,例如php,python等等。
通过如上的操作 我就可以通过一个域名(其实也是IP,因为域名解析要做的事情就是找到对应的IP,也就是DNS服务的功能)。不知道是否给大家讲解清楚了,如果大家还有不明白的可以直接加入我们技术交流群进行交流【QQ群:325264502】。这块大家弄清楚了就非常容易理解了。就是多个局域网相互转发数据包。
为什么不能80或者443 默认端口?
因为电信公司非正规在电信公司备案企业或者个人,是不会开启默认服务端口,例如80,443,22等
公网IP经常变怎么办?
其实这也是为什么不用IP直接访问的原因,因为我的域名是不会变的,如果IP变了,我只需要通过一个方式将域名和IP的对应关系更新下就可以了。接下来就是DDNS登场了。我们经常听说DNS,前面在加上一个D是什么玩意。这里多的一个D是动态的意思。一般我们理解的一个域名和IP的对应关系是定死的。DDNS就是在自己知道自己的IP变了之后可以去更新域名的解析IP地址的。
大家可以看到我的*.home.54php.cn 全部到解析到家里了。为了达到我们的目的我们要使用一个能够提供ddns服务的dns服务商。我这里选择的是 DNSPOD。
目前在github上有人提供脚本:https://github.com/apanly/ArDNSPod。大致原理 就是 通过类似ip138这类网站获取目前自己的外网ip,然后在获取域名解析的IP,如果两个IP不一样通过调用DNSPOD提供的接口更改域名绑定IP。
非电信网络获得公网IP
原理其实和电信网络差不多,只是不同于电信服务商提供的公网IP,而是其他人提供了一个公网IP,然后通过别人家的公网IP服务转发到 我们内网机器上。或者你可以理解 有一个人按照了电信网络然后通个了一种技术手段 可以让我们访问一个他们指定的域名 然后 可以转发到自己内网的机器上。
这种内网转外网的服务其实非常多,例如经常听到的花生壳,Ngrok,NAT。我记得我博客就有讲解过:Ngrok NatApp 微信本地化调试利器。
如何获得这样的公网IP。你可以去任何服务器供应商购买服务器 就会获取一个免费或者付费的IP。例如我的 博客 就是在腾讯云购买的(为什么买腾讯云,因为当时做活动便宜,所以不要争论为什么不用阿里云,网易云等等)。然后在自己服务器上搭建各种内网转外网的服务端服务。
如果是购买服务器搭建内网转外网的服务,这种比较考验大家的功底,需要掌握的知识相对要求较高。
如果是别人搭建好了内网转外网的服务,你只需要搭建别人指定好的客户端软件进行设置就可以了。
如果是别人搭建好的,一般这种网站都会要求注册会员,然后进行一定免费 + 付费的方式给大家提供服务,并且这种一般有种缺点,只能有一个域名。不像我个人电信IP 可以绑定多个域名,多个端口,支持多种服务。但是好处是 可以是 80端口。
个人推荐如果只是玩玩 可以在网上找一些别人提供好的服务来体验下就可以了。可以搜索引擎搜索关键词:内网转外网 。
如果大家担心被骗,可以加入我们的QQ群,几个人合伙买个服务器(可以按月按年),搭建一个内网转外网的服务。到时候我可以技术支持。
参考资料
DNSPOD DDNS源码:https://github.com/apanly/ArDNSPod
Ngrok NatApp 微信本地化调试利器:http://www.54php.cn/default/211.html