End-to-end ISP lab built on Containerlab with Nokia SROS (SRSIM), Nokia SR Linux, auxiliary Linux containers, and operational documentation in Docusaurus (ES/EN). Documentation: https://abelperezr.github.io/small-isp-lab/docs/
This project is designed to validate and demonstrate a realistic access and ISP edge environment with:
- active/standby redundancy between BNGs using SRRP
- BGP Traffic Engineering with EHS
- IPoE and PPPoE subscribers
- RADIUS authentication with LUDB fallback
- IPv6-only, dual-stack, and VIP service profiles
- CGNAT, NAT64, and one-to-one NAT
- observability with gNMIc + Prometheus + Grafana
- Lawful Interception / LEA
- operational automation with Containerbot
| Component | Image / platform | Management |
|---|---|---|
| BNG MASTER | localhost/nokia/srsim:25.10.R2 |
10.99.1.2 |
| BNG SLAVE | localhost/nokia/srsim:25.10.R2 |
10.99.1.3 |
| OLT | ghcr.io/nokia/srlinux:25.10 |
10.99.1.4 |
| Carrier 1 | ghcr.io/nokia/srlinux:25.10 |
10.99.1.252 |
| Carrier 2 | ghcr.io/nokia/srlinux:25.10 |
10.99.1.253 |
| ONT1 | ghcr.io/abelperezr/ont-ds:0.3 |
10.99.1.5 |
| ONT2 | ghcr.io/abelperezr/ont-ds:0.3 |
10.99.1.6 |
| RADIUS | ghcr.io/abelperezr/freeradius-custom:0.1 |
10.99.1.8 |
| gNMIc | ghcr.io/openconfig/gnmic:latest |
10.99.1.9 |
| Prometheus | prom/prometheus |
10.99.1.10 |
| Grafana | grafana/grafana:10.3.5 |
10.99.1.11 |
| LIG / LEA | ghcr.io/srl-labs/network-multitool + Python |
10.99.1.12 |
| DNS64 | ghcr.io/srl-labs/network-multitool:latest |
10.99.1.13 |
| Internet | ghcr.io/srl-labs/network-multitool |
10.99.1.14 |
| Loki | grafana/loki:latest |
10.99.1.15 |
| Alloy | grafana/alloy:latest |
10.99.1.16 |
| Containerbot | ghcr.io/abelperezr/containerbot:0.0.1 |
10.99.1.200 |
- SRRP failover with role transition and BGP policy changes
- IPoE/PPPoE subscriber suspension and reactivation through Containerbot
- AAA fallback to LUDB
- NAT64 validation from an IPv6-only ONT
- CGNAT and VIP validation
- subscriber throughput observability in Grafana and Prometheus
- lawful interception visibility through the LEA API and dashboard
- ATP 14 - Final Boss
- ATP 6 - SRRP and BGP
- ATP 7 - ESM / Subscribers
- ATP 9 - NAT64
- ATP 10 - ONT Tests
- ATP 11 - LEA / Lawful Interception
- ATP 12 - Observability
- Daily Operations Runbook
git clone https://github.com/abelperezr/small-isp-lab.git
cd small-isp-labBefore deploying, place a valid Nokia SRSIM license in the configs tree. The default SRSIM image expected by lab.yml is localhost/nokia/srsim:25.10.R2.
mkdir -p configs/license
cp /path/to/SR_SIM_license.txt configs/license/SR_SIM_license.txtThen deploy the lab:
sudo containerlab deploy -t lab.yml
sudo containerlab inspect -t lab.yml- Docker
24+ - Containerlab
0.50+ - Node.js
20+for local documentation - jq and curl for API queries and JSON parsing
- at least
24 GBof RAM - recommended:
32 GBfor a more comfortable workflow - a valid Nokia SRSIM license
The license must be placed locally at:
configs/license/SR_SIM_license.txt
That file is not distributed in the repository.
| Service | URL / Port | Credentials |
|---|---|---|
| Grafana | http://localhost:3030 |
admin/admin |
| Prometheus | http://localhost:9090 |
N/A |
| Loki API | http://localhost:3101 |
N/A |
| Alloy UI | http://localhost:12345 |
N/A |
| LEA / LIG | http://localhost:8092 |
admin/multit00l |
| ONT1 Web GUI | http://localhost:8090 |
N/A |
| ONT2 Web GUI | http://localhost:8091 |
N/A |
| ONT1 | docker exec -it ont1 bash |
user/test |
| ONT2 | docker exec -it ont2 bash |
user/test |
| BNG MASTER SSH | ssh -p 56612 admin@localhost |
admin/lab123 |
| BNG SLAVE SSH | ssh -p 56613 admin@localhost |
admin/lab123 |
| OLT SSH | ssh -p 56614 admin@localhost |
admin/lab123 |
| Carrier 1 SSH | ssh -p 56610 admin@localhost |
admin/lab123 |
| Carrier 2 SSH | ssh -p 56611 admin@localhost |
admin/lab123 |
| Radius | ssh -p 56617 admin@localhost |
admin/admin |
| PC1 | docker exec -it pc1 bash |
admin/multit00l |
| Internet | ssh -p 56620 admin@localhost |
admin/multit00l |
| DNS | ssh -p 56621 admin@localhost |
admin/multit00l |
| GNMIC | docker exec -it gnmic /bin/sh |
N/A |
| RADIUS | ssh -p 56617 admin@localhost |
admin/admin |
The website/ documentation covers:
- deployment and installation
- topology and authentication flow
- per-device MOPTs
- day-to-day operations
- Containerbot
- RADIUS / AAA
- LEA Console
- the full ATP suite
To view it locally:
cd website
npm install
npm run startURL:
http://localhost:3000/small-isp-lab/docs/
lab.yml: main Containerlab topologyconfigs/: configurations, dashboards, scripts, and auxiliary servicescontainerbot/: bot image source and runtime assetsradius-custom/: Dockerfile for the custom FreeRADIUS imagewebsite/: Docusaurus documentation in Spanish and English
configs/cbot/secrets.envfor Telegram integration; useconfigs/cbot/secrets.env.exampleas the templatelab.yml.annotations.jsonfor Containerlab VS code extension- Enjoy!
This project is distributed under a BSD 3-Clause style license. See LICENSE.