Getting started
One-time setup. About ten minutes on a fresh Ubuntu machine or VM. After this, every lab is a single command.
What you need
- A Linux host or VM — Ubuntu 22.04 or 24.04 is the tested path. WSL2 on Windows works too.
- 4 GB of free RAM and a few GB of disk.
- sudo access. Containerlab manages network namespaces and needs it.
On a Mac or Windows laptop, the simplest route is a small Ubuntu VM in VirtualBox, UTM, or Multipass. No nested virtualization is needed — FRR runs as a plain container.
Install
-
Docker
curl -fsSL https://get.docker.com | sudo sh sudo usermod -aG docker $USERLog out and back in so the group change takes effect.
-
Containerlab
bash -c "$(curl -sL https://get.containerlab.dev)"Confirm with
containerlab version. -
Pull the router image once
docker pull frrouting/frr:latestEvery lab uses this same image, so this is the only download.
Run a lab
unzip lab-01-ospf-area-boundary.zip
cd lab-01-ospf-area-boundary
./labctl deploy
Each lab folder has the same launcher with the same commands:
./labctl deploy # bring it up and apply the scenario
./labctl status # neighbor state and routes at a glance
./labctl verify # check your fix
./labctl reset # back to the broken starting state
./labctl destroy # tear it down
Working in vtysh
FRR's shell is modeled on IOS. Get into a router with:
docker exec -it clab-<lab-name>-r1 vtysh
From there the commands you already know work as expected:
show ip route
show ip ospf neighbor
show ip ospf database
show ip bgp summary
show running-config
configure terminal
The differences you'll notice: interfaces are named eth1, eth2 rather than GigabitEthernet; prefixes use CIDR (10.0.0.0/24) rather than wildcard masks; and in BGP, neighbors are activated under address-family ipv4 unicast. That's about the whole list for OSPF and BGP work.
If something's off
- Permission denied on Docker — you haven't re-logged in after the
usermodstep. - "OSPF did not converge" from the launcher — run
./labctl status; usually the image is still starting. Run./labctl reset. - Containers from a previous lab still around —
sudo containerlab destroy --allcleans everything.