世界を動かす技術を、日本語で。

Iroh: ピア間の直接接続を確立するためのライブラリ

2025年6月26日原文(github.com)

概要

iroh は、公開鍵でダイヤルできるAPIを提供するネットワーク接続ライブラリ。 QUIC プロトコルを活用し、高速かつ安全な通信を実現。 ホールパンチング やリレーサーバーで、どこからでも最速経路を維持。 Rustライブラリ として簡単に導入可能。 複数のプロトコルを組み合わせて柔軟なネットワーク構築が可能。

irohとは何か

  • iroh は、公開鍵を使ってノード間接続を簡単に実現するAPI
  • 「その電話につないで」と指定するだけで、 最速の通信経路 を自動確立
  • ノードの所在地に関係なく、 最速の接続 を維持する設計

ホールパンチングとリレー

  • 最速経路は 直接接続 であり、必要に応じて ホールパンチング を試行
  • 直接接続が失敗した場合、 公開リレーサーバー に自動でフォールバック
  • 常に 通信速度を計測 し、最適な経路を選択

QUICベースの設計

  • Quinn ライブラリを利用し、 QUIC プロトコルでノード間通信を確立
  • 認証付き暗号化、 並列ストリーム、ストリーム優先度、 ヘッドオブラインブロッキング回避 などを標準サポート
  • データグラム転送 にも対応

プロトコルの組み合わせ

  • 独自プロトコルを作る必要なく、 既存プロトコル を利用可能
    • iroh-blobs :BLAKE3ベースのコンテンツアドレス化されたblob転送(KB〜TB対応)
    • iroh-gossip :スマートフォンでも動作するスケーラブルなPub/Subオーバーレイネットワーク
    • iroh-docs :iroh-blobsを使った最終的整合性を持つKey-Valueストア
    • iroh-willow :Willowプロトコル実装(開発中)

Rustによる導入手順

  • Rust からの利用が最も簡単で、 cargo add iroh でインストール可能
  • 接続側サンプルコード
    • Endpoint 作成・バインド
    • 接続確立 とバイディレクショナルQUICストリームのオープン
    • データ送信・受信・接続終了
  • 受信側サンプルコード
    • Router 作成・ALPNプロトコル受け入れ
    • Echoプロトコル の定義と実装
  • 詳細なサンプルコードは echo.rs にて提供

他言語からの利用

  • 他言語から利用したい場合、 iroh-ffi (FFIバインディング用リポジトリ)を参照

リンク・ドキュメント

  • Introducing Iroh(動画)
  • Iroh Documentation
  • Iroh Examples
  • Iroh Experiments

リポジトリ構成

  • iroh :ホールパンチ・リレー通信のコアライブラリ
  • iroh-relay :リレーサーバー実装(本番運用・自分でも運用可能)
  • iroh-base :Hashや鍵型、RelayUrlなど共通型
  • iroh-dns-server :NodeId用n0_discoveryを提供するDNSサーバー
  • iroh-net-report :ホストのネットワーク能力やNAT解析

ライセンスと貢献

  • Apache License 2.0 または MIT License のデュアルライセンス
  • 貢献内容は特別な記載がない限り、両ライセンスで提供される方針

Hackerたちの意見

あなたに対して怒ってたわけじゃないよ。悲しかったんだ、あなたが道を見失ったんじゃないかって怖かったから。

魅力的な見知らぬ人とお茶を分け合うのは、人生の本当の喜びの一つだね。

これで今日が良い日になった!

失敗は再スタートのチャンスだよ。ただし、今回はもっと賢くね。

これ見るたびに泣いちゃう。

これ、世界で最も完璧なコメントかも。ブラボー!

これを求めて来た。ありがとう!

irohはすごくクールだし、YouTubeの解説もかなり良いよね: https://youtube.com/@n0computer 今は良いFFIが必要なんだけど、それはロードマップにあるみたい!

GoやPythonで使えるようになるのが待ちきれないよ :)

しばらく前にirohのワークショップに参加したんだけど、すごく楽しかったよ。Discordサーバーを見る限り、開発してる人たちは1.0リリースに向けて準備してるみたい。Dumb PipeやSendMeもデモ(だと思う)で、irohのいくつかの使い方を紹介してるんだ。ワークショップでは、irohを使ってゲームストリーミングをしているスタートアップの動画も見せてもらったよ(昔のOnLiveみたいな感じ)。私のネットワーキングの知識が乏しいけど、理解した限りでは、クライアントは同じリレーにいる必要があるみたい(ヨーロッパ用と北アメリカ用があると思う)。発見にはBittorrent DHT Mainlineを使ってるみたいで、正確な名前を忘れちゃったからirohのブログをググったよ。BGPについても少し話があったけど、残念ながら理解できなかった。もっと詳しい人が参加してくれるといいな。irohは本当にワクワクするし、p2pアプリケーションを作るのも難しくなさそうだよ。

(開示: 私はirohに関わってる): 自分を過小評価してるよ!これ全部正確だけど、BGPの部分はちょっと違うかも :) Dumb PipeとSendMeは確かにデモだし、無料で使えるデフォルトの公開リレーも提供してるよ。リレーのコードもオープンソースだし、もしお金を払ってくれればネットワークを運営することもできるよ。発見のためにいくつかの選択肢を提供しようとしていて、一般的に便利だと思うのはカスタムDNSサーバーだけど、ローカルmDNSやBittorrent Mainlineもプラグイン可能なオプションだよ。

ワークショップは録画されてたの?

Hacker Newsで議論の続きを見る