Alle Projekte
Deep Dive · ContainerLab

Ein ganzes Netzwerk aus einer Textdatei.

Erste SchritteDigitaler ZwillingErst testen, dann ausrollen

Der sicherste Ort, um eine Netzwerkänderung auszuprobieren, ist nicht das Produktionsnetzwerk. Mit ContainerLab beschreiben Sie eine Topologie in einer kurzen Textdatei, fahren ein ganzes Netzwerk in Sekunden auf einem Laptop hoch, machen es kaputt, reparieren es und werfen es wieder weg. Es ist das Werkzeug, zu dem wir greifen, wann immer eine Änderung zu riskant ist, um sie in der Produktion zu testen, was in kritischen Netzwerken auf die meisten zutrifft.

Das ist eine Einführung. Am Ende wissen Sie, was ContainerLab ist, wie eine Lab-Datei aussieht, welche vier Befehle den ganzen Lebenszyklus steuern und wie wir damit einen digitalen Zwilling eines echten Netzwerks mit MikroTik- und OT-Geräten bauen. Wenn Sie lieber klicken als lesen: Unser OT-Security-Lab läuft im Browser, und Sie können mitmachen.

Was ContainerLab ist

ContainerLab ist ein Open-Source-Werkzeug, das Netzwerk-Labs auf Basis von Containern betreibt. Sie schreiben eine Topologie-Datei, es startet die Nodes, verbindet sie mit virtuellen Links und verwaltet ihren Lebenszyklus. Da die Nodes einfach Container sind, startet ein Lab in Sekunden und kostet nichts, wenn es nicht läuft.

Es unterscheidet drei Arten von Nodes. Containerisierte Netzwerk-Betriebssysteme laufen nativ. Klassische VM-basierte Systeme lassen sich über die vrnetlab-Integration containerisieren. Und jeder Linux-Container kann mitspielen, so fügen Sie Hosts, Server, Angreifer oder, in unserem Fall, simulierte PLCs hinzu.

Textbasiert

Die ganze Topologie ist eine YAML-Datei, die Sie lesen, diffen und in Git einchecken können. Das Lab ist die Datei.

Reproduzierbar

Wer das Repo klont, bekommt exakt dasselbe Netzwerk. Keine Snowflake-VMs, kein «läuft bei mir».

Wegwerfbar

Ein Befehl hoch, ein Befehl runter. Machen Sie Dinge mit Absicht kaputt und starten Sie in Sekunden sauber neu.

Wie ein Lab aussieht

Ein Lab ist eine .clab.yml-Datei. Sie hat einen Namen, eine Menge von nodes und die links zwischen ihnen. Jeder Node hat einen Typ (das Feld kind), der ContainerLab sagt, wie er auszuführen ist. Hier eine gekürzte Version eines unserer eigenen Labs: eine MikroTik-Firewall und ein Switch, dazu ein simulierter PLC als Linux-Container.

ot-sec-segmented.clab.yml
# ein Netzwerk, einmal beschrieben
name: ot-sec-segmented

mgmt:
  network: ot-sec-segmented
  ipv4-subnet: 192.168.100.0/24

topology:
  defaults:
    kind: mikrotik_ros            # MikroTik RouterOS, über vrnetlab
    image: vrnetlab/mikrotik_routeros:7.20

  nodes:
    gw-firewall:                   # das Segmentierungs-Gateway
      mgmt-ipv4: 192.168.100.11
      startup-config: configs/gw-firewall.rsc
    sw-dist:
      mgmt-ipv4: 192.168.100.12
    wago-plc2a:                    # ein PLC, als Linux-Container
      kind: linux
      image: ghcr.io/narrowin/ot-sec-lab-plc:latest

  links:
    # virtuelle Links zwischen Node-Interfaces
    - endpoints: ["gw-firewall:eth1", "sw-dist:eth1"]
    - endpoints: ["sw-dist:eth2", "wago-plc2a:eth1"]

Das ist die ganze Idee. Die nodes sind Ihre Geräte, die links sind die Kabel, und kind ist der einzige Kniff: Damit sitzen eine Nokia, eine Arista, eine Cisco, eine MikroTik und eine einfache Linux-Box in derselben Datei und verhalten sich wie das echte Gerät. Das Beispiel hier nutzt MikroTik, weil viel von unserer Arbeit darauf läuft, aber ContainerLab unterstützt einen langen Katalog von kinds, von Nokia, Arista, Cisco und Juniper bis zu Firewalls wie Fortinet und Palo Alto.

Vier Befehle, der ganze Lebenszyklus

Sobald die Datei existiert, müssen Sie sich kaum etwas merken. Einmal installieren, dann deployen, schauen, verbinden und zerstören.

der ganze Ablauf
# ContainerLab installieren (eine Zeile, RHEL- oder Debian-basiert)
curl -sL https://containerlab.dev/setup | sudo -E bash -s "all"

