• BGP IPv6 Link Local Peers Discovery -BGP Unnumberedに対するAristaの解-

 
 
Print Friendly, PDF & Email

はじめに

大量のマシントラフィックを処理をする必要があるデータセンターネットワークでは、BGPを使ったLeaf & Spineのトポロジーが有効であり、多くの設定や運用はテンプレートによる自動化が進められる。

このうち、IPアドレスなどは機器固有のアドレスになり、IPPAMとの連携などが考えられるが、ユーザに割り当てるアドレスではなく、ルータデバイス間のリンクアドレスが本当に必要なのかは非常に疑問が残る。

実際にIPv6のルーティングプロトコルでは隣接関係の確立の為にはグローバルアドレスは必要はなく、リンクローカルのみで解決ができる。

RFC5340 OSPF for IPv6  https://tools.ietf.org/html/rfc5340

RFC2080 RIPng for IPv6 https://tools.ietf.org/html/rfc2080

RFC2545 BGP-4 Multiprotocol Extensions for IPv6 IDR  https://tools.ietf.org/html/rfc2545

*BGPはグルーバル・リンクローカルともにトランスポートアドレスとして使用ができる

RFC5308 Routing IPv6 with IS-IS https://tools.ietf.org/html/rfc5308

*ISISはそもそもOSIプロトコルである為に隣接ノードの検出や確立の為にIPプロトコルを必要としない

運用者の方とこの話題になると到達性の確認などの問題は無いかという話にもなるが、SSH/Telnetなどのマネージメントプレーンはloopbackアドレスにて接続を行えば良いし、ICMPエラーもloopbackをソースにする為、あまり問題にはならないと考えられる。

実際にIPv6リンクローカルのみのネットワークを構築した際の考慮点に関しては下記にまとまっている。

RFC7404 Using Only Link-Local Addressing inside an IPv6 Network https://tools.ietf.org/html/rfc7404

本ブログではIPv6のリンクローカルアドレスを使い、かつSpineではアドレスの指定をせずに自動的にBGPの隣接関係を構築し、ユーザにて使用されるIPv4アドレスをネットワーク全体に構築する方法を記載する。

リンクローカルでのBGPの設定

EOSにおけるリンクローカルのBGP設定は 4.20.5Fよりサポートされた。

BGP IPv6 link-local peering support (RFE 60498)

またEOS4.17.0FよりサポートされたRFC5549により、IPv4の到達性をIPv6のBGPセッションで確保する事も可能な為、これらの機能を組み合わせると、 IPv6リンクローカルのBGPセッション上でIPv4の到達性を確保できる。

RFC 5549: IPv4 unicast NLRI with IPv6 next-hop support

IPv4 Addressless Forwarding on IPv6 addressed Interfaces for BGP RFC5549 support

router bgp 64554
 bgp default ipv4-unicast transport ipv6
 neighbor fe80::1%Et1 remote-as 64551
 neighbor fe80::1%Et1 maximum-routes 12000
 redistribute connected
!
 address-family ipv4
  neighbor fe80::1%Et1 activate
  neighbor fe80::1%Et1 next-hop address-family ipv6 originate
!
 address-family ipv6
  neighbor fe80::1%Et1 activate

Leaf側ではこの様にSpineに対して固定のリンクローカルアドレスおよびBGP AS番号を指定していればよく、容易なテンプレートを作成できる。

BGP IPv6 Link Local Peers Discovery

EOS4.21.3Fより追加されたこの機能ではIPv6のネイバーディカバリーにより発見された隣接ノードをBGPセッションの候補としてディスカバリーもしくは受け入れを行う。

BGP IPv6 Link Local Peers Discovery

この機能を簡単に図示すると下記になる。

この機能の為にはSpine側で以下のような設定を行う。

ネイバーに対してのアドレスの指定が無い事がわかる。

router bgp 64551
  bgp default ipv4-unicast transport ipv6
  neighbor PG1 peer group
  neighbor PG1 maximum-routes 12000
  neighbor PG2 peer group
  neighbor PG2 maximum-routes 12000
  neighbor PG3 peer group
  neighbor PG3 maximum-routes 12000
  redistribute connected
  neighbor interface Et1 peer-group PG1 remote-as 64553
  neighbor interface Et2 peer-group PG2 remote-as 64554
  neighbor interface Et3 peer-group PG3 remote-as 64555
  !
  address-family ipv4
   neighbor PG1 activate
   neighbor PG1 next-hop address-family ipv6 originate
   neighbor PG2 activate
   neighbor PG2 next-hop address-family ipv6 originate
   neighbor PG3 activate
   neighbor PG3 next-hop address-family ipv6 originate
  !
  address-family ipv6
   neighbor PG1 activate
   neighbor PG2 activate
   neighbor PG3 activate

 

デモンストレーション

IPv6リンクローカルのみを用いて、BGPを構築している4台のノードがあり、1台のノード(R3)に障害が起き、機器交換が行われた事とする。(R4とR5は差別化の為にわかりやすいfe80::4/fe80::5を設定している)

R3に指定したテンプレートコンフィグを読み込み、Spine(R1)にて下記コマンドを

show ipv6 neighbors

show ip bgp summary

show ip route

を実施する。aliasを設定し、そのaliasに対して、watch diffを行う事でR1では経時変化が確認できる。

 

まとめ

EOS4.21.3Fにて追加されたBGP IPv6 Link Local Peers Discoveryを用いて、IPv6 link-localのみでBGPを自動的構築し、RFC5549を用いてIPv4アドレスを広報するデモンストレーションを実施した。

類似の実装は様々なベンダーで独自実装にて行われている。Aristaはベンダーロックインを嫌い、あくまでオープンで標準的な機能のみを用いる事を好む。本機能を実装の際にも多くの議論が行われ、NDPやBGPに対する独自なプロトコル拡張を行わない本実装が選ばれた。

またSpine側でAS番号を受信範囲/拒絶範囲を指定出来る下記機能と併用する事でより柔軟な展開が可能になる。

AS Ranges for Dynamic BGP Peer Groups

 

 

Follow

Get every new post on this blog delivered to your Inbox.

Join other followers: