返回博客
HermesTailscaleSelf-HostingNetworking

Hermes Agent + Tailscale:安全远程访问

无需开放端口即可随时随地访问自托管 Hermes Agent。在主机和你的设备上安装 Tailscale,通过 tailnet 直接使用 8642 端口。

作者:Hermify Team||阅读约 3 分钟
深色地图上一张由发光绿色节点组成的私有网状网络,象征通过 Tailscale tailnet 连接 Hermes Agent 主机、手机与笔记本电脑

别再把 8642 端口暴露在公网上

当自托管的 Hermes Agent 离开你的笔记本电脑、部署到 VPS 上的那一刻,你需要做一个选择。网关监听 8642 端口,最自然的反应就是在主机防火墙上开放这个端口,让手机、桌面或 Hermes Desktop 应用从任何地方都能连上。它确实能用,但对于一个持有你的模型服务商密钥、能读取你的邮件、还能在主机上执行 shell 命令的进程来说,这恰恰是错误的形态。

更好的形态是 WireGuard 网状网络。在 Hermes 主机以及每一台你会用来聊天的设备上安装 Tailscale,把两端接入同一个 tailnet,然后在这些设备上通过 http://<hostname>:8642 访问网关,VPS 上无需任何入站防火墙规则。8642 端口上的任何内容都无法从公网到达。只有你显式加入 tailnet 的机器才能看见这个 Agent。这是我们向每一位准备把 Hermes 从本地网络中带出去的自托管用户推荐的方案。

Tailscale 到底是什么

Tailscale 是基于 WireGuard 构建的网状 VPN。它不像传统的星型 VPN 那样让所有流量都经过一台中心集线设备,而是在你的 tailnet 内的设备之间建立点对点的加密隧道,只在配对阶段借助一个协调服务器让节点互相发现。两台设备能直连时就直连;如果双方都在受限 NAT 后面无法直连,报文会退回到加密的 DERP 中继,中继本身看不到明文。

对于 Hermes 部署,这在实际中意味着:

  • 主机无需任何入站防火墙规则。 网关仍然在 VPS 内部监听 0.0.0.0:8642,但主机防火墙从不接受来自公网的连接。Tailscale 绑定到 tailscale0 接口,这个接口对公网并不暴露。
  • 通过 MagicDNS 得到稳定的设备名。 无论底层 VPS 的 IP 是什么,你的 Hermes 主机都可以被 tailnet 内的任意节点用 http://hermes-vps:8642 访问。
  • 无需管理密钥。 每台设备都通过你的 SSO 提供方(Google、GitHub、Okta、Apple 或任意 OIDC 端点)来认证。加入一台新手机或撤销一台丢失设备,都只是 Tailscale 管理台里的两次点击。
  • 个人使用免费。 Personal 计划免费覆盖最多 6 名用户和不限数量的设备,足以容纳一个单人运营的 Hermes 部署再加上几个客户端。

如果你还没决定要不要自己托管 Agent,先看看 自托管 vs 托管版 Hermes Agent。本文其余部分假设你已经在 VPS 上跑起了基于 Docker 的 Hermes Agent(配方在 Hermes Agent Docker 指南 里),现在想要从外部安全地访问它。

前置条件

你需要:

  • 一台运行 Hermes Agent 的 VPS 或家庭实验室主机,最好通过 Docker 部署,容器内网关绑定在 0.0.0.0:8642
  • 一个免费的 Tailscale 账户(Personal 计划就够用)。
  • 主机的 SSH 访问权限,以及你要用来聊天的手机或笔记本的管理员权限。
  • 主机公网防火墙已配置为拒绝入站 8642。如果你在最初配置时开放过这个端口,请先关闭它,再继续下面的步骤。这正是本次操作的意义所在。

步骤 1 - 在 Hermes 主机上安装 Tailscale

一行安装脚本在所有主流 Linux 发行版上都能工作:

curl -fsSL https://tailscale.com/install.sh | sh

脚本会检测你的发行版,添加 Tailscale 的软件源,并安装 tailscaletailscaled 两个二进制。在 Debian、Ubuntu、Fedora、Arch 和 Alpine 上,它会自动挑选正确的包管理器。在 macOS 上对应命令是 brew install tailscale;在 Windows 上,请从 Tailscale 官网下载安装包。

接着启动守护进程并登录:

sudo systemctl enable --now tailscaled
sudo tailscale up --ssh

--ssh 参数会额外开启 Tailscale SSH,让你可以用 SSO 身份、通过 tailnet 走 SSH 登录主机,而不再依赖静态密钥对。如果你已经有一套可用的 SSH,可以省略这个参数;这是可选且可回退的增强项。

