2026/05/25

把 HTTP MCP 服务器托管在私有 tailnet

通过 TSLink 代理分享第三方 HTTP MCP 服务器,并明确 tailnet 访问、后端认证与 Funnel 边界。

第三方 HTTP MCP 服务器可能需要从多台设备访问。分享之前,先检查其工具能读取或修改什么。TSLink 可将这个已有 HTTP 端点作为代理服务,在私有 Tailscale tailnet 内访问。

安装 TSLink v0.1.1。

注册已经运行的服务器

假设 HTTP MCP 服务器监听 localhost:8080:

bash
tslink add mcp-tools --proxy localhost:8080 --json
tslink url mcp-tools --wait

默认情况下,add 保存具名服务并确保后台网关运行。如果其 JSON 结果返回 data.status: needs_login,打开 data.auth_url 并批准新的 tsnet 节点,再运行 url --wait 取回实际地址。用 tslink status --json 检查就绪状态。若希望 TSLink 拒绝不符合身份规则的 HTTP 调用方,请为代理服务配置 --allow。未配置 --allow 或人员策略时,tailnet 策略允许的调用方可以访问代理;已有人员授权、到期和拒绝记录仍生效。

tailnet 段使用 Tailscale/WireGuard,代理 HTTP 使用 Tailscale HTTPS listener。到本地后端的跳转可能是明文。独立节点身份是网络边界,不是进程沙箱;MCP 服务器的工具仍需适当的应用层授权。

区分不同接口

这里是在 TSLink 后面托管另一个 HTTP MCP 服务器,不是让 MCP client 连接 TSLink 自身的服务管理工具。后者请按 MCP 控制服务器配置在本地通过 stdio 运行 tslink mcp。由 tslink serve --mcp 启用的可选远程控制面仅在 tailnet 内可达,但管理权限较高;启用前必须按文档配置访问限制。

公开 Funnel 是另一项决定,要求同时用 --funnel 和 --public。TSLink 的 tailnet 身份过滤不保护公共 Funnel 请求。除非已设计并审查公开端点的应用层认证,否则应保持高权限 MCP 工具私有。MCP 托管指南有完整配置与限制。