BGP unnumbered has two modes of operation:
- IPv4 explicit /30 or /31 IP address assignment
- IPv6 dynamic link local neighbor discovery
Both styles allow Quagga running on Cumulus Linux to dynamically discover the remote peer IP address and build a neighbor relationship. On Cumulus Linux, the configuration for BGP unnumbered is:
router bgp 65535
neighbor swp1 interface
neighbor swp1 remote-as 65534
To support BGP unnumbered, Cumulus Linux does not change any behaviors of BGP. There are no proprietary BGP extensions in use. As a result, it is possible to configure BGP unnumbered on a Cumulus Linux switch and peer to any other standard BGP speaker. This article demonstrates this process using Cisco IOS-XE as a BGP peer.
Using IPv4 /30 IP Addresses
In order to support IPv4 based peering, assign /30 or /31 subnet IP addresses to both devices in /etc/network/interfaces
:
auto swp1
iface swp1
address 192.168.1.1/30
interface GigabitEthernet1
ip address 192.168.1.2 255.255.255.252
Now, on the Cumulus Linux switch, configure BGP unnumbered as described above:
router bgp 65535
neighbor swp1 interface
neighbor swp1 remote-as 65534
On the IOS-XE device, specify the specific IP address of the Cumulus Linux neighbor:
router bgp 65534
neighbor 192.168.1.1 remote-as 65535
You can validate the BGP peering relationship on both devices with show ip bgp neighbor
:
On the Cumulus Linux node, you can see both the interface and IP address:
cumulus@switch:~$ show ip bgp neighbor BGP neighbor on swp1: 192.168.1.2, remote AS 2, local AS 1, external link
BGP version 4, remote router ID 192.168.1.2
BGP state = Established, up for 00:05:12
On the IOS-XE device, you can see the same information:
IOS-XE#show ip bgp neighbor
BGP neighbor is 192.168.1.1, remote AS 1, external link
BGP version 4, remote router ID 192.168.1.1
BGP state = Established, up for 00:05:59
Using IPv6 Link Local Addresses
Using IPv6 link local addresses operates in a similar fashion. First, remove the IPv4 addresses and enable IPv6 on the IOS-XE node (IPv6 is enabled by default in Cumulus Linux):
interface GigabitEthernet1
ipv6 enable
On the Cumulus Linux node, discover the IPv6 link local address with the command ip addr show swp1
:
cumulus@switch:~$ ip addr show swp1
3: swp1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 08:00:27:80:7d:48 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.1/30 scope global swp1
inet6 fe80::a00:27ff:fe80:7d48/64 scope link
valid_lft forever preferred_lft forever
The BGP configuration on Cumulus Linux is the same as in the IPv4 scenario, however you need to enable ipv6 nd ra-interval 5
and no ipv6 nd suppress-ra
on each unnumbered interface. You can do this using the vtysh
shell in Quagga (see Configuring BGP for details):
interface swp1
ipv6 nd ra-interval 5
no ipv6 nd suppress-ra
!
router bgp 65535
neighbor swp1 interface
neighbor swp1 remote-as 65534
The configuration on the IOS-XE device configures the BGP peer with the physical interface in use for link local peering:
router bgp 65534
neighbor fe80::a00:27ff:fe80:7d48%GigabitEthernet1 remote-as 65535
!
address-family ipv4
neighbor fe80::a00:27ff:fe80:7d48%GigabitEthernet1 activate
Extended Next-hop Encoding
When using IPv6 link local addresses to advertise IPv4 routes, Cumulus Linux utilizes RFC5549 to inject IPv4 next hops in an IPv6 BGP session. This allows an IPv6 BGP peering to enter the next-hop field of an IPv4 address. The following is an image of a Wireshark capture of RFC5549 in action.
Notice that the first line indicates the layer 3 transport is IPv6 while the route and NEXT_HOP fields are IPv4.
On Cumulus Linux this is accomplished by enabling capability extended-nexthop
for the neighbor:
router bgp 65535
neighbor swp1 interface
neighbor swp1 remote-as 65534
neighbor swp1 capability extended-nexthop
As of version 15.5(1)S1, RFC5549 is not supported in IOS-XE. This does not impact inbound routes on IOS-XE received from Cumulus Linux.
For outbound route advertisements from IOS-XE a route-map must be configured to set the next-hop on the route advertisements to be the IOS-XE device's IPv4 address. On the IOS-XE device, configure the following:
route-map RFC5549
set ip next-hop 192.168.1.2
!
router bgp 65534
address-family ipv4
neighbor fe80::a00:27ff:fe80:7d48%GigabitEthernet1 route-map RFC5549 out
Summary
For the examples in this article, BGP unnumbered uses existing information on the system to discover neighbors; it does not use proprietary extensions to BGP. Cumulus Linux fully interoperates with any other BGP implementation. This configuration shows how it is possible to use the simplified BGP unnumbered configuration on Cumulus Linux while interoperating with any legacy networking vendor's BGP implementation.
Here is a recommandation if we could add more explaination on the process of unumbered BGP and how RA works in this scenario. the whole process on packet in and out , event sequenene.