跳转到主要内容
你的 tailnet 上有一台运行 Ollama 或 vLLM 的 GPU 机器。你从笔记本电脑、手机,也许还有几个朋友或团队成员来访问它。Tailscale 处理网络——SSH、文件共享,甚至可能用 Funnel 提供外部访问。它能用。 但有摩擦。你在共享一个原始的 100.x.y.z:11434 地址。tailnet 上的每个人都有相同的访问权限。没有每用户认证,没有模型作用域,没有办法在不影响其他人的情况下撤销某个人的访问。当有人问”我怎么从 Claude Code 使用这个?“时,你要发给他们一份涉及环境变量和 base URL 的 6 步设置指南。 有一个更好的 AI API 访问层——而且你不需要替换 Tailscale 就能添加它。

Tailscale 做对了什么

Tailscale 在它擅长的领域表现出色:
  • 零配置 mesh 网络。 你的设备自动发现彼此,即使在 CGNAT 后面也是如此。
  • 点对点延迟。 直接的 WireGuard 隧道,中间没有中继服务器。
  • 配合 Headscale 离线运行。 自托管协调服务器,你的 tailnet 无需 Tailscale 的云即可工作。
  • 成熟的生态系统。 10+ 年的开发,数千个集成,活跃的社区。
  • 个人使用免费。 免费层支持最多 100 台设备。
对于基础设施访问——SSH、文件共享、内部服务发现——Tailscale 是正确的工具。你不需要替换它,也不应该。

Tailscale 在 AI API 方面的不足

Tailscale 是一个网络层。它让你的设备连接起来。但对于 AI API 访问,你仍然缺少:

1. 每用户认证

你在 100.x.y.z:11434 上的 Ollama 实例没有认证。tailnet 上的任何人都可以调用它。如果你想限制访问,需要添加一个带 basic auth 的反向代理,或者配置 Ollama 的实验性 API 密钥支持(单一共享密钥,不是每用户的)。 vLLM 和 llama.cpp 有可选的单密钥认证,但每个人用的是同一个密钥。没有每用户作用域,没有办法让 Alice 访问模型 A 而 Bob 访问模型 B,也没有办法在不影响 Bob 的情况下撤销 Alice 的访问。

2. 面向远程客户端的 OpenAI 兼容端点

Tailscale Funnel 将你的本地服务暴露到互联网,但它仍然是原始的 Ollama/vLLM API——没有认证,没有模型作用域。而且 Funnel 有限制:它只支持 HTTP/HTTPS(不支持原始 TCP),并且受 Tailscale 服务条款的约束。 当团队成员问”我能在不安装 Tailscale 的情况下从手机使用这个吗?“或者”我能把 n8n 工作流指向它吗?“时,答案是”不太容易”。

3. 协议转换

你的本地模型说的是 Ollama API 或 vLLM API。你的编码代理(Claude Code、Cursor、Cline、Codex)说的是 OpenAI API 或 Anthropic API。你需要一个转换层。 Tailscale 不提供这个。你需要在 tailnet 上运行 LiteLLM、LocalAI 或自定义代理——又一个要维护的服务,又一个要暴露的端口,又一个可能出问题的东西。

4. 无缓冲流式传输

Tailscale Funnel 和 Cloudflare Tunnel 都有 Server-Sent Events (SSE) 缓冲问题。当你的模型逐 token 流式传输响应时,代理会缓冲整个响应,然后一次性发送给客户端。结果就是:你的”流式”聊天界面感觉像卡了 10 秒,然后一次性输出整个响应。 这会破坏交互式聊天、代码补全和任何流式用例的体验。

进阶之路:在现有架构上添加 Tokios

Tokios 不是 Tailscale 的替代品。它是一个 API 层,位于你现有基础设施之上——包括你的 tailnet。 以下是它们如何配合:
  • Tailscale 处理你的 mesh 网络。SSH、文件共享、内部服务、设备发现——全部仍然由 Tailscale 负责。
  • Tokios 处理你的 AI API 访问。每用户认证、模型作用域、OpenAI 兼容端点、仅出站隧道(不需要 Funnel)、无缓冲流式传输。
你可以在同一台机器上运行两者。Tailscale 在自己的接口上管理 mesh 网络。Tokios 连接器独立拨出到 api.tokios.com。它们不冲突。

