- 用公钥发起连接
- 先尝试直连
- 回退到中继
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 需要主动开启;同一网络中的设备则可以直接互相找到。
为什么手机不能直接访问你的电脑
每台联网的设备都有一个 IP 地址,就像街道地址一样。你家里的电脑通常没有自己的公网地址:路由器让全家共用一个公网地址。 这就是 NAT(网络地址转换)。
路由器像一扇单向门:内部设备可以对外发起连接,但防火墙会丢弃所有不是回复的入站连接。而且地址会变,比如手机从 Wi-Fi 切换到移动数据时。
iroh 不会向整个互联网开放端口,而是让两台设备各自从己方一侧把门打开。
iroh 如何建立连接
- 查找。手机会查询电脑的端点 ID 连接在哪个中继上。
- 建立直连。借助该中继,两台设备交换地址,然后同时向对方发送数据包。每台路由器都会看到一个像是回复的数据包,于是放行:这就是打洞(hole punching)。
- 回退。如果某个网络仍然阻断直连,流量就继续经由中继转发。
中继能看到和看不到什么
中继会转发你的流量,但无法读取其内容:流量是用另一台设备的密钥加密的。它确实能看到两台设备的 IP 地址。 而使用 n0 的中继时,n0 的地址查询服务还会记录每台设备连接在哪个中继上。
直连的更多细节
iroh 的 NAT 穿透直接在 QUIC 连接内部完成,通过一个以 QUIC NAT 穿透草案为蓝本的扩展(n0_nat_traversal)实现,因此连接细节保持加密。
双方会同时向对方的公网地址发送 UDP 数据报。中继只是会合点,不参与打洞。设备通过 WebSockets 连接中继。
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 的 QUIC | WireGuard |
| 身份 | 由应用生成的密钥,无需注册账号 | 一个账号;协调服务器负责分发设备的公钥 |
| 中继 | 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。