目錄

網路上的 Tunnel 介紹以及其應用

簡介

Tunnel 的定義是說在兩個不同的地方建立隧道,實際方式通常就只是對封包進行封裝 (Encapsulation),將封包包裝在其他封包的 payload 裡面,根據在不同 OSI layer 可以有不同的 Tunnel 方式。

Tunnel 會導致封包變大,可能會超出 MTU,所以要調整 MSS/MTU (MSS Clamping),並且要看 OS 是否支援這些協定。

Layer 3 Tunneling (網路層隧道)

IP Tunnel (IP in IP)

IPv4 封裝,直接把一個 IP 封包塞進另一個 IP 封包的 Payload 裡。

IP Tunnel
IP Tunnel 封包

通常外面封包跟裡面封包欄位內容差不多,除了像是外層的 Protocool number 是 0x4 (IP in IP),並且在包裝的時候要把內層封包 TTL 減一。

信息

有些特殊的 Tunnel 模式或設定,為了讓這個 Tunnel 「完全隱形」(讓 traceroute 看不到這一段),可以設定不減 TTL。

在 Linux 裡,這通常跟 ttl-propagation 的設定有關。

  • 預設行為 (RFC Compliance): 入口減內層 TTL,再包裝。
  • 隱形模式 (Stealth): 入口不減內層 TTL,直接包裝。這樣對端解開後,TTL 跟原來一模一樣,看起來就像中間沒經過任何設備。

IP Tunnel 常常用在隱藏真實 IP 上面,像是你的流量會先到 VPN Server,VPN 在包一層真正轉發到 Server IP。

或者是兩台機器,在兩個不同的 LAN 要連線的時候,像是台北的員工 (192.168.1.100) 要存取高雄的伺服器 (192.168.2.50),這時候 IP Tunnel 可以包台北公司的 Public IP 和高雄公司的 Public IP,這樣看起來就像兩個地方在同一個 LAN。

信息
沒有 Tunnel 以前可能要用 NAT,並且在 Server publich IP router 設定 port forwarding,但這樣每個 Private server 都要對應一個 port,太麻煩,NAT 主要用途是節省 IP,讓公網用戶存取內部某個服務。

IP Tunnel 可以根據 verions,有像是 IPv4/IPv4, IPv6/IPv6, IPv6/IPv4,其中 IPv6/IPv4 就是 IPv6 Tunnel,他是一種過度技術,可以允許 IPv6 網路設備在純 IPv4 基礎設施上互相通訊,網路上還有免費的 IPv6 Tunnel 讓你使用 (Hurricane Electric Free IPv6 Tunnel Broker),用 Public IPv4 體驗到 Public IPv6。

但 IP Tunnel 只支援內部封包是 Unicast,不支援內部封包是 Multicast,所以才為用 GRE 的出現。

信息

公用網路不支援 multicast 不會轉發您的 multicast 封包。只有 ISP 自己才會自己用,用在 ISP 內網 (IPTV/金融專線),用來節省頻寬(如 MOD、股票報價)。

或者 OSPF 也會透過 multicast 設定 routing,假設台北總公司有 50 個網段 (VLAN),高雄分公司也有 50 個網段。可以用 multicast 一個封包,設定 50 個網段的 routing rule。

Generic Routing Encapsulation (GRE)

不只 IP,L3 很多協議它都支援包裝,並且支援內部封包是 Multicast。

IPsec

IPsec 對 Payload 加密,他自己也有 Tunnel Mode,會把原始封包加密,然後包一個新的 IP Header 傳出去。但一樣它不支援 multicast and broadcast,所以常常會跟 GRE 一起用,圖解如下。

IPsec + GRE
IPsec + GRE

其他

各種 VPN 出的自己協議:

  • WireGuard
  • OpenVPN
  • Lightway (ExpressVPN)
  • NordLynx (NordVPN)
  • Catapult Hydra (Hotspot Shield)

在你的電腦裡,實體網卡叫 eth0 或 wlan0。 VPN 軟體啟動時,它會向作業系統申請一個「假的」網卡,通常叫 tun0 或 wg0。VPN 程式拿到這個封包 (Payload) 後,在亂碼外面加上一個新的 Header (通常是 UDP 或 TCP),用新的 Dest IP,VPN Server IP,在透過系統送出去一次,這次就會走真正的網卡。

Layer 2 Tunneling (資料鏈結層隧道)

L3 Tunnel 的限制,台北是 192.168.1.x,高雄必須是 192.168.2.x。這是路由器的鐵律。如果兩邊都是 192.168.1.x,路由器會錯亂,不知道封包該送往哪裡(IP 衝突)。L2 Tunnel 可以讓兩個同時使用。

常見協定是:

  • VXLAN (Virtual Extensible LAN)
  • L2TP (Layer 2 Tunneling Protocol)

L2TP 也可搭配 IPsec 一起用。

Layer 4 Tunneling

SSH Tunneling

Layer 7 Tunneling

常見像是:

  • Tor
  • SSH Tunneling
  • Websocket Tunneling
  • HTTP CONNECT