指南
如何在 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 洩漏頁面。
協定
除非發生問題,否則請保留現代預設值 — 協定頁面列出哪些是現行協定、哪些已屬舊式協定。如果用戶端提供較舊的選項來修復連線問題,這是需要明白取捨後作出的選擇,之後應予以還原:名錄標示的是業者仍提供的最弱協定,手動選用它,就等於替自己選擇該標記。
確認它確實正常運作
連線後不要只作假設,請進行檢查。依以下次序從終端機進行三項檢查:
- 你的地址已變更。使用
curl查詢任何「我的 IP 是甚麼」服務,或在瀏覽器開啟其中一個,確認國家/地區與你選擇的出口相符。對公開地址執行ip route get,應顯示通道介面,而不是 Wi-Fi 或 Ethernet 介面。 - 查詢在通道內進行。執行
resolvectl status:通道介面應使用業者的解析器,並承載 DNS 預設路由;實體介面的解析器則應未被使用。在瀏覽器進行 DNS 洩漏測試可作第二種確認;如果結果出現任何屬於你的互聯網業者的項目,就表示 DNS 設定沒有生效。 - 終止開關確實按所述運作。在進行下載時,以
systemctl stop停止用戶端的服務,或使用ip link set … down關閉通道介面,讓通道在未要求用戶端處理的情況下中斷。傳輸應立即停止。如果仍然繼續,終止開關只是裝飾。
更完整的測試清單,以及每項測試能夠和不能夠顯示的內容,請見專屬指南。
這些檢查證明了甚麼
+你的流量正經由你選擇的國家/地區中的出口伺服器離開
+回答你查詢的解析器屬於業者,且位於通道內
+通道中斷時會安全失效,而不是悄悄退回普通網絡
這些檢查沒有證明甚麼
−它們無法說明業者會保留甚麼 — 這是文件方面的問題,答案見留存頁面
−它們不會令你匿名:你的瀏覽器和登入狀態沒有改變,請參閱VPN 無法保護你免受甚麼影響
−今天通過測試,不代表下一次套件更新或下一個核心仍然會通過
設定檔方案,以及它的代價
大多數業者會在帳戶區域提供兩種常見協定的設定檔。WireGuard 檔案可從連線編輯器或使用 nmcli connection import 匯入 NetworkManager,也同樣能在 wg-quick 下運作;OpenVPN 檔案則以相同方式、透過 OpenVPN 外掛程式匯入。你會得到通道、系統自有的介面切換功能,以及設定檔中由業者放入的其他內容。
你失去的是用戶端的其他功能。除非你自行撰寫防火牆規則,否則沒有終止開關;匯入 NetworkManager 的檔案一旦中斷,就只會把流量交回普通網絡。沒有 DNS 處理功能。只有檔案中的 DNS 行會生效,而沒有該行的檔案,就是排查問題時首先要處理的洩漏。沒有伺服器選擇器:每個檔案代表一個出口,要更換出口就要使用另一個檔案。請從帳戶區域產生檔案並妥善保密:WireGuard 檔案包含業者用來識別你的私密金鑰。
這條路適合伺服器、無頭機器,或用戶端不支援的發行版。在手提電腦上,請優先使用用戶端;它提供的開關正是設定檔無法提供的功能。
無法正常運作時
通道已啟動,但 DNS 仍然交給我的互聯網業者
這是 Linux 最典型的洩漏。沒有設定 DNS 的設定檔,會讓 systemd-resolved 繼續使用網絡提供的解析器,而該解析器位於通道外。執行 resolvectl status:通道介面應列出業者的解析器,並承載 DNS 預設路由,旁邊會以加號標示。
在設定中加入 DNS 行,或在 NetworkManager 的連線中設定 DNS,然後重新連線。業者自有的用戶端會自行設定 DNS,這也是應優先使用它的原因之一。
通道中斷時所有東西都停止運作,這很令人困擾
這正是終止開關發揮作用:通道中斷後會變成斷線,而不是悄悄退回未受保護的網絡。請重新連線,不要關閉開關。
如果它在某個網絡上經常中斷、在其他地方卻很少中斷,請切換一次協定,並嘗試較近的出口。如果該網絡上沒有任何協定能維持連線,就表示網絡正在封鎖 VPN 流量,本指南到此為止。
用戶端每次都要求 sudo 或密碼
建立網絡介面是需要特權的操作,而沒有安裝背景服務的用戶端就必須每次提出要求。大多數用戶端都會安裝背景服務 — 以 root 身分執行的常駐程式,以及與其通訊的桌面應用程式 — 因此反覆出現提示,表示服務沒有執行或沒有啟用。
使用 systemctl status 和業者說明中的服務名稱檢查服務,並啟用它,讓它在開機時啟動。
測試頁面顯示 IPv6 地址
通道承載 IPv4,但機器仍有一條位於通道外的 IPv6 路由,因此任何優先使用 IPv6 的流量都會繞過 VPN。不承載 IPv6 的業者應在介面上停用 IPv6;較好的用戶端會自行處理。
如果你是從檔案建立連線,請在 NetworkManager 的連線中停用 IPv6,或使用 sysctl 關閉 IPv6,然後再次測試。讓第二種地址族保持開放的通道,只算是半個通道。
同樣的步驟,不同的裝置
其餘平台
每個平台都有自己獨立的指南,而不是同一頁面下的一個分頁。步驟從安裝程式打開的那一刻起就開始分岔,一篇試圖同時回答三個平台的文章,哪一個都答不好。