指南
如何在 Linux 上設定 VPN
業者自有套件庫中的用戶端、使用系統內建工具搭配設定檔的替代方案、在 Linux 上比其他平台更容易發生的 DNS 洩漏細節,以及透過終端機進行的檢查。本指南以 Ubuntu 26.04 LTS 和 NetworkManager 為準。
開始之前
本指南不替你選擇業者
無論你使用哪一家業者,以下每個步驟都相同,因此這裡不點名任何業者。選擇業者是另一項工作,應在名錄中完成;選擇依據是已公開的分數,而不是下載頁面。
請從業者自有的套件庫安裝用戶端,並使用業者自有說明中的簽署金鑰。絕不要把論壇或部落格中的單行安裝指令貼進終端機:該指令會以 root 身分執行,而你完全不知道它抓取了什麼。來自已簽署套件庫的套件可以檢查;透過 shell 傳入的腳本則不行。
安裝用戶端
Linux 上有兩條路,而且兩者都很合理。第一條是業者自有的用戶端;它會直接提供終止開關、伺服器選擇器和 DNS 處理。第二條是使用系統內建工具搭配設定檔,本指南最後一節會說明這條路要付出什麼代價。
- 登入業者的網站,並從帳戶區域開啟 Linux 說明。說明會列出套件庫、金鑰和套件;只依照這些內容操作,不要做其他事情。
- 新增套件庫及其金鑰,然後安裝套件,使用發行版的套件管理員完成。金鑰能讓套件管理員拒絕遭到竄改的套件,因此未使用金鑰新增的套件庫,就是你選擇自行信任的套件庫。
- 啟用用戶端的服務,讓它在開機時啟動。用戶端通常由以 root 身分執行的背景常駐程式和與其通訊的桌面應用程式組成;常駐程式負責通道,而應從開機起就生效的終止開關,也需要它從開機起執行。
- 登入用戶端 — 可從應用程式登入,也可使用帳戶區域提供的權杖從命令列登入 — 並將裝置命名為不會識別出你身分的名稱。
- 現在先不要連線。 先開啟設定。在大多數用戶端中,以下三項有兩項預設為關閉。
值得檢查的三項設定
用戶端選單各不相同,但設定本身不會改變。如果不熟悉名稱,這三項在詞彙表中都有說明。
終止開關
如果通道中斷,就封鎖所有流量,而不是悄悄讓連線退回一般網路。在 Linux 上,這是一組由用戶端寫入的防火牆規則:除了通道介面和通道自身的端點之外,其他流量全部丟棄。請開啟此功能;如果用戶端提供 always-on 或 lockdown 形式,請選擇該形式,讓規則從開機起就持續生效,而不只是連線期間有效。終止開關的用途請見專頁。
通道內的 DNS
即使其他流量都在通道內,名稱查詢仍可能離開機器、在通道外傳送;而在 Linux 上,這是最常發生的洩漏,因為解析器是會變動的元件。在 Ubuntu 上,該元件是 systemd-resolved:每個介面都有自己的解析器,而具備 DNS 預設路由的介面,會回答所有沒有更具體網域規則匹配的查詢。用戶端應透過通道介面,將該預設解析器指向業者的解析器。請將用戶端的 DNS 設為業者自有的解析器,而不是第三方解析器;只看到查詢內容的第二方,仍然是多出來的一方。DNS 洩漏如何發生,請見DNS 洩漏頁面。
通訊協定
除非出了問題,否則保持現代預設值 — 通訊協定頁面列出了目前使用中的通訊協定和舊版通訊協定。如果用戶端提供較舊的選項來修復連線問題,這是需要知情取捨的選擇,之後應予以復原:名錄會標示業者仍提供的最弱通訊協定,手動選擇它,就等於替自己選擇該標記。
確認它確實正常運作
連線後進行檢查,不要只是假設。依照以下順序,從終端機執行三項檢查:
- 你的位址已變更。 使用
curl查詢任何「我的 IP 是什麼」服務,或在瀏覽器中開啟其中一個,確認國家/地區與你選擇的出口相符。對公用位址執行ip route get時,應顯示通道介面,而不是 Wi-Fi 或 Ethernet 介面。 - 查詢位於通道內。 執行
resolvectl status:通道介面應使用業者的解析器,並承擔 DNS 預設路由;實體介面的解析器則應未被使用。在瀏覽器中進行 DNS 洩漏測試可作為第二種確認方式;如果結果出現任何屬於你的網際網路業者的項目,就表示 DNS 設定沒有生效。 - 終止開關確實如宣稱般運作。 在下載進行中,使用
systemctl stop停止用戶端服務,或使用ip link set … down將通道介面停用,讓通道在未要求用戶端處理的情況下中斷。傳輸應立即停止。如果仍然繼續,終止開關就只是裝飾。
更完整的測試清單,以及每項測試能與不能顯示的內容,請見專屬指南。
這些檢查能證明什麼
+你的流量正經由出口伺服器離開,且位於你選擇的國家/地區
+回答你查詢的解析器屬於業者,且位於通道內
+通道中斷時會安全失效,而不是悄悄退回一般網路
這些檢查無法證明什麼
−它們無法說明業者會保留什麼 — 這是文件方面的問題,請見留存頁面
−它們不會讓你變得匿名:你的瀏覽器和登入狀態都沒有改變,請見VPN 無法保護你的事項
−今天通過測試,不代表下一次套件更新或下一個核心仍會如此
設定檔路線,以及它要付出的代價
大多數業者會在帳戶區域提供兩種常見通訊協定的設定檔。WireGuard 檔案可從連線編輯器匯入 NetworkManager,或使用 nmcli connection import 匯入,也能在 wg-quick 下同樣正常運作;OpenVPN 檔案則透過 OpenVPN 外掛程式以相同方式匯入。你會取得通道、系統自有的介面切換功能,以及業者放入檔案中的所有內容,除此之外別無其他。
你失去的是用戶端的其他功能。除非你自行撰寫防火牆規則,否則沒有終止開關;匯入 NetworkManager 的檔案一旦中斷,只會將流量交還一般網路。沒有 DNS 處理功能。只有檔案中的 DNS 行會生效,而沒有這一行的檔案,就是故障排除時首先要檢查的洩漏來源。沒有伺服器選擇器:每個檔案代表一個出口,變更出口就意味著使用另一個檔案。請從帳戶區域產生檔案並妥善保密:WireGuard 檔案包含私密金鑰,而這就是你在業者端的身分。
這條路適合伺服器、無頭機器,或用戶端不支援的發行版。在筆記型電腦上,優先使用用戶端;用戶端提供的終止開關,正是設定檔無法提供的功能。
無法正常運作時
通道已建立,但 DNS 仍然傳給我的網際網路業者
這是典型的 Linux 洩漏。沒有設定 DNS 的設定檔,會讓 systemd-resolved 繼續使用網路提供的解析器,而該解析器位於通道外。執行 resolvectl status:通道介面應列出業者的解析器,並承擔 DNS 預設路由,旁邊會以加號標示。
在設定中加入 DNS 行,或在 NetworkManager 中設定該連線的 DNS,然後重新連線。業者自有的用戶端會自行設定這項功能,這也是應優先使用它的原因之一。
通道中斷時所有功能都停止,這很惱人
這表示終止開關正在發揮作用:通道中斷後會變成失效的連線,而不是默默退回未受保護的一般網路。請重新連線,不要關閉終止開關。
如果它在某個網路上經常中斷、在其他地方卻很少中斷,請切換一次通訊協定,並嘗試較近的出口。如果該網路上沒有任何通訊協定能維持連線,表示網路正在封鎖 VPN 流量,本指南就只能到此為止。
用戶端每次都要求 sudo 或密碼
建立網路介面是需要權限的操作,而沒有安裝背景服務的用戶端每次都必須提出要求。大多數用戶端會安裝背景服務 — 一個以 root 身分執行的常駐程式,以及一個與其通訊的桌面應用程式 — 因此反覆出現提示,表示服務沒有執行或沒有啟用。
使用 systemctl status 及業者說明中的服務名稱檢查,並啟用服務,讓它在開機時啟動。
測試頁面顯示 IPv6 位址
通道承載 IPv4,但機器仍有一條位於通道外的 IPv6 路由,因此任何偏好 IPv6 的流量都會繞過 VPN。不會傳送 IPv6 流量的業者應在介面上停用 IPv6;較完善的用戶端會自行處理。
如果你是從檔案建立連線,請在 NetworkManager 的連線設定中停用 IPv6,或使用 sysctl 關閉它,然後再次測試。讓第二種位址系列保持開放的通道,只能算是半條通道。
同樣的步驟,不同的裝置
其餘平台
每個平台都有自己獨立的指南,而不是同一頁面下的一個分頁。步驟從安裝程式打開的那一刻起就開始分岔,一篇試圖同時回答三個平台的文章,哪一個都答不好。