TSLinkTSLinkTSLink
  • 首页
  • 文档
  • 第一次分享
  • 博客
  • 路线图
  • 关于
GitHub
TSLinkTSLinkTSLink
GitHub
TSLinkTSLinkTSLink

你的应用,在你的 Tailscale 网络里有私有地址。

GitHub
产品
  • 功能
  • 文档
  • 第一次分享
  • MCP client 配置
  • 路线图
  • 更新日志
资源
  • 博客
  • GitHub 源码
  • 关于
法律
  • 隐私政策
  • 服务条款
© 2026 TSLink · Apache-2.0

更新日志

每次更新,都有迹可循。

TSLink v0.1.1

v0.1.1

TSLink v0.1.1 的安全更新与升级说明

2026/10/09

安全更新。命令、标志和已存储的数据与 0.1.0 保持一致。

升级

  • Homebrew:brew upgrade --cask anydoor7/tap/tslink。其他安装方式:从本次发布下载新的归档或软件包。
  • 如果 TSLink 作为后台服务运行,升级后请再次执行 tslink install,让服务启动新二进制。

安全

  • 使用 Go 1.27.2 构建。0.1.0 的 Linux amd64 二进制使用 Go 1.26.6 构建,govulncheck -mode=binary 报告其中包含涉及 12 项安全公告的标准库漏洞符号:GO-2026-6599、GO-2026-6600、GO-2026-6603、GO-2026-6605、GO-2026-6607、GO-2026-6608、GO-2026-6609、GO-2026-6610、GO-2026-6611、GO-2026-6612、GO-2026-6613 和 GO-2026-6617。这些问题涵盖 HTTP/2 服务器崩溃、资源耗尽和流量控制错误,畸形标头导致的 HTTP/2 响应走私,CONNECT 后的 HTTP/1 连接失同步,Range 请求头解析缺少大小限制,MIME 标头内存限制绕过,html/template 转义问题,以及 crypto/tls 中畸形 ECH 扩展引用。使用 Go 1.27.2 后,在 macOS arm64 上对 0.1.1 源码运行 govulncheck ./...,未报告可达漏洞。
  • tailscale.com 更新至 v1.104.1,golang.org/x/net 更新至 v0.60.0。

变更

  • 从源码构建需要 Go 1.27.1 或更高版本,tslink manifest --json 会报告这一最低版本。

文档

  • README 缩短,新增「什么时候需要 TSLink」对比,说明与手动完成相同操作的区别,并提供 21 种翻译。
  • 访客链接明确描述为可转发的公开链接:持有链接的人可以到达访客门控;设置了 PIN 的链接仍需输入 PIN。0.1.0 的说明写作「持有链接的人都能使用」,遗漏了 PIN 要求。

TSLink v0.1.0

v0.1.0

TSLink 首次公开版本的变更与兼容性说明

2026/10/06

首次公开发布。TSLink 为你电脑或服务器上的每个应用提供 Tailscale 网络中独立的私有地址,无论是 Web 应用、文件夹、单个文件还是 TCP 端口,都能从你自己的设备访问。谁还能访问,由你决定:你指定的人员、持有到期链接的浏览器访客,或仅在你明确选择时开放的公共互联网。你可以亲自通过 CLI 操作,也可以让 AI agent 通过 MCP 操作。TSLink 需要 Tailscale 账号,是一个独立项目,并非由 Tailscale 制作或背书。

安装

  • 提供 macOS、Linux 和 Windows 的预构建归档(amd64 和 arm64)、Linux 的 .deb 与 .rpm 软件包,以及适用于 macOS 和 Linux 的 Homebrew cask:brew install --cask anydoor7/tap/tslink。
  • macOS 二进制已使用 Developer ID 证书签名,并通过 Apple 公证。Windows 归档未进行代码签名。
  • checksums.txt 和 SBOM 附带 Sigstore 签名,每个发布资产都有 GitHub 构建来源证明。参见验证发布资产。从源码构建需要 Go 1.26.6 或更高版本。

分享应用

  • tslink share 3000、tslink share ./photos 或 tslink share ./report.html 为 Web 应用、文件夹或单个文件提供 tailnet 内独立的 HTTPS 地址。tslink add <name> --tcp <port> 为 TCP 服务提供同样的独立地址。每个应用在同一个后台 daemon 中运行自己的嵌入式 Tailscale 节点。
  • tslink install 让 daemon 在登录时启动:macOS 使用 LaunchAgent,Linux 使用 systemd 用户服务,Windows 使用用户级计划任务(--startup 改用 Startup 文件夹)。
  • 提供 15 个自托管应用的 recipe,包括 Home Assistant、Jellyfin、Immich、Nextcloud、Open WebUI 和 Ollama,另有通用 Web recipe。tslink apps detect 查找本机正在监听的应用;tslink apps share <recipe> 先预览注册内容,加上 --yes 才应用。
  • 每个应用可设置请求限制(--max-request-body 和超时),以适应较大或较慢的上传。默认请求体上限为 32 MiB。

