BGP Unnumbered UnderlayでVxLANを構築し、gNMIで可視化してみた

## はじめに
昨今、BGP Unnumberedを使用して、CLOS Fabricを構築する例がよく紹介されていますが、
その上にVxLANも構築できたらアンダーレイの設計が楽になるのでいいなと思っていましたが、
正式に NXOS 10.2(3) よりサポートとなったため試してみました。
また、Cisco Liveで紹介されていた、gNMIによる可視化をやってみました。
詳細は後日別記事予定で今回はOutputのみを紹介します。

（注意）この試験は簡単な機能確認のみで、すべての機能の確認をしているわけではありませんのでご注意ください。
Configも余計なものも含まれているかもしれませんが、ご容赦を・・・


使用機材
Nexus 93180YC-FX
NxOS 10.4.1

構成：
以下のようにシンプルな構成で試してみました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197927/9ac1f56c-6270-c06e-4278-af27d9a1155d.png)


IPV4アドレスは、Loopback0にのみ使用しています。


### アンダーレイの設定：

```leaf２０１:
Hostname LEAF201
feature bgp
route-map ALL permit 10

interface loopback0
 ip address 10.255.255.201/32

interface Ethernet1/53
  no switchport
  ip forward
  ipv6 address use-link-local-only
  no shutdown

router bgp 65201
 router-id 10.255.255.201
 address-familiy ipv4 unicast
  redistribute direct route-map ALL

  neighbor Ethernet1/53
    remote-as external
    address-family ipv4 unicast
    address-family ipv6 unicast
```

```leaf2:
hostname LEAF202
feature bgp
route-map ALL permit 10

interface loopback0
 ip address 10.255.255.202/32

interface Ethernet1/53
  no switchport
  ip forward
  ipv6 address use-link-local-only
  no shutdown

router bgp 65202
 router-id 10.255.255.202
 address-familiy ipv4 unicast
  redistribute direct route-map ALL

  neighbor Ethernet1/53
    remote-as external
    address-family ipv4 unicast
    address-family ipv6 unicast
```

```spine1:
hostname SPINE101
feature bgp
route-map ALL permit 10

interface loopback0
 ip address 10.255.255.101/32

interface Ethernet1/53
  no switchport
  ip forward
  ipv6 address use-link-local-only
  no shutdown

  interface Ethernet1/54
  no switchport
  ip forward
  ipv6 address use-link-local-only
  no shutdown

router bgp 65101
 router-id 10.255.255.101
 address-familiy ipv4 unicast
  redistribute direct route-map ALL

  neighbor Ethernet1/53
    remote-as external
    address-family ipv4 unicast
    address-family ipv6 unicast
  neighbor Ethernet1/54
    remote-as external
    address-family ipv4 unicast
    address-family ipv6 unicast
```

設定が完了すると、BGPのネイバーが、IPV6 Link Local Addressを使って確立していることが
確認できます。また、IPv4 LoopbakIPが広報されていて、NHが、IPv６になっていることが確認できます。

```LOG
SPINE101# sh ip bgp summary
BGP summary information for VRF default, address family IPv4 Unicast
BGP router identifier 10.255.255.101, local AS number 65101
BGP table version is 6, IPv4 Unicast config peers 2, capable peers 2
3 network entries and 3 paths using 876 bytes of memory
BGP attribute entries [3/1080], BGP AS path entries [2/12]
BGP community entries [0/0], BGP clusterlist entries [0/0]

Neighbor        V    AS    MsgRcvd    MsgSent   TblVer  InQ OutQ Up/Down  State/PfxRcd
fe80::3a0e:4dff:febc:f897%Ethernet1/54
                4 65202        249        248        6    0    0 03:59:35 1
fe80::3a90:a5ff:fe25:e67b%Ethernet1/53
                4 65201        249        248        6    0    0 03:59:23 1

SPINE101# sh ip bgp
BGP routing table information for VRF default, address family IPv4 Unicast
BGP table version is 6, Local Router ID is 10.255.255.101
Status: s-suppressed, x-deleted, S-stale, d-dampened, h-history, *-valid, >-best
Path type: i-internal, e-external, c-confed, l-local, a-aggregate, r-redist, I-injected
Origin codes: i - IGP, e - EGP, ? - incomplete, | - multipath, & - backup, 2 - best2

   Network            Next Hop            Metric     LocPrf     Weight Path
*>r10.255.255.101/32  0.0.0.0                  0        100      32768 ?
*>e10.255.255.201/32  fe80::3a90:a5ff:fe25:e67b
                                               0                     0 65201 ?
*>e10.255.255.202/32  fe80::3a0e:4dff:febc:f897
                                               0                     0 65202 ?
```


アンダーレイが完成したところで、VxLAN EVPNの設定を追加します。
追加Config：

