以下の内容はhttps://yokohama539.hatenablog.com/entry/2025/02/09/152523より取得しました。


vJunosでIP-Closなネットワーク作ってみた。~その3~

前々回前回に引き続き、IP-Closなネットワークについて検証していきます。
今回はvJunos-switchにて「BGP Auto-Discovered Neighbors」機能について検証していきたいと思います。

BGP Auto-Discovered Neighborsとは、IPv6 Link-localアドレスにてNDP(Neighbor Discovery Protocol)を使用して自動にBGPネイバーを検出しPeeringする機能です。
これができると、spine~leaf間のIPアドレス設定やUnderlayのBGP設定が簡素化でき、管理が楽になります。
リンク間はIPv6ですがIPv4のLoopbackアドレスも広報できます。
もう少し細かく言うと、IPv6アドレスをネクストホップとしたIPv4のNLRIを広報することができます。これはRFC8950にて規定されています。
(昔はRFC5549にて規定されてましたが、現在は廃止されています)
なお、Juniperの公式ドキュメントは「BGP Auto-Discovered Neighbors」ですが「BGP unnumbered」と呼ばれるのが一般的なようです。
個人的には自動でBGP Peeringするので「BGP Auto-Discovered Neighbors」の文言を推したいと思います。

流れとしては前回同様、構成概要を考えて設定および、CLIとパケットキャプチャーによる確認をしていきたいと思います。

1. BGP Auto-Discovered Neighbors 構成

構成は前々回のspine x1、leaf x2のシンプルな構成を流用して検証します。
spine-leaf間は上述した通りIPv6 Link-localアドレスにて動的に付与されるので、IPv4アドレスは設定しません。
ASNは前々回と同じく4Byte ASで設定します。
図で示すとこんな感じです。

2. BGP Auto-Discovered Neighbors 設定

では設定をしていきます。
まずはspine-1から。

//spine-1
set interfaces ge-0/0/0 unit 0 family inet
set interfaces ge-0/0/0 unit 0 family inet6
set interfaces ge-0/0/1 unit 0 family inet
set interfaces ge-0/0/1 unit 0 family inet6
set interfaces lo0 unit 0 family inet address 172.16.0.1/32
set policy-options policy-statement EXPORT_BGP_UNDERLAY term 0011 from route-filter 172.16.0.0/24 prefix-length-range /32-/32
set policy-options policy-statement EXPORT_BGP_UNDERLAY term 0011 then accept
set policy-options policy-statement EXPORT_BGP_UNDERLAY term 9999 then reject
set policy-options as-list LEAF members 4200001001-4200001002
set routing-options router-id 172.16.0.1
set routing-options autonomous-system 4200000001
set protocols router-advertisement interface ge-0/0/0.0
set protocols router-advertisement interface ge-0/0/1.0
set protocols bgp group UNDERLAY type external
set protocols bgp group UNDERLAY family inet unicast extended-nexthop
set protocols bgp group UNDERLAY family inet6 unicast
set protocols bgp group UNDERLAY export EXPORT_BGP_UNDERLAY
set protocols bgp group UNDERLAY dynamic-neighbor AUTO-UNDERLAY peer-auto-discovery family inet6 ipv6-nd
set protocols bgp group UNDERLAY dynamic-neighbor AUTO-UNDERLAY peer-auto-discovery interface ge-0/0/0.0
set protocols bgp group UNDERLAY dynamic-neighbor AUTO-UNDERLAY peer-auto-discovery interface ge-0/0/1.0
set protocols bgp group UNDERLAY peer-as-list LEAF

ポイントしては、「set protocols bgp group UNDERLAY family inet unicast extended-nexthop」コマンドが必要なところでしょうか。
このコマンドを投入しないとIPv4 NLRIが広報できません。
また、peer-as-listでPeeringを許可するASNを定義する必要があります(peer-as-listがないとcommit時にerrorになります)
あとIPv4通信する際はインターフェイス配下にてfamily inetも有効にする必要があることも忘れがちだったり…。