人员、访客链接与公开访问

  • 人员:tslink people add alice@example.com --apps photos,finance --for 7d 允许该 Tailscale 登录身份在期限内访问指定的 Web 和文件应用。people update、extend 和 people remove 可修改或撤销访问。--invite --print-links 可为 tailnet 外的人员附加设备邀请(需要用户拥有的 API token),--qr 输出手机设置二维码。
  • 访客链接:tslink guest create photos --for 3d --public --print-link 为 Web 应用创建会到期的浏览器链接,也可设置 PIN。访客无需 Tailscale 账号。链接通过 Tailscale Funnel,并受强制访客门控保护。持有链接的人都能使用;TSLink 只保存链接的哈希。
  • 公开访问:开放 Funnel 需要 --funnel --public,仅支持 Web 应用且始终有到期时间,默认 24 小时,最长 7 天,除非你提高 durations.public_max。
  • 有效期:所有分享和访问期限使用统一语法,例如 90m、36h、3d、1w、1d12h 或 until 2030-06-01。最短为一小时。只有 tailnet 成员可以获授 never,并且必须加上 --ack-never。

门户与访问申请

  • tslink portal enable --owner you@example.com 在独立的 tailnet 节点上启动私有主页。每位访客只能看到自己可以打开的应用,以及应用的健康状态和访问期限。
  • tailnet 内的人员可在门户中申请应用访问或延长期限。只有使用 --requestable 注册的应用可供申请。通过 tslink requests approve <id> --for 3d 或 tslink requests deny <id> 作出决定;新申请可以触发告警。

健康状态、告警与访问历史

  • daemon 检查每个应用的后端(HTTP 状态及可选的响应体匹配,或 TCP 连接),在 status、list --verbose、doctor 和门户中报告 healthy、degraded、down 或 unknown。status 和 doctor 会在节点密钥到期前 14 天和 3 天发出提醒。
  • 可选告警可在应用故障或恢复、临近到期及收到新访问申请时,执行命令或调用 alerts.json 中配置的 webhook。
  • tslink access log 显示谁在何时访问了哪个应用,包括被拒绝的请求,并提供按人员和应用汇总的结果。默认只记录路径的第一段;tslink access path 可按应用修改这一设置。

Agent 与自动化

  • 已发布 manifest 中的命令,除 tslink mcp 外,都支持 --json,返回带版本的 tslink.result envelope;Cobra 的 help 和 completion 不在 manifest 中,只输出纯文本。tslink manifest --json 列出这些命令及其标志、退出码和错误码。
  • tslink mcp 通过 stdio 提供 MCP server。tslink serve --mcp 在独立的、仅限 tailnet 的节点上增加远程 MCP endpoint,绝不会通过 Funnel 公开。
  • viewer、app-operator 和 people-manager 角色把 agent 限制在指定应用、固定工具集与最长授权期限内,owner 则保留完整控制权。本地使用 tslink mcp --scope,远程调用方使用 mcp.bindings,由 Tailscale 登录身份或 tag 识别。tslink mcp-audit 读取通过 MCP 作出的变更日志。

默认安全措施

  • 除非你创建访客链接或通过 Funnel 公开,应用始终仅限私有 tailnet。TCP 服务绝不会公开。
  • 注册时拒绝链路本地地址和云元数据目标(link_local_target_refused),也拒绝会暴露 TSLink 配置目录的文件分享(path_exposes_config_dir)。
  • proxy 会移除客户端提交的 Tailscale-* 和 X-Tailscale-* 身份头,再添加由 Tailscale 提供的调用方身份。
  • tslink remove 和清理操作只有在 TSLink 记录了该设备确实归自己所有时,才会删除对应的 tailnet 设备。
  • macOS 和 Linux 上的 daemon 日志仅供所有者访问(权限 0600)。访客 PIN 使用加盐 PBKDF2 哈希校验,并按链接和来源地址限制尝试次数。
  • 通过 MCP 发出高于 member 角色的邀请,或允许使用 exit node 的邀请,必须由所有者显式启用 mcp.allow_elevated_invites。

本版本不包含的功能

  • 多主机清单仍在规划中。当前每台主机运行自己的 TSLink,门户只列出该主机的应用。
  • 没有管理 dashboard 或 REST API、Docker 镜像、自定义域名支持、middleware 或 Prometheus endpoint。参见路线图。

兼容性(0.x)

后续 0.x 版本将保留以下公开自动化与数据契约:

  • --json 保留 tslink.result envelope,以及 type、ok、schema_version、command、code、data 和 error 字段。可选的 data、error 和 error.next 继续保持可选;允许新增字段。
  • 已记录的命令 data 字段保持原有含义;允许新增字段和警告。公开视图的 data.schema_version 保持为整数。
  • 已发布的错误码保持原有含义和退出码映射。允许新增错误码;退出类别 0、1、2、3、4、5、64 和 65 保持文档中的定义。tslink manifest --json 从这一映射生成 error_codes。
  • registry.json schema 1 和 2 以及已知的 config.json key 仍可读取;允许新增字段。升级前请运行 registry check。
  • MCP 工具名和输出 schema 保持可用,采用新增字段的方式扩展;允许新增工具和可选字段。拒绝操作仍是 isError: true 的工具结果,包含一个 JSON 文本失败对象(code、message、next 和可选 data),且没有 structuredContent;schema 参数错误使用 usage_error。每个工具继续保留四项行为注解。
  • 面向人的输出、错误信息和日志不是解析接口,请使用 --json。runtime.json 及其他 daemon/CLI 状态文件属于私有接口。
  • Go package 不构成 library API。后续 0.x 若发生不兼容变更,必须附上迁移说明;私有预发布行为不作为兼容性基线。