Skip to main content
This guide walks you through deploying the complete Nokia BNG Lab environment.

Overview

The installation process involves:
  1. Obtaining the lab repository
  2. Setting up Nokia licenses
  3. Preparing Docker images
  4. Deploying the lab with Containerlab
  5. Verifying the deployment
Expected deployment time: 10-15 minutes (depending on your internet connection and system performance)

Step 1: Clone the Repository

1

Clone from GitHub

Download the lab repository:
git clone https://github.com/abelperezr/nokia-bng-lab.git
cd nokia-bng-lab
2

Verify Repository Contents

Check that all essential files are present:
ls -la
You should see:
  • lab.yml - Main topology file
  • configs/ - Configuration directory
  • README.md - Documentation
If you don’t have Git installed:
# Using curl
curl -L https://github.com/abelperezr/nokia-bng-lab/archive/refs/heads/main.zip -o nokia-bng-lab.zip
unzip nokia-bng-lab.zip
cd nokia-bng-lab-main

# Using wget
wget https://github.com/abelperezr/nokia-bng-lab/archive/refs/heads/main.zip
unzip main.zip
cd nokia-bng-lab-main

Step 2: License Setup

The Nokia SR-SIM license is mandatory. The lab will not start without it.
1

Create License Directory

mkdir -p configs/license
2

Copy License File

Place your Nokia SR-SIM license file in the correct location:
cp /path/to/your/SR_SIM_license.txt configs/license/
The license file must be named exactly SR_SIM_license.txt
3

Verify License File

ls -lh configs/license/SR_SIM_license.txt
The file should exist and have a non-zero size.
The SR-SIM license must support:
  • Platforms: SR-7, IXR-ec
  • Features: BNG functionality, ISA cards
  • Nodes: At least 4 nodes (2x BNG, 1x Switch, 1x OLT)
Contact Nokia support if your license doesn’t include these features.

Step 3: Prepare Docker Images

Nokia SR OS Image

1

Import Nokia SR OS Image

Import the Nokia SR OS 25.10.R2 image:
# Import from TAR file
docker import /path/to/sros-25.10.R2.tar localhost/nokia/srsim:25.10.R2
2

Verify SR OS Image

docker images | grep nokia/srsim
Expected output:
localhost/nokia/srsim    25.10.R2    <image_id>    <time>    <size>

Nokia SR Linux Image

1

Pull SR Linux Image

docker pull ghcr.io/nokia/srlinux:25.10

Public Container Images

These images will be pulled automatically during deployment, but you can pre-pull them to speed up the process.
# Optional: Pre-pull all required images
docker pull ghcr.io/abelperezr/ont-ds:0.2
docker pull ghcr.io/srl-labs/network-multitool
docker pull ghcr.io/openconfig/gnmic:latest
docker pull prom/prometheus
docker pull grafana/grafana:10.3.5

Step 4: Deploy the Lab

Containerlab requires root privileges or sudo access.
1

Start Deployment

Deploy the complete lab topology:
sudo containerlab deploy -t lab.yml
This command will:
  • Create the management network (10.77.1.0/24)
  • Pull missing Docker images
  • Start all containers in the correct order
  • Apply startup configurations
  • Configure interfaces and links
2

Monitor Deployment Progress

You’ll see output like:
INFO[0000] Containerlab v0.50.0 started                 
INFO[0000] Parsing & checking topology file: lab.yml    
INFO[0001] Creating docker network: Name='lab', IPv4Subnet='10.77.1.0/24'
INFO[0001] Creating lab directory: /root/clab-lab       
INFO[0002] Creating container: bng1                     
INFO[0003] Creating container: bng2                     
INFO[0004] Creating container: switch                   
...

What Happens During Deployment

Containerlab creates a Docker bridge network:
  • Network name: lab
  • Subnet: 10.77.1.0/24
  • Management IPs: Pre-assigned to each node (10.77.1.2 - 10.77.1.17)
All containers start in this order:
  1. Network nodes (BNG1, BNG2, Switch, OLT, TX)
  2. Client devices (ONT1, ONT2, PC1, iPerf)
  3. Infrastructure services (RADIUS, gNMIc, Prometheus, Grafana)
