Blog

RFC5549の技術の導入を実現する方法とメリット


こんにちは、アドテクスタジオでネットワークエンジニアをしている菊地です。最近RFC5549(Advertising IPv4 Network Layer Reachability Information with an IPv6 Next Hop)を読み、このRFCに記載されている技術に注目しています。RFC5549により、動的にローカルのIPv4の経路情報をIPv6のリンクローカルアドレスを所持するルータのネクストホップ宛てにアドバタイズすることが可能になりました。リンクローカルアドレスは、同一リンク上でのみ有効なIPアドレスです。この技術の導入により、弊社のデータセンターにおける課題を解決できるのではないかと考えました。

弊社のデータセンターにおける課題とは、L3 SwitchのUplinkにどのようなIPアドレスを割り当てるのか都度考える作業が必要となる点です。RFC5549で紹介されている技術を導入すれば、IPv6のリンクローカルアドレスのネクストホップと共にIPv4のネットワークレイヤ到達可能性情報(NLRI)をアドバイタイズすることが可能になります。Uplinkに必要なIPアドレスを都度考えなくてもよくなるので、運用面でメリットが出てくるはずです。

この技術を実現するために必要な設定が存在します。その必要な設定とは、L3 SwitchやルータのUplinkにIPv6のリンクローカルアドレスを割り振る事です。インターフェイスがIPv6アドレスの設定を有効にした場合、リンクアップした時点でリンクローカルアドレスを自動で割り当てます。IPv6のリンクローカルアドレスを割り振る際、どのようなIPアドレスを割り振る必要があるのか意識することなく、自動で割り当てることが可能という利点があります。このように、IPアドレスの管理負担を減らす事でどのようなメリットがあるのか説明します。

l3v6%e3%83%aa%e3%83%b3%e3%82%af%e3%83%ad%e3%83%bc%e3%82%ab%e3%83%ab

 

IPアドレスの管理面におけるメリットについて

IPアドレスを手動で管理する場合、例えば以下のような問題点が挙げられると思います。

  • IPアドレスを重複して割り当ててしまう場合
  • 手動でIPアドレスを割り当てていると、人為的ミスにより、誤ってすでに使用済みのIPアドレスを割り当ててしまう危険性があります。

  • 使用しなくなったIPアドレスを解放する場合
  • IPv4アドレスの場合、どのIPアドレスを解放するのか考え、その都度IPアドレス管理表を参照して解放したIPアドレスのチェックを行う事は非常に面倒です。しかし使用しなくなったIPアドレスを解放する際、IPv6のリンクローカルアドレスを有効にしているインターフェースの設定を無効にするだけでIPアドレスを解放することが可能です。

IPv4の経路情報をIPv6のリンクローカルアドレスのネクストホップの情報と共にアドバタイズする事を実現するために、RFC5549ではMP-BGPという技術が紹介されています。以下にMP-BGPとはどのような技術なのか説明します。

 

MP-BGPとは

MultiProtocol BGP(以下、MP-BGP)とは、BGPのマルチプロトコル対応したプロトコルであり、BGPという技術が元になっています。BGPとは、IPv4アドレスの経路制御プロトコルであり、AS番号を機器に割り振って経路情報のやり取りを行います。AS番号は0〜65535までの整数を使用しています。AS番号は値によって役割が異なり、IPv4アドレスのようにローカルネットワークにおいてのみ使用可能なものや、グローバルアドレスのように1つしか存在しないAS番号があります。BGPが動作するスイッチやルータは、AS番号とIPアドレスの割当を受けた後、BGPルータ間でピアと呼ばれる経路の交換を行う設定を行います。

BGPの図

BGPでは、相手のルータに経路情報要求を行う際、AFIとSAFIという2つの情報を取り扱います。通常のAddress Family Informationは[AFI,SAFI(Sub-AFI)]で構成されています。AFIとは伝達するプロトコルのアドレスを識別する情報のことで、SAFIとはAFIで識別されたプロトコルの詳細識別のことです。AFIとSAFIを組み合わせることにより、NLRIで伝達するアドレス情報の種別と詳細を識別することが可能です。

