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.


BGP labs work best with netlab release 1.6.4 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

You can run Cumulus Linux (and FRR) 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.

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 with. I would recommend Arista cEOS or Nokia SR Linux containers – they are the easiest ones to install and use.

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 feeds3:

Environment Devices that can be used
as external BGP feeds1
Containers (clab) Arista EOS, Aruba AOS-CX, Cumulus Linux, FRR, Nokia SR Linux2 FRR (frr)4
Virtual machines (libvirt) Arista EOS, Aruba AOS-CX, Cisco IOSv, Cisco IOS-XE, Cumulus Linux, FRR Cumulus Linux (cumulus)5
Virtual machines (Virtualbox) Arista EOS, Cisco IOSv, Cisco IOS-XE, Cumulus Linux, FRR Cumulus Linux (cumulus)


  • 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.

A gotcha: You can use virtualbox if you want to run the lab devices as virtual machines on your Windows- or MacOS laptop, 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:

Once you 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 you6. 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:

  • Select a directory where you want to have the BGP labs
  • Clone the bgplab GitHub repository with git clone [email protected]:bgplab/bgplab.git. GitHub UI gives you other options in the green Code button, including Download ZIP
  • Open the defaults.yml file in the main directory and edit it 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

    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 ;)

  1. You can only use devices supported by bgp.session and bgp.policy netlab plugins as external BGP feeds. 

  2. You need netlab release 1.6.4-post2 to use Nokia SR Linux as additional routers in more complex labs. To configure Nokia SR Linux, you must also install additional software

  3. 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! 

  4. 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. 

  5. 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. 

  6. 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.