Tailscale 在 2026 年 8 月 31 日的 TailscaleUp 大會上開源了 Tailcat,一個 Go 語言寫成的 CLI 工具與函式庫。它做的事情乍看很奇怪:把 Tailscale 平常倚賴的三塊資料平面組件——WireGuard、magicsock NAT traversal 與 DERP relay——拆出來,去掉帳號、去掉 IP 位址、去掉整個控制平面,做成一個像 netcat 一樣的點對點加密管線工具。Tailscale 過去賣的核心價值是「有 admin 主控台的私有網路」,Tailcat 反其道而行,把資料平面單獨包起來讓人拿去做臨時的、無管理員的加密連線。
Tailscale 資料平面被抽離出來的動機
Tailscale 這幾年一直被反映一件事:使用者只是想在兩台機器之間開一條加密管道傳一個檔案、開一個埠、拉一次 SSH,可是要跑完整登入流程、綁帳號、綁 tailnet、綁 ACL。CI 裡的臨時 agent、AI agent 沙箱、開發機臨時連公司 GPU 這類短命連線,走完整 Tailscale 的心智成本超過連線本身。Tailcat 把使用門檻壓到「執行一個 process、拿走一段字串、丟到另一端」,最接近的類比是 ngrok 或 croc,只是底層走的是 WireGuard,而不是它們自架的中繼伺服器。
位址即憑證,DERP 只當接頭處
Tailcat 位址長成 tc 開頭的一段字串,內容是 CBOR 編碼的 WireGuard 公鑰、路徑發現用的第二把公鑰、可選的 pre-shared key,以及 DERP bootstrap 資訊。啟動 server 端會印一個位址、使用者透過 out-of-band 管道(訊息、剪貼簿、DNS TXT 紀錄)送到 client 那邊,client 用位址裡的 DERP region 資訊連上 relay、送出一個帶自己公鑰的 MEOW 訊息、server 回一個 MEOW 確認就開始交換 WireGuard 封包。
整個握手過程沒有中央伺服器參與、沒有身分驗證。DERP 對這個流程來說只是「兩台機器碰面的公開接頭處」,不知道也不需要知道連線內容——它看到的是加密後的 WireGuard payload。這是 Tailcat 跟 ngrok 那種「所有流量都經過供應商」模型最大的差別:一旦 NAT traversal 成功、兩端建立直連 UDP,DERP 就從路徑上消失。
Netstack 讓 TCP/IP 完全跑在 process 裡
Tailcat 不動 TUN 裝置、不動路由表、不改 DNS,靠的是 gVisor 的 Netstack 這套 userspace TCP/IP stack。所有 socket 建立、TCP 三次握手、封包重組都在 process 記憶體裡完成,作業系統只看到一個 UDP socket 在跟 DERP relay 或對端 peer 交換封包。
這個設計最直接的好處是不需要 root。Tailscale 主線程式要碰 CAP_NET_ADMIN 或 root 權限才能配置 tun 介面,Tailcat 完全躲開這件事,一般使用者、容器裡、CI runner 上都能跑。代價是 Netstack 相對 kernel TCP 效能有落差,做大流量吞吐或延遲敏感型應用時要留意;但檔案傳輸、SSH、短連線這類目標場景差距可以忽略。若真要追求 line rate,Tailscale 主線加 kernel WireGuard 才是對的選擇——這是很清楚的取捨。
三種最常用的操作模式
tailcat serve 8080,8443 一行印出位址,把本地兩個埠開放給拿到位址的人存取。相對於 Tailscale MagicDNS 加 tailscale serve 的完整流程,這是純命令列、無帳號的版本。
檔案傳輸更順手。server 端 tailcat recv ~/inbox 開一個收件夾,或 tailcat serve files 分享當前目錄;client 端 tailcat cp report.pdf tc...: 或 tailcat ls -l tc... 檢視。介面很像 scp,但不需要事先交換 SSH key、不需要開對外的 22 埠、不需要打洞。
包裝 SSH 服務有兩種形式:tailcat serve --ssh-authorized-keys=~/.ssh/authorized_keys ssh 起一個走 tailcat 通道的 SSH server,用平常的公鑰驗證;或者更激進的 tailcat serve no-auth-ssh,直接不驗證,把位址本身當作憑證。後者只適合一次性、極短時效的場景,位址一外流就等同 SSH 伺服器裸奔在網際網路上,慎用。
另外有 tailcat socks tc... curl http://server.tailcat:8081/ 這種 SOCKS 代理模式,對現有程式無侵入地掛上 tailcat 通道,在 CI 環境裡拿來連內部服務很方便。
位址長度與 pre-shared key 的取捨
Tailcat 位址預設會塞一個 256 位元的 pre-shared key 進去,這是 WireGuard 協定裡當作抗量子後備方案的那把 PSK。開著這個選項,位址會比較長,但即使未來量子電腦能破解 Curve25519 也還多一道防線;關掉它 tailcat serve --psk=false 8080 得到的位址短很多、方便剪貼與分享,但就是純古典密碼學撐著。
實務上建議:面對一般同事、開發環境臨時連線用 --psk=false 的短位址;跨組織、跨公司網路傳敏感檔案的場景保留 PSK。位址本身既然是「bearer capability」——拿到位址就等於拿到連線權——那位址流出的風險本來就不能小看,安全性要靠短時效 (ephemeral key 預設每次啟動換一把) 加上限制目標對象 (--allow=nodekey:xxx 只放行特定 client 公鑰) 來保證,PSK 是最後一層兜底。
DERP 是不是新的瓶頸取決於自架與否
Tailcat 預設用 Tailscale 官方 DERP fleet,但官方文件寫得很明白:這個 fleet 是「throttled」的、僅在少數區域可用。走 relay 時延遲會拉高、頻寬會被壓,正經用途一定要自架 DERP。
cmd/derper 這個工具跟 Tailscale 主線共用一份程式碼,一台擺在臺灣機房的 DERP 中繼點對亞太連線幫助很大:對於走不成 NAT traversal、被迫走 relay 的那部分連線(企業防火牆、對稱 NAT、CGNAT 底下的行動網路),DERP 節點的地理位置直接決定延遲跟頻寬。用 tailcat genkey --key=default --region=derp.example.com 產生位址時就把自架 relay 的 hostname 綁進去,client 拿到位址完全不用額外設定。
什麼場景該用 Tailcat、什麼不該用
Tailcat 適合臨時性、雙方點對點、生命週期短的加密連線:CI job agent、AI agent 對外抓工具、開發機臨時互連、demo 用的埠曝光、跨機臨時傳大檔。它不適合的場景比適合的還多得多——多節點的 tailnet mesh、需要 ACL 分權的內網、要穩定 DNS 或 IP 定址的服務、需要稽核連線紀錄的合規環境,都不在它的射程內。
這些場景依然是 Tailscale 主線或 Headscale 的地盤。Tailcat 的定位更像「基礎設施底料」,讓其他工具(AI agent framework、資料同步 CLI、遊戲 lobby server)可以拿它當一條免組態的加密通道,而不是拿來直接取代 Tailscale 這條產品線。把 Tailcat 當成「有了 WireGuard-shaped 通道的 netcat」去看,會比當成「Tailscale Lite」更貼近它的實際定位。
加密的 netcat 終於長大
Tailcat 這個名字說白了就是在承認一件事:Tailscale 過去七年沉澱出來最有價值的技術其實不是控制平面,而是那套讓 WireGuard 跨 NAT 動起來的 magicsock 加上 DERP relay 生態。把這兩塊獨立拆出來開源,反而讓「加密的 netcat」這個從 1990 年代就該存在的工具,在 2026 年有了認真的版本。至於 Tailscale 商業產品受不受影響——不會,因為要用 Tailcat 的人本來就不會付企業版的錢。
需要在臺灣機房架設自家 DERP relay、或替 AI agent、CI runner、跨機房服務串起穩定低延遲的網路骨幹嗎?NCSE Network 提供臺灣是方電訊機房的 VPS 主機(Intel Gold CPU、NVMe SSD)與 10M 到 100G 的 IP Transit 服務,適合擺放 DERP relay、WireGuard 集中節點與跨區延遲敏感型基礎設施。歡迎到 ncse.tw 了解更多。