続いてleafの設定です。
BGP Auto-Discovered Neighborsにて考慮すべきコマンドはspineと一緒です。
対象インターフェイスとpeer-as-listが異なるくらいですね。

//leaf-1
set interfaces ge-0/0/0 unit 0 family inet
set interfaces ge-0/0/0 unit 0 family inet6
set interfaces lo0 unit 0 family inet address 172.16.0.11/32
set policy-options policy-statement EXPORT_BGP_UNDERLAY term 0011 from protocol direct
set policy-options policy-statement EXPORT_BGP_UNDERLAY term 0011 from route-filter 172.16.0.11/32 exact
set policy-options policy-statement EXPORT_BGP_UNDERLAY term 0011 then accept
set policy-options policy-statement EXPORT_BGP_UNDERLAY term 9999 then reject
set policy-options as-list SPINE members 4200000001
set routing-options router-id 172.16.0.11
set routing-options autonomous-system 4200001001
set protocols router-advertisement interface ge-0/0/0.0
set protocols bgp group UNDERLAY type external
set protocols bgp group UNDERLAY family inet unicast extended-nexthop
set protocols bgp group UNDERLAY family inet6 unicast
set protocols bgp group UNDERLAY export EXPORT_BGP_UNDERLAY
set protocols bgp group UNDERLAY dynamic-neighbor AUTO-UNDERLAY peer-auto-discovery family inet6 ipv6-nd
set protocols bgp group UNDERLAY dynamic-neighbor AUTO-UNDERLAY peer-auto-discovery interface ge-0/0/0.0
set protocols bgp group UNDERLAY peer-as-list SPINE
//leaf-2
set interfaces ge-0/0/0 unit 0 family inet
set interfaces ge-0/0/0 unit 0 family inet6
set interfaces lo0 unit 0 family inet address 172.16.0.12/32
set policy-options policy-statement EXPORT_BGP_UNDERLAY term 0011 from protocol direct
set policy-options policy-statement EXPORT_BGP_UNDERLAY term 0011 from route-filter 172.16.0.12/32 exact
set policy-options policy-statement EXPORT_BGP_UNDERLAY term 0011 then accept
set policy-options policy-statement EXPORT_BGP_UNDERLAY term 9999 then reject
set policy-options as-list SPINE members 4200000001
set routing-options router-id 172.16.0.12
set routing-options autonomous-system 4200001002
set protocols router-advertisement interface ge-0/0/0.0
set protocols bgp group UNDERLAY type external
set protocols bgp group UNDERLAY family inet unicast extended-nexthop
set protocols bgp group UNDERLAY family inet6 unicast
set protocols bgp group UNDERLAY export EXPORT_BGP_UNDERLAY
set protocols bgp group UNDERLAY dynamic-neighbor AUTO-UNDERLAY peer-auto-discovery family inet6 ipv6-nd
set protocols bgp group UNDERLAY dynamic-neighbor AUTO-UNDERLAY peer-auto-discovery interface ge-0/0/0.0
set protocols bgp group UNDERLAY peer-as-list SPINE

設定は以上です。

3. BGP Auto-Discovered Neighbors 確認

では確認してきます。
まず、各デバイスIPv6 Link-localアドレスが付与されているか確認します。

//spine-1
lab@spine-1# run show interfaces terse
Interface               Admin Link Proto    Local                 Remote
ge-0/0/0                up    up
ge-0/0/0.0              up    up   inet
                                   inet6    fe80::5201:ff:fe07:1/64
                                   multiservice
<snip>
ge-0/0/1                up    up
ge-0/0/1.0              up    up   inet
                                   inet6    fe80::5201:ff:fe07:2/64
                                   multiservice
<snip>
//leaf-1
lab@leaf-1# run show interfaces terse
Interface               Admin Link Proto    Local                 Remote
ge-0/0/0                up    up
ge-0/0/0.0              up    up   inet
                                   inet6    fe80::5201:ff:fe08:1/64
                                   multiservice
<snip>
//leaf-2
lab@leaf-2# run show interfaces terse
Interface               Admin Link Proto    Local                 Remote
ge-0/0/0                up    up
ge-0/0/0.0              up    up   inet
                                   inet6    fe80::5201:ff:fe09:1/64
                                   multiservice
