内网穿透技术一览

内网穿透技术一览

先看一个问题

在拉家庭宽带的时候,直接拉运营商的宽带有点贵,市场上通常还会有类似于鹏博士,长城宽带之类的商家,它们价格很低,号称宽带速度也很快,你拉还是不拉?

用过这些宽带的就会知道,便宜其实是付出代价了的:

  • 其一、与电信宽带相比,鹏博士们的速度肯定是随着整栋大楼使用人数增加而递减;
  • 其二、这些“鹏博士”宽带们一般都无法使用P2P软件,你没法用BT,电驴,迅雷下片,连想玩个区块链钱包都玩不了。

为什么P2P软件没法用呢,这就涉及到内网穿透的问题,接下来我们来看下目前主流的内网穿透的几种方式。

一、静态端口映射

这种方式就是手动在路由器上进行端口映射,例如下图就是TPLINK路由器将各种常用的服务端口映射到内部一台主机对应的同样端口上。


内网穿透技术一览

  • 优点:
  • 这种方式映射的端口永久有效,除非人为去删除或修改。
  • 缺点:
  • 完全依赖于人工的静态配置,扩展性极差。

二、UPNP动态端口映射

这种方式,内部主机的程序与路由器通过UPNP协议协商,动态的进行端口映射。这是P2P软件最主要的内外网穿透方式。家里用的BT,电驴,迅雷,以及所有的区块链项目都依赖于这个协议动态的做端口映射。

UPNP端口映射的大致流程:

路由器开启UPNP服务,向外暴露自己"根设备"的身份

内部的主机的应用程序通过UPNP协议,在本地链路网络中搜索支持端口映射功能的根设备(也就是路由器)

内部主机找到路由器后,通过UPNP协议,向路由器申请创建端口映射规则,将本地端口映射到路由器上。

路由器响应端口映射请求,完成动态端口映射

优点:

可以应用自动与路由器协商完成端口映射过程,无需人工参与。(主流P2P软件都用这个)

缺点:

路由器可能禁止这个服务,或者没有这个服务。

三、NAPT打洞

原理:

内网主机往外部主机发送报文后,路由器就建立一个内部主机端口的临时端口映射(在路由器上留下了一个洞),外部的主机可以通过这个映射的端口将数据发给内部主机。

内部主机往外部设备发报文的,以便外部设备能给内部主机发消息的操作,就称为"打洞"。

NAPT的类型划分

第一类: 圆锥型NAT(Cone NAT),也叫非对称型NAT。圆锥型又可以划分为以下三种子类型:

1.1 完全锥形NAT (Full Coe NAT)

内网穿透技术一览

这种情况下,内网主机用端口2000往外部服务器S1的2000端口发数据后,外部网络任意主机都可以通过任意源端口通过路由器上这个洞给它发数据了。

例如,图中主机S1可以通过2000端口,或者3000端口给内部设备发数据;

主机S2虽然没有得到内部主机主动给它打洞,但是也可以通过任意端口给内网主机发数据。

1.2 地址限制型锥形NAT (Address Restricted Cone NAT)

内网穿透技术一览

这种情况下,内网主机使用端口2000往外部服务器S1的2000端口发数据后,S1服务器可以通过任意端口给内网主机发消息,而此时其他主机,如图中的S2主机就无法再联通内网主机了。

1.3 端口限制型锥形NAT (Port Restricted Cone NAT)

内网穿透技术一览

这种类型的NAT,当内网主机用2000端口往S1的2000端口发消息后,有且仅有S1用2000端口做为源端口给内网主机回消息。如图中的S1端口通过源端口3000给内网主机回消息时会被路由器阻挡,服务器S2给内网主机发的任何消息都会被阻挡。

我测试过TPLINK路由器,华为路由器,都默认是这种NAT类型(端口限制型圆锥NAT),所以NATP打洞都主要以这种类型为主,打通这种类型NAT,其他的锥形NAT都是可以通的。

第二类:对称型NAT (Symmetric NAT)


内网穿透技术一览

这种类型的NAT,内网主机用端口2000往S1的2000端口发消息后,S1可以通过2000端口给它回复消息,当内网主机再给服务器S1的3000端口发消息时,在路由器上映射的端口号变了,S1此时只能用端口3000沿着通道给内网主机回消息了。

对称型NAT和圆锥型NAT中的端口限制型锥形NAT的区别:

端口限制型锥形NAT,用同一个端口给不同的目的IP和端口发消息时,NAT设备上映射的端口号没变,而对称型NAT会变成一个新的映射端口,之前的映射端口无效了。

对称型NAT为什么难打洞?

对称型NAT之所以难以打洞,是因为内部主机往指定的目的主机地址和端口发数据后,其在NAT设备上的映射端口就变了,而且这个端口映射的规律,不同厂商的设备不一样,有些设备映射的规则可能是递增一个步长,而有些设备直接是随机算法生成的。

NAT打洞方式的优点

打洞协议简单,编程实现方便。相比UPNP协议,打洞只需要往外部发数据就可以完成临时端口的映射。

NAT打洞方式的缺点

打洞建立的端口映射规则是有时效的,为了维护这个端口映射规则,需要定时发心跳包。对称型NAT,端口映射的规律可能是随机的,打洞过程复杂而且成功率低。

NAT的类型多样,打洞前,一般需要先测试一下NAT的类型。

四、设置DMZ主机

在很多路由器上,还有一种端口映射:内部网络中指一台DMZ主机,然后这台DMZ主机所有端口不经映射,完全裸奔,暴露给外部网络。

内网穿透技术一览

优点

配置方便。

缺点

安全性差,只适合内部只有一台主机需要对外提供服务的情况。

总结

以上列的都是常用的内网穿透的方法,其实根本还是在于路由器本身上的端口映射,路由器给你映射了端口,外部的设备就能访问内网的主机,否则就无法访问。

文章开头提到的为什么“鹏博士”之类的宽带无法使用P2P软件下片,其实也在于鹏博士的路由器设置了防火墙,打洞你打不通;也没给你开放UPNP服务,端口映射不了!

感兴趣的盆友可以关注我们的微信公众号“麻辣软硬件”,欢迎大家在后台留言,和我们沟通交流技术相关话题!

阿里云服务器

编辑该文章

编辑该文章,必须放入您本人的支付宝或微信收款码,通过审核后可,如果浏览者觉得您写的不错了直接对您打赏

复制加密链接

This is a modal dialog!

邮箱

This is a modal dialog!