快速开始
把本地文件、目录或 HTTP 服务分享给另一台 tailnet 设备
场景指南:在手机上使用编程 agent 的 Web UI。
安装
macOS 或 Linux 上运行 brew install --cask anydoor7/tap/tslink 安装 TSLink。归档、Linux 软件包、Windows zip 和源码构建的步骤见安装指南。接收设备需要 Tailscale,并且 tailnet 策略允许它访问新节点。运行 TSLink 的主机不需要另装 Tailscale daemon。
第一次分享
分享已经生成的报告。单文件目标只提供该文件;目录目标会提供其中可浏览的内容。
tslink share ./report.html --name preview默认路径不要求 API token、OAuth client secret 或 tslink login。share 注册服务,并确保后台网关运行。首次注册可能返回 Tailscale 授权 URL,而非就绪的服务 URL。节点注册与审批仍受你的 tailnet 策略约束。
agent 或脚本可以给同一命令加上 --json:
tslink share ./report.html --name preview --json成功的授权交接如下(实际结果可能包含更多字段):
{"type":"tslink.result","ok":true,"schema_version":1,"command":"share","code":0,"data":{"status":"needs_login","auth_url":"https://login.tailscale.com/a/..."}}needs_login 表示调用成功,但还需要人的操作。读取 data.auth_url;不要把它当作服务链接,也不要在未授权时无限重试。已经就绪时则读取 data.url。
授权并获取链接
打开返回的授权 URL,在策略允许的情况下批准节点,再获取准确的运行时 URL:
tslink url preview --wait从手机或另一台 tailnet 设备打开返回的 HTTPS 链接。主机名来自运行时证据,不要用请求的服务名自行拼接。
tslink status
tslink list授权交接、daemon 正在运行和准确 URL 是不同状态。哪些设备可连接仍由 Tailscale 网络策略决定。对于 proxy/file HTTP 服务,未设置 --allow 时允许通过 tailnet 策略的调用者;需要额外的 TSLink 身份检查时,请设置明确的 allow-list。
保留具名服务
已有的本地 Web 应用可以使用 add:
tslink add my-app --proxy localhost:3000
tslink url my-app --waitadd 默认也确保网关运行。若返回 needs_login,完成同样的授权交接。只有明确采用前台流程、先用 --no-daemon-install 注册,并且没有其它网关运行时,才直接执行 serve:
tslink add my-app --proxy localhost:3000 --no-daemon-install
tslink serveshare 默认使用 ephemeral tailnet 节点;add 默认使用持久节点。ephemeral 节点清理不会删除本地 registry 条目。用完后删除条目:
tslink remove preview本地删除和远端 tailnet 设备清理分别报告;远端清理要求准确的所有权证明和 API client。
更多任务
# 只读分享目录
tslink share ./build --name docs
# 把 HTTP 服务限制给指定 tailnet 身份
tslink add internal --proxy localhost:9090 --allow you@example.com,tag:ops
# 转发原始 TCP;使用 tailnet 策略与后端自身认证保护
tslink add mydb --tcp localhost:5432
# 启用登录时自动启动
tslink install公开访问是另一项选择。proxy 服务可使用 --funnel --public;Funnel 流量来自公共互联网,没有 TSLink 调用者身份执行,且拒绝与 --allow 同用。在显式确认公开的流程中,Funnel 策略自动配置默认开启;使用前请阅读配置。
可选的存储凭据
tslink login 是凭据录入菜单,并非浏览器 OAuth callback。只有需要带标签节点的自动化或 API 操作时,才加入 API token 或 OAuth client secret。脚本应选择一个明确的 stdin 来源:
printf %s "$TSLINK_API_KEY" | tslink login --api-key-stdin --json
# 或使用 OAuth 槽位,密钥由 secret manager 注入
printf %s "$TSLINK_CLIENT_SECRET" | tslink login --client-secret-stdin --json在无头机器上使用前,阅读凭据存储及其有条件的回退。OAuth API 操作取决于 scopes。不要把 secret 写进 argv 或 MCP client 配置。
编程式访问
CLI 命令支持带版本的 --json 信封,但 tslink mcp 的 stdout 保留给 MCP frames,因此拒绝 --json。owner 的 44 个 MCP 工具,精简会话更少覆盖服务操作;daemon 生命周期、安装、login/logout 和配置仍仅通过 CLI 提供。