Skip to content

Exit Node:讓所有流量經由指定裝置出去

設定 Tailscale Exit Node,在外面使用公共 Wi-Fi 時讓所有上網流量經由家裡或指定裝置的網路出去

Updated View as Markdown

在咖啡廳、機場用不信任的公共 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)的:

  1. 裝置要自己廣告(advertise)為 Exit Node
  2. 管理後台的 Owner/Admin/Network admin 要核准
  3. 每台要用它的裝置要自己選擇使用

三步缺一不可,所以家裡有人掛了 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. 到管理後台核准

  1. 打開管理後台的 Machines 頁面
  2. 找到有 Exit Node 標記的裝置(或用 property:exit-node 過濾)
  3. 進入 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 的流量變快。

參考資料

Navigation

Type to search…

↑↓ navigate↵ selectEsc close