<snip>

インターフェイスIPv6 Link-localアドレスが付与されてますね。

続いてIPv6ネイバー情報を確認します。
対向デバイスIPv6 Link-localアドレスが検出できているか確認します。

//spine-1
lab@spine-1# run show ipv6 neighbors
IPv6 Address                            Linklayer Address  State       Exp   Rtr  Secure  Interface            
fe80::5201:ff:fe08:1                     50:01:00:08:00:01  reachable   24    yes  no      ge-0/0/0.0          
fe80::5201:ff:fe09:1                     50:01:00:09:00:01  reachable   20    yes  no      ge-0/0/1.0          
Total entries: 2
//leaf-1
lab@leaf-1# run show ipv6 neighbors
IPv6 Address                            Linklayer Address  State       Exp   Rtr  Secure  Interface
fe80::5201:ff:fe07:1                     50:01:00:07:00:01  reachable   11    yes  no      ge-0/0/0.0
//leaf-2
lab@leaf-2# run show ipv6 neighbors
IPv6 Address                            Linklayer Address  State       Exp   Rtr  Secure  Interface
fe80::5201:ff:fe07:2                     50:01:00:07:00:02  reachable   22    yes  no      ge-0/0/0.0

ちゃんと検出できますね。

続いて、BGPのPeering状況を確認します。

//spine-1
lab@spine-1# run show bgp summary
<snip>
fe80::5201:ff:fe08:1%ge-0/0/0.0  4200001001        214        212       0       0     1:34:05 Establ
  inet.0: 1/1/1/0
  inet6.0: 0/0/0/0
fe80::5201:ff:fe09:1%ge-0/0/1.0  4200001002        214        212       0       0     1:34:05 Establ
  inet.0: 1/1/1/0
  inet6.0: 0/0/0/0
//leaf-1
lab@leaf-1# run show bgp summary
<snip>
fe80::5201:ff:fe07:1%ge-0/0/0.0  4200000001        215        214       0       0     1:34:53 Establ
  inet.0: 2/2/2/0
  inet6.0: 0/0/0/0
//leaf-2
lab@leaf-2# run show bgp summary
<snip>
fe80::5201:ff:fe07:2%ge-0/0/0.0  4200000001        216        215       0       0     1:35:21 Establ
  inet.0: 2/2/2/0
  inet6.0: 0/0/0/0

各ネイバーともEstablishedになってますね!

次に、各デバイスのLoopbackアドレスを学習しているか確認します。

//spine-1
lab@spine-1# run show route

inet.0: 3 destinations, 3 routes (3 active, 0 holddown, 0 hidden)
Limit/Threshold: 1048576/1048576 destinations
+ = Active Route, - = Last Active, * = Both

172.16.0.1/32      *[Direct/0] 01:38:27
                    >  via lo0.0
172.16.0.11/32     *[BGP/170] 01:37:52, localpref 100
                      AS path: 4200001001 I, validation-state: unverified
                    >  to fe80::5201:ff:fe08:1 via ge-0/0/0.0
172.16.0.12/32     *[BGP/170] 01:37:52, localpref 100
                      AS path: 4200001002 I, validation-state: unverified
                    >  to fe80::5201:ff:fe09:1 via ge-0/0/1.0
<snip>
//leaf-1
lab@leaf-1# run show route

inet.0: 3 destinations, 3 routes (3 active, 0 holddown, 0 hidden)
Limit/Threshold: 1048576/1048576 destinations
+ = Active Route, - = Last Active, * = Both

172.16.0.1/32      *[BGP/170] 01:38:21, localpref 100
                      AS path: 4200000001 I, validation-state: unverified
                    >  to fe80::5201:ff:fe07:1 via ge-0/0/0.0
172.16.0.11/32     *[Direct/0] 01:38:58
                    >  via lo0.0
172.16.0.12/32     *[BGP/170] 01:38:21, localpref 100
                      AS path: 4200000001 4200001002 I, validation-state: unverified
                    >  to fe80::5201:ff:fe07:1 via ge-0/0/0.0
