DBN

BGP with FRR

Word count: 1kReading time: 6 min
2021/12/02

Today we explore setting up a BGP virtual lab (iBGP and eBGP) using Ubuntu and FRR.

This post was inspired by Lab 10 BGP Route Reflection

Versions

Software Version
Ubuntu 20.04 (focal)
FRR 7.5.1

Diagram

diagram

Setup

This lab requires internet access to download FRR packages. As such, each device’s ens2 is connected to a local host interface (NAT). Setup is out of scope for this lab and depends on your local virtualization environment.

Certificates

If certificates are required to access the internet (common in corporate environments), install them.

  1. sudo apt-get install ca-certificates -y
  2. cd /usr/local/share/ca-certificates/
  3. sudo wget http://<URL>.crt
  4. sudo update-ca-certificates

Install FRR with Snap

README

  1. Install frr snap
    1
    sudo snap install frr
  2. Connect Snap
    1
    snap connect frr:network-control core:network-control
  3. Create CLI alias
    1
    sudo snap alias frr.vtysh vtysh

Install FRR with APT

README

  1. Download APT keys
    1
    curl -s https://deb.frrouting.org/frr/keys.asc | sudo apt-key add -
  2. Set enviroment variable FRRVER
    1
    FRRVER="frr-7"
  3. Create new APT sources.list file
    1
    echo deb https://deb.frrouting.org/frr $(lsb_release -s -c) $FRRVER | sudo tee -a /etc/apt/sources.list.d/frr.list
  4. Update and install frr
    1
    sudo apt update && sudo apt install frr frr-pythontools
  5. Enable bgp daemon
    1
    sed -i 's/bgpd=no/bgpd=yes/g' /etc/frr/daemons
  6. Restart FRR
    1
    service frr restart

IPv4 forwarding

Enable IP forwarding so Ubuntu can route traffic through interfaces.

1
2
sed -i 's/#net.ipv4.ip_forward=1/net.ipv4.ip_forward=1/g' /etc/sysctl.conf
sysctl -p

Configuration

IP Addresses

Use Netplan to configure interface IP addresses.

Modify file (name may vary) /etc/netplan/50-cloud-init.yaml

  • rtr1
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    network:
    ethernets:
    ens2:
    dhcp4: true
    ens3:
    addresses:
    - 192.168.12.1/30
    lo:
    match:
    name: lo
    addresses:
    - 192.168.1.1/24
    version: 2
  • rtr2
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    network:
    ethernets:
    ens2:
    dhcp4: true
    ens3:
    addresses:
    - 192.168.12.2/30
    ens4:
    addresses:
    - 192.168.23.1/30
    lo:
    match:
    name: lo
    addresses:
    - 192.168.2.1/24
    version: 2
  • rtr3
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    network:
    ethernets:
    ens2:
    dhcp4: true
    ens3:
    addresses:
    - 192.168.23.2/30
    ens4:
    addresses:
    - 192.168.34.1/30
    lo:
    match:
    name: lo
    addresses:
    - 192.168.3.1/24
    version: 2
  • rtr4
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    network:
    ethernets:
    ens2:
    dhcp4: true
    ens3:
    addresses:
    - 192.168.34.2/30
    lo:
    match:
    name: lo
    addresses:
    - 192.168.4.1/24
    version: 2

Apply netplan configuration.

1
netplan apply

Verify IP addresses.

1
2
3
4
5
6
7
8
root@r2:/# ip a

1: lo:
inet 192.168.2.1/24 brd 192.168.2.255 scope global lo
3: ens3:
inet 192.168.12.2/30 brd 192.168.12.3 scope global ens3
4: ens4:
inet 192.168.23.1/30 brd 192.168.23.3 scope global ens4

FRR

Enter FRR’s CLI configuration mode.

