前些天在知乎回答了一个智能家居远程控制方面的问题,感觉自己对无公网IP地址环境下的穿透问题有些了解。昨天同事拿来一个网络摄像头,安装在ADSL路由器上网的环境下,可以远程查看视频,效果还挺不错,问我厂家是不是也在网上放了一台服务器做端口转发。
咋看之下好像通过端口转发也可以做,因为通过手机查看视频流所需的码率并不高,一台2M带宽的公网服务器并行处理10条视频流没多大问题,但相比智能家居远程控制仅需不到1K/S的流量,查看视频所需流量还是挺大的,在公网放置一台服务器做端口转发似乎并不是理想方案。有没有更好的方案呢,比如NAT穿透?
先了解一下NAT的原理,目前共有四种NAT实现方式:
- Full cone NAT可以将内网主机的某个端口开放到外部,任何互联网*问者都可以访问这个端口。
- Restricted cone NAT是对访问者的IP进行限制。
- Port-Restricted cone NAT是对访问者的IP和端口进行限制。
- Symmetric cone NAT最特殊,内网主机向外发起的每个连接,开放出去的端口都不一样。
有的文章分析:通讯双方只要不存在Symmetric cone NAT,就能实现NAT穿透,实现通讯双方的点对点连接。但对于一个具体的设备,如何实现NAT穿透呢?需要再想想。
另外,我混淆了路由模式和NAT模式的概念:
- 家用路由器(我用的TP-Link)一般工作在路由模式下,并非NAT。
- 家用路由器跟NAT相关的设置是在“转发规则”中,一般有下面几种:
- 虚拟服务器。设置一条Full cone NAT规则,任何外部主机通过任何端口都能访问内网主机的某个端口。
- 特殊应用程序。设置一条Restricted cone NAT规则,特定IP的主机可以访问内网主机多个端口。
- DMZ主机。设置多条Full cone NAT规则,将内部主机的所有服务开放到外网,但是切断该主机到内网的连接。
这只是个人的理解,需要更多的知识佐证,可能还需要阅读一下开源路由器的代码。