
Holoは、大規模かつ自動化駆動型ネットワークをサポートするために設計されたルーティングプロトコルスイートです。
ルーティングプロトコルの説明については、こちらのWikipediaページを参照してください。
特徴
シンプルさと正確性への注力
Holoの主な目標は、信頼性が高く、保守が容易で、拡張可能なコードベースを作ることです。ルーティングプロトコルとその拡張機能の複雑さが増す中、堅牢な基盤の上にルーティングプロトコルの実装を構築することが重要です。そのために、Holoのコードベースはシンプルさ、モジュール性、そして徹底したドキュメントを優先しています。Rustコンパイラの厳格さと広範な単体テストのおかげで、新機能の開発サイクルにおいてほとんどの回帰バグを早期に発見できることが期待されます。詳細については、Architectureページを参照してください。
自動化対応
Holoは、構造化およびモデル化されたデータを用いたプログラム可能な設定と監視を必要とする、大規模な自動化駆動ネットワーク向けに特別に開発されました。Holoは、IETFの標準YANGモジュールをネイティブに実装し、ネイティブのgRPCやgNMIを含む複数の管理インターフェースをサポートします。さらに、HoloはスタンドアロンのCLIを備えており、YANGモジュールからコマンドを動的にレンダリングし、gRPCを介してHoloデーモンと通信します。
設定に対する変更はトランザクションとして処理され、すべての変更が適用されるか、まったく適用されないかのいずれかが保証されます。この機能は、管理アプリケーションでのエラー復旧の必要性を排除するため、ネットワーク自動化の重要な促進要因です。Holoはまた、複数のネットワークデバイスを含むネットワーク全体のトランザクションもサポートします。その他のネットワーク自動化機能には、確認付きコミットや設定ロールバックのサポートが含まれます。
セキュリティ
メモリ安全な言語で書かれていることにより、Holoは多種多様なメモリ関連のバグやセキュリティ脆弱性の影響を受けません。Rustが提供する安全性の保証に加えて、Holoデーモンは起動時に権限をドロップします。特定の操作(ソケットのバインドなど)では、Linuxのケイパビリティを使用して、最小限の時間だけ必要な最小限の権限を取得します。
Holoはまた、ルーティングプロトコルスタックにおける最も一般的な攻撃ベクトルである、悪意のあるパケット入力によるサービス拒否(DoS)攻撃に対する堅牢な保護を提供します。受信パケットは分離された監視付きの非同期タスクでデコードされ、プロトコル実装はパニックから正常に回復できます。例えば、不正なパケットを無視したり、影響を受けるTCPストリームのみを閉じたりすることで、デーモン全体の安定性を損なうことなく処理できます。さらに、Holoのモジュラー設計とカバレッジガイド付きファジングの組み込みサポートのおかげで、ほとんどのパースバグは開発中に検出され対処されることが期待されます。
統合されたプロトコル実装
OSPFやRIPなどの一部のプロトコルには、広く展開されている異なるバージョンがあり、通常はIPv4用とIPv6用があります。HoloはRustのジェネリクスを活用してバージョン非依存のプロトコル実装を実現し、異なるプロトコルバージョンでコードの大部分が共有されます。このアプローチにより、これらのプロトコルのメンテナンスコストが削減され、すべてのプロトコルバージョンに利益をもたらす新機能の導入が容易になります。
並列性
Holoは非同期操作を広範囲に利用し、Tokioランタイムに依存してタスクをスケジュールし、スレッドプールで実行します。より良いパフォーマンスを達成するために、I/O要求とCPU集約型アルゴリズムの両方が別々のタスクにオフロードされ、利用可能なすべてのCPUコアの使用率を最大化します。ランタイムに依存しないコードのサポートは、Rust言語チームによって必要な抽象化が標準化された後、将来計画されています。
構造化ロギング
Holoは構造化データを含むログメッセージを生成し、JSON、テキストなどのさまざまな形式で表示できます。ロギングはtraitngファサードを介して実行されるため、多様なtraitngサブスクライバを利用してさまざまなユーザー要件を満たすことができます。例えば、ロギングをファイル、journald、集中型OpenTelemetryコレクター、またはこれらのオプションの任意の組み合わせ(異なるログレベルで設定可能)に送ることができます。
再現可能なバグ
Holoは記録・再生機能を提供し、ユーザーから報告された任意のバグを簡単に再現できます。Holoデーモンは、プロトコルインスタンスの全ライフスパンをファイルに記録するように設定できます。そのファイルを別のマシンで再生して、同じ一連のイベントを再現できます。記録セッションは数時間から数日続く場合がありますが、再生プロセスは数秒で完了します。これは、時間関連およびI/O操作がすべて別々のタスクで実行され、イベントメッセージとして抽象化されているHoloのモジュラーアーキテクチャのおかげで可能です。
インストール
インストールの詳細な手順については、INSTALL.mdファイルを参照してください。
サポート対象プラットフォーム
現時点では、HoloはLinuxオペレーティングシステムとのみ互換性があります。WebAssemblyのサポートは将来計画されています。
はじめに
Holoを使い始める最も簡単な方法は、事前にビルドされたDockerコンテナをcontainerlabソフトウェアと組み合わせて使用することです。事前設定されたさまざまなネットワークトポロジをこのリンクで見つけることができます。これらのトポロジは単一のコマンドでデプロイでき、他の実装との相互運用性テストを含むさまざまなネットワークセットアップでHoloをテストできます。
さらに、Holoは、機能セットが特定のニーズに合致する限り、ソフトウェアルーターなど、ルーティングスタックが必要な場所ならどこでも使用できます。
準拠規格
Holoは以下のインターネット標準をサポートしています。
BFD
- RFC 5880 - 双方向フォワーディング検出 (BFD)
- RFC 5881 - IPv4およびIPv6向け双方向フォワーディング検出 (BFD) (シングルホップ)
- RFC 5882 - 双方向フォワーディング検出 (BFD) の汎用的応用
- RFC 5883 - マルチホップパス向け双方向フォワーディング検出 (BFD)
BGP
- RFC 1997 - BGPコミュニティ属性
- RFC 2385 - TCP MD5署名オプションによるBGPセッションの保護
- RFC 2545 - IPv6ドメイン間ルーティングのためのBGP-4マルチプロトコル拡張の使用
- RFC 2918 - BGP-4のルートリフレッシュ機能
- RFC 4271 - ボーダーゲートウェイプロトコル4 (BGP-4)
- RFC 4360 - BGP拡張コミュニティ属性
- RFC 4486 - BGP切断通知メッセージのサブコード
- RFC 4760 - BGP-4のマルチプロトコル拡張
- RFC 5082 - 汎用TTLセキュリティメカニズム (GTSM)
- RFC 5492 - BGP-4による機能通知
- RFC 5668 - 4オクテットAS固有BGP拡張コミュニティ
- RFC 5701 - IPv6アドレス固有BGP拡張コミュニティ属性
- RFC 6286 - BGP-4の自律システム全体で一意なBGP識別子
- RFC 6608 - BGP有限状態マシンエラーのサブコード
- RFC 6793 - 4オクテット自律システム (AS) 番号空間のBGPサポート
- RFC 7606 - BGP UPDATEメッセージの改訂されたエラー処理
- RFC 7607 - AS 0処理の体系化
- RFC 8092 - BGP大規模コミュニティ属性
- RFC 8212 - ポリシーを使用しないデフォルトの外部BGP (EBGP) ルート伝搬動作
- RFC 8642 - よく知られたBGPコミュニティのポリシー動作
- RFC 9774 - BGPにおけるAS_SETとAS_CONFED_SETの廃止
IS-IS
- ISO/IEC 10589 - 情報技術 — 電気通信およびシステム間情報交換 — コネクションレスモードネットワークサービス (ISO 8473) と組み合わせて使用するための、システム間のドメイン内ルーティング情報交換プロトコル
- RFC 1195 - TCP/IPおよびデュアル環境でのルーティングにおけるOSI IS-ISの使用
- RFC 3719 - Intermediate System to Intermediate System (IS-IS) を使用した相互運用可能なネットワークの推奨事項
- RFC 3787 - Intermediate System to Intermediate System (IS-IS) を使用した相互運用可能なIPネットワークの推奨事項
- RFC 5120 - M-ISIS: Intermediate System to Intermediate Systems (IS-ISs) におけるマルチトポロジ (MT) ルーティング
- RFC 5301 - IS-ISの動的ホスト名交換メカニズム
- RFC 5303 - IS-ISポイントツーポイント隣接関係のためのスリーウェイハンドシェイク
- RFC 5304 - IS-IS暗号認証
- RFC 5305 - トラフィックエンジニアリングのためのIS-IS拡張
- RFC 5308 - IS-ISによるIPv6ルーティング
- RFC 5310 - IS-IS汎用暗号認証
- RFC 6232 - IS-ISのパージ発信元識別TLV
- RFC 6233 - パージのためのIS-ISレジストリ拡張
- RFC 7308 - MPLSトラフィックエンジニアリング (MPLS-TE) における拡張管理グループ
- RFC 7602 - IS-IS拡張シーケンス番号TLV
- RFC 7794 - 拡張IPv4およびIPv6到達可能性のためのIS-ISプレフィックス属性
- RFC 7917 - IS-ISにおけるノード管理タグの通知
- RFC 7981 - ルーター情報を通知するためのIS-IS拡張
- RFC 7987 - IS-IS最小残り生存時間
- RFC 8401 - IS-ISを介したビットインデックス明示的複製 (BIER) のサポート
- RFC 8405 - リンク状態IGPのための最短経路優先 (SPF) バックオフ遅延アルゴリズム
- RFC 8491 - IS-ISを使用した最大SID深度 (MSD) のシグナリング
- RFC 8570 - IS-ISトラフィックエンジニアリング (TE) メトリック拡張
- RFC 8667 - セグメントルーティングのためのIS-IS拡張
- RFC 8918 - IS-ISにおける無効なTLVの処理
- RFC 9479 - IS-ISアプリケーション固有リンク属性
- draft-ietf-bier-lsr-non-mpls-extensions-03 - BIER非MPLSカプセル化のためのLSR拡張
- draft-ietf-lsr-distoptflood-12 - IS-IS分散フラッディング削減
- draft-westphal-lsr-isis-database-checksumming-00 - IS-ISデータベースフィンガープリンティング
MPLS LDP
- RFC 5036 - LDP仕様
- RFC 5561 - LDP機能
- RFC 5918 - ラベル配布プロトコル (LDP) 「型付きワイルドカード」転送等価クラス (FEC)
- RFC 5919 - LDPラベル通知完了のシグナリング
- RFC 6720 - ラベル配布プロトコル (LDP) のための汎用TTLセキュリティメカニズム (GTSM)
マルチキャスト
- RFC 2236 - インターネットグループ管理プロトコル、バージョン2
OSPF
- RFC 2328 - OSPFバージョン2
- RFC 3623 - グレースフルOSPF再起動
- RFC 5187 - OSPFv3グレースフル再起動
- RFC 5243 - OSPFデータベース交換サマリーリスト最適化
- RFC 5250 - OSPF Opaque LSAオプション
- RFC 5340 - IPv6向けOSPF
- RFC 5613 - OSPFリンクローカルシグナリング
- RFC 5642 - OSPFの動的ホスト名交換メカニズム
- RFC 5709 - OSPFv2 HMAC-SHA暗号認証
- RFC 5838 - OSPFv3におけるアドレスファミリのサポート
- RFC 6987 - OSPFスタブルーターアドバタイズメント
- RFC 7166 - OSPFv3の認証トレーラのサポート
- RFC 7684 - OSPFv2プレフィックス/リンク属性アドバタイズメント
- RFC 7770 - オプションのルーター機能を通知するためのOSPF拡張
- RFC 7777 - OSPFにおけるノード管理タグの通知
- RFC 8362 - OSPFv3リンク状態アドバタイズメント (LSA) の拡張性
- RFC 8405 - リンク状態IGPのための最短経路優先 (SPF) バックオフ遅延アルゴリズム
- RFC 8476 - OSPFを使用した最大SID深度 (MSD) のシグナリング
- RFC 8665 - セグメントルーティングのためのOSPF拡張
- RFC 8666 - セグメントルーティングのためのOSPFv3拡張
- RFC 9983 - OSPFv2エニーキャストプロパティアドバタイズメント
- draft-ietf-bier-ospfv3-extensions-07 - BIERのためのOSPFv3拡張
- draft-ietf-bier-lsr-non-mpls-extensions-03 - BIER非MPLSカプセル化のためのLSR拡張
RIP
- RFC 2080 - IPv6向けRIPng
- RFC 2453 - RIPバージョン2
- RFC 4822 - RIPv2暗号認証
VRRP
- RFC 3768 - 仮想ルーター冗長プロトコル (VRRP)
- RFC 5798 - IPv4およびIPv6向け仮想ルーター冗長プロトコル (VRRP) バージョン3
コンフォーマンステスト
Ixia IxANVL RFCコンプライアンステスターで実行されたコンフォーマンステストの結果はこちらで入手できます。
IETF YANG実装カバレッジ