網絡小故事 18 · 進階

秘密隧道VPN(虛擬私人網絡)

在咖啡店上網,怎樣安全地連回家中或公司的網絡?

主角:小比、路路、盾盾閱讀時間約 10 分鐘

建議先讀:小故事 17「HTTPS 與 TLS」、小故事 14「NAT 與 Port Forwarding」

1. 故事

按「下一步」一步一步看。每一步都有一位角色出場,解釋自己正在做什麼。

序幕:溫習一下

第 1 步/共 12 步

大門上的洞

上次,我用 Port Forwarding(連接埠轉發)把 203.0.113.1:8080 轉交給相片伺服器。阿麥由咖啡店可以連回家,可是陌生人也可以來敲這道門!

動畫文字版(全部步驟)
  1. 序幕:溫習一下
  2. 大門上的洞 路路:上次,我用 Port Forwarding(連接埠轉發)把 203.0.113.1:8080 轉交給相片伺服器。阿麥由咖啡店可以連回家,可是陌生人也可以來敲這道門!
  3. 第一幕:更安全的方法
  4. 關上大門的洞 盾盾:我是盾盾,家中的 Firewall(防火牆)。名單上沒有你,不能進去!我們先刪除 Port Forwarding 規則,8080 不再對外開放。可是這樣,阿麥在咖啡店也用不到相片伺服器了。
  5. 公共 Wi-Fi 也不可信 小比:而且咖啡店的 Wi-Fi 裡還有偷聽者。家中有些裝置和舊程式根本沒有 HTTPS 加密,走在公共網絡上,內容一覽無遺。
  6. 第二幕:挖一條秘密隧道
  7. 只開一道小門 盾盾:路路開啟 VPN(虛擬私人網絡) 伺服器,我只為它開一道小門:UDP Port 51820。而且只有持有正確鎖匙的裝置,才可以通過。
    • Port 51820 是 VPN 軟件 WireGuard 常用的預設 Port
    • 其他常見 VPN 技術:IPsec、OpenVPN
  8. 互相驗證身份 路路:阿麥電腦上的 VPN Client(VPN 用戶端) 和我握手:大家出示預先設定好的鎖匙,確認對方身份,再協商出這次連線用的加密鎖匙。
  9. 隧道建立了 路路:一條 Tunnel(隧道) 在咖啡店和家之間建立了!阿麥的電腦還用上一個預先設定好的 VPN 專用位址 192.168.50.2,好像家中網絡多了一位成員。
    • VPN 網絡:阿麥 192.168.50.2、家中路路 192.168.50.1
  10. 小比坐進運送箱 小比:我原本寫著「由 192.168.50.2 寄 192.168.1.12:8080」。VPN 把我加密,再放進一個外層運送箱:「寄 203.0.113.1,UDP 51820」。沿途的 Router 只看外層找路。
    • 內層(加密):192.168.50.2 → 192.168.1.12:8080
    • 外層(不加密):192.168.0.23 → 203.0.113.1:51820
    • 外層經咖啡店 NAT 後,寄件人變成 198.51.100.1
  11. 偷聽者只見到鎖著的箱 小比:偷聽者收到的,只是一堆寄往 203.0.113.1 的加密資料。他不知道我要去家中哪部裝置,更看不到相片。
  12. 路路開箱、送進家中 路路:我收到運送箱,拆開外層、解密,取出原本的小比:寄 192.168.1.12:8080。我把他送到相片伺服器,回覆再經隧道送回咖啡店。阿麥好像坐在家中一樣!
  13. 第三幕:隧道的不同用法
  14. 全部走隧道? 路路:阿麥可以選擇 Full Tunnel(全隧道):連去 example.com 的資料也先經隧道回家,再由家中出去,在公共 Wi-Fi 上最安全;或者 Split Tunnel(分割隧道):只有去家中的資料才走隧道。
  15. 付費 VPN 服務 盾盾:市面上的 VPN 服務,就是把隧道的另一端放在服務商那裡。咖啡店和 ISP 看不到你的內容;但服務商看得到你連去哪些網站,沒有 HTTPS 的內容也看得到。你只是換了一個信任對象,並不是完全匿名。
    • Remote-access VPN(遠端存取 VPN):一部裝置連回一個網絡
    • Site-to-site VPN(站點對站點 VPN):兩個網絡的 Router 長期連接
  16. 總結:秘密隧道 小比:VPN 把我加密、放進寄往家中的外層運送箱。沿途只看到鎖著的箱;到了家,路路開箱,我就好像本來就在家裡一樣。大門只需開一道只認鎖匙的小門!