你能得到什么

  1. 每用户 API 密钥。 每个团队成员获得自己的 sk-tok-… 密钥,作用域限定到特定模型。Alice 可以访问 team-llama 和 team-qwen。Bob 只能访问 team-llama。你撤销 Alice 的密钥——Bob 不受影响。
  2. OpenAI 兼容端点。 你的团队用他们的 API 密钥调用 https://api.tokios.com/v1。任何 OpenAI 兼容客户端都可以——Python SDK、JavaScript SDK、curl、Claude Code、Cursor、Cline、Continue、Open WebUI。他们的设备上不需要 Tailscale 客户端。
  3. 仅出站隧道。 Tokios 连接器拨出到 api.tokios.com。没有入站端口,没有 Funnel,没有端口转发。在 CGNAT、企业防火墙、NAT 后面都能工作。你的模型保持在 127.0.0.1:11434——只有连接器能访问它。
  4. 无缓冲流式传输。 Tokios 正确处理 SSE。你的流式聊天界面真正流式输出。你的代码补全实时完成。没有 10 秒的缓冲延迟。
  5. 模型路由。 通过一个端点服务多个模型(Ollama、vLLM、llama.cpp)。注册部署如 team-llama、team-qwen、team-coder。将它们路由到不同的上游模型或不同的运行时。你的团队调用部署名称;你可以在不修改他们客户端配置的情况下更换后端。

5 分钟完成设置

1

在模型主机上安装 Tokios 连接器

从 dashboard 获取你的 claim code。
2

将连接器指向你的本地模型

你的模型保持在 localhost。连接器向外拨出。
3

注册一个部署

在 Models 标签页,将你的上游模型映射到一个公开名称:
  • Upstream: llama3.1
  • Deployment: team-llama
4

为团队创建 API 密钥

在 Keys 标签页,为每个团队成员创建密钥。将其作用域限定到 team-llama。分享密钥和端点 URL(https://api.tokios.com/v1)。
5

团队调用 API

不需要 Tailscale 客户端。不需要 SSH 隧道。不需要端口转发。

何时单独使用 Tailscale

Tailscale 是正确选择的场景:
  • 你是唯一用户。 个人多设备访问——你的笔记本、你的手机、你的台式机。你控制所有设备,不需要每用户认证。
  • 你需要基础设施访问。 SSH、文件共享、内部服务发现——不仅仅是 AI API 访问。
  • 你处于离线或隔离网络环境。 配合 Headscale,Tailscale 完全在你的网络上运行,没有外部依赖。
  • 预算为 $0。 免费层覆盖个人使用,点对点流量没有数据上限。

何时添加 Tokios

Tokios 是正确补充的场景:
  • 你需要 API 密钥管理。 多个团队成员或外部用户各自需要自己的作用域凭证。
  • 你需要编码代理兼容性。 Claude Code、Cursor、Cline 和类似工具需要 base URL + API 密钥——不是 VPN 连接。
  • 你的调用者无法安装客户端软件。 脚本、CI 管道、SaaS 应用,或者在使用无法安装 Tailscale 的受管理设备的团队成员。
  • 你想要无需 VPN 的团队访问。 给别人一个 URL 和密钥,而不是让他们加入 tailnet。
  • 你需要无缓冲的流式传输。 Tailscale Funnel 和 Cloudflare Tunnel 都有 SSE 缓冲问题。Tokios 正确处理流式传输。

两者结合使用

大多数团队的最佳设置:Tailscale 用于基础设施访问,Tokios 用于 AI API 访问。
  • 通过 Tailscale SSH 连接到你的模型服务器。
  • 通过 Tailscale 访问 Grafana 仪表板。
  • 通过 Tailscale 访问内部服务。
  • 通过 Tokios 调用本地模型的 AI API。
它们在不同层运行,互为补充。Tailscale 管理 mesh 网络。Tokios 管理 AI API 网关。在同一台机器上运行两者很简单——它们不冲突。

迁移路径

如果你已经在使用 Tailscale Funnel 将模型暴露到互联网,迁移到 Tokios 非常轻松:
  1. 在 Tailscale 旁边安装 Tokios 连接器。
  2. 将它指向你的本地模型(相同的 127.0.0.1:11434 地址)。
  3. 注册部署并创建 API 密钥。
  4. 将团队的客户端配置更新为使用 https://api.tokios.com/v1 而不是 Funnel URL。
  5. 禁用模型端口的 Tailscale Funnel(保留给其他服务使用)。
你的团队获得每用户认证、模型作用域和无缓冲流式传输。你在其他方面继续使用 Tailscale。

后续步骤