<snip>
//leaf-2
lab@leaf-2# run show route

inet.0: 3 destinations, 3 routes (3 active, 0 holddown, 0 hidden)
Limit/Threshold: 1048576/1048576 destinations
+ = Active Route, - = Last Active, * = Both

172.16.0.1/32      *[BGP/170] 01:38:49, localpref 100
                      AS path: 4200000001 I, validation-state: unverified
                    >  to fe80::5201:ff:fe07:2 via ge-0/0/0.0
172.16.0.11/32     *[BGP/170] 01:38:49, localpref 100
                      AS path: 4200000001 4200001001 I, validation-state: unverified
                    >  to fe80::5201:ff:fe07:2 via ge-0/0/0.0
172.16.0.12/32     *[Direct/0] 01:39:26
                    >  via lo0.0
<snip>

Loopbackアドレスを学習できてますね!!
Routing Table EntryのLoopbackアドレスはIPv4ですが、ネクストホップアドレスはIPv6であることも確認できます。

最後にPingを飛ばしてみます。

//spine-1
[edit]
lab@spine-1# run ping 172.16.0.11 source 172.16.0.1 rapid count 10
PING 172.16.0.11 (172.16.0.11): 56 data bytes
!!!!!!!!!!
--- 172.16.0.11 ping statistics ---
10 packets transmitted, 10 packets received, 0% packet loss
round-trip min/avg/max/stddev = 0.483/0.795/1.178/0.175 ms

[edit]
lab@spine-1# run ping 172.16.0.12 source 172.16.0.1 rapid count 10
PING 172.16.0.12 (172.16.0.12): 56 data bytes
!!!!!!!!!!
--- 172.16.0.12 ping statistics ---
10 packets transmitted, 10 packets received, 0% packet loss
round-trip min/avg/max/stddev = 0.644/0.866/1.040/0.102 ms
//leaf-1
[edit]
lab@leaf-1# run ping 172.16.0.1 source 172.16.0.11 rapid count 10
PING 172.16.0.1 (172.16.0.1): 56 data bytes
!!!!!!!!!!
--- 172.16.0.1 ping statistics ---
10 packets transmitted, 10 packets received, 0% packet loss
round-trip min/avg/max/stddev = 0.754/0.916/1.243/0.136 ms

[edit]
lab@leaf-1# run ping 172.16.0.12 source 172.16.0.11 rapid count 10
PING 172.16.0.12 (172.16.0.12): 56 data bytes
!!!!!!!!!!
--- 172.16.0.12 ping statistics ---
10 packets transmitted, 10 packets received, 0% packet loss
round-trip min/avg/max/stddev = 1.224/1.575/1.852/0.199 ms
//leaf-2
[edit]
lab@leaf-2# run ping 172.16.0.1 source 172.16.0.12 rapid count 10
PING 172.16.0.1 (172.16.0.1): 56 data bytes
!!!!!!!!!!
--- 172.16.0.1 ping statistics ---
10 packets transmitted, 10 packets received, 0% packet loss
round-trip min/avg/max/stddev = 0.671/0.762/1.253/0.166 ms

[edit]
lab@leaf-2# run ping 172.16.0.11 source 172.16.0.12 rapid count 10
PING 172.16.0.11 (172.16.0.11): 56 data bytes
!!!!!!!!!!
--- 172.16.0.11 ping statistics ---
10 packets transmitted, 10 packets received, 0% packet loss
round-trip min/avg/max/stddev = 1.369/1.736/2.191/0.275 ms

Pingが飛びました!!!
これで無事にBGP Auto-Discovered Neighbors機能にてUnderlayネットワークが構築できました!!

ちなみにこの後、OverlayネットワークやVXLAN設定をした後、ホスト間にて通信もできています。
EVPN NLRIのネクストホップアドレスも同様にIPv6 Link-localアドレスになります。
一例としてspine-1のshow routeを載せときます。

