SSD Nodes Learn 🎉 VPS $5.50/月起
指南 Matt Connor作者: Matt Connor · 已更新 2026-08-13

如何把 VPS 設為 Tailscale exit node?

完整設定 Tailscale exit node:安裝並廣播路由、啟用 IP forwarding、在管理主控台核准,再排除 DNS 與 IPv6 問題。

Tailscale exit node 的功能

Tailscale exit node 是 tailnet 中的一台機器,會承載其他裝置的所有網際網路流量。VPS(virtual private server)具備固定的公開位址且能持續線上,因此很適合用作 exit node。設定分為 5 個步驟:在伺服器安裝 Tailscale、廣播 exit node、啟用 IP forwarding、在管理主控台核准路由,最後在筆記型電腦選取該節點。第 4 個步驟是在網頁中切換選項,不是執行命令,這也是多數人卡住的地方。

啟用後,筆記型電腦會加密每個封包,並將其傳送到 VPS。VPS 會套用 source NAT(network address translation),再使用自己的公開 IP 位址轉送封包。網站會看到 VPS。咖啡廳 Wi-Fi 只能看到一個通往 VPS 的加密 UDP 流量,其他內容都無法看到。

Tailscale 使用 WireGuard 傳輸資料,並搭配協調伺服器分發金鑰,協助兩台機器透過 NAT 找到彼此。這個協調伺服器就是下文不需要複製金鑰的原因。如需完整了解各項取捨,請閱讀 Tailscale 與純 WireGuard 的比較。如果你希望自行掌控通道的所有部分,請改為在 VPS 上 自行架設純 WireGuard VPN

以下步驟假設 Tailscale 已在筆記型電腦上執行,且兩台機器都登入同一個 tailnet。tailnet 是你的私人 Tailscale 網路,其中每台裝置都會在 100.64.0.0/10 內取得穩定的位址。

在 VPS 上安裝 Tailscale

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

安裝指令碼會依據您的發行版選擇套件儲存庫,並安裝 tailscaled daemon。tailscale up 接著會顯示驗證 URL。請在瀏覽器中開啟該 URL,並使用筆記型電腦所用的相同帳戶登入,因為登入不同 tailnet 的 VPS 完全無法服務您的筆記型電腦。

tailscale status
tailscale ip -4

現在,tailscale status 應會列出兩台機器。tailscale ip -4 會顯示 VPS 的 tailnet 位址,稍後提供給用戶端使用。

Tailscale 需要 TUN 裝置來建立通道。在 KVM VPS 上,該裝置通常已存在。採用容器虛擬化、共用主機核心的方案有時缺少 /dev/net/tun,因此 tailscaled 無法建立 tailscale0 介面。繼續之前,請先執行 ls -l /dev/net/tun

啟用 IP forwarding,否則 VPS 會丟棄所有封包

Linux 機器會丟棄所有目的地不是本機的封包,因為 net.ipv4.ip_forward 預設值為 0。Exit node 會接收您的流量並解密,但接著會將封包丟棄。請將設定寫入檔案,讓它在重新開機後仍然生效。

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

tee -a 會以附加方式寫入,因此第二次執行這些行時,兩個設定都會各寫入兩次。結果仍可正常運作,但 cat /etc/sysctl.d/99-tailscale.conf 的內容會顯得異常。請確認目前生效的值,不要只依賴檔案內容:

sysctl net.ipv4.ip_forward

輸出結果必須是 net.ipv4.ip_forward = 1。如果略過這項檢查並使用 tailscale up --advertise-exit-node,用戶端會顯示:

Warning: IP forwarding is disabled, subnet routing/exit nodes will not work.

tailscale set --advertise-exit-node 不會執行這項檢查,因此 set 沒有輸出,不能證明 forwarding 已啟用。請自行讀取 sysctl 值。

您不需要手動建立 masquerade 規則。tailscaled 會自行建立名為 ts-inputts-forwardts-postrouting 的防火牆鏈,而 exit node 流量的 NAT 規則位於 ts-postrouting。請使用 sudo iptables-save | grep ts- 查看這些規則;如果系統使用 nftables,則使用 sudo nft list ruleset

將 VPS 宣告為 exit node

sudo tailscale set --advertise-exit-node

tailscale set 只會變更一項偏好設定,不會影響其他設定。tailscale up --advertise-exit-node 也會宣告此節點,但會產生副作用:up 會將命令列上的旗標視為完整的非預設設定集合。因此,之後直接執行 sudo tailscale up 時會拒絕執行,並顯示

