Was ist WireGuard?

WireGuard ist eine Applikation, die ein VPN zwischen Geräten wie Clients oder Firewalls aufbaut. Im Gegensatz zu anderen Protokollen wir IPSec verwendet WireGuard aktuellere kryptografische Verfahren und beschleunigt den Auf- und Abbau einer Verbindung sowie den Netzwerkverkehr zwischen den beiden Peers. Zusätzlich ist das Protokoll nicht proprietär und bereits in vielen Linux-Distributionen integriert.

Seit der Version 7.39 von FritzOS unterstützen gängige FRITZ!Boxen nun auch WireGuard, welches als Alternative zu dem bisherigen IPSec-Tunnel verwendet werden kann.

Somit kann nun eine Verbindung zwischen dem zu sichernden System und der FRITZ!Box mittels WireGuard eingerichtet werden.

Installation und Konfiguration von WireGuard

Um eine Verbindung von dem zu sichernden System zur FRITZ!Box aufzubauen, ist unter Ubuntu lediglich ein Paket notwendig:

sudo apt install -y wireguard-tools

Mit diesem Paket werden der Client wg und weitere Hilfsskripte wie wg-quick installiert, die später zum Einrichten der Verbindung verwendet werden.

Die VPN-Verbindung kann auch direkt über das Tool wg angelegt werden. Welche Schritte hierfür nötig sind, beschreibt das Projekt in einer Schnellstartanleitung.

Erstellen der WireGuard-Konfiguration auf der FRITZ!Box

Die Konfiguration auf der FRITZ!Box beschränkt sich auf das Erstellen einer Konfiguration bestehend aus Schlüsselpaaren und einer Konfigurationsdatei. Diese kann im Bereich Internet -> Freigaben -> VPN (WireGuard) erstellt werden.

Erstellen einer Verbindung

Über den Button Verbindung hinzufügen kann der Dialog zur Einrichtung gestartet werden. Für unseren Anwendungsfall verwenden wir die Option Einzelgerät verbinden, da wir lediglich das zu sichernde System mit dem Heimnetzwerk verbinden wollen. Nach der Eingabe eines Verbindungsnamens kann die Konfigurationsdatei einmalig heruntergeladen werden.

Jede Konfiguration enthält die für die Verschlüsselung notwendigen Schlüssel und die Netzwerkkonfiguration.

Beispiel:

[Interface]
PrivateKey = xxxx
Address = 192.168.178.100/24
DNS = 192.168.178.1
DNS = fritz.box

[Peer]
PublicKey = xxxx
PresharedKey = xxxx
AllowedIPs = 192.168.178.0/24,0.0.0.0/0
Endpoint = <Öffentlicher Hostname der FRITZ!Box>
PersistentKeepalive = 25

Die Konfigurationsdatei kann anschließend auf den Server in den Ordner /etc/wireguard kopiert werden. Sofern die Erstellung der Datei nicht im Root-Kontext erfolgt ist, sollte die Datei dem Root-User zugewiesen werden

sudo chown root:root /etc/wireguard/wg_config.conf

Da wir lediglich den Netzwerkverkehr in unser Heimnetzwwerk über den VPN-Tunnel routen möchten, muss die Konfigurationdatei noch angepasst werden. Hierzu sollte in der Zeile AllowedIPs das Subnetz 0.0.0.0/0 entfernt werden, da sonst der gesamte Netzwerkverkehr über die FRITZ!Box geroutet wird.

Vorher:

[Peer]
...
AllowedIPs = 192.168.178.0/24,0.0.0.0/0
...

Nachher:

[Peer]
...
AllowedIPs = 192.168.178.0/24
...

Aufbau der Verbindung

Nun kann die Verbindung testweise mithilfe des Skripts wg-quick aufgebaut werden:

wg-quick up wg_config

Anschließend kann der Status mit dem WireGuard-Client wg abgerufen werden:

wg

interface: wg_config
  public key: xxxx
  private key: (hidden)
  listening port: 55678

peer: xxxx
  preshared key: (hidden)
  endpoint: <Öffentliche Adresse der FRITZ!Box>
  allowed ips: 192.168.178.0/24
  latest handshake: 1 second ago
  transfer: 252 B received, 308 B sent
  persistent keepalive: every 25 seconds

Sollte es beim Aufbau der Verbindung zur Fehlermeldung

/usr/bin/wg-quick: line 31: resolvconf: command not found

kommen, muss ein symbolischer Link zur resolveconf-Implementierung von SystemD erstellt werden.

sudo ln -s /usr/bin/resolvectl /usr/local/bin/resolvconf

Spezialfall “IPv6”

WireGuard verwendet beim Verbindungsaufbau das Modul getaddrinfo, um aus dem Hostnamen des Peers eine IP-Adresse aufzulösen. Sollte es wie bei mir zu Problemen bei der Netzwerkerreichbarkeit per IPv6 kommen, kann das Modul über eine Konfigurationsdatei gezwungen werden, priorisiert IPv4-Adressen aufzulösen.

Hierfür muss in der Datei /etc/gai.conf folgende Zeichenkette ergänzt werden:

precedence ::ffff:0:0/96  100

Zu beachten ist, dass diese Einstellung das gesamte System betrifft. Es sollte also vorher geprüft werden, ob es bei Applikationen zu Problemen kommt, die gezwungenermaßen eine IPv6-Adresse verwenden und für den Netzwerkverkehr mit einem Partner erwarten.

Anpassen des Backup-Jobs

Der Backup-Job verwendet zwei Skripte zum Aufbauen und Trennen der VPN-Verbindung. Diese müssen nun aktualisiert werden:

  • start_vpn.sh
#!/bin/bash

wg-quick up wg_config
  • post-job.sh
#!/bin/bash

/root/getVeeamBackupLogs.sh &
wg-quick down wg_config

Nun wird WireGuard verwendet, um ein VPN zwischen dem zu sichernden System und der FRITZ!Box aufzbauen.