花生壳域名绑定动态IP原理浅析

时间:2022-09-04 12:11:27

花生壳域名绑定动态IP原理浅析

 

闲来无事,想自己搭一个web服务器,在家里自己的内网玩一玩。上网搜索发现可以在花生壳申请免费域名,而且还能不做任何端口映射配置,就能穿越NAT,对外发布,真是挺神奇的!带着疑问和好奇心,笔者按部就班地搭建了一个最简单的web服务器。

 

一、实现

 

步骤就不详述了,主要有以下几步:

1、  后台搭建WEB服务器。

2、  注册花生壳账户,申请免费域名。

3、  下载花生壳客户端。在WEB服务器上安装,填写映射内网IP、端口号等信息。

4、  登陆花生壳客户端,开启映射。

这样,在浏览器中输入域名,就能连接到web服务器了。

花生壳域名绑定动态IP原理浅析

图一

 

二、原理分析

 

绑定动态IP还好理解,因为本地运行的客户端去和远端花生壳服务器通信,都是带着拨号成功后的新IP,服务器收到报文后,也就把域名和新IP绑定了。但是,为何路由器等中间网络设备不需要做任何端口映射等配置,就可以对外发布服务呢?网上搜索了一下,并没有找到答案。本着自己动手丰衣足食的原则,笔者自己试着寻找答案。

 

在输入网页连接服务时,抓包查看:

 花生壳域名绑定动态IP原理浅析

图二

 

发现并没有和WEB服务器的公网IP通信,而是和103.6.84.190通信。

连接成功后,我们在服务器上查看端口连接状态:

花生壳域名绑定动态IP原理浅析

图三

 

发现WEB服务器也是和103.6.84.190通信,并且存在两条连接。

这样,我们可以知道,在输入网页后,并没有直接连接到WEB服务器,而是通过另外一台服务器中转。也就是说,域名绑定的IP并不是WEB服务器真正的公网IP,而是某台中转服务器的公网IP。

到现在,大概的原理已经比较清楚了:

1、  输入网站,DNS域名解析到中转服务器103.6.84.190。

2、  中转服务器和WEB服务器连接。

 

但是还有一个问题是始终绕不开的,为什么我在拨号路由器上没有任何端口映射或者虚拟服务器的配置,中转服务器又如何能主动连接WEB服务器的8086(IIS设定的开放端口)服务呢?答案只有一种可能,那就是中转服务器根本就没有连接WEB服务器的8086端口。

 

我们再看图三,正是印证了我们的猜想。103.6.84.190没有和服务器的8086端口,而是和1547、1533端口连接。真正连接WEB服务的是下一条连接:

Localhost :1554  ->  localhost:8086

 

“中转”似乎可以用来概括整个通信过程。通过远端服务器和本地服务器两次中转,最终建立连接。而整个通信的关键,在于本地花生壳客户端和远端服务器之间的通信。我们通过抓包来看。

 

启动花生壳客户端时,在web服务器上抓包查看:

花生壳域名绑定动态IP原理浅析

图四

 

发现有大量和220.170.79.222通信的报文。这不难理解,此时客户端需要和服务器建立连接,完成用户名密码验证等步骤。

Localhost : 1430  -> 220.170.79.222 : 6060

此后客户端必须要告诉服务器,此用户使用的域名。我们找到了这个报文:

花生壳域名绑定动态IP原理浅析

图五

 

服务器收到此报文后,设定某一服务器103.6.84.190用于中转,也就是使用服务器IP绑定域名,并把该IP告诉客户端。后断开此连接。

客户端连接103.6.84.190,并保持连接:

① Localhost : 1547  ->103.6.84.190 : 6064

 

外网访问WEB服务器时,在WEB服务器上抓包:

花生壳域名绑定动态IP原理浅析

图六

 

可以看到客户端使用另一端口连接服务器的6064:

② Localhost : 1553  <->  103.6.84.190 : 6064

并且生成一条本地连接:

③ Localhost : 1554  <->  localhost : 8086

 

连接①可以看做是控制连接,只要运行花生壳客户端,一直存在。

连接②、③可以看做是数据连接,每连接一次服务,生成一个新连接。

而关键在控制连接①,如果没有连接①,则中转服务器无法主动去连接到内网来。

 

现在,整个过程应该比较清楚了。另外要说明的是,我们以上实验,花生壳客户端是安装在web服务器上,实际并不一定要这么做,可以安装在任何一台能够访问web服务器PC机,和上面的区别只是连接③非本地连接而已。

 

因此整个过程可以用图七来描述:

花生壳域名绑定动态IP原理浅析

图七

 

1、  在局域网PC运行花生壳客户端,和花生壳服务器建立连接,

2、  花生壳服务器选择中转服务器,将域名和中转服务器公网IP绑定。并告诉花生壳客户端。

3、  花生壳客户端和中转服务器保持连接。

4、  外网用户输入网址,DNS解析到中转服务器IP,向中转服务器发送请求。

5、  中转服务器收到请求后,向花生壳客户端发送请求。

6、  花生壳客户端根据配置的WEB服务器IP和端口,向WEB服务器发送请求。

7、  WEB服务器收到请求后,应答,通过花生壳客户端、中转服务器,最后到达外网用户。

 

三、结语

 

实际上,域名绑定动态IP的说法并不准确,WEB服务器所在的ADSL线路拨号所产生的公网IP变化,并不影响域名和IP的绑定,域名一直和中转服务器IP绑定,只是和中转服务器建立连接的IP变了而已。