changing settings via 'tailscale up' requires mentioning all
non-default flags. To proceed, either re-run your command with --reset or
use the command below to explicitly mention the current value of
all non-default settings:

後續變更請使用 set,就不會遇到這則訊息。

宣告表示提出可用性。此 VPS 現在會向協調伺服器表示願意擔任 exit node,但目前還沒有任何用戶端可以使用它。

在管理主控台核准 Tailscale exit node

這個步驟沒有對應的指令。開啟管理主控台中的 Machines 頁面,找到 VPS,開啟其列末端的三點選單,選擇 Edit route settings,然後啟用 Use as exit node

在啟用這個切換選項前,控制平面會保留這項申請,不會提供給任何人。你筆記型電腦上的 tailscale exit-node list 不會顯示任何內容,流量也會繼續使用原本的路由。兩台機器都不會顯示錯誤訊息。這個 exit node 只是不會出現。

你可以在 tailnet policy 檔案中加入項目,自動核准 exit node:

"autoApprovers": {
  "exitNode": ["tag:exit"],
}

使用 --advertise-tags=tag:exit 啟動的裝置會自動獲得核准,前提是同一個 policy 檔案的 tagOwners 下已定義 tag:exit。加上標籤會改變所有權:標記裝置屬於 tailnet,而不是你的使用者帳戶;適用於該裝置的存取規則也會隨之變更。若只有一台 VPS,使用切換選項會更簡單。

在筆電上選取 exit node

在 Linux client 上:

tailscale exit-node list
sudo tailscale set --exit-node=vps.your-tailnet.ts.net

exit-node list 會列出 tailnet 中已核准的 exit node 及其位址。若清單為空,表示尚未完成核准。在 macOS、Windows、iOS 和 Android 上,可在 Tailscale app 的 Exit Node 選單項目中進行相同選擇。

請從 client 驗證,不要從 server 驗證:

curl -4 https://ifconfig.me

在選取 exit node 前執行一次,選取後再執行一次。位址必須從本機位址變更為 VPS 的公開 IP。若要停止使用 exit node:

sudo tailscale set --exit-node=

第一天還有一個重要的 flag。選取 exit node 後,client 會將所有內容送入 tunnel,包括目的地為 192.168.1.50 的封包,因此印表機和網路儲存裝置將不再回應。讓本機網路維持使用本機路由:

sudo tailscale set --exit-node=<name> --exit-node-allow-lan-access=true

為什麼啟用 exit node 後 DNS 會立即改變

預設情況下,使用 exit node 的裝置也會將該 exit node 作為所有網域的 DNS(domain name system)解析器,這會覆寫為 tailnet 設定的全域與 split DNS 名稱伺服器。這是刻意設計的行為。如果查詢仍傳送至本機網路的解析器,咖啡店的路由器仍可看到您造訪的每個網站名稱,即使網路流量本身已受到保護。網域名稱與封包應從同一個位置離開。

這會影響使用內部解析器的使用者:啟用 exit node 時,您依賴的 tailnet 名稱伺服器會停止使用。請在管理主控台的 DNS 頁面,對該名稱伺服器啟用 Use with exit node,即可恢復使用。

MagicDNS 名稱仍可正常運作,因為 Tailscale client 會在任何內容抵達 exit node 前,於 100.100.100.100 在本機回應這些名稱。請使用 dig @100.100.100.100 your-vps.your-tailnet.ts.net 檢查;如果是 systemd-resolved client,則使用 resolvectl status,其中 Tailscale 介面會將 100.100.100.100 列為其 DNS server。

如果使用 --accept-dns=false 停用 Tailscale 的 DNS 處理功能,client 會繼續使用從本機網路取得的解析器。網路流量會經由 tunnel 傳送,但 DNS 查詢不會,因此這就是手動建立的 WireGuard tunnel 會遭遇的相同 DNS leak。除非有明確原因,否則請不要變更 --accept-dns

透過 exit node 使用 IPv6

exit node 會廣播兩條預設路由:0.0.0.0/0::/0。如果 VPS 沒有可正常連往網際網路的 IPv6 路徑,IPv6 封包會透過 tunnel 抵達 VPS,然後停在那裡。使用前,先在 VPS 上測試:

ip -6 addr show
curl -6 https://ifconfig.me

請求失敗表示 VPS 沒有 IPv6 上游連線。Dual stack 網站通常仍可載入,因為用戶端會放棄 IPv6,改用 IPv4 重試;不過,對每個網站的第一次連線而言,這次重試會增加延遲。IPv6-only 目的地則仍然無法連線。

