前面提到 NAT 解決了 IP 位置枯竭的問題,也提到了藏在 NAT 後的設備沒有這麼容易被找到的某種情境,這次來聊聊更多更複雜的情況。
常見的 NAT 大致可分為對稱(Symmetric)和錐形(Cone)兩種,而錐形又可以細分成限制等級不同的錐形,聽起來很相當繞口對吧!
由於路由器的廠商有非常多間,有的注重家庭用戶,也有的致力服務企業等級的用戶,所實作出來的 NAT 行為就會不太一樣,但主要會評估的因素是以下兩點:
安全性:企業用戶通常比較在意資安,像是對稱 NAT 就相較錐形 NAT 來的安全
服務相容性:家庭用戶通常更在意方便性,因此一些服務如 P2P 在錐形 NAT 的路由器就比較不會出問題,相容性較對稱型則高
雖說我們都想要更安全,但是達成更安全造成的後果如果是犧牲服務相容性的話,對於家庭用戶來講就可能就沒那麼方便。
所以在不同的路由器中,實作哪一種類型的 NAT 就是各廠商們對於其目標客群的需求找到平衡後所挑選的。
那麼,這些形狀命名從何而來?我們先從服務相容性高、安全性較低的錐形開始聊起。
*各種錐形 NAT 示意圖
會取名為錐形,其實是由於 IP 位置及 Port 的映射形式而來的。在錐形 NAT 中,在 Client 發起請求時會有一組來源 IP Address + Port 用來接收回覆訊息,而 Server 則可以發送訊息回來源位置。
但不只是請求的目標 Server 可以送回訊息給這組來源位置,在彈性最大的完全錐形 NAT 中,其他 Server 也能送訊息給 Client,由於這種 Client 到多個 Server 一對多的位置映射看起來像是個錐形,這種類型的 NAT 便被命名成錐形 NAT。
我們接著來看看彈性最大的完全錐形(Full Cone)NAT。之所以是彈性最大,是因為一旦一組來源 IP Address + Port 被 Router 記錄下來之後,任何人都可以透過這組位置來傳送訊息給 Client。
*完全錐形 NAT
例如 Client 端送了一個請求給 Server 5.6.7.8,不但這個 Server 能回傳訊息回 Client,只要其他 Server 如 8.7.6.5 也知道了 Client 的這組位置 1.2.3.4:9200,就能夠將訊息也傳到 Client 的同一個服務。
這種類型的 NAT 就很適合 P2P 服務的使用,因為當兩個 Client 從某 Server 拿到對方的 IP 位置後,路由器中的映射表也就產生出來,任何人都能夠連線,如此一來雙方便可以互相傳遞資訊。
然而,這也產生了安全性的問題,由於 Client 的這個服務所開啟的 Port 可以被任何人取用,也當然就能攻擊。
於是乎,就會有安全了點,但限制較多 NAT 類型出現,我們下一講繼續聊。