# das Lab hochfahren
clab deploy -t ot-sec-segmented.clab.yml

# sehen, was läuft: Namen, Kinds, Management-IPs
clab inspect -t ot-sec-segmented.clab.yml

# auf einen Node springen, es ist einfach SSH
ssh admin@192.168.100.11

# alles abreissen, nichts zurücklassen
clab destroy -t ot-sec-segmented.clab.yml

ContainerLab trägt die Nodes in Ihre /etc/hosts ein, sodass Sie sie auch über den Namen erreichen, etwa ssh admin@clab-ot-sec-segmented-gw-firewall.

Gut zu wissen

Ein paar Dinge, die ContainerLab zum Lernen angenehm machen, jenseits der vier Befehle.

VS-Code-Extension

Ein Live-Topologie-Viewer, ein visueller Editor und Konsolenzugriff per Klick, wenn Sie nicht im Terminal leben möchten.

Wireshark auf jedem Link

Erfassen Sie den Datenverkehr auf einer einzelnen virtuellen Leitung und öffnen Sie ihn direkt in Wireshark. Die Frames zu sehen ist die halbe Miete beim Lernen eines Protokolls.

Link-Impairment

Fügen Sie einem Link mit netem Latenz, Jitter oder Paketverlust hinzu, um zu sehen, wie sich ein Design an einem schlechten Tag verhält, nicht nur an einem perfekten.

Warum wir darauf aufbauen: der digitale Zwilling

In einem kritischen Netzwerk können Sie eine Firewall-Änderung, ein Segmentierungs-Redesign oder einen Firmware-Rollout nicht testen, indem Sie es an der laufenden Anlage versuchen. Also bauen wir einen digitalen Zwilling: eine getreue Kopie des echten Netzwerks, die in ContainerLab läuft und gegen die wir planen, testen und validieren können, bevor eine einzige Änderung die Produktion berührt.

01

Plan

Modellieren Sie das Zielnetzwerk als Topologie-Datei. Das Design ist jetzt etwas, das Sie ausführen können, nicht nur ein Diagramm.

02

Test

Deployen Sie den Zwilling, wenden Sie die Änderung an, brechen Sie sie mit Absicht. Fehler passieren hier, wo sie nichts kosten.

03

Deploy

Rollen Sie die erprobte Konfiguration auf die echten Geräte aus, mit derselben Automatisierung, die Sie im Lab getestet haben.

04

Validate

Vergleichen Sie das echte Netzwerk mit dem Zwilling und halten Sie beide als Source of Truth synchron.

«In einem kritischen Netzwerk experimentiert man nicht an der laufenden Anlage. Also bauen wir einen digitalen Zwilling, machen unsere Fehler dort und rollen nur aus, was wir bereits erprobt haben.»
Tomáš Horyl, Senior Network & Security Engineer, narrowin
Tomáš Horyl · Building digital twins with MikroTik CHR, ContainerLab and Ansible

VM-basierte Geräte einbinden

Viele Netzwerk-Betriebssysteme, darunter Cisco, Juniper, Palo Alto und andere, werden als virtuelle Maschinen bereitgestellt. ContainerLab löst das über vrnetlab, das eine VM als Container verpackt, sodass sie sich wie jeder andere Node in der Topologie verhält. MikroTik ist hier unser konkretes Beispiel, weil viel von unserer Arbeit darauf läuft, und der Typ mikrotik_ros in der Datei oben ist genau das in Aktion.

Eines sollten Sie wissen: ContainerLab verwendet seinen eigenen erweiterten Fork des ursprünglichen vrnetlab (srl-labs/vrnetlab). Images, die mit dem Upstream-Projekt gebaut wurden, funktionieren nicht, bauen Sie also aus dem Fork.

Sobald die MikroTik-Nodes laufen, steuern wir ihre Konfiguration genauso wie die echten Boxen: mit Ansible. RouterOS hat keinen Python-Interpreter, also nutzen wir die community.routeros-Module über die API für strukturierte, idempotente Änderungen. Das ist die Brücke zwischen Zwilling und Produktion, und sie ist offen: Unsere ansible-mikrotik-Collection ist dieselbe, die wir auf Kundennetzwerken einsetzen.

Ein echtes Beispiel: das OT-Security-Lab

Um das konkret zu machen: Wir pflegen ein vollständiges OT-Netzwerk-Security-Lab in ContainerLab, gemeinsam mit SWITCH aufgebaut. Es ist ein realistisches Industrienetzwerk: MikroTik-Firewall und -Switches sowie simulierte PLCs von WAGO, Bosch Rexroth, Schneider und ABB mit einer Codesys-Runtime, verteilt über VLAN-Zonen für Hygiene, Prozess, Entsorgung und einen Leitstand.

