SRv6技術の概要と進化
従来のIP/MPLSネットワークでは、マルチプロトコルラベルスイッチング(MPLS)を利用することで、コネクションレスなIPネットワーク上にコネクション指向の転送パスを確立し、トラフィックエンジニアリング(TE)やVPNサービスを実現してきました。しかし、MPLSはLDPやRSVP-TEといった複雑な制御プロトコルを必要とし、運用管理の負担が増大するという課題がありました。これを解決するために登場したのがセグメントルーティング(SR)であり、そのデータプレーンをIPv6で実装したものがSRv6(Segment Routing over IPv6)です。
SRv6は、IPv6の拡張ヘッダ(SRH: Segment Routing Header)を使用してパケットの転送経路を制御するネイティブなIPv6技術です。MPLSのようなラベルスイッチングではなく、IPv6アドレス空間そのものを命令(インストラクション)として活用することで、ネットワークの簡素化と高度なプログラマビリティを同時に実現しています。これにより、SDN(Software Defined Networking)との親和性が高まり、クラウドネットワークや5Gバックホールなどの柔軟な要件に対応可能です。
SRv6の基本概念とSID構造
SRv6の中核をなすのは、SRv6 SID(Segment Identifier)と呼ばれる128ビットのIPv6アドレスです。SIDは「Locator(ロケーター)」、「Function(ファンクション)」、「Arguments(引数)」の3つの要素で構成されています。
- Locator: ネットワーク内の特定のノードを識別するアドレスブロックです。IGP(IS-ISやOSPFv3)によってドメイン内に広報され、ルーティング可能なプレフィックスとして機能します。
- Function: そのノードで実行される特定の処理を定義します。例えば、パケットを転送する「End」や、特定の隣接ノードへ送信する「End.X」、VPNインスタンスに関連付ける「End.DT4」などがあります。
- Arguments: Functionの実行時に必要となる追加パラメータを指定します(省略可能)。
SRv6ヘッダ(SRH)の役割
SRv6パケットは、標準的なIPv6ヘッダの後に「セグメントルーティングヘッダ(SRH)」を持ちます。SRHには、パケットが通過すべきSIDのリスト(Segment List)が含まれており、パケットが各ノード(Endpointノード)を通過するたびに、処理対象のSIDが更新されていきます。これにより、発信元ノードが明示的に経路をプログラミングできるようになります。
ノードの役割分担
SRv6ドメイン内のルータは、その役割に応じて以下の3つのカテゴリに分類されます。
- Source Node(発信元ノード): SRv6パケットを生成し、SRHをカプセル化してネットワークへ送出します。
- Transit Node(中継ノード): SRv6パケットの宛先アドレスが自身のSIDでない場合、通常のIPv6ルーティングに基づいてパケットを転送します。SRHを解析する必要はありません。
- Endpoint Node(終点ノード): 宛先アドレスが自身に設定されたSIDであるパケットを受信し、そのSIDに関連付けられたFunction(処理)を実行します。
転送モードとトラフィックエンジニアリング
SRv6には、主に2つの転送モードが存在します。
- SRv6 BE(Best Effort): IGPの最短パスに基づいてパケットを転送するモードです。基本的にSRHを含まず、従来のIPルーティングに近い挙動をしますが、VPNサービス等の識別にはSIDを使用します。
- SRv6 Policy: 特定のサービス要件(低遅延、帯域保証など)を満たすために、明示的なパス(SIDリスト)を定義して転送するモードです。トラフィックエンジニアリングの要となります。
SRv6 Policyの構築と誘導
SRv6 Policyは、発信元ノードを示す「Headend」、サービス要件を示す「Color」、宛先ノードを示す「Endpoint」のタプル(Color, Endpoint)によって識別されます。ネットワークコントローラ(例: NCE-IP)は、BGP-LS(Link-State)を通じてネットワークトポロジーとリンク情報を収集し、最適な経路を計算します。その後、BGP IPv6 SR Policyを使用して、計算されたSIDリストをヘッドエンドノードに配布します。
トラフィックをSRv6 Policyに誘導する方法には、ルートのColor属性に基づく方法や、DSCP値に基づく方法があります。これにより、業務の重要度に応じて適切な転送パスを選択できます。
SRv6の高可用性設計
キャリアグレードのネットワークでは、50ミリ秒以内の故障復旧が求められます。SRv6では、ローカル修復とエンドツーエンド修復の2つの階層で保護メカニズムを提供します。
ローカル保護:TI-LFAとFRR
TI-LFA(Topology-Independent Loop-free Alternate)は、リンクやノードの障害発生時に、隣接ルータが即座に迂回パスへ切り替えるFast Reroute(FRR)技術です。TI-LFAは、障害箇所を経由しないP空間とQ空間を計算し、これらを接続するノードを使用してループフリーなバックアップパスを動的に形成します。
また、SRv6 Policyにおいて厳密な経路制約がある場合、中間ノードでの障害に対応するため「Midpoint保護(Proxy Forwarding)」が使用されます。これは、障害ノードの上流ノードが代理で処理を行い、障害箇所を迂回する仕組みです。
マイクロループの抑制
ネットワークの収束プロセス中、ルータごとにルーティングテーブルの更新タイミングにズレが生じると、一時的なループ(マイクロループ)が発生する可能性があります。SRv6では、ローカル保護の維持時間を制御したり、収束後の経路情報を含むSRHをカプセル化して転送する「遠端防微環」スキームなどを採用し、マイクロループを効果的に抑制します。
エンドツーエンド保護
トンネル全体としては、優先度の異なる候補パス(Candidate Path)を設定するHSB(Hot Standby)や、負荷分散を行うECMP、さらには全パス障害時にベストエフォート経路へ逃がすエスケープパスなどを組み合わせて、エンドツーエンドの高可用性を確保します。
SRv6の基本的な設定実装
以下に、ルータ上でSRv6機能を有効化し、LocatorとSIDを設定する例を示します。ここでは、プレフィックスやインターフェース名、Opcode値を変更し、構造を再編しています。
基本設定とLocatorの定義
まず、グローバルでSRv6を有効にし、ノードを識別するLocatorを定義します。ここでは、IPv6プレフィックス fc00:100:1::/64 をLocatorとして設定します。
# グローバル設定モードへ移行し、SRv6を有効化
[Router] segment-routing ipv6
# Locator 'loc_core_tokyo' の定義 (プレフィックス長 64ビット)
[Router-segment-routing-ipv6] locator loc_core_tokyo ipv6-prefix fc00:100:1:: 64 static 32
[Router-segment-routing-ipv6-locator] quit
静的SIDの割り当て
定義したLocator配下で、特定の動作を実行するための静的なSID(Opcode)を設定します。以下は、特定の隣接ノードへの転送を指示するEnd.X SIDの設定例です。
# Locatorビューへ再度入り、End.X SIDを設定
[Router-segment-routing-ipv6] locator loc_core_tokyo
[Router-segment-routing-ipv6-locator] opcode 0x0001 end-x interface GigabitEthernet 1/0/0 next-hop fc00:200::1 psp-usd
この設定により、fc00:100:1::1 というSID宛てのパケットを受信したルータは、指定されたインターフェース GigabitEthernet 1/0/0 へパケットを転送します。また、psp-usd はFlavorsと呼ばれる追加動作を指定し、ヘッダーの処理方法を最適化します。
IGPおよびBGPによる情報拡散
設定したLocator情報は、IS-ISまたはOSPFv3を拡張してネットワーク内に広報する必要があります。また、コントローラとの連携においては、BGP-LSを使用してトポロジー情報を上报し、BGP IPv6 SR Policyを通じて経路情報を受信します。
SRv6は、従来のMPLSネットワークが抱えていたプロトコルの複雑さを解消し、IPv6のアドレス空間を活用した柔軟なネットワークプログラミングを可能にします。これにより、運用コストの削減とともに、クラウド時代の多様なサービス要件に対して迅速に対応できるネットワーク基盤を構築できます。