引言

Tailscale 传统上在单一 tailnet(连接设备的安全私有网络)内运行。然而随着组织规模扩大,对多个隔离网络的需求日益增长。多 Tailnet 支持正是为此设计——允许单个 Tailscale 组织托管多个共享同一身份提供商(IdP)的 tailnet。这一功能解决了开发/预发布/生产环境隔离、客户服务隔离或沙箱测试等场景,且无需碎片化的身份管理。

本文深入解析多 tailnet 管理机制,并探讨跨 tailnet 访问的解决方案。

多 Tailnet 管理

启用多 Tailnet

多 tailnet 功能目前为 Alpha 阶段(截至 2026 年文档),需联系 Tailscale 销售团队启用:

  • 提供显示名称(最多 65 个字符,支持字母、数字、空格、撇号、连字符)。
  • 指定所有者(现有用户邮箱)。
  • 选择是否"列出"(在登录选择器中可见)或未列出。

所有 tailnet 共享相同的域名和 IdP(例如 Google Workspace、Okta)。未来更新可能支持混合 IdP。

用户体验

  • 登录选择器:用户登录时选择 tailnet。未加入的 tailnet 显示在底部(除非未列出)。
  • 管理控制台切换:个人资料下拉菜单 → 选择 tailnet。
  • 设备认证:OAuth 期间选择 tailnet 或使用各 tailnet 的认证密钥。

策略与配置

  • 独立策略:ACL、标签、设备、设置均独立管理。
  • 组同步:在一个 tailnet 启用后,可跨所有 tailnet 引用组(只读)。
  • 用户审批:可限制加入。

ACL 示例(tailnet-policy 文件):

// Tailnet 1: group1 访问预发布环境
{
  "acls": [
    {"action": "accept", "src": ["[email protected]"], "dst": ["tag:staging:443"]}
  ],
  "tests": [
    {"action": "check", "src": ["[email protected]"], "dst": ["tag:staging:443"], "expect": "deny"}
  ]
}

可视化策略编辑器同样支持多 tailnet 配置。

程序化 Tailnet(API)

API 可创建仅设备类型的 tailnet(无人工用户):

  • 适合产品中对每个客户进行隔离的场景。
  • 返回用于 API 管理的 OAuth 客户端。

跨 Tailnet 访问的挑战

Tailscale tailnet 之间相互隔离——无原生联盟机制。设备无法同时加入多个 tailnet(路由、iptables、DNS 会产生冲突)。

官方共享功能(Beta)

共享特定机器(非子网/标签):

  1. 进入 Machines 页面 → Share → 邮件/链接。
  2. 接收者接受(需要所有者/管理员/IT 管理员授权)。
  • 默认隔离:仅允许入站连接。
  • MagicDNS<主机名>.<tailnet>.ts.net
  • ACL 生效:使用接收者邮箱或 autogroup:shared

跨 Tailnet 访问方案

方案 适用场景 局限性
官方共享(Beta) 临时跨组织访问 无法共享子网/标签
Tailscale Funnel 暴露服务至公网 仅单向暴露
自建 DERP 中继 跨 tailnet 流量汇聚 需额外基础设施
第三方网关 复杂跨网络需求 增加复杂性

共享设备的 ACL 设计

最佳实践:利用 autogroup:shared 简化跨 tailnet 访问控制:

{
  "acls": [
    {"action": "accept", "src": ["autogroup:shared"], "dst": ["tag:shared-services:443"]}
  ]
}

设备同时多 Tailnet 场景

部分组织需要设备同时归属多个 tailnet(如审计、监控场景):

  • 方案一:设备分组 + ACL 严格隔离(不推荐,同时加入会产生路由冲突)
  • 方案二:Tailscale SSH + 跳板机模式(通过中间设备路由)
  • 方案三:Headscale 自托管 + 跨组织 federation(需自建基础设施)

结论

多 tailnet 为大型组织提供了灵活的网络隔离方案,共享同一 IdP 大幅简化了身份管理。然而跨 tailnet 访问仍是 Tailscale 的软肋,官方共享功能目前能力有限。

最佳实践建议

  • 开发/预发布/生产环境使用独立 tailnet,通过共享功能暴露特定设备。
  • 跨 tailnet 访问优先使用 Tailscale 内置共享(Beta)而非第三方方案。
  • 需要深度跨网络隔离时,考虑 Headscale 自托管以获得更多控制权。

参考来源:Tailscale 官方文档(Multi-Tailnet Alpha)、Tailscale 博客。