AFIが1の場合、IPv4。AFIが2の場合、IPv6になります。
SAFIが1の場合、ユニキャスト。SAFIが2の場合、マルチキャストになります。

MP-BGPにはこれらに加え、IPv6 Next Hopが追加されました。[AFI,SAFI(Sub-AFI),IPv6 Next Hop]です。MP-BGP for IPv6拡張では、IPv6アドレスファミリ、NLRI、IPv6アドレスを使用するネクストホップなどのサポートが含まれています。BGPではIPv4の情報のみ取り扱うことが可能ですが、MP-BGPは、IPv4アドレスだけでなくIPv6アドレスやマルチキャスト等の情報を取り扱うことが可能です。MP-BGPでIPv6とIPv4の両方の情報を取り扱う際、IPv6パケットをカプセル化することで、実現しています。

MP-BGPのプロトコルを使用してBGPピア間で通信を行う際、BGPセッションを確立する必要があります。BGPセッション確立のためには、BGPルータ間でTCPコネクション確立後、Helloのような役割をもつBGPのOPENメッセージのやりとりを行う必要があります。そのメッセージのやりとりで、ルータ間でMP-BGPのプロトコルをサポートしているかどうか把握する必要があります。
OPENメッセージでは、MP-BGPの通信を行う際に必要なパラメータを含んでいます。

 

BGP Capabilityオプションパラメータについて

BGP Capabilityオプションパラメータとは、BGP Capabilityオプションパラメータです。MP-BGPをサポートするBGPルータは、BGPのOPENメッセージのヘッダのOptional Parametersの中にCapabilityに関する情報を含んでいます。BGPルータは、BGPピアから受け取るOPENメッセージ内のCapabilitiesオプションパラメータの中身を確認します。そのオプションパラメータの中にCapability Listが存在し、そのリストの中身を参照して、BGPルータがMP-BGPプロトコルをサポートしているかどうか判断します。BGPルータがMP-BGPプロトコルをサポートしていない場合、NOTIFICATIONメッセージを送信します。その場合、NOTIFICATIONメッセージに含まれるエラーコードは2でエラーサブコードは7になります。

以下にBGP Capability Optionのパラメータについて紹介しています。

 

BGP Capability Optionについて