tailscale up 会打印一个一次性登录链接。在浏览器里打开它,用你的身份提供方完成认证后,主机就加入了你的 tailnet。记下它的 tailnet IP 和 MagicDNS 名字:

tailscale ip -4
tailscale status

你会看到类似 100.64.1.5 以及 hermes-vps.tailnet-name.ts.net 的值。两者都能作为网关的目标地址。

步骤 2 - 在手机和笔记本上安装 Tailscale

在所有你想用来聊天的设备上安装 Tailscale 应用:

  • iOS / Android:从 App Store 或 Play Store 安装 Tailscale 应用,打开后用你在主机上使用的同一身份登录。
  • macOS / Windows / Linux 桌面:从 tailscale.com/download 下载安装包并登录。

登录完成后,每台设备都是同一 tailnet 中的一个节点。在手机浏览器里打开 http://hermes-vps:8642/health,你应该收到标准的健康检查 JSON。在另一张 Wi-Fi 网络下的笔记本上打开同一个 URL,同样可以访问。整个过程 VPS 上没有开放任何端口。

步骤 3 - 让 Hermes Desktop 指向远端网关

如果你使用 Hermes Desktop 应用,把它的网关 URL 设置为主机在 tailnet 中的地址。在应用设置里把默认的 http://localhost:8642 改为:

http://hermes-vps:8642

桌面端的 WebSocket 通道同样使用这个主机名,配合 --tui WebSocket 端点。在容器的 .env 中固定一个 HERMES_DASHBOARD_SESSION_TOKEN,让桌面端认证一个稳定的 token,而不是每次都被新轮换的 token 打断。应用其他部分与传输方式无关,从它的视角来看网关始终就在 localhost,路由细节由 Tailscale 负责处理。

一旦桌面端能与远端网关对话,Hermes 的所有常用功能(语音模式、Skills、MCP 工具、定时任务)都会像本地安装一样运作。想看看语音在同一套配置下的表现,可以参考 Hermes Agent 语音模式

可选:Tailscale Funnel 提供公网 HTTPS

偶尔你确实需要一个能被公网直接访问的 webhook 端点:Stripe webhook、Discord slash-command 端点,或者不使用 long polling 时的 Telegram webhook。Tailscale Funnel 就是这个出口。它可以把 tailnet 中选定的本地端口发布为 https://hermes-vps.tailnet-name.ts.net 上的公网 HTTPS 端点,同时由 Tailscale 帮你签发有效的 Let's Encrypt 证书。

在主机上启用它:

sudo tailscale funnel 8642

Funnel 默认关闭,且按服务粒度启用,你可以只开放一个狭窄的端点,而不必打开整个网关。如果你从不需要公网 HTTPS URL,就跳过这一步,让 Agent 完全留在 tailnet 内。细节可参考 Tailscale Funnel 文档

Tailscale vs Cloudflare Tunnel vs 防火墙 + 反向代理

从外部访问自托管 Hermes Agent 的三种方式,按需要投入的心智成本排序如下:

方案 公网暴露 部署成本 最合适的场景
Tailscale 网状网络 你控制每一台聊天设备
Cloudflare Tunnel 是,带鉴权 你需要把 Agent 分享给外部用户
防火墙 + 反向代理 + 鉴权 你想要经典的 Nginx 兜底方案

Cloudflare Tunnel 在受众不只是自己设备时是一个合理的折中,但它会把端点暴露给整个互联网,并依赖 Cloudflare Access 做认证。防火墙加反向代理也能工作,但你要自己扛下整套栈:TLS、限速、鉴权中间件、日志审查。Tailscale 是通向真正私有 Agent 的最短路径。前两种更暴露的方案的加固建议见 Hermes Agent 安全指南

托管替代方案

如果你决心自托管,Tailscale 是正确答案。它同时也是你原本没有的六个额外组件:一个 Tailscale 账户、对协调服务器的依赖、每台主机上的 tailscaled 守护进程、增删设备的策略、需要记住的 MagicDNS 名字以及需要定期审计的设备清单。对于家庭实验室或某个闲暇的周末,这笔账划得来;如果你只是想要一个能替你回消息的私人 Agent,就没那么划算了。

如果目标是"一个我能在 Telegram 上随时随地聊天的 Agent",而不是"运营一张私有 WireGuard 网状网络",托管路线是最直接的捷径。开始使用 Hermify,你的 Hermes Agent 大约一分钟就能作为 Telegram 联系人上线,记忆始终归你所有,无需开放端口,也无需照看任何 tailnet。你聊天用的设备,就是你原本就在用的 Telegram 客户端,无需任何 VPN 配置。

Sources

运行你自己的 Hermes Agent

自带 API 密钥,连接 Telegram,60 秒内即可上线一个自我改进的 AI 智能体。

立即开始