IBGP Data Center Fabric
We want to create a leaf-and-spine fabric running IBGP on top of OSPF. The fabric will have two leafs (l1, l2) and two spines (s1, s2).
All devices run BGP and OSPF (we need OSPF within AS 65000 to propagate loopback interfaces):
module: [ bgp,ospf ]
Default BGP AS number is 65000. Default OSPF area is 0.0.0.0. Default device type is Cisco Nexus 9300v:
bgp:
as: 65000
ospf:
area: 0.0.0.0
defaults:
device: nxos
Fabric point-to-point links are unnumbered:
addressing:
p2p:
unnumbered: true
The network topology has four nodes. One of the leafs is an Arista switch.
nodes:
s1:
s2:
l1:
l2:
device: eos
The switches are connected into a leaf-and-spine fabric:
links:
- s1-l1
- s1-l2
- s2-l1
- s2-l2
We could use a full mesh of IBGP sessions, but it’s more interesting to use spine switches as BGP route reflectors. As we don’t need any other node-specific attributes, we’ll use the global rr_list to specify the route reflectors
bgp:
as: 65000
rr_list: [ s1, s2 ]
Resulting Data Structures
Data structures generated by the BGP data transformation module include the list of BGP neighbor. On a route reflector (S1), all other switches are IBGP neighbors:
- bgp:
as: 65000
neighbors:
- as: 65000
ipv4: 10.0.0.1
name: l1
type: ibgp
- as: 65000
ipv4: 10.0.0.2
name: l2
type: ibgp
- as: 65000
ipv4: 10.0.0.4
name: s2
rr: true
type: ibgp
next_hop_self: true
rr: true
A leaf switch has IBGP sessions with route reflectors (both spine switches):
- bgp:
as: 65000
neighbors:
- as: 65000
ipv4: 10.0.0.3
name: s1
rr: true
type: ibgp
- as: 65000
ipv4: 10.0.0.4
name: s2
rr: true
type: ibgp
next_hop_self: true
Resulting Device Configurations
The above topology generates the following BGP-related device configuration for a NX-OS spine switch (S1):
feature bgp
!
router bgp 65000
address-family ipv4 unicast
!
network 10.0.0.3/32
!
neighbor 10.0.0.1 remote-as 65000
description l1
update-source loopback0
address-family ipv4 unicast
next-hop-self
route-reflector-client
!
neighbor 10.0.0.2 remote-as 65000
description l2
update-source loopback0
address-family ipv4 unicast
next-hop-self
route-reflector-client
!
neighbor 10.0.0.4 remote-as 65000
description s2
update-source loopback0
address-family ipv4 unicast
next-hop-self
And this is the BGP configuration for an Arista EOS leaf switch:
router bgp 65000
neighbor 10.0.0.3 remote-as 65000
neighbor 10.0.0.3 description s1
neighbor 10.0.0.3 update-source Loopback0
neighbor 10.0.0.3 next-hop-self
!
neighbor 10.0.0.4 remote-as 65000
neighbor 10.0.0.4 description s2
neighbor 10.0.0.4 update-source Loopback0
neighbor 10.0.0.4 next-hop-self
!
address-family ipv4
!
network 10.0.0.2/32
!
!
neighbor 10.0.0.3 activate
neighbor 10.0.0.4 activate
Complete network topology
#
# Simple BGP example (see documentation)
#
module: [ bgp,ospf ]
addressing:
p2p:
unnumbered: true
bgp:
as: 65000
rr_list: [ s1, s2 ]
ospf:
area: 0.0.0.0
defaults:
device: nxos
nodes:
s1:
l1:
l2:
device: eos
links:
- s1-l1
- s1-l2
- s2-l1
- s2-l2