用自然語言操作 Tailscale:40+ 條給 AI agent 的範例
Claude、Cursor、Codex、Continue、Cline——這些 AI agent 只要接得到 Tailscale REST API(api.tailscale.com/api/v2/)、tailscale CLI,或 tailscale 的 MCP server,就能被你「用中文交代事情」。這本收錄 40+ 條真實可用的提示詞,每一條都能直接複製,貼到 agent 對話框改成你家的細節就送出。
這本是什麼
這是一份「開口範例集」,讓你把 AI agent 當成 Tailscale 副手:寫 ACL policy 不用背 hujson 語法、宣告 subnet router 不用查 flag、查裝置清單不用 SSH 進去下 CLI——講一句話,agent 幫你調 API 或 CLI 完成。
每一條卡片右上角有「複製」按鈕,貼進 Claude Code/Cursor Chat/Codex Agent 對話框(agent 需已配置 Tailscale API key 或 tailscale CLI 可執行權限),把「你家的裝置名/CIDR/使用者 email」換一換就能送。
https://api.tailscale.com/api/v2/tailnet/<tailnet>/...),需要在 Tailscale 主控台建立 OAuth client 或 API access token。查看類(who's online、routes)也能用本機 tailscale status --json。詳見 tailscale.com/api。怎麼用這些提示詞
-
先把 agent 接到 Tailscale
三種常見接法:(a) 給 agent 一支 API token(例:Claude Code + Bash tool);(b) agent 直接呼叫本機
tailscaleCLI;(c) 掛 Tailscale MCP server(例:tailscale-mcp、headscale-mcp之類的社群 server)。任一種都好用。 -
挑最接近你需求的一條,按複製
貼進 agent 對話框。這本每條提示詞的措辭都是寫給 agent 讀的,不是給你自己看的。
-
把佔位符換掉
<tailnet>、<[email protected]>、192.168.1.0/24、ha-home這類是佔位——改成你的實況。有寫「先給我摘要再改」的一定保留。 -
危險操作先看 dry-run
會改 policy 或撤銷 auth key 的操作,第一次跑一定先看 agent 提供的 diff/摘要,確認再放行。
ACL policy 生成與編輯
Tailscale policy 是一份 hujson,難點在寫對又不寫過頭。用 agent 生成後手動 review,比自己從頭寫快得多。
用 Tailscale API 拉我 tailnet「<tailnet-name>」的目前 ACL policy,pretty-print hujson 給我看,並用白話解釋每一條 grants/acls/tagOwners/nodeAttrs 各在做什麼。只讀不改。
API 端點:GET /api/v2/tailnet/{tailnet}/acl。這條當作「先讀後改」的第一步。
請幫我把當前 policy 加一條規則:tag:family 群組的裝置可以連 tag:ha 群組的 8123 port(Home Assistant Web UI),但不能連其他任何 port。先拉當前 policy、產出修改後版本給我看 diff、我按確認你才 PUT。
policy 更新是整包覆蓋(PUT)——所以流程一定是 read-modify-write。
幫我把 policy 的 acls 舊格式重寫成新的 grants 格式(Tailscale 2024 之後推薦寫法),語義完全等價。改完先做 POST /api/v2/tailnet/{tailnet}/acl/validate 檢查通過,才 PUT 上去。
寫一份最小權限的 policy 骨架給我家用:3 個 tag(tag:ha、tag:family、tag:guest)。tagOwners 都指向 <[email protected]>。規則:family 可以連 ha 的 8123、guest 只能連我對外開放的 *:80/443、其他一切拒絕。附上每一段的中文註解。
我要幫外包工程師「<[email protected]>」開一週的臨時存取:只能連 tag:zigbee-gateway 這一台的 22 port,8 天後自動失效。用 autoApprovers + autoDelete/expiry 設好給我。改動前先看 diff。
請 dry-run 我這份 policy 對現有裝置的影響:跑 POST /api/v2/tailnet/{tailnet}/acl/preview,帶上 policy 內容和實際 tailnet 節點清單,告訴我哪些原本能通的路徑會被切斷、哪些新開通。
把我這份 policy 交叉檢查一次:找出 (a) 沒被任何規則使用的 tag、(b) 授權太寬的 *:*、(c) 沒設 tagOwners 的 tag。給我一張改善清單,不要動 policy。
把我這份 Tailscale policy 轉譯成等價的 Headscale ACL(v0.23+ 的格式);有 Headscale 不支援的欄位標出來並說明替代做法。輸出兩份:Tailscale 原版、Headscale 對應版。
要從 Tailscale 搬到 Headscale 時的必備一步。
Subnet router 設定
Subnet router 讓 tailnet 看見某一段 LAN,是 Tailscale 最實用也最容易設錯的功能之一。
在這台 Home Assistant 主機上把 Tailscale 設成 subnet router,宣告 192.168.1.0/24 進 tailnet。步驟:(1) 用 tailscale up --advertise-routes=192.168.1.0/24 --reset 重新宣告;(2) 檢查 tailscale status --json 確認狀態;(3) 提醒我到管理主控台按核准。
用 Tailscale API 核准 tailnet 中裝置「ha-home」宣告的所有 subnet routes:先 GET /api/v2/device/{id}/routes 看目前 advertised vs enabled,把 advertised 的全部加進 enabled 再 POST 回去。改動前先給我列出來確認。
Subnet route「被宣告」不等於「已核准」——這是最常見的踩雷。
我家有兩個站點:家(LAN 192.168.1.0/24,subnet router = ha-home)、工作室(LAN 10.10.0.0/24,subnet router = studio-nas)。請寫 policy 讓:(a) 我自己可以從家看工作室、工作室看家;(b) 家人只能看家;(c) 工作室的訪客不能連任何一段。改動先 preview。
列出 tailnet 裡目前所有 subnet routers 與各自宣告的 CIDR,用表格輸出:hostname、tags、advertised routes、enabled routes、last seen。用 tailscale status --json 或 API 都行,挑你手邊有的。
我要撤掉 subnet router「old-nas」的所有宣告:把它 enabled routes 清空、把 hostname 也 rename 標記為 DEPRECATED-old-nas,最後產出撤除紀錄(時間、原因、影響哪些 tag)。動之前先給我 checklist 確認。
用 exit node 模式啟用「ha-home」:tailscale up --advertise-exit-node,然後叫我到主控台核准 exit node 使用權。列出核准後手機端要下的指令(tailscale set --exit-node=ha-home)。
MagicDNS 與 DNS 設定
MagicDNS 讓每台裝置有一個好記的短網址(例:ha-home),也可以設 split DNS 或加自訂 nameserver。
用 API 打開我 tailnet 的 MagicDNS:GET /api/v2/tailnet/{tailnet}/dns/preferences 看現況,如果沒開就 POST 設 {"magicDNS": true}。同時檢查 nameservers 有沒有設,沒設就跳過先不動。
幫我在 tailnet DNS 加一組 split DNS:對 *.internal.example.com 這個 domain 用 192.168.1.53 這台 DNS 伺服器解析;其他 domain 走原本設定。用 POST /api/v2/tailnet/{tailnet}/dns/nameservers 或 /dns/searchpaths,看正確端點是哪個。
重新命名 tailnet 裡的裝置「laptop-1234」為 work-laptop:用 POST /api/v2/device/{id}/name。改完給我看 MagicDNS 生效後對應的 *.tailXXXX.ts.net 短網址。
產出 tailnet 所有裝置的 MagicDNS 短網址對照表:hostname、magicDNS FQDN、tailnet IP、tags。輸出成 markdown 表格,我要貼進 Notion。
用 Tailscale API 把 tailnet 的 override local DNS 設成開啟(overrideLocalDNS: true),這樣所有裝置優先用 tailnet DNS。改動前告訴我對「家裡本來用 router 當 DNS」的影響。
Serve/Funnel HTTPS 反代
Serve 讓 tailnet 內裝置得到合法 HTTPS 短網址(*.tailXXXX.ts.net);Funnel 進一步讓它可以對公網開放——後者比較危險,本冊優先做 Serve。
在這台 HA 主機上用 tailscale serve 幫 Home Assistant Web UI 掛一個 tailnet 內的 HTTPS 短網址:把 localhost:8123 反代到 https://ha-home.tailXXXX.ts.net。不要開 Funnel,只給 tailnet 內看。設完 tailscale serve status 給我確認。
列出這台機器目前所有 Serve/Funnel 設定:跑 tailscale serve status --json,解析出來用表格呈現「路徑 → 後端」對應,並標示哪些是 Serve、哪些是 Funnel(公網可見)。有 Funnel 的請特別標紅。
幫我把 tailscale serve 的 HA 反代設定寫成 systemd unit 或 add-on 啟動 hook,確保 HA 或機器重啟後 serve 會自動恢復。給我完整的 unit 檔內容和放置位置。
我想把 tailnet 內 ha-home.tailXXXX.ts.net 反代到 HA 的 trusted_proxies:幫我生成 Home Assistant configuration.yaml 需要加的 http: 區塊,並解釋為什麼要加。只給我 YAML,不要真的改 HA 設定。
警告分析:如果我把 HA 從 Serve 改成 Funnel(公網可見),有哪些風險?列成 checklist:驗證機制、rate limit、公開的 attack surface、Funnel 有沒有 IP 白名單機制。不動任何設定。
Tailscale SSH 授權
Tailscale SSH 讓你用 tailnet 身分登入其他裝置,不用管 authorized_keys,policy 中直接寫誰能 SSH 到哪。
幫我在 policy 中開啟 Tailscale SSH:讓 <[email protected]> 可以用 root 或 admin 身分 SSH 進 tag:ha 群組的所有機器;其他任何人都不行。寫成 ssh 區塊給我看 diff、確認再 PUT。
在這台機器上打開 Tailscale SSH server:跑 tailscale up --ssh(保留原有 flags),確認 tailscale status 顯示 SSH 已啟用。改動前提醒我這會取代傳統 sshd 的授權路徑。
為外包工程師「<[email protected]>」開只有 7 天有效期的 Tailscale SSH 存取,只能 SSH 進 tag:sandbox,check-mode 為 check(登入前需二次確認)。用 policy 的 ssh block 完成,加上 expiry。改前先給我 diff。
產出 tailnet SSH 稽核報告:拉最近 30 天所有 SSH 連線紀錄(GET /api/v2/tailnet/{tailnet}/logging/network/read),聚合出「誰連了哪台、幾次、平均連線時長」的表格,找出異常。
Node approval 與 key 管理
Node approval 讓新裝置加入 tailnet 時要人工核准;auth key 是自動化加入的憑證。兩者都需要照顧。
列出 tailnet 中目前狀態為 pending approval 的新裝置:hostname、user、tags、requested at。列完問我要不要 approve;我按 approve 你就 POST /api/v2/device/{id}/authorized。
建立一支可重用、24 小時內有效、只能建立 tag:ephemeral-test 標籤裝置的 auth key。用 POST /api/v2/tailnet/{tailnet}/keys,設 reusable: true、ephemeral: true、expirySeconds: 86400。回傳 key 之後提醒我立即安全保存。
找出 tailnet 中 keyExpiryDisabled: true(永不過期)的裝置——這通常代表有人偷懶。列出來,並建議:哪些適合開回 expiry、哪些是 subnet router 本來就該關的。只列不改。
批次撤銷 tailnet 中所有 90 天沒有 lastSeen 的裝置:先列給我看清單並讓我確認,我按確認你才呼叫 DELETE /api/v2/device/{id}。過程中每刪一台印一行 log。
審計目前 tailnet 上所有 auth keys:查 GET /api/v2/tailnet/{tailnet}/keys,列出「哪支還沒被用過」「哪支已經過期沒刪」「哪支 reusable 又永不過期」。給我一份清理建議清單,不動 keys。
網路拓撲查詢與清點
問你的 tailnet 現在長什麼樣、誰在線、走什麼 relay,都是 read-only 但很常用的操作。
用 tailscale status --json 列出目前 tailnet 中所有線上裝置,輸出成表格:hostname、tailnet IP、OS、tags、last seen、目前是走 direct 還是 DERP relay。DERP 的另外標出哪個 region。
畫出我 tailnet 的 mermaid graph:節點是裝置(以 tag 分色),邊代表 policy 中允許的存取關係,subnet router 帶進來的 LAN CIDR 標成 cloud shape。輸出成一段 ```mermaid 區塊我要貼到 GitHub README。
用 tailscale ping 測所有其他線上裝置的 P2P 連線:迴圈跑 tailscale ping --c 1 <hostname>,把「走 direct 還是 DERP」「延遲」整理成表格。DERP 的建議我開 UPnP/NAT-PMP 看能不能 NAT 打洞成 direct。
產出 tailnet 月報:用 API 拉本月新增/移除裝置、subnet route 變更、policy 修改次數、SSH 連線總數。輸出成 markdown 給我貼到工作群。
找出 tailnet 中沒有任何 tag的裝置——這些通常是「用個人 email 隨手加進來的」漏管理裝置。列給我看,並幫每一台建議一組適合的 tag(用 hostname 猜)。只建議不改。
故障排除 prompts
連不上、看不到、慢——這幾條給 agent 跑診斷,比自己盲拆快。
診斷:我從手機(iphone-15)連 ha-home 打不開。請 agent 依序:(1) tailscale status 看兩台都在線;(2) tailscale ping ha-home 看能不能通;(3) tailscale netcheck 看網路健檢;(4) 拉 policy 看有沒有規則擋;(5) 給我一段結論說是哪一層的問題。
我宣告了 192.168.1.0/24 但 tailnet 裡的手機還是連不到 192.168.1.50。跑:(a) subnet route enabled 檢查、(b) 目標 IP 是否真在該段、(c) 目標裝置有沒有防火牆擋 tailnet 來源、(d) HA 主機 IP forwarding 是否開(sysctl net.ipv4.ip_forward)。給我逐項結論。
Tailscale SSH 突然登不進去了。診斷:(1) tailscale status --json 看目標裝置的 sshHostKeys;(2) 拉 policy 的 ssh block 看規則有沒有動過;(3) 目標機器 journalctl -u tailscaled 最後 30 行;(4) 給我可能原因排序。
為什麼我的裝置全部走 DERP 而不是 direct?請跑 tailscale netcheck 分析報告:UPnP/NAT-PMP/PCP 狀態、preferred DERP、Global v4/v6 是否有、home NAT type。給我改善建議清單(例如:改用 --advertise-exit-node、開路由器 UPnP、換 DERP region)。
拉最近 24 小時 tailnet 的 audit log(GET /api/v2/tailnet/{tailnet}/logging/configuration/read),列出所有「policy 變更、key 建立、node approval」操作,格式 [時刻] <actor> <action> <object>,並標出看起來異常的。
Home Assistant Tailscale add-on 起不來。診斷:(1) HA supervisor logs 找 tailscaled 相關;(2) 檢查 add-on 設定裡的 auth_key 是不是過期;(3) 檢查 supervisor 對 NET_ADMIN capability 是否給滿;(4) 給我三個最可能原因+對應解法。
寫法小抄:讓 agent 少猜一輪
- 先讀後改:所有會動 policy 的動作,第一句都寫「先拉當前 policy」。避免 agent 誤覆蓋。
- 指定 API 端點:例如寫「
GET /api/v2/tailnet/{tailnet}/acl」比說「查 ACL」精準十倍。 - tailnet 用符號:Tailscale 官方接受
-代替 tailnet 名(用當前 OAuth 對應的 tailnet),寫{tailnet}讓 agent 自己填。 - 要求 dry-run/diff:加一句「先給我 diff 或摘要、我按確認你才 apply」是最便宜的保險。
- tag 加冒號:Tailscale tag 一定是
tag:xxx,別漏冒號 agent 會生成錯格式。 - 操作範圍要限縮:寫「只找 last seen 超過 90 天的」比「找沒在用的」清楚,避免誤刪。
- 回傳格式指定:要 markdown 表格、mermaid、CSV,先講清楚——agent 產文貼哪都不用再修。
常見問題
沒有 Tailscale API token 也能用嗎?
tailscale CLI(status、ping、up、serve、netcheck)的,agent 只需要能執行 shell 指令就行。要動 policy/keys/device authorization 才需要 API token。這些 prompts 用在 Headscale 也可以嗎?
headscale api ... CLI 或 gRPC),提示詞的意圖能重用,端點與參數要換成 Headscale 版本。有一條專門的 policy 轉譯提示詞。Agent 執行時要不要開什麼權限?
Bash 或 Terminal 工具;MCP 版本用戶只需要授權 tailscale-mcp server 存取。有 policy 變更的建議都在受控環境(測試 tailnet)跑第一遍。會不會有 prompt 讓 agent 亂改我 policy?
我要接哪個 MCP server?
tailscale-mcp(社群包裝 REST API)、(2) 通用 bash/shell MCP + 本機 tailscale CLI。前者裝置操作更安全(有型別檢查),後者最靈活。若走 Headscale,直接用 headscale CLI 或它的 gRPC MCP 適配。把這本帶走
整本是自包含單檔 HTML,圖示全部內嵌,下載後離線可開、可直接轉寄給同事。