Agent Terminal
← ブログ

iroh とは?

iroh は、Agent Terminal のリモートアクセスを支えるオープンソースのネットワーキングライブラリです。 その仕組み、リレーを運営しているのは誰か、そしてリレーに何が見えるのかを説明します。

  1. 鍵で接続先を指定
  2. 直接接続を試す
  3. リレー経由に切り替え

リレーに見えるもの

  • 両方の機器の IP アドレス
  • 暗号化されたパケット(中継するだけ)

n0 のリレーを使う場合、n0 のアドレス検索サービスも、各機器がどのリレーに接続しているかを記録します。リレーに見えるものについて詳しく

iroh とは

iroh は、機器同士を IP アドレスではなく、エンドポイント ID と呼ばれる公開鍵で接続する オープンソースのネットワーキングライブラリです。まず直接接続を試し、だめならリレーサーバーに切り替えます。 すべての接続は QUIC によるエンドツーエンド暗号化で保護されます。

ライブラリとは、アプリの中に組み込まれるコードのことで、インストールするものではありません。iroh は Rust で書かれており、 MIT または Apache 2.0 のライセンスで公開されています。開発しているのは n0 という会社です。

正確な説明
  • エンドポイント ID は、Ed25519 鍵ペアの公開鍵の部分です。鍵ペアはアプリ自身が作成するので、登録は不要です。
  • 接続には、n0 独自の QUIC 実装 noq を使い、TLS 1.3 で保護された QUIC が使われます。この実装はマルチパスに対応しており、接続を Wi-Fi とモバイルデータの間で移動させられます。
  • 他の機器から見つけられるように、エンドポイントは、エンドポイント ID とホームリレーの URL を含む署名付きレコード(Pkarr)を DNS サーバーに公開します。標準では n0 が運営する DNS サーバーを使います。Mainline DHT への公開はオプトインで、同じネットワーク上の機器同士は直接見つけ合えます。

出典: What is iroh、 Endpoints、 Address lookup、iroh のリポジトリ。

なぜスマホは PC に直接届かないのか

インターネットに接続したすべての機器には、住所のような IP アドレスがあります。自宅の PC は、たいてい自分専用の IP アドレスを持っていません。 ルーターが家全体で1つの公開 IP アドレスを共有しているからです。これが NAT(ネットワークアドレス変換)です。

ルーターは一方通行のドアのようなものです。内側の機器は外へ接続できますが、ファイアウォールは、返信ではない外からの接続を破棄します。 また、アドレスは変わることがあります。たとえばスマホが Wi-Fi からモバイルデータに切り替わったときなどです。

外出先のスマホから PC に届かない理由 スマホは自宅のルーターに向けて接続を送ります。ルーターは、PC が送ったものへの返信ではないため、その接続を破棄します。ルーターの奥にある PC には、その接続が届きません。 外出先のスマホ スマホ 破棄 ルーター PC NAT とファイアウォール: 返信のみ通過
ルーターが通すのは返信だけで、外からの新しい接続は通しません。

インターネット全体に向けてポートを開けるのではなく、iroh は両方の機器に、それぞれの側からドアを開けさせます。

iroh の接続の仕組み

  1. 見つける。スマホは、PC のエンドポイント ID がどのリレーに接続しているかを調べます。
  2. 直接つなぐ。そのリレーを介して両機器がアドレスを交換し、同時にお互いへパケットを送ります。どちらのルーターも、それを返信とみなして通します。これをホールパンチングと呼びます。
  3. リレー経由に切り替える。それでも通信をブロックするネットワークがあれば、代わりにリレー経由で通信を続けます。
直接経路が先、リレーは予備 ホールパンチングがうまくいけば、スマホと PC は直接つながります。うまくいかない場合、暗号化された通信はスマホからリレーサーバーを経由して PC へ届きます。 1. 直接(うまくいく場合) スマホ PC リレー 2. それ以外はリレー経由 中身を読めない暗号化パケットを転送
リレーが通信を運ぶのは、直接経路が失敗したときだけです。

リレーに見えるものと見えないもの

リレーは通信を中継しますが、中身を読むことはできません。通信は相手機器の鍵向けに暗号化されているからです。 リレーには両機器の IP アドレスが見えます。さらに n0 のリレーを使う場合、n0 のアドレス検索サービスは、 各機器がどのリレーに接続しているかを記録します。

直接経路の詳細

iroh は NAT トラバーサルを QUIC 接続そのものの内側で行います。QUIC の NAT トラバーサルのドラフトをもとにした拡張機能 (n0_nat_traversal)を使うので、接続の詳細も暗号化されたままです。双方が同時に、相手の公開アドレスへ UDP データグラムを送信します。 リレーは待ち合わせの場所であり、ホールパンチには参加しません。機器はリレーに WebSockets で接続します。