Each node:
  • Loads its startup configuration
  • Configures network interfaces
  • Establishes management connectivity
Startup configurations are automatically applied from:
  • configs/sros/config-bng.txt → BNG1
  • configs/sros/config-bng-2.txt → BNG2
  • configs/switch/switch.txt → Switch
  • configs/olt/olt.txt → OLT
  • configs/switch/srl.txt → TX (SRLinux)
The telemetry stack components start automatically:
  1. gNMIc connects to all Nokia nodes and subscribes to metrics
  2. Prometheus begins scraping metrics from gNMIc
  3. Grafana loads pre-configured dashboards and connects to Prometheus

Step 5: Verify Deployment Success

1

Check Lab Status

sudo containerlab inspect -t lab.yml
This shows all nodes with their management IPs and connection status.
2

Verify All Containers Running

docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"
All containers should show status Up.
3

Check Network Connectivity

# Ping BNG1 management IP
docker exec -it clab-lab-bng1 sr_cli "ping 10.77.1.1 count 3"

Deployment Time Breakdown

PhaseDurationNotes
Image pull3-5 minOnly first time or when images are missing
Network creation10 secCreates Docker bridge
Container startup2-3 minNokia nodes take longest to boot
Configuration load2-3 minBNG nodes apply full config
Service initialization1-2 minRADIUS, telemetry services start
Total10-15 minVaries by system performance
Subsequent deployments are faster since images are already cached locally.

Post-Deployment Configuration

ONT Devices Setup

The ONT devices require manual IPv6 DHCPv6 PD setup:
1

Configure ONT1 (IPoE)

docker exec -it clab-lab-ont1 /home/user/start-dhcp6-pd.sh eth1.150 eth2 &
2

Configure ONT2 (PPPoE)

docker exec -it clab-lab-ont2 /home/user/start-dhcp6-pd.sh eth1.150 eth2 &

Access Services

Once deployed, you can access:
# BNG1
ssh admin@localhost -p 56661
# Password: lab123

# BNG2
ssh admin@localhost -p 56664
# Password: lab123

# Switch
ssh admin@localhost -p 56667
# Password: lab123

# OLT
ssh admin@localhost -p 56678
# Password: lab123
# ONT1
ssh user@localhost -p 56673
# Password: test

# ONT2
ssh user@localhost -p 56674
# Password: test

# PC1
ssh root@localhost -p 56677

Troubleshooting Installation

Error: failed to load license fileSolution:
# Verify license file location and name
ls -lh configs/license/SR_SIM_license.txt

# Check file permissions
chmod 644 configs/license/SR_SIM_license.txt

# Verify license content (should not be empty)
wc -l configs/license/SR_SIM_license.txt
Error: failed to pull image localhost/nokia/srsim:25.10.R2Solution:
# Check if image exists
docker images | grep nokia/srsim

# Re-import if missing
docker import /path/to/sros-25.10.R2.tar localhost/nokia/srsim:25.10.R2
Error: bind: address already in useSolution:
# Find process using the port
sudo netstat -tulpn | grep <port_number>

# Option 1: Stop the conflicting service
sudo systemctl stop <service_name>

# Option 2: Edit lab.yml and change port mappings
# Example: Change 3030:3000 to 3031:3000
Error: Container exits immediately or fails health checkSolution:
# Check container logs
docker logs clab-lab-<node_name>

# Check system resources
free -h
df -h

# Restart specific container
sudo containerlab deploy -t lab.yml --reconfigure
Error: network lab not foundSolution:
# Manually create network
docker network create \
  --subnet=10.77.1.0/24 \
  --gateway=10.77.1.1 \
  lab

# Verify network
docker network inspect lab

# Retry deployment
sudo containerlab deploy -t lab.yml

Stopping the Lab

To stop and remove all lab components:
sudo containerlab destroy -t lab.yml
This will:
  • Stop all containers
  • Remove all containers
  • Remove the management network
  • Preserve configuration files and logs in clab-lab/ directory
To remove all lab data including saved states:
# Destroy lab
sudo containerlab destroy -t lab.yml --cleanup

# Remove lab directory
sudo rm -rf clab-lab/

Next Steps

Proceed to Verification to test your deployment and ensure everything is working correctly.