概要
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 のデュアルライセンス
- 貢献内容は特別な記載がない限り、両ライセンスで提供される方針