Optional Parametersに以下の情報を含める必要があります。
MP-BGPに必要なBGP Capabilityオプションパラメータ情報は以下の3つです。

  • Capability Code(1オクテット)
  • 値は5をセットします。
    5はExtended Next Hop Encoding Capabilityを示しています。
    Capability Codeの種類は以下を参照してください。

  • Capability Lengthフィールド
  • Capability Valueフィールドの長さを指定します。

  • Capability Valueフィールド
  • Capability Codeフィールドの値に従って解釈される可変長フィールドです。
    フォーマットは以下の通りです。

    +—————————————————–+
    | NLRI AFI – 1 (2 octets) |
    +—————————————————–+
    | NLRI SAFI – 1 (2 octets) |
    +—————————————————–+
    | Nexthop AFI – 1 (2 octets) |
    +—————————————————–+
    | ….. |
    +—————————————————–+
    | NLRI AFI – N (2 octets) |
    +—————————————————–+
    | NLRI SAFI – N (2 octets) |
    +—————————————————–+
    | Nexthop AFI – N (2 octets) |
    +—————————————————–+

    OPENメッセージでBGPルータがMP-BGPプロトコルでの通信をサポートしていると判明した場合、UPDATEメッセージで経路情報のやり取りを行います。その際、UPDATEメッセージのヘッダフォーマットの中のPath AttributeでMP_REACH_NLRIとMP_UNREACH_NLRIという新たに追加された2つのBGPのPath Attributeの設定が重要になります。

     

    新たに追加されたBGPのPath Attributeについて

    MP-BGPは、IPv4だけでなくIPv6アドレスやマルチキャスト等の情報を取り扱うため、以下の2つのBGPのPath Attributeを増やすことで実現しています。

    • MP_REACH_NLRI(Path Attribute 14)
    • MP_UNREACH_NLRI(Path Attribute 15)

    これらの属性を付与するために、BGPのUPDATEメッセージのパス属性に定められたタイプの数字を指定します。以下にそれぞれのPath Attributeについて紹介します。

    • MP_REACH_NLRI(Path Attribute 14)
    • アドレスファミリ、Next Hop、経路情報等を含みます。
      BGPルータは、MP_REACH_NLRI属性を受け取ると、経路選択の一つの候補として追加します。
      MP_REACH_NLRIのフォーマットは以下の通りです。

      +———————————————————+
      | Address Family Identifier (2 octets) | 1
      +———————————————————+
      | Subsequent Address Family Identifier (1 octet) | 1,2,4,or128
      +———————————————————+
      | Length of Next Hop Network Address (1 octet) | 16or32
      +———————————————————+
      | Network Address of Next Hop (variable) | IPv6 Next hop Address
      +———————————————————+
      | Reserved (1 octet) |
      +———————————————————+
      | Network Layer Reachability Information (variable) | 
      +———————————————————+

      NLRIとは、AS内のネットワークのIPアドレス(プレフィックス)を示します。

    • MP_UNREACH_NLRI(Path Attribute 15)
    • アドレスファミリと無効な経路情報等が含まれます。BGPルータは、MP_UNREACH_NLRI属性を受け取ると、経路を削除します。
      MP_UNREACH_NLRIのフォーマットは以下の通りです。

      +———————————————————+
      | Address Family Identifier (2 octets) |
      +———————————————————+
      | Subsequent Address Family Identifier (1 octet) |
      +———————————————————+
      | Withdrawn Routes (variable) |
      +———————————————————+

      このようにBGPルータ間でMP-BGPプロトコルを取り扱う際に、OPENメッセージの中に含まれるBGP Capabilityオプションと、UPDATEメッセージの中に含まれる新規で追加されたPath AttributeのMP_REACH_NLRIとMP_UNREACH_NLRIの2つの属性が重要になります。

       

      RFC5549のサポート有無について

      ここでは、代表的なメーカーのRFC5549への対応の有無について紹介します。
      例えば、CiscoではRFC5549はサポートされています。
      Cisco Nexus 3000 Series NX-OS Unicast Routing Configuration Guide, Release 6.x

      RFC 5549
      Beginning with Cisco NX-OS Release 6.0(2)U4(1), BGP supports RFC 5549, which allows an IPv4 prefix to be carried over an IPv6 next hop. Because BGP is running on every hop, and all routers are capable of forwarding IPv4 and IPv6 traffic, there is no need to support IPv6 tunnels between any routers. BGP installs IPv4 over an IPv6 route to the Unicast Route Information Base (URIB).

      もう1点の例ですが、Cumulus Linuxにおいても同様にサポートされています。
      Cumulus Linux User Guide:Border Gateway Protocol – BGP

      Using BGP Unnumbered Interfaces
      Unnumbered interfaces are interfaces without unique IP addresses. In BGP, you configure unnumbered interfaces using extended next-hop encoding (ENHE), which is defined by RFC 5549. BGP unnumbered interfaces provide a means of advertising an IPv4 route with an IPv6 next-hop. Prior to RFC 5549, an IPv4 route could be advertised only with an IPv4 next-hop.
      BGP unnumbered interfaces are particularly useful in deployments where IPv4 prefixes are advertised through BGP over a section without any IPv4 address configuration on links. As a result, the routing entries are also IPv4 for destination lookup and have IPv6 next-hops for forwarding purposes.

      両方とも、設定方法に関してはコンフィグレーションガイドを参考にしていただければと思うので、今回詳細は省略します。

       

      RFC5549読後の所感

      RFC5549では、IPv4の経路情報をIPv6のリンクローカルアドレス宛てにを所持するルータのネクストホップ宛てにアドバタイズすることが可能になりました。この技術をデータセンターに導入する方法について調査した結果、設定内容の量が大幅に減るわけではありませんが、IPアドレスの管理面での負担を減らせる事は便利であると感じています。今後新しいデータセンターを検討する際に、この技術の導入にチャレンジしてみたいと思います。

Author

アバター
kaori