浅谈网站搭建中的内网穿透、端口转发等知识点

背景:之前闲得很,想要自己搭建一个网站,服务器是内网中的一个设备。但由于是家庭宽带,没有公网Ip,80、8080、443等端口也是被封掉的(突然觉得好可怜),所以使用了花生壳的内网穿透,之后对其的原理产生了好奇,搜索了一些资料、系统化地呈现下来。

1.普通网站的访问流程:

  用户输入域名->DNS服务器查找到服务器对应的Ip->服务器的80端口(或者443,用在HTTPS中)中的软件监控到了访问,做出响应。

    PS:如何在同一台服务器上部署多个网站?

      这就涉及到了一个主机头的概念。参考博文:https://blog.csdn.net/qq578933760/article/details/7707574。实质上就是服务器会读取用户请求中关于域名的部分,再转到对应的网站下。

2.部署在内网的服务器(有固定公网Ip、80端口可用时)的访问流程:

  用户输入域名->DNS服务器查找到网关的ip->网关收到访问申请,要访问自己的80端口->根据预先在网关中设置好的端口映射规则,将申请转发给内网中的服务器(注意,此时是内网通信,网关使用的是自己的内网Ip)->服务器返回消息,发送给网关的内网ip->网关通过公网ip将消息发送给用户

3.部署在内网的服务器(没有固定公网ip、80端口不可用时)的访问流程:

  这时我们可以提出一种设想,如果我租用一台有固定公网ip、80端口可用的服务器,并将域名绑定到这一服务器对应的ip上,之后设置反向代理,指定网关的公网ip并指定非80端口。同时,虽然没有固定公网ip,但是我们可以设置一个同步流程,每次重新随机分配公网Ip时,我们都将这个ip同步到服务器上。流程就会变成:

  用户输入域名->DNS服务器查找到我们所租用的服务器的ip—>服务器80端口检测到访问,反向代理回网关的动态公网ip(指定非80端口),也就是转发->网关非80端口收到访问申请->根据预先在网关中设置好的端口映射规则,将申请转发给内网中的服务器->服务器返回消息,发送给网关的内网ip->网关将内容返回我们所租用的服务器->服务器返回内容给用户。

  实际上,这已经和现在市面上比较流行的内网穿透软件,例如花生壳,的原理比较接近的。但是花生壳的内网穿透是不需要配置网关的端口映射规则的,这一点是怎么做到的呢?

4.以花生壳为例的不需要配置端口映射规则的访问流程:

*注:这只是本人的推断,不代表软件本身真实的原理

  和上一步不同的是,花生壳使用时要求服务器要一直运行着花生壳的客户端,而域名也是绑定在花生壳的服务器下的。那么这实际上就不是单纯的web通信了,用户发送消息后花生壳的服务器接收到消息,之后就是服务器端和客户端的通信,原理和微信电脑端和手机端的相互通信一样,所以自然不需要配置端口映射。

  当然,无论是花生壳的方式,还是3中的方式,不仅会影响访问速度,用于转发的服务器的负载和流量也是不小的。而且速度上和流量上会有限制,并没有完全体现自己搭建服务器的优势。

----------------------------------------------------------------------------------

参考资料:

  1. https://www.zhihu.com/question/21993610
  2. https://zhuanlan.zhihu.com/p/26960644
  3. https://www.jianshu.com/p/39825e2d71da
原文地址:https://www.cnblogs.com/jiading/p/11146787.html