Rust製ネットワーク基盤irohがRP2350に移植、Prestoで動作を実演
出典: docs.iroh.computer

irohをRP2350上で動かす実装

Rust製のネットワーク基盤「iroh」がRaspberry PiのマイコンRP2350に移植されました。Wi-Fi搭載のデスクトップ端末「Presto」で動作が実演され、マイコン上のアプリ同士をつなぐメッシュネットワークの構築例が示されました。

irohは、アプリに組み込んで端末間通信を実装するためのモジュール型ライブラリです。ネットワーク接続の仕組みを提供し、アプリ側でファイル転送やメッセージ通信などの機能を組み合わせられます。

移植を手がけたのはirohのチームです。実演ではPimoroni製のPrestoを使い、Wi-Fiでネットワークに接続しました。「iroh-pico-examples」リポジトリには、コードを試せる例が公開されています。

直接接続を試し、難しい場合は中継

NAT(ネットワークアドレス変換)やファイアウォールの内側にある端末は、外部からの接続を受け付けにくいことがあります。irohはまず中継サーバーを双方の端末が接続する待ち合わせ場所として使い、接続に必要なアドレス情報を交換します。

情報交換後、双方が相手の外部向けアドレスへ同時にUDPパケットを送ります。この通信でNATやファイアウォールに通信用の対応関係が作られると、端末同士の直接接続が成立します。同じネットワーク内の端末同士なら、ローカルアドレスも使えます。

直接接続できない場合、irohは通信を中継サーバー経由に切り替えます。中継は接続確立の調整にも使われ、直接経路ができた後は端末間でデータを送る構成を目指します。iro​hの通信にはQUICを使い、端末間で認証と暗号化を行います。

RP2350以外の実装例も公開

Raspberry Pi Pico 2上でWi-Fiを使わずにirohをネイティブ実行するための工夫も紹介されています。Prestoの実演とは異なる構成で、無線接続の有無に応じた実装例が用意されています。

Prestoにはタッチスクリーンが搭載されており、実演ではWi-Fi接続が使われました。Raspberry Piの無線モジュール「Radio Module 2」は、Pico WおよびPico 2 Wと同じInfineon CYW43439無線チップを搭載し、RP2040またはRP2350を使う製品向けに設計されています。

Radio Module 2とRP2350を組み合わせると、製品にマイコンの計算処理と無線接続を加えられます。今回の移植ではPrestoが実演用の端末として使われ、Pico 2ではWi-Fiを使わない構成も扱われました。実装コードはiroh-pico-examplesリポジトリで公開されています。

マイコンでの利用を支えるirohの構造

irohでは、端末の識別にIPアドレスではなく暗号鍵を使います。ネットワーク上の位置が変わっても同じ識別子で相手を指定でき、接続経路の探索や中継への切り替えはライブラリが担います。

ライブラリはQUICとTLS 1.3を組み合わせ、接続の認証や暗号化、複数のデータストリームに対応します。QUICはUDP上で動作し、irohは端末間の直接接続を試み、接続できない場合は中継を使います。

irohはRustで書かれていますが、Rust以外のアプリから利用するためのバインディングも提供されています。RP2350への移植は、irohをマイコンに組み込んだ実例です。Raspberry Piは、同社のマイコンとirohを使ったメッシュシステムが今後どのように作られるかに期待を示しています。