SSD Nodes Learn Hosting plans →
指南 Matt Connor作者: Matt Connor · 已更新 2026-11-01

WireGuard、Tailscale、Headscale 怎麼選?

Tailscale 是加上控制平面的 WireGuard;比較 NAT 穿透、DERP 中繼、金鑰輪替與管理成本,判斷哪一種適合你的 VPS。

WireGuard 與 Tailscale:簡短答案

WireGuard 與 Tailscale 並不是兩種通訊協定之間的選擇,因為 Tailscale 本身就是 WireGuard。Tailscale 使用相同的加密機制與通道,另外加入控制平面:用來交換公開金鑰、分配位址、穿透 NAT(網路位址轉換),以及套用存取原則的協調伺服器。你選擇的是要自行執行多少協調工作。

有 3 個直接的答案。當你只有 1 台伺服器,以及幾個都連入該伺服器的用戶端時,使用純 WireGuard。當你希望每台機器都能連線到其他機器,且不必維護設定檔時,使用 Tailscale。當你希望建立這種網狀網路,但不希望由第三方保存節點清單時,使用 Headscale。

控制平面實際提供的功能

原生 WireGuard 沒有探索功能。每個 peer 都是一段手動撰寫的文字,包含公開金鑰、AllowedIPs 行,以及在該 peer 可連線時使用的 Endpoint。將一台機器加入含有十台機器的網路,代表必須編輯十個設定檔,因為每一端都需要另一端的金鑰。因此,幾乎所有自行託管的 WireGuard 設定都是 hub-and-spoke 架構:一台具有公開 IP 的伺服器,以及只會連線到該伺服器的用戶端。

控制平面會省去手動編輯。每個節點只需註冊一次,就會從 100.64.0.0/10 CGNAT (carrier grade NAT) 範圍取得位址,並得知獲准連線之節點的公開金鑰。通道仍是兩個 peer 之間的直接 WireGuard 連線,網路流量不會經過協調伺服器。伺服器傳遞的是中繼資料:有哪些節點、各自使用哪個金鑰,以及哪些節點彼此可以通訊。

這會帶來以下 3 項具體功能。

NAT 穿透。 兩台筆電分別位於兩台家用路由器後方,彼此之間沒有公開 IP。Tailscale 會使用 STUN (session traversal utilities for NAT) 探索兩端對外的位址與埠,接著讓兩端在同一時間傳送封包,使每台路由器先看到對外流量,並接受回應。若此方式失敗,流量會改經 DERP relay,這是由 Tailscale 執行的加密中繼。資料經由中繼時仍維持端對端加密,因為中繼不會持有金鑰。執行 tailscale status 後,每個 peer 行會顯示 direct 或 relay。執行 tailscale netcheck 可查看距離最近的中繼,以及網路是否完全允許 UDP。

具有效期的金鑰輪替。 WireGuard 金鑰永不過期。除非手動刪除 peer 區塊,否則 3 年前建立的金鑰仍可永久使用。Tailscale 則會讓節點金鑰過期;截至 October 2026,新 tailnet 的預設有效期限為 180 days。未重新驗證的機器會停止連線。對於不會有人登入的伺服器或 subnet router,可以針對個別裝置關閉有效期限。

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

控制平面帶來的成本

協調伺服器掌握您的網路資訊。它保存每個節點的公開金鑰、節點名稱、分配出去的位址及政策。使用託管的 Tailscale 時,這些資料由您無法控制的公司持有。他們無法讀取您的封包,因為 WireGuard 私密金鑰仍保留在您的機器上;但他們可以查看您的網路拓撲,而您能否建立連線,則取決於其服務是否正常,以及您的帳戶是否維持良好狀態。這項風險有多重要,取決於協調伺服器遭入侵或身分帳戶遭竊後,攻擊者實際上能利用其中資料做什麼;完整了解這一點,請參閱Tailscale 的信任模型。

另一項容易忽略的成本是,Tailscale 會在每台機器上執行 daemon,因此您必須在每台機器上持續修補這套軟體。Ubuntu 24.04 的原生 WireGuard 是隨發行版提供的 kernel module,會隨 kernel 一同更新。

