電腦網路與 Internet 通訊

單元 12 NAT、防火牆與穿透

學習目標與問題

先讀 IPv4、Socket 與 TCP。你應能畫出對映表、區分對映和入站過濾、解釋 CGNAT 與 ICE。兩個內網主機各自可以上網,仍不保證能直接互連。

12.1 位址/埠轉換

NAPT 把內部端點改為外部端點,例如 10.0.0.2:51000→203.0.113.5:40000。目的服務看到外部來源;回覆要透過狀態反向轉換。兩個內部端點可以共用一個外部 IP,靠埠與狀態區分。狀態有生命週期,UDP 流量停太久後的回包可能沒有有效對映。

NAT 是轉換功能,防火牆是允許/拒絕政策;常在同裝置組合,責任仍不同。stateful 防火牆追蹤流狀態,回程流量符合狀態才可能被允許,但具體 TCP 狀態與規則依實作。入站 port forwarding 既需要轉換設定,也需要政策與回程。

12.2 兩個獨立維度

Endpoint-independent mapping(EIM)表示同一內部 IP/port 對不同外部目的可重用外部對映。Address-dependent 或 address-and-port-dependent mapping 對 remote IP 或 tuple 更敏感。Filtering 則決定哪些 remote 端點可向該對映入站,可分 EIF、ADF、APDF。名字相似,但不能從對映直接推斷過濾。

L08 例:EIM 把 10.0.0.2:51000 固定為 203.0.113.5:40000;ADF 只准已聯絡過的 remote IP。聯絡過 .10:9000 後,.10:9999 可能可入站,.30:9000 被拒絕。改 APDF 則要求曾聯絡的 IP 與 port 皆符合。

傳統 full cone、restricted cone、port-restricted cone、symmetric NAT 是歷史分類,不足以描述所有現代裝置、不同協定和逾時。報告優先寫實測的對映及過濾條件,不只貼一個 cone 標籤。

12.3 STUN、TURN 與 ICE

STUN 讓客戶端得知特定伺服器看到的外部端點,並可用於連通性檢查;它不自動建立可供所有 peer 使用的轉送服務。TURN 在需要時提供 relay,代價是中繼頻寬與額外路徑。ICE 收集候選、交換候選並檢查可行組合,選可用路徑。信令交換、認證和應用協定仍另行處理。

穿透需要雙方的對映、過濾、state 時效與路徑匹配。某次 STUN 顯示公網 IP,不能證明其他目的下對映一樣,也不保證 P2P 一定成功。UDP 被封、雙層 NAT 或政策限制可令 relay 成為必要選項。

12.4 CGNAT 與回程例題

家庭路由器 WAN 可能是私有位址或共享位址 100.64.0.0/10,而 ISP 再做 NAT。你設定家用 port forwarding,外部封包仍要先經 ISP,家庭設定不能單獨解除上游 NAT。IPv6 可能提供另一條可達路徑,但仍須授權的防火牆政策和服務繫結。

例:服務 10.0.0.3:8080 對映到外部埠 8443。到達 DNAT 後,服務回覆若走另一閘道,反向轉換路徑可能失配。診斷需看入口、轉換後端點、服務日誌和回程表,不只看一個 port test。

實驗、習題與檢核

L08 比較 EIM+ADF/APDF;L12 分析回程與狀態案例。

  1. EIM 是否表示任意來源可入站?
  2. STUN 與 TURN 各提供什麼服務?
  3. 家用埠轉送已設定,外部卻仍無法連入,CGNAT 如何解釋?
  4. 為何從單次 STUN 觀察不能決定所有目的下的 NAT 行為?

檢核:能逐段寫出轉換前後 tuple、狀態與政策。共享位址見 RFC 6598;TCP NAT 狀態見 RFC 5382。來源:RFC 4787、RFC 6888、RFC 8489(STUN)、RFC 8656(TURN)、RFC 8445(ICE)。