TSLinkTSLink 文档

把应用分享给指定的人,并设置期限

将自托管应用私有分享七天,邀请 tailnet 之外的人,并随时收回权限。

查看 Markdown

场景指南:私有分享一份 HTML 报告,并设置访问截止时间。

TSLink 可以让指定的人访问选定的私有 HTTP 应用或文件,直到设定的期限。访问者使用实际的 Tailscale 登录账户;tailnet 之外的人需要逐个接受应用邀请。应用继续在你的电脑运行,并保留自身登录。

访问者可从官方渠道安装 Tailscale:iPhone/iPad、Android、Mac,或查看所有平台。

1. 注册应用并完成入网

安装 TSLink,自行安装并启动应用。以运行中的 Jellyfin 为例,先预览 recipe,再应用:

bash
tslink apps share jellyfin --allow you@example.com
tslink apps share jellyfin --allow you@example.com --yes
tslink url jellyfin --wait

把 you@example.com 换成自己的 Tailscale 登录账户。核对 recipe 的应用配置;实际主机端口不同就覆盖默认端口。保留 Jellyfin 登录。Recipe 注册访问路径,不安装或配置应用。先完成浏览器入网及可能的管理员设备审批,再打开返回的准确 URL。

2. 给 tailnet 成员开放七天

bash
tslink people add alice@example.com --apps jellyfin --for 7d
tslink people list --json

使用 Alice 实际的 Tailscale 登录账户,它可能与联系邮箱不同。本地授权不需要存储 API 凭据。Daemon 必须运行兼容版本,tailnet 策略也必须允许连接应用节点。

首次人员授权会将应用设为按人限制:未列出的调用者需要有效授权或明确的旧 --allow 规则。上面的 owner 规则保留你自己的访问。对于已管理的无标签用户,人员授权优先于旧 allow 规则;过期或失去某个应用的授权都会拒绝新请求。带标签的机器不能使用人的授权。

缩短同一个人的应用范围和期限:

bash
tslink people update alice@example.com --apps jellyfin --for 1h

只修改 --apps 会保留已有应用的期限,而新增应用默认 24h 期限。传入 --for 才会为所有选定应用设置期限。--apps all 只选择当前注册的私有 HTTP/文件应用,不自动包含未来的应用。

3. 邀请 tailnet 之外的人

对一个新访问者:

bash
tslink people add bob@example.com --apps jellyfin --for 7d --invite --print-links

创建邀请需要存储用户自己的 Tailscale API access token;OAuth client token 无法创建设备邀请。通过标准输入登录保存,避免进入命令参数或公开日志。

生成的消息由你发送。TSLink 请求的是链接,不会发送邮件。Bob 安装 Tailscale,以指定账户登录,逐个接受应用链接,并保持 Tailscale 连接。多个应用就需要多次接受。拿到链接的另一个账户不会因此获得本地授权。

邀请链接属于 bearer capability,--print-links 是明确展示它们的操作;默认隐藏 URL。Registry 只记录 ID 和状态,不保存邀请链接或 token。

邀请可能部分失败,而本地授权已保存。查看 complete、逐应用的 code 和 state。用 tslink people update bob@example.com --invite 续做未完成操作;已完成的操作复用 ID。POST 结果不确定时需要主人核对并 reconcile,不能盲目重试。恢复步骤见 TSLink 人员指南。

4. 提前收回访问

bash
tslink people remove alice@example.com

先保存本地拒绝,再尝试清理已记录的待接受邀请。没有 token 也能本地拒绝,但远端清理可能未完成。已接受的 Tailscale 设备分享可能还需单独管理。

到期与撤销会阻止新的私有 HTTP/文件请求,包括新的 WebSocket upgrade。已接受的流与 WebSocket 连接可继续;已下载的数据无法收回。TCP 与公共 Funnel 无法按人限制。移除一个人会在私有 HTTP/文件应用间保留拒绝记录,不会撤销其 tailnet 成员身份。

对方可以只用浏览器吗?

私有人员分享需要 Tailscale。浏览器访客链接现已支持单个 HTTP proxy 应用,采用明确公开的 Funnel、强制 gate、有限期限与可选 PIN。链接/PIN 可转发,不证明身份。开放 Funnel 是另一种发布方式,没有 TSLink 访问者身份检查;新公开默认 24h,拒绝 never。

相关:本地 AI · Agent/MCP 配置 · 选择分享工具。

来源:TSLink 分享边界、人员指南。

统一入口、QR 与续期

启用每台主机的私有 portal,再用 people add/update --qr 或 --qr-png <existing-directory/file.png> 生成准确地址。安装 Tailscale、正确 login、设备分享与网络策略仍是前提。一个 QR 不安装应用、不批准权限;外部人员需单独接受 portal 节点分享。

新人员授权默认 24h。期限支持相对/绝对截止时间,至少 1h。有邀请历史者采用 guest 策略,默认最多 7d;成员永久授权需 --for never --ack-never。用 tslink extend jellyfin --person alice@example.com --for 36h 修改单应用,到期需 --regrant。开放 Funnel/TCP 不能按人授权;guest-gated 应用私有监听仍执行人员规则。访问历史可查看保留的请求与生命周期 receipt。

目录