2. 問題在哪裡

在小故事 14,路路用 Port Forwarding(連接埠轉發)把 203.0.113.1:8080 轉交給家中桌面電腦的相片伺服器 192.168.1.12:8080。阿麥在咖啡店終於看到相片了,但留下兩個問題:

  1. 大門上開了一個洞。 全世界都可以來敲 8080。陌生人 192.0.2.66 也可以不停嘗試猜密碼,或者利用軟件的漏洞入侵。(留意:192 開頭不一定是 Private,只有 192.168 開頭才是。192.0.2.66 是互聯網上的公共位址。)
  2. 路上沒有保護。 家中有些裝置和舊程式沒有 HTTPS(加密網頁傳輸協定)。走在咖啡店的公共 Wi-Fi(無線網絡)上,內容一覽無遺。

把 Port Forwarding 刪掉,洞是補好了,可是阿麥在外面就再也用不到家中的服務。

3. 網絡怎樣解決

在咖啡店和家之間,挖一條只有自己人才能進入的秘密隧道。

這就是 VPN(虛擬私人網絡):一種在公共互聯網上,建立一條加密通道,把遠方裝置接回某個私人網絡的技術。小比被加密後,坐進一個寫著「寄家中路路」的運送箱;沿途的人只看到鎖著的箱子,到了家才由路路開箱。

家中大門只需開一道小門:守門的盾盾,即家中 Router(路由器)內置的 Firewall(防火牆),只為 VPN 開放 UDP(用戶資料包協定)Port(連接埠)51820,而且只讓持有正確鎖匙的裝置通過。

4. 看深一點

三個角色

角色 在哪裡 做什麼
VPN Client(VPN 用戶端) 阿麥的電腦 把小比加密、放進運送箱
VPN Server(VPN 伺服器) 家中路路,203.0.113.1 UDP 51820 開箱、解密,再送進家中網絡
Tunnel(隧道) 兩者之間 經公共互聯網、全程加密的通道

故事中的 Port 51820,是 VPN 軟件 WireGuard 常用的預設 Port,用 UDP 傳送。其他常見的 VPN 技術還有 IPsec 和 OpenVPN,原理大同小異。

握手:先驗明身份

連線前,VPN Client 和 VPN Server 會先握手:大家出示預先設定好的鎖匙,確認對方是自己人,再協商出這次連線用的加密鎖匙。這和小故事 17 的 TLS(傳輸層安全)握手很相似。

沒有正確鎖匙的人,例如陌生人 192.0.2.66,連握手都過不了。

隧道裡的包裝:一個封包包住另一個封包

隧道建立後,阿麥的電腦用一個預先設定好的 VPN 專用位址 192.168.50.2;家中路路在 VPN 網絡裡是 192.168.50.1。阿麥好像成了家中網絡的一位成員。

小比出發時,其實有兩層:

外層(不加密,讓沿途 Router 找路)
  寄件人:192.168.0.23  → 經咖啡店 NAT 後變成 198.51.100.1
  收件人:203.0.113.1   UDP 51820
  ┌─────────────────────────────────────────┐
  │ 內層(整個加密)                          │
  │   寄件人:192.168.50.2                    │
  │   收件人:192.168.1.12   TCP 8080         │
  │   內容:相片                              │
  └─────────────────────────────────────────┘

這就是 Encapsulation(封裝)的另一種用法:把一整個封包,當作另一個封包的 Payload(資料內容)。

沿途的 Router 只看外層,把箱子送到 203.0.113.1。咖啡店的 NAT(網絡位址轉換)也只改外層的寄件人。路路收到後拆走外層、解密,取出原本的小比,再按內層的地址送到 192.168.1.12 TCP(傳輸控制協定)Port 8080。回覆沿同一條隧道送回咖啡店。

