SSD Nodes Learn 8GB 記憶體 — 每年 $66
指南 Matt Connor作者: Matt Connor · 已更新 2026-08-01

WireGuard、Tailscale、Headscale 怎麼選?

Tailscale 是加入控制平面的 WireGuard:比較 NAT 穿越、金鑰輪替與存取原則,說明控制平面成本,以及哪一種適合部署在 VPS。

WireGuard 與 Tailscale:簡短答案

WireGuard 與 Tailscale 並不是兩種通訊協定之間的選擇,因為 Tailscale 就是 WireGuard。Tailscale 使用相同的加密方式和相同的通道,然後再加入控制平面:協調伺服器會交換公開金鑰、分配位址、穿透 NAT(網路位址轉譯),並套用存取原則。您選擇的是要自行執行多少協調工作。

有三種符合實際情況的答案。如果您只有一台伺服器,以及幾個都連入該伺服器的用戶端,請使用純 WireGuard。如果您希望每台機器都能連線至其他機器,且不必維護組態檔,請使用 Tailscale。如果您希望使用這種網狀網路,但不希望由第三方持有節點清單,請使用 Headscale。

控制平面實際提供的功能

原生 WireGuard 沒有服務探索功能。每個對等端都是您手動撰寫的一段文字:公鑰、AllowedIPs 行,以及該對等端可連線時使用的 Endpoint。將一台機器加入包含十台機器的網路,表示必須編輯十個設定檔,因為每一端都需要另一端的金鑰。這就是幾乎所有自行託管的 WireGuard 設定都採用中樞與分支架構的原因:一台具有公開 IP 的伺服器,以及只會與該伺服器通訊的用戶端。

控制平面會移除手動編輯的需求。每個節點只需註冊一次,就會從 100.64.0.0/10 CGNAT (carrier grade NAT) 範圍取得位址,並收到允許連線之節點的公鑰。通道仍是兩個對等端之間的直接 WireGuard 連線,您的流量不會經過協調伺服器。伺服器承載的是中繼資料:有哪些節點、各自使用哪個金鑰,以及哪些節點可以彼此通訊。

這會帶來三項具體功能。

NAT 穿越。 兩台位於兩個家用路由器後方的筆記型電腦之間沒有公開 IP。Tailscale 使用 STUN (session traversal utilities for NAT) 探索兩端對外的位址和連接埠,接著兩端同時傳送封包,讓每個路由器先看到輸出的連線,並接受回應。失敗時,流量會改經 DERP 中繼站。這是由 Tailscale 執行的加密中繼站。您的資料在經過中繼站時仍維持端對端加密,因為中繼站不會持有金鑰。執行 tailscale status,每個對等端行會顯示 directrelay。執行 tailscale netcheck,即可查看最近的中繼站,以及您的網路是否完全允許 UDP。

具備到期時間的金鑰輪替。 WireGuard 金鑰永不過期。除非您手動刪除對等端區塊,否則三年前簽發的金鑰可以永久運作。Tailscale 改為讓節點金鑰到期;截至 2026 年 7 月,新 tailnet 的預設到期期間為 180 天。尚未重新驗證的機器會停止連線。對於不會有人登入的伺服器或子網路路由器,您可以針對個別裝置停用到期功能。

以原則取代路由。 在原生 WireGuard 中,AllowedIPs 同時是路由表和存取控制清單,因此「alice 可以連線至資料庫」必須表示為 IP 範圍。Tailscale 使用獨立的原則檔,規則可指定使用者、群組和標籤。規則可以指定 tag:laptop 僅能透過連接埠 5432 連線至 tag:db,不得連線至其他位置;即使機器取得新位址,該規則仍然有效。

控制平面帶來的成本

協調伺服器掌握您的網路資訊。它保存每個節點的公開金鑰、每個節點的名稱、分配出去的位址,以及政策設定。使用託管的 Tailscale 時,這些資訊由您無法控制的公司管理。該公司無法讀取您的封包,因為 WireGuard 私密金鑰會留在您的電腦上;但它可以查看您網路的結構,而您的連線能力取決於其服務是否正常,以及您的帳戶是否符合使用條件。

還有一項容易忽略的成本。Tailscale 會在每台電腦上執行 daemon,因此您必須在每台電腦上持續為它安裝修補程式。Ubuntu 24.04 上的純 WireGuard 是隨發行版提供的核心模組,會隨核心一併更新。

