WireGuard-Lab: einen VPN-Tunnel zwischen zwei Standorten im Browser aufbauen
Dieses Lab gibt jeder lernenden Person zwei kleine Standorte, die sie verbinden soll. In der einen Ubuntu-VM der lernenden Person werden vier Maschinen aufgebaut: an jedem Standort ein Host und ein Gateway, wobei die beiden Gateways über eine Verbindung verbunden sind, die das Internet darstellt und keines der beiden privaten Netze kennt. Die lernende Person baut zwischen den Gateways einen WireGuard-Tunnel auf, bis ein Host an einem Standort einen Host am anderen anpingen kann.
Auf dem Computer der lernenden Person wird nichts installiert, und es ist keine VPN-Appliance nötig: Jeder Host und jedes Gateway ist ein Netzwerk-Namespace, und der Tunnel ist das echte WireGuard aus dem Ubuntu-Kernel, mit den echten Befehlen wg und wg-quick.
Was Lernende hier lernen
Wie ein VPN-Tunnel zwei private Netze verbindet: auf jedem Gateway mit wg genkey und wg pubkey ein Schlüsselpaar erzeugen und verstehen, warum ein privater Schlüssel für niemand sonst lesbar sein darf; wg0.conf mit einer Adresse für den Tunnel, dem Peer des jeweiligen Gateways und den Netzen schreiben, die dorthin gehen dürfen; den Tunnel hochfahren und mit wg show den Handshake ablesen; und die beiden Netze durch ihn routen. Sie beobachten die Internetverbindung mit tcpdump und sehen, dass dort verschlüsseltes UDP übertragen wird, und sie sorgen dafür, dass der Tunnel nach einem Neustart aus seinen gespeicherten Dateien wieder aufgebaut wird.
Die Topologie
Standort A ist der Host a1 in 10.1.0.0/24 hinter dem Gateway gwA, und Standort B ist der Host b1 in 10.2.0.0/24 hinter dem Gateway gwB. Die Gateways sind über 203.0.113.0/24 verbunden, das Internet, das keine Route in eines der beiden privaten Netze hat und nie eine bekommen darf. Ein Ping von a1 nach b1 schlägt fehl, bis der Tunnel aufgebaut ist. Die WireGuard-Dateien jedes Gateways liegen in dessen eigenem /etc/wireguard, auf der VM also in /etc/netns/gwA/wireguard und /etc/netns/gwB/wireguard. Die Adressen stehen in der README, die das Lab im Home-Verzeichnis ablegt; sie nennt die Aufgabe und enthält keine Lösungen.
Im Browser ausführen
VM-Labs werden in einem Modul als Lab-Aufgabe gestellt, und das Beispiel finden Sie auf der Seite des Labs. Die Maschine ist klein: eine CPU, 1 GB Arbeitsspeicher und 10 GB Speicherplatz.
- Lab hinzufügen. Fügen Sie in einem Modul, das Sie unterrichten, eine Aufgabe hinzu und wählen Sie die Karte „Ubuntu-VM-Lab“. Die Seite zeigt statt einer Compose-Datei eine kurze Beschreibung der Maschine.
- Mit dem Beispiel beginnen. Die Seite bietet fertige Labs als Ausgangspunkt an. Wählen Sie „WireGuard-Tunnel“. Ein Beispiel ersetzt den Text, und „Rückgängig“ bringt Ihren eigenen zurück.
- Veröffentlichen und eigene Kopie starten. Veröffentlichen Sie das Lab und wählen Sie dann „Starten“. Das Einrichtungsskript des Labs installiert wireguard-tools und tcpdump aus dem Ubuntu-Archiv und schreibt beim ersten Start der VM, nach wenigen Sekunden, den Befehl wglab und die README.
- Terminal öffnen. Öffnen Sie das Terminal der VM und lesen Sie README.md im Home-Verzeichnis: Sie nennt, was aufzubauen ist, und enthält keine Lösungen.
Eine Grundlagenlektion zu diesem Lab
WireGuard Basics ist eine kleine Lektion, die in diesem Lab, einer Ubuntu-VM, durchgearbeitet wird: Jeder Schritt wird erklärt und hat eine Schaltfläche „Ausführen“, die seinen Befehl im Terminal der Maschine eintippt und zeigt, was ausgegeben wurde. Die lernende Person lernt die Maschinen kennen, pingt den entfernten Host an und bekommt Destination Net Unreachable gemeldet, liest die beiden Routen des Gateways, um den Grund zu sehen, und stellt fest, dass wg show nichts ausgibt, weil es noch keinen Tunnel gibt.
Die Lektion schaut sich nur um und überlässt die eigentliche Aufgabe des Labs, den Aufbau des Tunnels, der lernenden Person; sie gibt also keine Lösungen preis. Sie ist bewusst klein: Sie zeigt einer Lehrkraft, was eine in einem Lab durchgearbeitete Lektion ist, und das Lab erledigt den Rest. Kopieren Sie sie in ein eigenes Modul, um sie zu ändern.
So wird bewertet
Das Lab hat eine Prüfung. Sie läuft nach einem frischen Start auf einer Kopie der gespeicherten Maschine und sieht daher nur, was die lernende Person in der wg0.conf jedes Gateways gespeichert hat. Sie ist nur bestanden, wenn der tatsächliche Zustand stimmt: Die Konfigurationen sind nur für ihren Eigentümer lesbar, jede nennt den öffentlichen Schlüssel des anderen Gateways, beide Gateways haben einen aktuellen Handshake, ein Ping zwischen den Hosts bewegt Bytes durch den Tunnel, und ein Mitschnitt auf der Internetverbindung zeigt nur UDP und keine private Adresse. Eine einfache statische Route zwischen den beiden Netzen besteht nicht, ebenso wenig ein von Hand hochgefahrener, aber nie gespeicherter Tunnel; die erste Zeile der Ausgabe der Prüfung nennt den Grund.
- Zuweisen. Weisen Sie das Lab wie jede Aufgabe zu, auf Wunsch mit einem Fälligkeitsdatum. Jede lernende Person erhält eine eigene VM, die zwischen den Sitzungen erhalten bleibt.
- Prüfung ausführen. Wählen Sie in der Zeile einer lernenden Person in der Klassenliste „Prüfung ausführen“. Dabei startet eine Kopie ihrer gespeicherten Maschine, die nicht zurückgespeichert wird; das Prüfskript des Labs läuft als root, und die Seite zeigt, ob die Prüfung bestanden wurde, was sie ausgegeben hat und wann. Die lernende Person erfährt das Ergebnis nicht.
- Bewerten. Lesen Sie die erste Zeile der Ausgabe der Prüfung: Sie nennt, was nicht stimmt, etwa einen Schlüssel, den jeder lesen kann, oder einen Ping, der nicht durch den Tunnel ging. Geben Sie die Arbeit mit einer Begründung zur Überarbeitung zurück, wenn mehr nötig ist.
Die Definition auf GitHub
Die Datei ist die vollständige Lab-Definition, derselbe Text, den die Plattform ausführt: Größe, Einrichtungsskript, Topologie-Werkzeug, README und Prüfung. Kopieren Sie sie und ändern Sie die Adressen oder fügen Sie einen dritten Standort hinzu, um ein umfangreicheres Lab zu erstellen.
Häufige Fragen
- Braucht das Lab eine VPN-Appliance oder eine Lizenz?
- Nein. WireGuard ist freie Software, und der Tunnel wird vom Modul im Ubuntu-Kernel selbst mit dem Paket wireguard-tools aufgebaut, das beim Start der VM der lernenden Person aus dem Ubuntu-Archiv installiert wird. Wir verteilen nichts davon.
- Können Lernende aus dem Lab das echte Internet erreichen?
- Nein. Die VM erreicht das Ubuntu-Archiv, PyPI, npm und GitHub und sonst nichts, und das „Internet“ zwischen den beiden Standorten ist eine virtuelle Verbindung in der VM. Der Tunnel verbindet also zwei Standorte, die sich in derselben Maschine befinden.
- Wie wird das WireGuard-Lab bewertet?
- Die Prüfung läuft nach einem frischen Start auf einer Kopie der gespeicherten Maschine. Jede wg0.conf darf nur für ihren Eigentümer lesbar sein und muss den öffentlichen Schlüssel des anderen Gateways nennen, beide Gateways müssen einen aktuellen Handshake haben, und ein Ping zwischen den Hosts muss Bytes durch den Tunnel bewegen. Eine einfache statische Route besteht nicht.