Full Tunnel 還是 Split Tunnel?

Full Tunnel(全隧道) Split Tunnel(分割隧道)
哪些資料走隧道 全部,包括去 example.com 的 只有去家中網絡的
去 example.com 的路線 先回家,再由家中出去互聯網 直接經咖啡店出去
優點 在公共 Wi-Fi 上最安全 較快,不佔用家中頻寬
缺點 繞遠路,較慢 其他資料仍在公共 Wi-Fi 上走

兩種常見用法

  • Remote-access VPN(遠端存取 VPN):一部裝置連回一個網絡,例如阿麥在咖啡店連回家,或員工在家連回公司。
  • Site-to-site VPN(站點對站點 VPN):兩個網絡的 Router 長期連接,例如總公司和分店,員工完全不用開任何軟件。

市面上的付費 VPN 服務,就是把隧道的另一端放在服務商那裡。咖啡店和 ISP(互聯網服務供應商)看不到你的內容;但服務商看得到你連去哪些網站,沒有 HTTPS 的內容也看得到。

5. 動手試試

任務:找找你的 VPN 設定

  1. 在手機的「設定」裡搜尋「VPN」。
  2. 看看有沒有已安裝的 VPN 設定,或者公司、學校要求安裝的 VPN 程式。
  3. 如果有,留意它是不是 Full Tunnel:連上後打開任何網站,網站看到的 Public IP(公共位址)會變成 VPN 另一端的位址。
  4. 想一想:你信任這個 VPN 的另一端嗎?

小互動

外層還是內層?

以下每一項資料,是寫在外層運送箱,還是寫在加密的內層?

  1. 1收件人 192.168.1.12

  2. 2收件人 203.0.113.1

  3. 3UDP Port 51820

  4. 4Port 8080

  5. 5寄件人 192.168.50.2

  6. 6經咖啡店 NAT 後的寄件人 198.51.100.1

6. 比喻的極限

  • 隧道不是一條真的專線。 外層封包仍然和其他人的封包一起,在公共互聯網上一站一站被轉送;「隧道」只是說它們被加密包好,別人看不到裡面。
  • 偷聽者仍然看得到運送箱。 他知道阿麥正在連接 203.0.113.1,也看得到資料量和時間,只是看不到內容和真正的目的地。
  • VPN 不是隱身斗篷。 付費 VPN 服務商處於可以看到你流量的位置;你只是換了一個信任對象,並不是完全匿名。
  • 進了隧道,也不代表絕對安全。 VPN 不會令電腦不中病毒;家中的相片伺服器仍然要用強密碼,並保持軟件更新。
  • 多包一層要付出代價。 外層標頭會佔用空間,繞路也需要時間,所以用 VPN 上網通常會慢一點。

7. 小測驗

第 1 題,共 3 題VPN 隧道的「外層」收件人是什麼?
第 2 題,共 3 題和 Port Forwarding 相比,用 VPN 連回家有什麼好處?
第 3 題,共 3 題使用付費 VPN 服務時,以下哪一項正確?

8. 重點筆記

  • VPN(虛擬私人網絡)在公共互聯網上建立一條加密的 Tunnel(隧道),讓遠方裝置好像接在家中或公司的網絡裡。
  • 隧道裡的封包有兩層:外層寫著 VPN Server 的公共地址(例如 203.0.113.1 UDP 51820),內層加密,寫著真正的目的地(例如 192.168.1.12:8080)。
  • 和 Port Forwarding 相比,VPN 只開一道小門,只讓持有正確鎖匙的裝置進入。
  • Full Tunnel 讓所有資料都走隧道;Split Tunnel 只讓去家中網絡的資料走隧道。
  • VPN 不等於匿名:隧道另一端的人看得到你的流量。

延伸閱讀

VPN 讓阿麥由咖啡店安全回家,靠的是盾盾只為 UDP 51820 開一道小門。可是盾盾怎樣知道哪個封包可以進門、哪個要攔下?下一個故事,盾盾會打開他的名單,介紹 Firewall(防火牆)與 ACL(存取控制清單)。