Laborzugang mittels Wireguard

Updated on 2024-04-26

Wireguard ist ein VPN für die abgesicherte Verbindung separater Internet-Segmente.

Konfiguration des Clients

Zur Installation folgen Sie bitte der für Sie passenden Anleitung. Eine ebenso verständliche Anleitung für die Konfiguration finden Sie auf der Wireguard-Seite unter Quickstart

Schlüsselerzeugung

Für jeden Endpunkt (einen Rechner) müssen Sie zunächst einen öffentlichen und einen privaten Schlüssel erzeugen und speichern. Auf einem Linux-artigen System können Sie das folgendermaßen tun:

wg genkey > privkey           # privaten Schlüssel erzeugen
chmod go-rwx privkey          # Zugriffsrechte sichern
wg pubkey < privkey > pubkey  # öffentlichen Schlüssel erzeugen

Anschließend befindet sich Ihr privater Schlüssel in der Datei “privkey” und Ihr öffentlicher Schlüssel in der Datei “pubkey”. Den privaten Schlüssel dürfen Sie — offensichtlich — niemals mit anderen teilen. Ihren öffentlichen Schlüssel müssen Sie dem Wireguard-Dienst auf der anderen Seite mitteilen.

Nutzt du Wireguard mit dem GUI-Interface, dann werden diese Schritte beim erzeugen eines neuen “Tunnels” für dich ausgeführt.

Konfiguration mit wg-quick

Zuerst musst du eine Konfiguration anlegen. Die aktuellen Daten der Laborseite erfährst du im Kurs, ebenso wie deine interne VPN-IP, die dir vom Labor zugewiesen wird. Die Struktur der Konfigurationsdatei ist wie folgt angezeigt. Diese speicherts du in /etc/wireguard (auf einem Linux-System). In der Wireguard GUI (Windows/Mac) kannst du die Konfiguration in einer Bearbeitungsschnittstelle bearbeiten.

[Interface]
ListenPort = 
PrivateKey = 
Address = 

[Peer]
PublicKey = 
AllowedIPs = 
Endpoint = : # of the lab-endpoint

Die Konfiguration speicherst du in einer Datei <name>.conf. Dabei beschreibt der Name den Bezeichner des Interfaces welches für diese Wireguard-Verbindung gestartet wird. Starten kannst du das VPN jetzt mit

wg-quick up <name>

(Im GUI-Interface klickst du auf “Aktivieren” oder etwas ähnliches.)

Wenn alles richtig konfiguriert ist, dann kannst du jetzt die andere Seite erreichen. Testen kannst du dies indem du die erste IP-Adresse aus der Liste der AllowedIPs anpingst:

ping <ip>

Du kannst dein Wireguard auch von systemd starten lassen. Die Konfiguration bleibt dafür gleich. Eine Anleitung dazu wird hier vielleicht später ergänzt.

Manuelle Konfiguration

Wireguard können Sie sehr einfach über die Kommandozeilenschnittstelle konfigurieren.

  1. Erzeugen Sie ein passendes Interface (z.B. wg0): ip l add wg0 type wireguard
  2. Tragen Sie die Verbindung bei Wireguard ein: wg set wg0 <private-key> <peer-pk> endpoint:<ip>:<port>. IP und Port bezeichnen die Adresse der anderen Seite.

Die vollständige Beschreibung liefert Ihnen der Aufruf des Kommandos wg set. Mit wg help finden Sie eine vollständigere Liste möglicher Kommandos.

Alternativ können Sie die WG-Verbindung auch dauerhaft machen, indem Sie eine Konfigurationsdatei anlegen. Der Standard-Ort ist /etc/wireguard/wg0.conf. Für eine minimale Konfigurationsdatei schauen Sie bitte den nächsten Abschnitt an.

Alternativ gibt es auch noch den populären Weg über wg-quick.

Installationsziel

Am Ende müssen lokal die folgenden Dinge erstellt sein:

  • Ein Interface vom Typ wireguard,
  • mit Adresse (10.47.11.x), wobei x der Adressteil ist der von uns vergeben wird.
  • Routen zu den Subnetzen 10.47.11.0/24 und 10.13.37.0/24 über dieses Interface.- Aktiver Wireguard-Peer
  • Laborrouter ist unter 10.47.11.1 erreichbar (reagiert auf ICMP Echo Requests)

Konfiguration mit Konfigurationsdatei (ohne wg-quick)

Für den Zugang zum “Sicherheits-Realitäts-Abstands-Labor”, dem Lern- und Lehrlabor IT-Sicherheit, können Sie die folgende Konfiguration nutzen. Der Abschnitt [Peer] kann direkt kopiert werden.

Interface

