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.
- Erzeugen Sie ein passendes Interface (z.B. wg0):
ip l add wg0 type wireguard
- 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
und10.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