另一部分是轉送功能。net.ipv4.ip_forward = 1 若讓 net.ipv6.conf.all.forwarding 維持為 0,IPv4 路徑會正常運作,但 IPv6 會形成 black hole。使用者感受到的通常是「某些網站很慢」,而不是可供搜尋的明確錯誤。這兩行都應加入 sysctl 檔案。

VPS 是否也應發布子網路路由?

Exit node 會承載所有網際網路流量。子網路路由則承載一個位於發布該路由之主機後方的私有網段。這是兩項獨立功能,需要分別核准;同一台主機可以同時使用兩者。

sudo tailscale set --advertise-routes=10.0.0.0/24

如果 VPS 與其他伺服器共用私有網路,而您想透過這些伺服器的私有位址連線,請發布子網路路由。在同一個 Edit route settings 面板中核准,並使用獨立的切換開關。

請謹慎選擇網段。已發布的路由比筆電的預設路由更具體,因此從 VPS 發布 192.168.1.0/24 會接管使用相同網段之家庭網路的位址,導致桌邊裝置無法通訊。請使用您自行選定的網段,不要使用家用路由器代您選定的網段。

讓 exit node 透過 UDP GRO forwarding 提升效能

Tailscale 1.54 及更新版本,在 Linux 6.2 或更新版本的 kernel 上,可以使用 receive offload 提高 forwarded traffic 的 throughput。GRO(generic receive offload)會在 kernel 逐一處理封包前,先合併接收的封包。截至 2026 年 8 月,這仍須在 exit node 上手動設定。

sudo apt install -y ethtool
NETDEV=$(ip -o route get 8.8.8.8 | cut -f 5 -d " ")
sudo ethtool -K $NETDEV rx-udp-gro-forwarding on rx-gro-list off

ip -o route get 8.8.8.8 會回報實際連到網際網路的介面,因此不必在 eth0ens3enp1s0 之間猜測。使用 ethtool -k $NETDEV | grep udp-gro-forwarding 確認;此時輸出應為 on

這項設定會在重新開機後遺失。在執行 networkd-dispatcher 的系統上,請設定為自動套用:

printf '#!/bin/sh\n\nethtool -K %s rx-udp-gro-forwarding on rx-gro-list off \n' "$(ip -o route get 8.8.8.8 | cut -f 5 -d " ")" | sudo tee /etc/networkd-dispatcher/routable.d/50-tailscale
sudo chmod 755 /etc/networkd-dispatcher/routable.d/50-tailscale

先確認 /etc/networkd-dispatcher/routable.d/ 是否存在。如果不存在,表示該機器未執行 networkd-dispatcher;此時建立一個開機時執行 ethtool 該行的 systemd unit,即可達到相同效果。

您的供應商可接受使用政策對出口流量的含義

用戶端透過出口節點傳送的每個封包,都會以 VPS 的公開 IP 位址離開,因此會歸屬於您的帳戶。濫用通報會寄到您的收件匣,包括著作權通知與連接埠掃描申訴。在讓家庭或團隊透過同一台伺服器連線前,請先閱讀供應商的 AUP(可接受使用政策);不要向您無法擔保其行為的人開放出口節點。

頻寬會計算兩次。流量會先透過通道抵達 VPS,接著再離開 VPS 前往網際網路;這兩個方向通常都會計入方案的傳輸流量額度。透過出口節點觀看的影片串流,所占用的流量通常比多數人預期的更多。

資料中心的 IP 位址範圍也有其信譽。有些網站會對這些位址顯示更多 CAPTCHA,有些串流服務則會直接拒絕連線。您的設定無法改變這點,因為這是供應商所擁有之位址區塊的特性。

為什麼流量仍會經由本機連線離開

出口節點已發布,但尚未核准。 用戶端執行 tailscale exit-node list 時沒有任何輸出,兩台機器的日誌也都沒有錯誤。前往 Machines 頁面,啟用 Use as exit node

用戶端從未選取該節點。 核准後,該節點才會提供給 tailnet 使用。但每台裝置仍須個別選取。重新執行 sudo tailscale set --exit-node=<name>,然後再次檢查 curl -4 https://ifconfig.me

轉送功能已關閉。 症狀很明確:tailscale ping <vps> 成功、tunnel 明顯已建立,但所有外部位址都逾時。sysctl net.ipv4.ip_forward 顯示為 0。修正 sysctl 檔案後,執行 sudo sysctl -p /etc/sysctl.d/99-tailscale.conf