第三項成本是計費。截至 October 2026,Personal 方案免費,最多支援 6 位使用者,且使用者裝置數量不限;Standard 為每位使用者每月 $8;Premium 為每位使用者每月 $18。家庭使用者可維持免費。十人團隊則不行。是否超過免費範圍,主要取決於使用者席次,而不是裝置數量,但有一項例外:伺服器及其他標記裝置有各自的額度。每個方案都包含 50 個標記資源;截至 October 2026,定價頁面列出的超額費用為每個每月 $1。在邀請第 7 位使用者或標記第 51 台伺服器前,建議先閱讀免費方案實際涵蓋的內容。

純 WireGuard 適用的情境

當網路拓撲確實是 hub-and-spoke 時,請選擇純 WireGuard。也就是由一台具備公開 IP 的 VPS 作為中心,讓三或四台裝置連入,且不要求這些裝置彼此連線。設定檔可在一個畫面內完成,不需要更新 daemon,也沒有帳戶遺失的問題。你與伺服器之間也不會有外部服務介入。

如果你想了解其他方案所建立的底層,純 WireGuard 也很適合。在 VPS 上自行架設 WireGuard VPN會逐步說明金鑰產生、wg0.conf、IP forwarding、NAT 及 handshake 失敗。每個 tailnet 底層仍會使用這些金鑰與 handshake;當 tailnet 節點充當 subnet router 或 exit node 時,也會再次用到 IP forwarding。如果你仍在評估較舊的方案,WireGuard 與 OpenVPN 比較涵蓋 OpenVPN 仍具優勢的四種情況。

安裝步驟很短:

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

當每台裝置都必須連線到其他所有裝置時,純 WireGuard 就不再容易維護。由 N 個節點組成的 full mesh 需要 N 乘以 N 減 1 個 peer 區塊。以六台裝置計算,就是 30 個必須手動保持同步的區塊;如果重複了 AllowedIPs 項目,流量會在沒有任何錯誤訊息的情況下,從原本的 peer 被靜默轉走。

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 筆記型電腦上仍不會生效,直到你完成這項設定。如果你需要這種架構,在 VPS 上執行子網路路由器會依序說明核准步驟與轉送設定,避免路由只完成一半而無法運作。

出口節點會將用戶端的一般網際網路流量,亦即尚未前往其他 tailnet 裝置或已核准子網路路由的所有流量,經由一台機器傳送。這就是人們通常所說的「VPN」完整通道行為。在 Linux 上,廣告出口節點前也需要先完成上述相同的 IP 轉送設定:

sudo tailscale set --advertise-exit-node

該旗標是較簡單的部分,將 VPS 設為出口節點會說明後續步驟:在管理主控台核准路由,然後修正 DNS 與 IPv6 行為,否則流量可能會從錯誤的路徑送出。如果你要存取的是單一 Web 服務,而不是整個網路,serve 與 funnel會改為在單一本機連接埠前方提供 HTTPS,且可選擇僅限 tailnet 存取,或開放至公開網際網路。

Headscale 適合的情境

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

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

資料路徑完全不變。它仍使用 WireGuard,且在網路條件允許時,對等節點之間仍會直接連線。改變的是,節點清單、金鑰與政策會儲存在你擁有的磁碟上的 SQLite 檔案中。外部人員無法查看你的網路拓撲、停用你的帳戶,也不會按使用者向你收費。

代價是你必須自行維運。現在你要執行公開的 HTTPS 服務,這表示需要 DNS 名稱、憑證,以及能正確轉送 WebSocket 升級的反向代理。你必須自行負責服務的可用性。coordination server 停止服務時,新節點無法註冊,現有節點也無法取得變更內容。Headscale 目前也尚未達到 1.0 版,次版本更新可能包含不相容變更,因此每次升級前都應閱讀變更日誌。將 Headscale 執行為自有的 Tailscale control server 說明安裝方式、config.yaml、preauth keys,以及需要開放的連接埠。

有一項限制很容易到後期才被注意到。Headscale 不包含 Tailscale 的全球 relay network。兩個 peer 無法直接連線時,您必須在自己的伺服器上啟用內嵌 relay,或將設定指向其他 relay;而該 relay 是單一區域中的單台主機,不是遍布全球的伺服器群。位於地球另一端的 peer 會明顯感受到這項差異。

