在咖啡廳、機場用不信任的公共 Wi-Fi,或是人在國外需要用本國 IP 連銀行、訂票網站時,可以把流量全部經由自己家裡(或任何信任的裝置)出去。Tailscale 預設只管 tailnet 內裝置之間的流量、不碰上網流量;開啟 Exit Node 後,就能像傳統 VPN 一樣讓所有流量從指定裝置出去。
本文以 Tailscale v1.102(2026 年 10 月)為準,指令採官方文件目前的
tailscale set語法。同樣的旗標也相容於舊式的tailscale up,但用up改設定時要把之前設過的所有非預設旗標一次帶齊——漏帶會直接報錯(防止不小心把舊設定清掉)——要改單一設定用tailscale set就好。
Tailscale 官方也有一支介紹影片:
Exit Node 是什麼
Exit Node 是 tailnet 裡一台被指定為「出口」的裝置:其他裝置把預設路由(0.0.0.0/0、::/0)指向它,所有上網流量就經由它轉送出去,對外看到的 IP 就是它的。
設計上這件事是多重同意(opt-in)的:
- 裝置要自己廣告(advertise)為 Exit Node
- 管理後台的 Owner/Admin/Network admin 要核准
- 每台要用它的裝置要自己選擇使用
三步缺一不可,所以家裡有人掛了 Exit Node,不代表整個 tailnet 的流量都被導過去。另外兩個特性:
- 只有「不是已導向 Subnet Router 或 app connector」的流量會經由 Exit Node;連向其他 tailnet 裝置的流量照走原路,不受影響。
- 使用 Exit Node 時,預設連不到自己所在的區網(本地印表機、NAS 都會斷),要開 Allow LAN access。
與 Subnet Router 的差異
| Exit Node | Subnet Router | |
|---|---|---|
| 處理的流量 | 所有上網流量(預設路由) | 特定私有網段 |
| 方向 | 把流量「送出去」 | 讓外部流量「進得來」網段 |
| 典型情境 | 公共 Wi-Fi 上網、用本國 IP | 存取沒裝 Tailscale 的印表機、IP Cam |
兩者可以同時用:網段流量走 Subnet Router、上網流量走 Exit Node。但同一台裝置同時當 Subnet Router 和 Exit Node、又關了 SNAT 的話有已知問題,細節與建議見該文的 SNAT 一節。
設定 Exit Node(Linux)
兩端都要 Tailscale v1.20 以上(現在的版本都遠超過)。Linux 是最常見的選擇,macOS、Windows、Android、iOS、tvOS 也都可以當 Exit Node。
1. 開啟 IP forwarding
跟 Subnet Router 一樣,核心要能轉發封包。有 /etc/sysctl.d 目錄的系統:
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沒有的話把上述設定寫進 /etc/sysctl.conf,再跑 sudo sysctl -p /etc/sysctl.conf。若系統用 firewalld 且轉發不通,可照官方已知問題的解法補一句 firewall-cmd --permanent --add-masquerade。
開了 IP forwarding 之後,防火牆應該維持「預設拒絕轉發」(
ufw、firewalld的預設值就是如此),避免這台機器不小心幫非預期的流量做路由。
2. 廣告為 Exit Node
sudo tailscale set --advertise-exit-node
sudo tailscale up依官方文件:
--advertise-exit-node用tailscale set下時,之後要再跑一次tailscale up才會生效。macOS 若是用
tailscaled(命令列版)跑 Tailscale,也照這裡的 Linux 做法;App Store 版和 Standalone 版則用下面的圖形介面。
3. 到管理後台核准
- 打開管理後台的 Machines 頁面
- 找到有 Exit Node 標記的裝置(或用
property:exit-node過濾) - 進入 Edit route settings,啟用 Use as exit node,儲存
跟 Subnet Router 一樣可以用 autoApprovers 免手動核准,exitNode 區塊指定的裝置廣告時自動過:
"autoApprovers": {
"exitNode": ["tag:exit-node"]
}裝置的金鑰到期後會走 fail close:其他裝置上的路由(含
0.0.0.0/0)會留著但全部不通,官方刻意這樣設計、避免到期後流量退回直接上網而外洩——所以正在使用這台 Exit Node 的裝置會整個斷網,而不是退回自己的網路。伺服器性質的裝置要在後台關掉金鑰到期(key expiry),或改用 tag(tagged 裝置預設就停用金鑰到期)。
其他平台:macOS 選 Exit Node > Run Exit Node、Windows 選 Exit node > Run exit node、Android 在 app 的 Exit Node > Run as exit node、iOS 在 app 的 Exit Node > Run as Exit Node,都在該裝置的 Tailscale 用戶端裡操作。Apple TV 也可以,設定方式見官方文件。
使用 Exit Node
Linux:把 --exit-node 指到該裝置的 Tailscale IP(管理後台或 tailscale status 可查到):
sudo tailscale set --exit-node=100.x.y.z停用:
sudo tailscale set --exit-node=macOS:選單列的 Tailscale 選單 → Exit Nodes → 選裝置名稱(v1.60.0 之前選單文字是 Use exit node)。Windows:系統匣 → Use exit node → 選裝置名稱(tailnet 裡要有可用的 Exit Node,這個選項才會出現)。iOS/Android:app 的 Exit Node 區選裝置,選 None 停用。
驗證:隨便開個查 IP 的網站(例如 whatismyip.com),顯示的應該是 Exit Node 的公共 IP,不是你自己的。
自動挑選:推薦的 Exit Node
有好幾台 Exit Node 時,可以讓 Tailscale 依位置與延遲推薦一台(recommended/suggested exit node)。這項功能限 Standard、Premium、Enterprise 方案,或有加購 Mullvad 的 tailnet。
tailscale exit-node suggest # 查看推薦的 Exit Node
sudo tailscale set --exit-node=<ID> # 只套用這一次的推薦
sudo tailscale set --exit-node=auto:any # 持續跟著推薦自動切換這裡的 <ID> 是 exit-node suggest 輸出的節點 ID,不是前面用的 Tailscale IP(100.x.y.z),照它提示的指令貼上即可。auto:any 會在可用的 Exit Node 或網路狀況改變時自動換到新的推薦;手動指定的 Exit Node 則不會被推薦結果改掉。圖形介面裡是在 Exit Nodes 選單選 Recommended。推薦時會優先選自己的 Exit Node,tailnet 裡沒有可用的才會推薦 Mullvad 的伺服器。
連本地區網:–exit-node-allow-lan-access
預設使用 Exit Node 時連不到自己所在的區網。想一邊用 Exit Node、一邊連本地印表機或 NAS 的話,就把本地存取打開:
sudo tailscale set --exit-node=100.x.y.z --exit-node-allow-lan-access=true圖形介面裡各平台都有對應開關:macOS 是 Allow Local Network Access、Windows 是 Allow local network access、Android 是 Allow LAN access。注意它只放行本地區網,網段路由(Subnet Router 廣告來的)本來就不受影響。
自訂 ACL 時要注意
預設 policy 下,tailnet 裡所有人都能使用已核准的 Exit Node,什麼都不用加。但只要改過 tailnet policy file,就得明確放行,而且目的地不是寫那台裝置:
"grants": [
{
"src": ["group:dev"],
"dst": ["autogroup:internet"],
"ip": ["*"]
}
]dst要寫autogroup:internet(「允許經由 Exit Node 上網」),寫成那台裝置的 IP 或名稱只會允許連到它(例如 SSH),不能經由它上網。- 要限定只能經由特定幾台出口出去,在 grant 加上
via欄位指定路由裝置的 tag(via只接受 tag),例如限定只能走打上tag:exit-node的裝置:
"grants": [
{
"src": ["group:dev"],
"dst": ["autogroup:internet"],
"ip": ["*"],
"via": ["tag:exit-node"]
}
]via 同樣能指定 subnet router 或 app connector,細節見 grants 語法的 routing specifications。
企業功能:強制使用與目的地記錄
強制使用 Exit Node(MDM)
公司要求員工的流量一律經由公司或分支機構出去時,可以用 MDM 下發 system policy,讓裝置一直使用 Exit Node(mandatory exit node)。限 Premium、Enterprise 方案或有加購 Mullvad 的 tailnet,用戶端要 v1.69.3 以上。
ExitNodeID設成某台 Exit Node 的 ID:固定使用那一台。ExitNodeID設成auto:any:強制使用自動挑選的 Exit Node;再搭配AllowedSuggestedExitNodes限定可以挑的範圍(沒設=全部都可以,設了但留空=一台都不能挑)。
強制使用的代價是:Exit Node 斷線、或是遇到要先登入的 captive portal(飯店、機場 Wi-Fi)時,裝置可能整個上不了網。若同時用了「不允許使用者中斷 Tailscale」的 policy,更要小心。
目的地記錄(destination logging)
為了隱私與安全,經由 Exit Node 的流量預設不記錄目的地。Premium/Enterprise 方案(需另簽業務合約)可以開啟 exit node destination logging,把目的地寫進 network flow logs,供稽核與資安事件調查使用。前提是先開好 log streaming。開關的位置在管理後台的 Logs → Network flow logs → Logging Actions → Enable exit node destination logging(停用則選 Disable exit node destination logging)。
常見問題
- 用了 Exit Node 之後連不到本地印表機/NAS? 這是預設行為,開 Allow LAN access 即可。
- 廣告了,別人的清單裡卻看不到? 還沒在管理後台核准(或補進
autoApprovers),照第 3 步處理。 - macOS/Windows 當 Exit Node,速度或穩定度不佳? 這兩個平台目前以 userspace 路由實作、仍在最佳化中;macOS 另外要防止裝置睡眠,否則睡著 Exit Node 就斷了(官方 issue #3574)——macOS 13 以上在「系統設定」裡:桌機在「能源」、筆電在「電池 › 選項」,開啟防止顯示器關閉時自動睡眠的選項(macOS 12 以前在「系統偏好設定 › 省電 Energy Saver」勾同樣的選項)。Windows 上 DNS 的實作也佔系統執行緒(官方 issue #3588)。要穩定當出口,Linux 仍是最成熟的選擇。
- Android 手機可以當 Exit Node 嗎? 可以,但官方明說效能差,多數情況下太慢、不實用。它同樣以 userspace 路由實作,長時間當出口的話要接著電源。
- Google Cloud 上的 Linux VM 當 Exit Node 有狀況? 這是已知組合問題,官方有參考架構與解法。
- Windows 更新重開後 Exit Node 就停了? 建議開 Run Unattended(無人值守模式),登出或重開後 Tailscale 仍會在背景執行。
延伸
- Mullvad Exit Node:加購 Mullvad VPN 後可以直接把 Mullvad 的伺服器當 Exit Node 用(換國家 IP、公共 IP 隱藏),見 Mullvad Exit Node:用 Mullvad 的伺服器當出口。
- Apple TV 當 Exit Node:接電源、掛在電視旁的 Apple TV 是現成的家庭出口,見官方文件。
- 效能調校:轉送 UDP 的效能(QUIC、視訊通話這類大宗流量)可以用 UDP GRO forwarding 提升;BBR 則要注意——它只影響節點自己發起或終止的 TCP 連線,不會讓經過 Exit Node 的流量變快。