Agent Terminal
← 博客

什么是 iroh?

iroh 是 Agent Terminal 远程访问所依托的开源网络库。本文说明它的作用, 中继由谁运行,以及中继能看到什么。

  1. 用公钥发起连接
  2. 先尝试直连
  3. 回退到中继

中继能看到什么

  • 两台设备的 IP 地址
  • 转发的加密数据包

使用 n0 的中继时,n0 的地址查询服务还会记录每台设备连接在哪个中继上。详解中继能看到什么

iroh 是什么

iroh 是一个开源网络库,它按设备的公钥(即端点 ID)而不是 IP 地址,把一台设备连接到另一台。 它先尝试直连,失败时退回到中继服务器,并且每条连接都用 QUIC 进行端到端加密。

库是嵌入应用中的代码,而不是需要单独安装的东西。iroh 用 Rust 编写,采用 MIT 或 Apache 2.0 许可证,由一家名为 n0 的公司开发。

更精确的说明
  • 端点 ID 是 Ed25519 密钥对中的公钥部分。密钥对由应用自行生成,无需注册。
  • 连接使用带 TLS 1.3 的 QUIC,由 n0 自己的 QUIC 实现 noq 提供。它支持多路径:连接可以在 Wi-Fi 与移动数据之间切换。
  • 要被找到,端点会把一条带签名的记录(Pkarr)发布到 DNS 服务器,记录中包含它的端点 ID 和归属中继的 URL。默认使用的 DNS 服务器由 n0 运行。发布到 Mainline DHT 需要主动开启;同一网络中的设备则可以直接互相找到。

来源:什么是 iroh、 端点、 地址查询,以及 iroh 仓库。

为什么手机不能直接访问你的电脑

每台联网的设备都有一个 IP 地址,就像街道地址一样。你家里的电脑通常没有自己的公网地址:路由器让全家共用一个公网地址。 这就是 NAT(网络地址转换)。

路由器像一扇单向门:内部设备可以对外发起连接,但防火墙会丢弃所有不是回复的入站连接。而且地址会变,比如手机从 Wi-Fi 切换到移动数据时。

为什么离家的手机连不上电脑 手机向家里的路由器发起连接。路由器会丢弃它,因为这不是对电脑所发内容的回复。路由器后面的电脑永远看不到这个连接。 离家在外的手机 手机 被丢弃 路由器 电脑 NAT 与防火墙: 只允许回复进入
路由器只放行回复,不放行来自外部的新连接。

iroh 不会向整个互联网开放端口,而是让两台设备各自从己方一侧把门打开。

iroh 如何建立连接

  1. 查找。手机会查询电脑的端点 ID 连接在哪个中继上。
  2. 建立直连。借助该中继,两台设备交换地址,然后同时向对方发送数据包。每台路由器都会看到一个像是回复的数据包,于是放行:这就是打洞(hole punching)。
  3. 回退。如果某个网络仍然阻断直连,流量就继续经由中继转发。
先直连,中继作为备用 打洞成功时,手机和电脑直接相连。打洞失败时,加密流量从手机发送到中继服务器,再转发到电脑。 1. 能直连时:直接连接 手机 电脑 中继 2. 否则,经由中继 转发它无法读取的加密数据包
只有直连失败时,中继才转发流量。

中继能看到和看不到什么

中继会转发你的流量,但无法读取其内容:流量是用另一台设备的密钥加密的。它确实能看到两台设备的 IP 地址。 而使用 n0 的中继时,n0 的地址查询服务还会记录每台设备连接在哪个中继上。

直连的更多细节

iroh 的 NAT 穿透直接在 QUIC 连接内部完成,通过一个以 QUIC NAT 穿透草案为蓝本的扩展(n0_nat_traversal)实现,因此连接细节保持加密。 双方会同时向对方的公网地址发送 UDP 数据报。中继只是会合点,不参与打洞。设备通过 WebSockets 连接中继。

来源:NAT 穿透、 中继、 Iroh 1.0。

