前些天在知乎回答了一個智能家居遠程控制方面的問題,感覺自己對無公網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規則,將內部主機的所有服務開放到外網,但是切斷該主機到內網的連接。
這只是個人的理解,需要更多的知識佐證,可能還需要閱讀一下開源路由器的代碼。