第三項成本是計費。截至 2026 年 7 月,Personal 方案免費,最多允許 6 位使用者使用不限數量的裝置;Standard 方案為每位使用者每月 $8;Premium 方案為每位使用者每月 $18。家庭使用者可維持免費。10 人團隊則無法免費使用。

使用原生 WireGuard 的適當情境

當拓撲確實是中心輻射式時,請選擇原生 WireGuard。使用一個具備公開 IP 的 VPS,讓三或四個裝置連線至該 VPS,且不要求這些裝置彼此連線。設定檔可放在一個畫面中,不需要更新常駐程式,不必管理可能遺失的帳戶,也沒有外部服務介於您與伺服器之間。

如果您想了解其他方案所建構的基礎層,原生 WireGuard 也是適當選擇。在 VPS 上自行託管 WireGuard VPN 會說明金鑰產生、wg0.conf、IP 轉送、NAT 和交握失敗;這些機制在 tailnet 底層仍會持續運作。如果您仍在評估較舊的選項,WireGuard 與 OpenVPN 的比較 會說明 OpenVPN 仍具優勢的四種情況。

安裝步驟很短:

sudo apt update && sudo apt install -y wireguard
sudo modprobe wireguard && echo ok

當每個裝置都必須連線至其他所有裝置時,原生 WireGuard 就不再容易管理。包含 N 個節點的完整網狀拓撲需要 N 乘以 N 減一個對等節點區塊。使用六個裝置時,您必須手動同步三十個區塊;重複的 AllowedIPs 項目會在沒有顯示任何錯誤的情況下,悄悄將流量從原本先設定該項目的對等節點轉走。

Tailscale 適用的情況

當機器會移動時,請選擇 Tailscale。例如,連線至旅館網路的筆記型電腦、使用行動數據的手機,以及位於您無法控制之路由器後方的家用伺服器。這些情況正是純 WireGuard 不易處理的案例,因為兩端都沒有穩定的公開端點可填入 Endpoint

您可以使用官方安裝程式,以一個命令安裝用戶端:

curl -fsSL https://tailscale.com/install.sh | sh
sudo tailscale up
tailscale status

tailscale up 會輸出 URL。開啟該 URL、登入後,這台機器就會加入網路。不需要複製金鑰,也不需要開啟入站連接埠,因為 daemon 會對協調伺服器建立出站連線並維持連線。這也是 Tailscale 節點能在您完全無法控制防火牆的網路上運作的原因。

之後,兩項設定就能完成大部分實用功能。子網路路由器會將整個 LAN 廣告至網路中,因此您不必在每台裝置上安裝用戶端:

echo 'net.ipv4.ip_forward = 1' | sudo tee -a /etc/sysctl.d/99-tailscale.conf
echo 'net.ipv6.conf.all.forwarding = 1' | sudo tee -a /etc/sysctl.d/99-tailscale.conf
sudo sysctl -p /etc/sysctl.d/99-tailscale.conf
sudo tailscale set --advertise-routes=192.0.2.0/24

在您於管理主控台核准之前,該路由會維持非啟用狀態。這是刻意的設計:節點無法自行將路由注入您的網路。Linux 用戶端也需要 sudo tailscale set --accept-routes,因為 Linux 預設不接受廣告的路由。因此,即使伺服器端顯示路由已核准,在 Linux 筆記型電腦上設定該項目前,路由仍不會產生作用。

出口節點會將用戶端的所有流量經由一台機器傳送。這就是人們通常所說的「VPN」完整通道行為:

sudo tailscale set --advertise-exit-node

Headscale 是適當選擇的情況

Headscale 是 coordination server 的開放原始碼實作,會在您擁有的 VPS 上執行。官方 Tailscale 用戶端會連線至 Headscale,而不是代管服務:

sudo tailscale up --login-server https://headscale.example.com

資料路徑的所有部分都不變。使用的仍是 WireGuard;只要網路條件允許,流量仍會在對等節點之間直接傳送。變更之處在於,節點清單、金鑰和原則會儲存在您擁有的磁碟上的 SQLite 檔案中。外部人員無法查看您網路的拓撲、停用您的帳戶,也不會按使用者向您收費。

這項取捨需要實際投入維運工作。現在您必須執行公開的 HTTPS 服務,也就是需要 DNS 名稱、憑證,以及能正確轉送 WebSocket 升級要求的 reverse proxy。您必須自行維持服務可用性;coordination server 停止運作時,新節點無法註冊,現有節點也無法得知變更。Headscale 目前也尚未達到 1.0 版,其次要版本曾包含不相容變更,因此每次升級前都應閱讀 changelog。將 Headscale 執行為您自己的 Tailscale control server 涵蓋安裝、config.yaml、preauth keys,以及需要開放的連接埠。

有一項注意事項常常到後期才被發現。Headscale 不包含 Tailscale 的全球 relay network。當兩個對等節點無法直接連線時,您可以在自己的 server 上啟用內嵌 relay,或將組態指向其他 relay;而該 relay 是位於單一區域的單一主機,不是遍布全球的伺服器群。位於地球另一端的對等節點會明顯受到這項差異影響。

一次判斷的方法

先確認哪些機器必須彼此連線。如果它們都只需要與伺服器通訊,使用純 WireGuard 即可達成相同結果,且所需軟體較少。

再確認這些機器是否具有固定的公開位址。如果大多數機器位於由您無法控制的 NAT 後方,您需要控制平面,因為穿透 NAT 才是困難的部分,不值得自行重新實作。

再確認哪些人可以知道您網路的拓撲。如果答案排除外部公司,或使用者數量使按席位計費的成本難以負擔,請執行 Headscale,但您也必須接受現在需要自行操作控制伺服器。

您可以低成本地改變決定。因為這三種方案使用相同的資料平面通訊協定,從純 WireGuard 移至協調式網狀網路,只需安裝用戶端,不必重新設計;從 Tailscale 移至 Headscale,則只需讓每個節點重新向不同的登入伺服器註冊。

三者皆無法提供的功能

這三者都不是防火牆。通道會決定傳送哪些封包,不會決定哪些服務正在監聽。透過通道可連線的伺服器,對於你保持開放的任何連接埠,仍可從網際網路連線。因此,請讓 VPS 上的 UFW 防火牆規則繼續發揮作用。Tailscale 的原則檔案會縮小其他節點可存取的範圍,但不會影響公開介面。

這三者都不是逐項服務的驗證機制,也都不會記錄使用者連線後執行的操作。請將三者都視為傳輸層,並在應用程式中執行登入檢查。

FAQ

Tailscale 只是增加額外步驟的 WireGuard 嗎?

Tailscale 的資料路徑使用 WireGuard 協定,因此加密方式和通道相同。它增加的是協調功能:金鑰交換、位址指派、透過 STUN 和 DERP 中繼器進行 NAT 穿透、金鑰到期管理,以及使用者名稱而非 IP 範圍的原則檔案。這些工作在單純使用 WireGuard 時都必須自行處理,而當機器在不同網路間移動後,處理難度會提高。

我的流量會經過 Tailscale 的伺服器嗎?

通常不會。協調伺服器介紹對等端點後,端點通常會直接互相連線,而 tailscale status 會在這些對等端點列中顯示 direct。如果無法建立直接路徑,流量會改經 DERP 中繼器,該列會顯示 relay。即使如此,中繼器傳送的仍是加密封包,而且不會持有您的 WireGuard 私密金鑰,因此無法讀取內容。執行 tailscale netcheck,即可確認您的網路是否封鎖直接連線所需的 UDP 流量。

我可以搭配官方 Tailscale 應用程式使用 Headscale 嗎?

可以。Headscale 使用相同的控制協定,因此官方用戶端可透過 sudo tailscale up --login-server https://headscale.example.com 加入。桌面和行動應用程式也可以指定自訂登入伺服器,但各平台的設定位置不同,而且行動應用程式最可能需要特定版本。移轉整個網路前,請先使用一支手機進行測試。

我仍需要為 Tailscale 或 Headscale 開放連接埠嗎?

Tailscale 用戶端不需要開放入站連接埠,因為它會向外連線至協調伺服器,並維持該連線。自行託管的 Headscale 伺服器則需要開放入站連接埠:控制協定使用 443;使用 HTTP-01 憑證挑戰時使用 80;只有啟用內嵌中繼器時才使用 3478/udp。單純使用 WireGuard 時,伺服器以及供應商提供的任何獨立網路防火牆,都必須開放其 UDP 監聽連接埠,通常是 51820。

三者之中哪一個速度最快?

吞吐量相同,因為三者都使用 WireGuard 傳送封包。差異會出現在連線建立速度和路徑品質。設定正確的 Endpoint 可在每次連線時直接建立連線。Tailscale 和 Headscale 大多數時間也會直接連線;當網路封鎖打洞時,則會改用中繼器,而中繼路徑會增加延遲。請使用 tailscale ping <node> 測量您自己的路徑;該指令會回報路由是直接連線還是經過中繼。您也可以使用 iperf3 測量通道上的連線。