```
LEAF201 , LEAF202　
nv overlay evpn
feature interface-vlan
feature vn-segment-vlan-based
feature nv overlay

vlan 1,100
vlan 100
  vn-segment 10100

interface nve1
  no shutdown
  host-reachability protocol bgp
  source-interface loopback0
  member vni 10100
    ingress-replication protocol bgp

router bgp 65201
 neighbor 10.255.255.101
    remote-as external
    update-source loopback0
    ebgp-multihop 2
    address-family l2vpn evpn
      send-community
      send-community extended
      rewrite-evpn-rt-asn
evpn
  vni 10100 l2
    rd auto
    route-target import auto
    route-target export auto
    
interface Ethernet1/1
  switchport
  switchport access vlan 100
  no shutdown

```

```
SPINE101
nv overlay evpn

route-map UNCHANGED permit 10
  set ip next-hop unchanged

router bgp 65101
 address-family l2vpn evpn
    retain route-target all

  neighbor 10.255.255.201
    remote-as external
    update-source loopback0
    ebgp-multihop 2
    address-family l2vpn evpn
      disable-peer-as-check
      send-community
      send-community extended
      route-map UNCHANGED out
      rewrite-evpn-rt-asn
  neighbor 10.255.255.202
    remote-as external
    update-source loopback0
    ebgp-multihop 2
    address-family l2vpn evpn
      disable-peer-as-check
      send-community
      send-community extended
      route-map UNCHANGED out
      rewrite-evpn-rt-asn
```

この状態で、LEAF201で、EVPNの状況を確認します。
SPINEから、EVPNの情報をもらっていることが確認できます。
MACアドレステーブルでも、自身のEth1/1に接続されるMACと、VxLAN経由で学習したMACを
確認することができます。

```
LEAF201# sh bgp l2vpn evpn summary
BGP summary information for VRF default, address family L2VPN EVPN
BGP router identifier 10.255.255.201, local AS number 65201
BGP table version is 48, L2VPN EVPN config peers 1, capable peers 1
6 network entries and 6 paths using 1560 bytes of memory
BGP attribute entries [5/1800], BGP AS path entries [1/10]
BGP community entries [0/0], BGP clusterlist entries [0/0]

Neighbor        V    AS    MsgRcvd    MsgSent   TblVer  InQ OutQ Up/Down  State/PfxRcd
10.255.255.101  4 65101       9390       9386       48    0    0 23:48:03 2

Neighbor        T    AS PfxRcd     Type-2     Type-3     Type-4     Type-5     Type-12
10.255.255.101  I 65101 2          1          1          0          0          0

LEAF201# sh mac address-table
Legend:
        * - primary entry, G - Gateway MAC, (R) - Routed MAC, O - Overlay MAC
        age - seconds since last seen,+ - primary entry using vPC Peer-Link,
        (T) - True, (F) - False, C - ControlPlane MAC, ~ - vsan,
        (NA)- Not Applicable A – ESI Active Path, S – ESI Standby Path
   VLAN     MAC Address      Type      age     Secure NTFY Ports
---------+-----------------+--------+---------+------+----+------------------
C  100     10b3.d568.ed8f   dynamic  NA         F      F    nve1(10.255.255.202)
*  100     cc16.7eef.f518   dynamic  NA         F      F    Eth1/1
G    -     3890.a525.e67b   static   -         F      F    sup-eth1(R)
```

こちらで簡単ですが、構築が終わりまして、ここからgNMIの可視化をしていきます。

[シスコライブの資料]：　https://www.ciscolive.com/c/dam/r/ciscolive/global-event/docs/2023/pdf/BRKDCN-2689.pdf

こちらの手順に従って、設定を入れていきます。詳細は別途記事を各予定です。

スイッチ側には以下の設定を入れるだけです。

```
username telemetry password SuperSecretPassword
username telemetry role network-admin
feature grpc
feature openconfig

crypto ca trustpoint gnmi_trustpoint
crypto ca import gnmi_trustpoint pkcs12 bootflash:gnmi.pfx cisco123
grpc certificate gnmi_trustpoint
```

Dockerが動作しているLinux(ラボはubuntu22.04)で、Ciscoが提供しているコレクターをインストール。

https://github.com/dsx1123/telemetry_collector


その結果、以下のような感じでSWステータス情報、VxLANの状態を可視化することができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197927/63fe7724-666c-43de-eb62-57d73c553bf7.png)

ダッシュボードはいくつか用いされており、キャパシティ情報をみることや、Host Table情報を表示することができます。

キャパシティ情報：
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197927/f7241722-e2aa-d24e-2beb-7e620f018dcc.png)

ARP,MACテーブル
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197927/dfb150ca-96b3-0d3b-ab7f-fa70abb1fe17.png)


最近JanogでもgNMIのテレメトリの話が出てきていますが、もっと活用事例を増やしたいですね。