Configuring BGP Unnumbered with Cisco IOS

Follow

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. 

Have more questions? Submit a request

Comments

Powered by Zendesk