//spine-1
lab@spine-1# run show route
<snip>
bgp.evpn.0: 6 destinations, 6 routes (6 active, 0 holddown, 0 hidden)
+ = Active Route, - = Last Active, * = Both

2:172.16.0.11:1::10012::50:01:00:0a:00:01/304 MAC/IP
                   *[BGP/170] 00:02:12, localpref 100, from 172.16.0.11
                      AS path: 4200001001 I, validation-state: unverified
                    >  to fe80::5201:ff:fe08:1 via ge-0/0/0.0, Push 625
2:172.16.0.12:1::10012::50:01:00:0b:00:01/304 MAC/IP
                   *[BGP/170] 00:02:12, localpref 100, from 172.16.0.12
                      AS path: 4200001002 I, validation-state: unverified
                    >  to fe80::5201:ff:fe09:1 via ge-0/0/1.0, Push 625
2:172.16.0.11:1::10012::50:01:00:0a:00:01::12.12.12.1/304 MAC/IP
                   *[BGP/170] 00:02:12, localpref 100, from 172.16.0.11
                      AS path: 4200001001 I, validation-state: unverified
                    >  to fe80::5201:ff:fe08:1 via ge-0/0/0.0, Push 625
2:172.16.0.12:1::10012::50:01:00:0b:00:01::12.12.12.2/304 MAC/IP
                   *[BGP/170] 00:02:12, localpref 100, from 172.16.0.12
                      AS path: 4200001002 I, validation-state: unverified
                    >  to fe80::5201:ff:fe09:1 via ge-0/0/1.0, Push 625
3:172.16.0.11:1::10012::172.16.0.11/248 IM
                   *[BGP/170] 01:54:40, localpref 100, from 172.16.0.11
                      AS path: 4200001001 I, validation-state: unverified
                    >  to fe80::5201:ff:fe08:1 via ge-0/0/0.0
3:172.16.0.12:1::10012::172.16.0.12/248 IM
                   *[BGP/170] 01:54:38, localpref 100, from 172.16.0.12
                      AS path: 4200001002 I, validation-state: unverified
                    >  to fe80::5201:ff:fe09:1 via ge-0/0/1.0

設定を行えばIPv6 Link-localアドレスの付与~BGP Peeringまで行われることが確認できました。

では、デバイス間ではどんなやりとりを行っているのか、パケットキャプチャーをしてもう少し詳しく確認してみます。
で、実際にspine-1 ge-0/0/0~leaf-1 ge-0/0/0間のパケットキャプチャーがこちらになります。

パっと見、TCP 3Wayハンドシェイク後にBGPでなんやかんやしてる感じですね(適当)

細かく見ていきます。
まずは最初のRouter Advertisementから。

Router Advertisementにて自身のIPv6 Link-localアドレスを広報しているようです。
それで知り得た相手のIPv6 Link-localアドレス宛にBGP(のTCP)セッションを開始してます。

その後のBGP OPENメッセージを確認します。

最後のOptional ParameterにてExtended Next Hop EncodingというCapabilityが確認できます。
このパラメーターで、IPv6ネクストホップアドレスとしたIPv4なNLRIをサポートしていることを通知します。
ちなみに、My ASが23456となってますが、これは4Byte ASを通知する際の予約されたASNとなります。
(ツリーを閉じてますが、別のOptional ParameterのSupport for 4-octect AS number Capabilityにて設定したASNを通知してます)

最後にleaf-1から送信されたBGP UPDATEメッセージを確認します。

一番下のPath Attribute情報から自身のLoopbackアドレス(172.16.0.11/32)をIPv4 NLRIとして通知しています。
そして、Next hopはIPv6 Link-localアドレスとなっており、Extended Next Hop Encodingが有効になってそうですね。

という訳で今回は以上です!!!
ここまでお読み頂きありがとうございました!!!!

4. 参考資料

書籍「Deploying Juniper Data Centers with EVPN VXLAN」
Juniper Networks Documentation - BGP User Guide - BGP Auto-Discovered Neighborswww.juniper.net




以上の内容はhttps://yokohama539.hatenablog.com/entry/2025/02/09/152523より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14