如果您不想自行組建這部分,自行代管 NetBird 是另一種將 control plane 留在自有環境中的方式,因為其 quickstart 會在同一台 VPS 上一併啟動管理、signal 與 relay 服務。不過,NetBird 並不像 Headscale 那樣是可直接替代 Tailscale 的伺服器:它提供自有的 client 與 policy model。因此,選擇 NetBird 而非 Headscale 前,請先閱讀 NetBird 與 Tailscale 在存取規則和 relay 上的差異。

如何一次判斷

先確認必須彼此連線的機器數量。如果它們都只需要與伺服器通訊,使用原生 WireGuard 就能以較少的軟體達到相同結果。

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

接著確認哪些人員或組織可以知道網路拓撲。如果答案是不允許外部公司知道,或使用者數量讓按席次計費的成本難以接受,可以執行 Headscale,但也必須接受由你自行維運控制伺服器。如果真正推動你遷移的是計費問題,請先完成成本計算再決定,因為實際上你這種規模的團隊要支付多少費用,主要取決於持有帳號的人數,而不是執行的機器數量;除非你標記的伺服器超過每個方案都包含的 50 台,而這兩個數字通常相差很大。

你可以低成本改變決定。三者的資料平面都使用相同的通訊協定,因此從原生 WireGuard 改用協調式網狀網路,只需安裝用戶端,不必重新設計;從 Tailscale 改用 Headscale,則只需讓每個節點重新註冊到不同的登入伺服器。

三者都無法提供的功能

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

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

FAQ

Tailscale 只是多做幾個步驟的 WireGuard 嗎?

Tailscale 的資料路徑使用 WireGuard protocol,因此加密方式與 tunnel 相同。它額外提供的是協調功能:金鑰交換、位址指派、使用 STUN 與 DERP relay 進行 NAT traversal、金鑰到期管理,以及以使用者而非 IP range 定義對象的 policy file。這些工作在 plain WireGuard 中都必須自行處理,而當機器在不同 network 之間移動時,這些工作會變得複雜。

我的 traffic 會經過 Tailscale 的 server 嗎?

通常不會。協調 server 介紹 peers 之後,peers 會彼此直接連線,而 tailscale status 會在這些 peer line 上顯示 direct。如果無法建立 direct path,traffic 會改經 DERP relay,該 line 會顯示 relay。即使如此,relay 傳送的仍是加密封包,也不會持有你的 WireGuard private key,因此無法讀取內容。執行 tailscale netcheck,即可確認你的 network 是否封鎖 direct connection 所需的 UDP。

我可以搭配官方 Tailscale app 使用 Headscale 嗎?

可以。Headscale 使用相同的 control protocol,因此官方 client 可透過 sudo tailscale up --login-server https://headscale.example.com 加入。Desktop 與 mobile app 也可以指定 custom login server,但各 platform 的設定位置不同;其中 mobile app 最可能需要特定版本。將整個 network 遷移前,先用一支 phone 測試。

使用 Tailscale 或 Headscale 時,仍需要開放 port 嗎?

Tailscale client 不需要 inbound port,因為它會主動連線到 coordination server,並保持該連線開啟。自架 Headscale server 需要開放 inbound port:control protocol 使用 443;若使用 HTTP-01 certificate challenge,則需要 80;只有在啟用內建 relay 時,才需要 3478/udp。Plain WireGuard 需要在 server 上,以及 provider 管理的任何獨立 network firewall 上,開放其 UDP listen port,通常是 51820。

三者之中哪一個最快?

Throughput 相同,因為三者都使用 WireGuard 傳送封包。差異會出現在 connection setup 與 path quality。設定正確的 plain WireGuard 搭配 Endpoint 時,每次都會 direct connect。Tailscale 與 Headscale 大多數時間會 direct connect;當 network 封鎖 hole punching 時,則會改用 relay,而 relayed path 會增加 latency。使用 tailscale ping <node> 測量自己的 path,該指令會回報 route 是 direct 或 relayed;也可以使用 iperf3 測量 tunnel 內的速度。如果 direct path 的數值遠低於線路速率,問題不在三者之間的選擇,而是 通常是 path MTU 不相符;無論是否使用 control plane,這種情況都會以相同方式發生。

這篇文章對您有幫助嗎?