1
2
vtysh
conf t
  • rtr2
    1
    2
    3
    4
    5
    6
    7
    router bgp 200
    neighbor 192.168.23.2 remote-as 200
    !
    address-family ipv4 unicast
    network 192.168.2.0/24
    network 192.168.23.0/30
    exit-address-family
  • rtr3
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    router bgp 200
    neighbor 192.168.23.1 remote-as 200
    neighbor 192.168.34.2 remote-as 200
    !
    address-family ipv4 unicast
    network 192.168.3.0/24
    network 192.168.23.0/30
    network 192.168.34.0/30
    neighbor 192.168.23.1 route-reflector-client
    neighbor 192.168.34.2 route-reflector-client
    exit-address-family
  • rtr4
    1
    2
    3
    4
    5
    6
    7
    router bgp 200
    neighbor 192.168.34.1 remote-as 200
    !
    address-family ipv4 unicast
    network 192.168.4.0/24
    network 192.168.34.0/30
    exit-address-family

Save configuration on all devices

1
2
end
wr

Verify

Check that BGP neighbors are online in vtysh.

1
2
3
4
r2# show ip bgp summary

Neighbor V AS MsgRcvd MsgSent TblVer InQ OutQ Up/Down State/PfxRcd PfxSnt
192.168.23.2 4 200 6 4 0 0 0 00:00:35 4 2

Check learned routes in vtysh.

1
2
3
4
5
6
7
8
9
10
11
r2# show ip bgp

Network Next Hop Metric LocPrf Weight Path
*> 192.168.2.0/24 0.0.0.0 0 32768 i
*>i192.168.3.0/24 192.168.23.2 0 100 0 i
*>i192.168.4.0/24 192.168.34.2 0 100 0 i
* i192.168.23.0/30 192.168.23.2 0 100 0 i
*> 0.0.0.0 0 32768 i
*>i192.168.34.0/30 192.168.23.2 0 100 0 i

Displayed 5 routes and 6 total paths

Check installed routes in vtysh.

1
2
3
4
5
6
7
8
9
10
11
12
r2# show ip route

K>* 0.0.0.0/0 [0/100] via 192.168.255.1, ens2, src 192.168.255.146, 00:52:24
C>* 192.168.2.0/24 is directly connected, lo, 00:52:24
B>* 192.168.3.0/24 [200/0] via 192.168.23.2, ens4, weight 1, 00:04:23
B> 192.168.4.0/24 [200/0] via 192.168.34.2 (recursive), weight 1, 00:04:23
* via 192.168.23.2, ens4, weight 1, 00:04:23
C>* 192.168.12.0/30 is directly connected, ens3, 00:52:24
C>* 192.168.23.0/30 is directly connected, ens4, 00:52:24
B>* 192.168.34.0/30 [200/0] via 192.168.23.2, ens4, weight 1, 00:04:23
C>* 192.168.255.0/24 is directly connected, ens2, 00:52:24
K>* 192.168.255.1/32 [0/100] is directly connected, ens2, 00:52:24

Exit vtysh with exit and check installed operating system routes.

1
2
3
4
5
6
7
8
9
10
root@r2:/# ip r

default via 192.168.255.1 dev ens2 proto dhcp src 192.168.255.146 metric 100
192.168.3.0/24 nhid 20 via 192.168.23.2 dev ens4 proto bgp metric 20
192.168.4.0/24 nhid 23 via 192.168.23.2 dev ens4 proto bgp metric 20
192.168.12.0/30 dev ens3 proto kernel scope link src 192.168.12.2
192.168.23.0/30 dev ens4 proto kernel scope link src 192.168.23.1
192.168.34.0/30 nhid 20 via 192.168.23.2 dev ens4 proto bgp metric 20
192.168.255.0/24 dev ens2 proto kernel scope link src 192.168.255.146
192.168.255.1 dev ens2 proto dhcp scope link src 192.168.255.146 metric 100

TODO

Finish lab from page 22.

Author:Martin

Link:https://dbnservers.net/network/bgp-with-frr/

Publish date:December 2nd 2021, 2:00:00 pm

Update date:February 8th 2023, 3:30:42 am

License:creative commons 4.0

CATALOG
  1. 1. Links
  2. 2. Versions
  3. 3. Diagram
  4. 4. Setup
    1. 4.1. Certificates
    2. 4.2. Install FRR with Snap
    3. 4.3. Install FRR with APT
  5. 5. IPv4 forwarding
  6. 6. Configuration
    1. 6.1. IP Addresses
    2. 6.2. FRR
    3. 6.3. Verify
  7. 7. TODO