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 beschriebenname: ot-sec-segmented
mgmt:network: ot-sec-segmented
ipv4-subnet:192.168.100.0/24topology:defaults:kind: mikrotik_ros # MikroTik RouterOS, über vrnetlabimage:vrnetlab/mikrotik_routeros:7.20nodes:gw-firewall:# das Segmentierungs-Gatewaymgmt-ipv4:192.168.100.11startup-config:configs/gw-firewall.rscsw-dist:mgmt-ipv4:192.168.100.12wago-plc2a:# ein PLC, als Linux-Containerkind: linux
image:ghcr.io/narrowin/ot-sec-lab-plc:latestlinks:# 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.
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.
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.
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.