Software Installation and Lab Setup
It’s easiest to use the BGP labs with netlab. Still, you can use most of them (potentially with slightly reduced functionality) with any other virtual lab environment or on physical gear. For the rest of this document, we’ll assume you decided to use netlab; if you want to set up your lab in some other way, read the Manual Setup document.
Warning
BGP labs work best with netlab release 1.8.3 or later. If you’re using an earlier netlab release, please upgrade with pip3 install --upgrade networklab
.
Select the Network Devices You Will Work With
Cumulus Linux and FRRouting devices can be run in all netlab-supported virtualization environments (VirtualBox, libvirt, or Docker), and if you want to start practicing BGP with minimum hassle, consider using it for all lab devices. Use FRR on the ARM CPU (for example, Macbooks with Apple silicon).
If you’d like to use a more traditional networking device, use any other netlab-supported device for which we implemented basic BGP configuration as the device to practice with1. I recommend Arista cEOS or Nokia SR Linux containers; they are the easiest ones to install and use.
Tip
You must use container-based network devices like Arista cEOS, Cumulus Linux, FRR, Nokia SR Linux, or Vyos if you plan to run the BGP labs in GitHub Codespaces.
Select the Additional Devices in Your Lab
The labs heavily rely on external BGP feeds – preconfigured devices with which your routers exchange routing information. You won’t configure those devices, but you might have to log into them and execute show commands.
Use Cumulus Linux on those devices with netlab releases older than 1.6.4.
With release 1.6.4 (and later), you can choose any one of these devices for your external BGP feeds4:
Environment | Devices that can be used as external BGP feeds2 |
Recommended |
---|---|---|
Containers (clab) | Arista EOS, Aruba AOS-CX, Cumulus Linux, FRR, Nokia SR Linux3 | FRR (frr )5 |
Virtual machines (libvirt) | Arista EOS, Aruba AOS-CX, Cisco IOSv, Cisco IOS-XE, Cumulus Linux, FRR | Cumulus Linux (cumulus )6 |
Virtual machines (Virtualbox) | Arista EOS, Cisco IOSv, Cisco IOS-XE, Cumulus Linux, FRR | Cumulus Linux (cumulus ) |
ARM (Apple) CPU | FRR containers | FRR (frr ) |
Tip
- Several more complex labs require additional configuration on the external routers. That configuration is usually available for Arista EOS, Cumulus Linux, and FRR.
- Each lab description contains specific device requirements section. Consult those if you want to use less-popular devices in your labs.
Select the Virtualization Environment
Now that you know which network device to use, check which virtualization environment you can use. I would prefer containerlab over libvirt with virtualbox being a distant third, but that’s just me.
Tip
You can also run the BGP labs in a free GitHub Codespace.
A gotcha: You can use virtualbox if you want to run the lab devices as virtual machines on your Windows- or MacOS laptop with Intel CPU, but even then, I’d prefer running them in a Ubuntu VM.
One more gotcha: your hardware and virtualization software (for example, VirtualBox or VMware Fusion) must support nested virtualization if you want to use libvirt on that Ubuntu VM. You don’t need nested virtualization to run Docker containers unless you’re using the crazy trick we’re forced to use for Aruba AOS-CX, Juniper vMX, or Nokia SR OS – they’re running as a virtual machine within a container.
Software Installation
Based on the choices you made, you’ll find the installation instructions in one of these documents:
- Using GitHub Codespaces
- Ubuntu VM Installation on Windows or MacOS
- Ubuntu Server Installation
- Running netlab on any other Linux Server
- Running netlab in a Public Cloud
- Running netlab on Apple silicon
- Discouraged: Virtualbox-Based Lab on Windows or MacOS
Once you have completed the software installation you have to deal with the stupidities of downloading and installing network device images (Virtualbox, libvirt, containers) unless you decided to use Cumulus Linux, FRR, Nokia SR Linux, or Vyos.
I would love to simplify the process, but the networking vendors refuse to play along. Even worse, their licenses prohibit me from downloading the images and creating a packaged VM with preinstalled network devices for you7. Fortunately, you only have to go through this colossal waste of time once.
Setting Up the Labs
We finally got to the fun part – setting up the labs. If you’re not using GitHub Codespaces:
- Select a directory where you want to have the BGP labs
- Clone the
bgplab
GitHub repository withgit clone https://github.com/bgplab/bgplab.git
. GitHub UI gives you other options in the greenCode
button, including Download ZIP
After you get a local copy of the repository:
- If needed, edit the
defaults.yml
file in the top directory to set your preferred network device and virtualization environment. For example, I’m using the following settings to run the labs with Arista EOS containers while using FRR as the external BGP feeds:
device: eos # Change to your preferred network device
provider: clab # Change to virtualbox or libvirt if needed
groups:
external:
device: frr # Change to your preferred external router
- In a terminal window, change the current directory to one of the lab directories (for example,
basic/1-session
), and execute netlab up. - Wait for the lab to start and use netlab connect to connect to individual lab devices
- Have fun.
- When you’re done, collect the device configurations with netlab collect (if you want to save them) and shut down the lab with netlab down
- Change the current directory to another lab directory and repeat.
- Once you run out of lab exercises, create a new one and contribute it with a pull request ;)
-
You will have to run the labs on a device with an x86 CPU (Intel or AMD). ↩
-
You can only use devices supported by bgp.session and bgp.policy netlab plugins as external BGP feeds. ↩
-
You need netlab release 1.6.4-post2 or later to use Nokia SR Linux as additional routers in more complex labs. To configure Nokia SR Linux, you must also install additional software. ↩
-
If you’d like to use other devices as external BGP feeds and are willing to contribute your changes, please add the support for your devices to bgp.session and bgp.policy plugins. Thank you! ↩
-
An FRR container starts slightly faster than a Cumulus Linux container. Also, the FRR containers are built by the FRR project, while the Cumulus Linux containers came from a hobby project of their former employee. ↩
-
There is no official FRR virtual machine image – netlab has to download and install FRR on a Ubuntu VM whenever you start an
frr
node as a virtual machine. Using Cumulus Linux Vagrant box is faster and consumes way less bandwidth. ↩ -
I’m not going to pay a lawyer to read their boilerplate stuff, and I’m definitely not going to rely on my amateur understanding of US copyright law. ↩