電腦網路與 Internet 通訊

單元 21 WireGuard、OpenVPN 與 IPsec

學習目標與問題

先讀 IP、路由、密碼學、NAT 和代理。你應能畫出 IP 層隧道、區分 OS 路由與 WireGuard AllowedIPs,預算 MTU,並比較 OpenVPN 及 IKEv2/IPsec。VPN 轉送 IP 不代表使用者所有流量都已進入 VPN。

LAN 單播直連與本鏈路服務探索分開驗證,參照 03A 的路由例外與 04A/L16 的探索路徑。

21.1 WireGuard 的內外兩層

WireGuard 把完整 IP 封包放進經認證加密的 UDP 傳輸。內層來源/目的是虛擬或被路由網段的 IP;外層 UDP/IP 負責到 peer endpoint 的 underlay 路徑。普通 TCP 應用仍在原始應用端點間保持 TCP,與逐段終止 TCP 的代理不同。

peer 以公開金鑰識別,握手使用 Noise 設計及臨時金鑰材料,建立並輪換資料金鑰;協定處理重放序號與視窗。私鑰、peer 公鑰和設定可信性仍需管理。通道保護在 peer 間終止,peer 若把 IP 轉送到明文服務,後段不因 VPN 自動加密。

21.2 AllowedIPs 不是整份 OS 路由表

傳出時,WireGuard 按內層目的前綴選 peer;傳入解密後,檢查來源 IP 是否被該 peer 允許。OS 先決定是否把封包送到 WireGuard 介面,兩者是不同查表。wg-quick 等整合工具可能依 AllowedIPs 建立 OS 路由;協定自身不替所有平臺自動設定全部流量。

例:peer P 的 AllowedIPs=10.10.0.0/24,而 OS 只有 10.10.0.0/24→wg0。目的 10.10.0.8 進 P,普通網站走原出口。若要全隧道,IPv4/IPv6 路由與 peer 前綴都需覆蓋;同時保留 peer 外層 endpoint 從實體出口可達,避免遞迴入自己的隧道。DNS 也需另行指定及驗證。

共享一個 peer 的多個前綴通常表示路由到該 peer,不代表每個 IP 都是獨立驗證的使用者身分。重疊前綴、轉送服務與多 peer 政策需仔細設計,不能把 AllowedIPs 當任意 ACL 語言。

21.3 MTU 與 NAT

內層封包加 outer IP、UDP、WireGuard 資料 header 與 tag 後要符合路徑限制,還可能有 padding。L10 以 1500-byte outer MTU 計算:外層 IPv4 預算 1500−20−8−16−16=1440;外層 IPv6 預算 1500−40−8−16−16=1420,這裡的 IP 版本指外層,這是 budget 而非所有平臺的最佳設定。PPPoE、額外隧道或更小 PMTU 會降低可用大小。若承載 IPv6,需滿足 IPv6 鏈路最小 MTU 1280 等要求;更小 underlay 應由適用封裝/分片機制處理,不能把內層介面任意降到不足。MSS 調整只影響 TCP,不解決所有 UDP/IPv6 問題。

NAT 後 peer 可因已驗證封包更新 endpoint;必要時 keepalive 能維持某些 NAT 狀態,但增加流量、耗電。UDP 封鎖不由 keepalive 自動解除。僅看到握手成功也不證明內層路由、轉送、防火牆和 DNS 皆正確。

21.4 OpenVPN 與 TCP-over-TCP

OpenVPN 可使用 UDP 或 TCP,控制通道通常用 TLS 管理認證與金鑰,資料通道另有資料加密格式。TUN 承載 IP,TAP 可承載 Ethernet;實作與模式支援需查平臺。TAP/橋接會擴展廣播與二層問題,不能只憑「能傳 MAC」判定更適合。

當內層 TCP 在外層可靠 TCP 隧道中,兩層重傳、隊首阻塞與壅塞行為可能耦合,遺失下產生額外延遲,常稱 TCP-over-TCP 問題。這並不適用於所有雙層 TLS 或所有 TCP 代理:終止內層 TCP 後只轉送 bytes 的代理,沒有把原始 TCP 段保留在外層 TCP 中,不屬於同一模型。UDP outer 避免該種雙重 TCP,但不保證任何路徑總是更快。

21.5 IKEv2 與 IPsec

IPsec 提供 IP 層保護與 policy/SA 等架構;ESP 可保護內容,tunnel 模式常封裝內層 IP,transport 模式保護上層 payload。IKEv2 負責認證、協商及建立金鑰/SA,不是直接替代 ESP 資料封包的另一個名稱。NAT traversal 常涉及 UDP 封裝;演算法套件、憑證/PSK 與平臺版本都要核對。

項目TCP 代理IP VPN
轉送單位bytes/目的請求,UDP 另行IP 封包
應用 TCP 端點常被分成兩段或多段常保留原端點的 TCP
非 TCP/UDP協定/實作特定可承載 IP 協定,仍受 policy 限制
名稱分流需目的域名或可信關聯通常 IP 路由,需要另加 DNS/策略整合
全流量入口及 app 支援決定OS 路由及雙協定 policy 決定

實驗、習題與檢核

L10 預算 MTU,L14 分開 OS route、peer 選擇、出口 NAT 與 DNS。必修為離線推演;Linux 部署延伸需在隔離環境固定軟體版。

  1. AllowedIPs 含 0.0.0.0/0 是否保證所有 IPv4 已送進 wg 介面?
  2. 加密資料從 peer 出口到目標後,還有哪些信任邊界?
  3. 為何 IPv4 全隧道不涵蓋 IPv6?
  4. TCP-over-TCP 為何不同於一般 TLS 套 TLS 的 bytes 代理?

檢核:能畫兩層 IP、兩次查表與每一段加密終點。來源:WireGuard 協定、WireGuard 概念、WireGuard 白皮書、OpenVPN 協定、RFC 4301、RFC 4303、RFC 7296。