Virtualbox-Based Lab on Windows or MacOS
Virtualbox-based Vagrant lab is the only option to run netlab directly on Windows or MacOS. Do not use VirtualBox on Linux; KVM/libvirt is a much better alternative fully supported by netlab.
Warning
We no longer have the infrastructure to test netlab on VirtualBox. It probably still works.
While netlab has no problem running on Apple silicon, you won’t be able to start x86-based virtual machines or containers. As of late 2023, there are no network devices available for ARM CPU[2].
If your system supports nested virtualization, run netlab within a Ubuntu VM.
We don’t test netlab on Windows and have no experience with Windows Subsystem for Linux. It might work, but if it doesn’t, you’re on your own[3].
When running netlab with virtualbox
provider:
netlab commands create Ansible inventory and Vagrant configuration.
Vagrant creates virtual networks within the VirtualBox environment and starts network devices as virtual machines within VirtualBox.
Ansible connects to the network devices using SSH ports mapped by Virtualbox and configures them.
The VirtualBox environment is pretty easy to set up:
Install Virtualbox (might require fiddling with BIOS setup)
Assuming you already have Python3 installed, install netlab Python package with
pip3 install networklab
Install Ansible[1] and related device-specific requirements (see Ansible documentation for details).
Test the installation with netlab test virtualbox command
Creating a New Lab
To create a new lab:
Create lab topology file in an empty directory. Use
provider: virtualbox
in the lab topology to select the virtualbox virtualization provider.Execute netlab up
Testing the Installation
The easiest way to test your installation is to use the netlab test command. If you prefer to do step-by-step tests, or if you don’t want to install Ansible, use this recipe:
Create an empty directory and
topology.yml
file with the following contents within that directory:
---
defaults:
device: cumulus
nodes: [ s1, s2, s3 ]
links: [ s1-s2, s2-s3, s1-s2-s3 ]
Execute
netlab up --no-config
to create configuration files and start the lab without configuring network devices (that step would require Ansible)Connect to the Cumulus VX devices with
vagrant ssh
Destroy the lab with
netlab down
Creating Vagrant Boxes
Vagrant relies on boxes (prepackaged VM images). The following Vagrant boxes are automatically downloaded from Vagrant Cloud when you’re using them for the first time in your lab topology:
Virtual network device |
Vagrant box name |
---|---|
Cumulus VX |
CumulusCommunity/cumulus-vx:4.4.0 |
Cumulus VX 5.0 (NVUE) |
CumulusCommunity/cumulus-vx:5.0.1 |
Generic Linux |
generic/ubuntu2004 |
You must download Arista vEOS and Nexus 9300v images from the vendor website (requires registration) and install them with the vagrant box add filename –name boxname command. You’ll find build recipes for other network devices on codingpackets.com.
You have to use the following box names when installing or building the Vagrant boxes:
Virtual network device |
Vagrant box name |
---|---|
Arista vEOS |
arista/veos |
Cisco IOSv |
cisco/iosv |
Cisco CSR 1000v |
cisco/csr1000v |
Cisco Nexus 9300v |
cisco/nexus9300v |
Juniper vSRX 3.0 |
juniper/vsrx3 |
Notes:
Arista rarely ships the latest software version as a Vagrant box. You’ll usually have to build a Vagrant box to have an up-to-date EOS version.
Vagrantfile created by netlab create or netlab up sets up port forwarding for SSH (22), HTTP (80), and NETCONF (830), but the corresponding Ansible inventory contains only ansible_port (SSH). You could edit the final inventory by hand, add an extra file to
host_vars
, or fix the netlab code. Should you decide to do the latter, please get in touch with us in advance to discuss the necessary data structures.If you want to add other network devices, build your own Vagrant boxes and modify the system topology-defaults.yml file or user defaults (see adding new virtualization provider for an existing device for more details).