Zunächst muss ein Wireguard-Interface erzeugt werden. Dem Interface wird dann eine Adresse zugewiesen, die dir von uns zugeteilt worden ist. (Im folgenden Skript muss nur das x ersetzt werden.

Anschließend muss das Interface noch aktiviert werden.

ip link add wg0 type wireguard
ip addr add 10.47.11.x/24 dev wg0
ip link set wg0 up

Anschließend sollte dir das Interface mit ip addr ähnlich angezeigt werden, wie:

5: wg0: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1420 qdisc noqueue state UNKNOWN group default qlen 1000
    link/none
    inet 10.47.11.2/24 scope global wg0
       valid_lft forever preferred_lft forever

Wireguard Konfiguration

Erstelle die folgende Konfigurationsdatei. Der übliche Pfad ist /etc/wireguard/wg0.conf, die Datei lässt sich aber ebenso gut im eigenen Nutzerverzeichnis ablegen, z.B. im Verzeichnis in dem Sie andere Moduldokumente lagern.

[Interface]
ListenPort = 
PrivateKey = 

[Peer]
PublicKey = TW1FikacBqNwjthGtixey/uwaS/P8ngvP6zlSCdFZAw=
AllowedIPs = 10.47.11.1/32,10.13.37.0/24
Endpoint = 194.94.217.114:1194

Der Abschnitt Interface repräsentiert dabei dein Ende der Verbindung und der Abschnitt Peer enthält die Informationen zum VPN-Server im Labor. Die Auslassungen zum Port und dem privaten Schlüssel müssen passend ergänzt werden.

Die Konfiguration lässt sich mit dem Kommando wg setconf wg0 <Pfad> aktivieren. Informationen über den Zustand des wireguard-VPN liefert wg show. Aktivitäten werden aber erst dann angezeigt, wenn erstmals Daten über das VPN gesendet wurden. Eine aktiv genutzte Verbindung wird so angezeigt:

peer: TW1FikacBqNwjthGtixey/uwaS/P8ngvP6zlSCdFZAw=
  endpoint: 194.94.217.114:1194
  allowed ips: 10.47.11.1/32, 10.13.37.0/24
  latest handshake: 9 seconds ago
  transfer: 40.67 KiB received, 47.10 KiB sent

Routing

Zuletzt müssen Sie, vermutlich, noch eine Route für das Subnetz 10.13.37.0/24 einrichten:

ip r add 10.13.37.0/24 via 10.47.11.1 dev wg0*

Es sollten sich jetzt mindestens Routen zum Subnetz 10.13.37.0/24 und zum Router 10.47.11.1 (oder einem Subnetz 10.47.11.0/24) in der lokalen Routingtabelle finden. Die Routingtabelle könnt ihr euch mittels ip route anzeigen lassen. Ein funktionierendes, minimales Ergebnis ist:

10.13.37.0/24 via 10.47.11.1 dev wg0 scope link
10.47.11.1 dev wg0 scope link

Verbindungstest

Wireguard verfügt über keinen Mechanismus welcher die Verbindung prüft oder aufrecht erhält. Kommunikation zwischen den Endpunkten entsteht nur, wenn tatsächlich über das VPN Daten gesendet werden. Ob die Verbindung zum Labor funktioniert, lässt sich durch ICMP Requests testen.

ping 10.47.11.1
ping 10.13.37.1

Wenn der erste Aufruf fehlschlägt, dann funktioniert der VPN-Tunnel grundsätzlich nicht. Ursachen dafür kann sein, dass die Wireguard Konfiguration die falschen Schlüssel enthält (z.B. privat und öffentlich verwechselt), die Adresse des Labors im Abschnitt Peer falsch ist, oder die AllowedIPs die Adresse 10.47.11.1 nicht umfassen.

As kann auch sein, dass auf dem Weg vom eurer Internetanbindung zum Server einer der Ports blockiert wird, das UDP-Protokoll grundsätzlich blockiert wird oder ihr allgemein keine Verbindung zum Internet habt. Ob eine Blockade vorliegt könnt ihr mit Werkzeugen wie nmap oder traceroute testen.

Der Test mit nmap ist etwas einfacher. Ihr müsst diesen, je nach lokalen Rechten, ggF. mit einem privilegierten Account aufrufen. Wenn der Wireguard-Server im Labor erreichbar ist, dann sieht das ähnlich aus wie

$ nmap -sU -p 1194 194.94.217.114
PORT     STATE         SERVICE
1194/udp open|filtered openvpn

Ein nicht erreichbarer Port erzeugt die Ausgabe:

$ nmap -sU -p 8382 194.94.217.114
PORT     STATE  SERVICE
1195/udp closed rsf-1

Ist der Server nicht erreichbar (oder die IP-Adresse falsch oder “ping” geblockt):

$ nmap -sU -p 1194 194.94.217.116
Note: Host seems down. If it is really up, but blocking our ping probes, try -Pn
Nmap done: 1 IP address (0 hosts up) scanned in 3.10 seconds

Wenn die Adresse 10.13.37.1 nicht erreichbar ist, dann fehlt entweder die lokale Route, oder der Server im Labor ist nicht korrekt konfiguriert. Oder aber das Subnetz 10.13.37.0/24 ist grundsätzlich nicht teil deines aktuellen Kurses und du hast keine Zugriffsberechtigung. Prüfe also noch einmal die Aufgabenstellung und die Unterlagen zur Einführung in das Labor.

Konfiguration wg-quick

Der Unterschied zur Installation mit wg-quick ist, dass die Konfigurationsdatei im Verzeichnis /etc/wireguard liegen muss und wg0.conf benannt sein muss. (Oder entsprechend anders, wenn das Interface nicht wg0 heißen soll.)

Zusätzlich muss die Adresse des Interfaces, z.B. 10.47.11.x als

Address = 10.47.11.x

im Konfigurationsabschnitt Interface konfiguriert sein.

Dann lässt sich das VPN sehr leicht mit dem Kommando

wg-quick up wg0 

starten.

Mit wg-quick down wg0 wird das Interface wieder geschlossen. Die manuelle Einrichtung des Interfaces, das Einrichten der Adressen und Routen entfällt.

Einrichtung Windows

Die Einrichtung von Wireguard unter Windows ist möglich. Die Konfiguration ist wie bei der Nutzung mit wg-quick. To be done