Es kommt in zwei Ausprägungen aus demselben Repo. Eine flache Topologie, die unsichere Ausgangslage, in der alles mit allem reden kann, und eine segmentierte Topologie mit echten Zonen und einer Firewall dazwischen. Die eine gegen die andere zu tauschen ist eine Änderung von einem Wort auf der Kommandozeile, womit sich der Wert von Segmentierung zeigen statt beschreiben lässt.

flach vs. segmentiert, dasselbe Lab
clab deploy -t ot-sec-flat.clab.yml         # alles erreicht alles
clab deploy -t ot-sec-segmented.clab.yml    # Zonen, VLANs und eine Firewall

Auf dem Lab sitzt eine Reihe praktischer Übungen: VLAN-Discovery und Traffic-Analyse, ein ARP-Spoofing-Angriff, Spanning-Tree-Verhalten und mehr. Da das Ganze in GitHub Codespaces läuft, brauchen Teilnehmende nichts ausser einem Browser, um ein echtes Netzwerk vor sich zu haben, an dem sie wirklich experimentieren können. Dieses Lab ist das Rückgrat unserer OT-Security-Kurse.

Wie Sie heute starten

Zwei Wege, je nachdem, ob Sie etwas installieren möchten.

A

Der Weg ohne Installation

Öffnen Sie unser Mikrotik-ansible-Lab in GitHub Codespaces und warten Sie ein paar Minuten, bis es gebaut ist. Sie bekommen ein vollständiges Netzwerk im Browser, ohne Docker/Podman auf Ihrem Rechner. Dann führen Sie clab deploy -t mikrotik.clab.yml aus, und Sie sind drin.

B

Der lokale Weg

Auf jedem Rechner mit Docker/Podman (Windows WSL, macOS, Linux) installieren Sie mit dem Einzeiler oben, holen sich eine Topologie aus den Beispielen oder schreiben Ihre eigene und clab deploy. Starten Sie mit zwei Nodes und einem Link, dann lassen Sie es wachsen.

C

Einfach ausprobieren

Deployen, sich auf einen Node verbinden, etwas ändern und clab destroy. Wenn Sie zum ersten Mal ein «kaputtes» Lab in zehn Sekunden neu aufbauen, bleibt die Gewohnheit «erst testen, dann ausrollen» meist hängen.

Über die Einführung hinaus

Ein digitaler Zwilling Ihres Netzwerks

Einen Zwilling eines echten, gewachsenen Netzwerks zu bauen ist aufwendiger als ein Beispiel mit zwei Nodes: die Topologie erfassen, die richtigen Images beschaffen und die Automatisierung anbinden, die Zwilling und Produktion synchron hält. Das ist Arbeit, die wir mit Kunden machen.

Mit einem Engineer sprechen → Oder besuchen Sie den OT-Security-Kurs, der auf diesem Lab aufbaut.

Häufige Fragen

Wie unterscheidet sich ContainerLab von GNS3 oder EVE-NG?
Alle drei bauen virtuelle Netzwerk-Labs, aber ContainerLab ist container-first und datei-getrieben. Das Lab ist eine Textdatei, die Sie in Git einchecken, es startet in Sekunden, weil die meisten Nodes Container statt vollwertiger VMs sind, und es fügt sich sauber in Automatisierungs- und CI-Pipelines ein. VM-basierte Router laufen weiterhin, wenn Sie sie brauchen, über vrnetlab, Sie verlieren also die schweren Geräte nicht. Der Kompromiss: Es ist von Natur aus CLI-getrieben, auch wenn die VS-Code-Extension eine visuelle Ebene hinzufügt.
Brauche ich leistungsstarke Hardware?
Für containerisierte Nodes und Linux-Hosts nein. Ein Laptop betreibt ein ansehnliches Lab bequem. VM-basierte Nodes wie MikroTik CHR kosten je mehr Arbeitsspeicher, ein grosser Zwilling aus VM-Routern braucht also einen echten Server. Eine gute Regel: klein auf Ihrem Rechner prototypen, den vollen Zwilling auf einem Lab-Server betreiben.
Kann ich MikroTik, Cisco oder Nokia im selben Lab betreiben?
Ja. Genau dafür sind die kinds da. Containerisierte Systeme wie Nokia SR Linux laufen nativ, und VM-basierte Systeme wie MikroTik RouterOS, Cisco und Juniper laufen über vrnetlab, alles in einer Topologie-Datei. Sie können Hersteller frei mischen und einfache Linux-Hosts daneben stellen.
Ist ContainerLab Produktions-Werkzeug oder nur zum Lernen?
Beides. Es ist hervorragend zum Lehren, weshalb unsere Kurse darauf laufen, aber dieselbe Reproduzierbarkeit macht es zu einem ernsthaften Pre-Production-Werkzeug: Segmentierungs-Designs validieren, Firmware-Upgrades proben und Automatisierung gegen einen Zwilling testen, bevor irgendetwas davon das Live-Netzwerk erreicht.
← Alle Projekte