防火牆丟棄了轉送封包。 tailscaled 會建立自己的 ts-forward chain,在乾淨的 VPS 上通常已足夠。若主機已執行 ufw 或 Docker,FORWARD policy 可能變成 DROP,且規則順序排在 Tailscale 規則之前。不要猜測是哪一項造成問題:讓用戶端嘗試載入頁面時執行 sudo iptables -L FORWARD -n -v,並監看哪些計數器正在增加。在使用 ufw 的主機上,通常可在 /etc/default/ufw 中加入 DEFAULT_FORWARD_POLICY="ACCEPT",然後執行 sudo ufw reload。也請檢查供應商控制面板中的 network firewall,因為它與伺服器上執行的任何防火牆是分開的控制項。

可以運作,但速度很慢。 在兩台機器上執行 tailscale netcheck。如果結果顯示 UDP 遭到封鎖,兩台裝置就無法建立直接路徑,會改用 DERP relay,導致每個連線都增加延遲。通常只要在供應商的 network firewall 中,允許 VPS 的 41641 埠接收入站 UDP,就能恢復直接路徑。

何時應離開 Tailscale 的協調伺服器

以上所有步驟都依賴 Tailscale 的代管協調伺服器來交換金鑰,以及處理您所按下的核准。您的流量仍會直接在筆電與 VPS 之間傳送,協調伺服器不會承載這些流量;但它會決定哪些裝置可加入 tailnet,以及各裝置可存取哪些資源。若您希望移除這項依賴,請將 Headscale 執行為您自己的 Tailscale 控制伺服器,並讓兩個用戶端都指向它。之後,exit node 的設定步驟相同,但路由核准改由 Headscale 的命令列完成,而不是使用代管主控台。Headscale 會替換控制平面,但仍讓您使用 Tailscale 用戶端;如果您希望自行執行整套堆疊,請使用 NetBird,其提供可由您在一台 VPS 上代管的協調伺服器與用戶端

FAQ

為什麼選取 exit node 後,網路流量仍使用本地連線?

常見原因有兩個。第一,exit node 已公告,但尚未核准:在管理主控台開啟 Machines 頁面,找到 VPS,選取 Edit route settings,然後開啟 Use as exit node。核准是主控台中的切換設定,伺服器上的任何命令都無法執行此操作。第二個原因不同:IP forwarding 未啟用,因此通道雖已建立,tailscale ping 可以連線至 VPS,但所有外部位址都會逾時。使用 sysctl net.ipv4.ip_forward 檢查,其結果必須為 1。

每次都必須手動核准 exit node 嗎?

每台機器只需切換一次。如果經常重建 VPS,請在 tailnet policy 檔案中加入包含 "exitNode": ["tag:exit"]autoApprovers 區塊,在 tagOwners 下定義 tag:exit,並使用 --advertise-tags=tag:exit 啟動節點。標記裝置由 tailnet 而非使用者帳戶擁有,因此套用到該裝置的存取規則也會改變。

啟用 exit node 時,筆電會使用哪一部 DNS server?

使用 exit node 本身。使用 exit node 的裝置會將所有 DNS 查詢傳送至該節點,這會覆寫為 tailnet 設定的全域與 split DNS nameserver。如此一來,本地網路便無法看到你查詢的名稱。若要讓某一部 tailnet nameserver 持續套用,請在管理主控台的 DNS 頁面為它啟用 Use with exit node。MagicDNS 名稱仍可解析,因為 Tailscale client 會在本機的 100.100.100.100 回應這些查詢。

同一台 VPS 可以同時作為 exit node 和 subnet router 嗎?

可以。sudo tailscale set --advertise-exit-nodesudo tailscale set --advertise-routes=10.0.0.0/24 彼此獨立,且各自在 Edit route settings 下有自己的核准切換設定。VPS 必須啟用 IP forwarding。請避免公告與筆電家用網路相同的網段,因為公告路由比預設路由更具體,會導致本地裝置無法連線。

exit node 能讓 VPS provider 看不到我的網路流量嗎?

不能。通道會在 VPS 終止,因此流量會以目的地所需的形式離開伺服器;只要網站本身未加密,provider 就能以明文傳送並看到這些流量。exit node 會將網路流量加入網際網路的位置,從你目前使用的網路移到你租用的伺服器。它能讓咖啡店 Wi-Fi 和家用 ISP 看不到你的瀏覽活動,但同樣的瀏覽活動會對你的 VPS provider 可見,並附帶你的帳戶名稱。