Software Installation and Lab Setup
It’s easiest to use the IS-IS 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 section of the BGP Labs documentation.
Warning
IS-IS labs work best with netlab release 2.0.0 or later (some lab exercises require a more recent netlab release). If you’re using an earlier release, please upgrade with pip3 install --upgrade networklab.
Select the Network Devices You Will Work With
You can run FRRouting in all netlab-supported virtualization environments (libvirt virtual machines or Docker containers)1, and if you want to start practicing IS-IS with minimum hassle, consider using FRRouting for all lab devices2. You can even run Arista cEOS, FRRouting, or Nokia SR Linux containers on 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 IS-IS configuration as the device to practice with3. I recommend Arista cEOS or Nokia SR Linux containers; they are the easiest ones to install and use.
Tip
If you plan to run the labs in free GitHub Codespaces, you MUST use container-based network devices like Arista cEOS, FRR, Nokia SR Linux, or Vyos.
Select the Additional Devices in Your Lab
Some labs use additional routers – 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.
The default setup uses FRRouting for additional routers; we also generated all the show printouts with FRRouting. Alternatively, you can use any other device for which we implemented basic IS-IS configuration as additional routers. Additional limitations (should they exist) are listed under the Device Requirements section of individual lab exercises.
Select the Virtualization Environment
Now that you know which network device to use, check which virtualization environment you can use. Running IS-IS labs in a free GitHub Codespace is an excellent starting point, but if you decide to build your own infrastructure, containerlab is easier to set up than libvirt.
If you want to run the labs on your laptop (including Macs with Apple silicon), create a Ubuntu VM to run netlab. You could also run them in a VM in a private or public cloud or invest in a tiny brick of densely packed silicon (example).
Now for a few gotchas:
- Your hardware and virtualization software (for example, VirtualBox or VMware Fusion) must support nested virtualization if you want to run virtual machines on that Ubuntu VM.
- You don’t need nested virtualization to run Docker containers unless you’re using containers that run virtual machines within a container (the vrnetlab approach).
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
Once you have completed the software installation, you have to deal with the stupidities of downloading and installing network device images (libvirt, containers) unless you decided to use 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 you4. 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 IS-IS labs
- Clone the
isisGitHub repository withgit clone https://github.com/bgplab/isis.git. GitHub UI gives you other options in the greenCodebutton, including Download ZIP
After you get a local copy of the repository:
- Change the directory to the top directory of the cloned repository5.
- Verify the current project defaults with the
netlab defaults --projectcommand:
$ netlab defaults --project
device = frr (project)
groups.external.device = frr (project)
paths.plugin = ['topology:.', 'topology:../../plugin', 'package:extra'] (project)
provider = clab (project)
- If needed, change the project defaults to match your environment with the
netlab defaults --project _setting_=_value_command or edit thedefaults.ymlfile with a text editor likeviornano. For example, use these commands to change your devices to Cisco CSRs running as virtual machines6:
$ netlab defaults --project device=csr
The default setting device is already set in project defaults
Do you want to change that setting in project defaults [y/n]: y
device set to csr in /home/user/isis/defaults.yml
$ netlab defaults --project provider=libvirt
The default setting provider is already set in netlab,project defaults
Do you want to change that setting in project defaults [y/n]: y
provider set to libvirt in /home/user/isis/defaults.yml
- In a terminal window, change the current directory to one of the lab directories (for example,
basic/1-simple-ipv4), 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 ;)
-
There is no official FRR virtual machine image – netlab has to download and install FRR on a Ubuntu VM whenever you start an
frrnode as a virtual machine. Using FRR containers is faster and consumes way less bandwidth or memory. ↩ -
Unless you want to work on multi-level IS-IS configuration, in which case FRRouting is useless. It cannot distribute level-1 IS-IS routes into level-2 topology or vice versa. ↩
-
Most network devices require an x86 CPU. You must run the labs on a device with an x86 CPU (Intel or AMD) to use them. ↩
-
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. ↩
-
isisif you used the simple version of the git clone command ↩ -
Assuming you built the CSR Vagrant box first ↩