n0 是谁,公共中继又是什么

n0(n0, inc.)是开发 iroh 的公司,iroh 的代码在 GitHub 上公开开发。它还运营一组公共中继, 除非应用设置了自己的中继,iroh 默认使用这些中继。根据 n0 的说明和我们应用内的提示,这些中继的情况如下:

  • 免费,由所有基于 iroh 构建的应用共享。
  • 不作保证:不承诺可用时长,n0 也未公布速率限制,因此在繁忙或宕机时,经中继的连接可能变慢、断开,甚至完全无法连接。
  • 仅支持较新版本:这些中继只支持较新的 iroh 版本,版本过旧的应用可能会无法连接。

n0 的文档称这些中继适用于开发和测试,并提供用于生产环境的付费中继。

给 Tailscale 用户

这些思路并不陌生:直连、借助 NAT 打洞,以及退回到一个无法解密所转发内容的中继(Tailscale 的中继称为 DERP)。区别在于范围。 Tailscale 把整台设备放进一个所有应用都能使用的私有网络;iroh 则只把一个应用连接到它的对端。

iroh Tailscale
是什么嵌入单个应用的库一个把设备加入你的 tailnet 的客户端(tsnet 可将其嵌入 Go 程序)
加密带 TLS 1.3 的 QUICWireGuard
身份由应用生成的密钥,无需注册账号一个账号;协调服务器负责分发设备的公钥
中继iroh 中继:n0 的公共中继、付费中继,或你自己的中继DERP:Tailscale 的中继,或你自己的中继

两者总体上并无优劣之分:Tailscale 适合需要访问规则的单一私有网络,iroh 适合让应用无需任何配置,就能连到它自己的另一半。

Agent Terminal 如何使用 iroh

你在 Windows 电脑或 Mac 上运行的桌面应用会启动一个 iroh 端点;你扫描二维码完成配对后,手机便会按端点 ID 发起连接。

  • 同一 Wi-Fi 下,或能直连时:不使用中继。
  • 免费方案,在外使用:免费方案依赖 n0 的公共中继,无需注册账号。这是 n0 免费提供的服务,由 n0 而非我们运行,不承诺可用时长或速度。它可能很慢、会断开,甚至完全连不上;n0 那一端的情况我们无法控制。
  • Pro:通过 Agent Terminal 的专属中继,获得可以依赖的远程访问(付费方案)。如果 Pro 停止服务,则退回到公共中继。
  • 你自己的中继:自行运行一个,并在桌面端进行设置。

在 iroh 连接内部,依然是 SSH,并在手机与电脑之间端到端加密;桌面端只接受公钥登录(如何验证)。 即便能连到电脑,没有已配对的密钥,任何人也进不去。

常见问题

安全吗?

中继无法读取你的会话:外层是 iroh 的加密,内层是 SSH,而且桌面端会自行核验每一把密钥。中继能知道的只是两台设备的 IP 地址。 任何中继都能看到它们,所以选择的是用谁的中继:免费方案用 n0 的,Pro 用我们的,或者用你自己的。

需要注册账号吗?

不需要,免费方案无需账号。只有 Pro 需要账号。

如果 n0 的中继宕机或变慢怎么办?

在同一 Wi-Fi 下,或设备能够直连的任何地方,什么都不会改变。在免费方案下,经中继的连接可能变慢、断开,甚至完全连不上,直到中继恢复,而这不在我们的控制范围内;Pro 则改用 Agent Terminal 的专属中继。 请保持 Agent Terminal 为最新版本,因为 n0 只支持较新的 iroh 版本。

我能自己运行中继吗?

可以。n0 以开源形式发布了中继(具体方法)。 在你可控的服务器上运行它,然后在桌面端进行设置。

已于 2026 年 10 月 20 日对照 iroh 文档、n0 的博客和 Tailscale 文档核实。作者 Edward 来自开发 Agent Terminal 的团队,该应用使用 iroh。