出典: NAT traversal、 Relays、 Iroh 1.0。

n0 とは何者か、公開リレーとは

n0(n0, inc.)は、iroh を GitHub 上でオープンに開発している会社です。また iroh は、アプリが独自のリレーを設定しない限り、 n0 が運営する公開リレーの一群を使います。n0 の説明と Agent Terminal のアプリ内の案内によると、 これらのリレーには次の特徴があります:

  • 無料で、iroh で作られたすべてのアプリで共有されます。
  • 保証されない:稼働時間の保証がなく、n0 が公開していない速度制限もあります。このため、混雑時や停止時には、リレー経由の接続が遅くなったり、切れたり、まったくつながらなかったりすることがあります。
  • 最新版のみ対象:n0 は、これらのリレーで新しい iroh のリリースしかサポートしないため、古いアプリは接続できなくなることがあります。

n0 のドキュメントでは、これらは開発やテストに向いているとされており、本番向けには有料のリレーも提供されています。

Tailscale 利用者向け

考え方はよく似ています。直接つなぎ、ホールパンチで NAT を越え、リレー(Tailscale のものは DERP と呼ばれます)に切り替えます。 このリレーは、転送する内容を復号できません。違いは対象の範囲です。Tailscale は機器1台を、どのアプリでも使えるプライベートネットワークに参加させます。 一方 iroh は、1つのアプリをその相手(ピア)と直接つなぎます。

iroh Tailscale
概要1つのアプリに組み込むライブラリ機器を tailnet に参加させるクライアント(tsnet を使うと Go プログラムに組み込めます)
暗号化QUIC と TLS 1.3WireGuard
識別情報アプリが作る鍵。アカウントは不要アカウント。コーディネーションサーバーが機器の公開鍵を共有する
リレーiroh のリレー:n0 の公開リレー、有料のリレー、または自分のリレーDERP:Tailscale のもの、または自分で用意したもの

どちらが一般に優れているということはありません。アクセスルールのある1つのプライベートネットワークが必要なら Tailscale、 アプリが対になる相手に設定なしで届くようにしたいなら iroh が向いています。

Agent Terminal での使い方

Windows PC または Mac のデスクトップアプリが iroh エンドポイントを動かします。QR コードを読み取ってペアリングすると、 スマホがそのエンドポイント ID に接続します。

  • 同じ Wi-Fi、または直接経路:リレーは使われません。
  • 無料プラン、外出先から:無料プランは n0 の公開リレーに頼っており、アカウントは不要です。これは当社ではなく n0 が無料で運営するサービスで、稼働時間や速度の約束はありません。遅い、切れる、まったくつながらない、といったことも想定してください。n0 側の状況を当社が制御することはできません。
  • Pro:Agent Terminal の専用リレーを通じて、頼れるリモートアクセスを使えます(プラン)。Pro が終了すると、公開リレーに切り替わります。
  • 自分のリレー:自分でリレーを動かし、デスクトップに設定します。

iroh 接続の内側では、今も SSH がスマホと PC の間をエンドツーエンドでつないでおり、デスクトップは公開鍵だけを受け付けます(確認方法)。 ペアリング済みの鍵がなければ、PC に届いても誰も入れません。

よくある質問

安全ですか?

リレーはセッションの中身を読めません。外側は iroh の暗号化、内側は SSH で守られており、デスクトップがすべての鍵を自ら確認します。 リレーに見えるのは両機器の IP アドレスだけです。どのリレーでも IP アドレスは見えるため、選ぶのは、どのリレーを使うかです。 無料プランなら n0 のリレー、Pro なら当社のリレー、または自分のリレーです。

アカウントは必要ですか?

いいえ、無料プランにアカウントは不要です。アカウントが必要なのは Pro だけです。

n0 のリレーがダウンしている、または遅い場合は?

同じ Wi-Fi 内や、機器同士が直接つながっている場合は、何も変わりません。無料プランでは、リレー経由の接続が復旧するまで遅くなったり、切れたり、まったくつながらなかったりすることがあり、当社はそれを制御できません。Pro では代わりに Agent Terminal の専用リレーを使います。 n0 は新しい iroh バージョンしかサポートしないため、Agent Terminal は最新版に更新しておいてください。

自分のリレーを運用できますか?

はい。n0 はリレーをオープンソースとして公開しています(方法)。 管理できるサーバーで動かし、それをデスクトップに設定してください。

2026年10月20日時点で、iroh のドキュメント、n0 のブログ、Tailscale のドキュメントで内容を確認しています。 執筆は、Agent Terminal を開発し iroh を使っているチームの Edward です。