Damit ein sicherer Tunnel zwischen deinem Endgerät und dem Server aufgebaut werden kann, benutzt WireGuard asymmetrische Schlüsselpaare, welche aus einem privaten und öffentlichen Schlüssel bestehen. Für VPN-Verbindung benötigen der Peer und der Server jeweils eigene Schlüsselpaare. Für erhöhte Sicherheit lässt sich zusätzlich ein symmetrischer vorausgetauschter Schlüssel (Preshared-Key) hinzufügen.
WireGuard und UFW installieren sowie Schlüsselpaare vorbereiten
Zuerst aktualisierst du Debian und installierst WireGuard auf dem Server:
sudo apt update
sudo apt install wireguard ufw
Die Schlüssel für den Server/Peer erzeugen:
# Privater Schlüssel
wg genkey | sudo tee /etc/wireguard/private.key
# Zugriffsberechtigung für den privaten Schlüssel nur für Root erlauben
chmod go= /etc/wireguard/private.key
# Aus dem privaten Schlüssel wird ein öffentlicher Schlüssel erzeugt
cat /etc/wireguard/private.key | wg pubkey | sudo tee /etc/wireguard/public.key
# Nach Wunsch einen zusätzlichen PSK-Schlüssel erstellen
wg genkey | sudo tee /etc/wireguard/preshared.key
Bewahre die privaten und öffentliche Schlüssel des Server und Peers gut auf, da du sie später brauchst. Den Preshared-Schlüssel kann man nach belieben pro Peer neu erstellen.
Wenn du die Schlüssel nicht in Dateien ausgeben möchtest, reicht auch folgender Befehl für die Schlüsselerzeugung in der aktiven Terminal-Sitzung aus:
# Erste Ausgabe ist der private Schlüssel, zweite ist der öffentliche Schlüssel
wg genkey | tee /dev/tty | wg pubkey
IPv4 Adressbereich wählen
Für dein VPN definierst du einen privaten IPv4-Adressbereich. Üblich sind folgende private IPv4-Adressbereiche:
10.0.0.0 bis 10.255.255.255
172.16.0.0 bis 172.31.255.255
192.168.0.0 bis 192.168.255.255
Wir verwenden folgenden zuweisbaren Adressbereich für Peers 172.16.16.0/24
. Die Adresse 172.16.16.1/24
ist dabei für den Server reserviert.
Konfigurationsdatei erstellen
Mit folgenden Befehl die Datei erstellen:
sudo nano /etc/wireguard/wg0.conf
Füge den folgenden Inhalt ein und ersetze <PLATZHALTER>
mit den entsprechenden Werten.
[Interface]
Address = 172.16.16.1/24
ListenPort = 51820
PrivateKey = <PRIVATER_SCHLÜSSEL_DES_SERVERS>
SaveConfig = false
IP-Forwarding aktivieren
Damit WireGuard den Internetverkehr deines Clients weiterleiten kann, solltest du das IP-Forwarding aktivieren.
Bearbeite die Datei /etc/sysctl.conf
mit deinem Editor und füge folgende Zeile im Boden hinzu:
net.ipv4.ip_forward=1
Lade die neuen Einstellungen mit diesem Befehl:
sudo sysctl -p
Die Ausgabe sollte dir bestätigen, dass das IP-Forwarding jetzt aktiviert ist.
Firewall und IP-Tables anpassen
Damit die VPN-Verbindung funktioniert und der Datenverkehr richtig weitergeleitet wird, solltest du die Firewall am Server konfigurieren.
Finde zuerst heraus, wie dein Server mit dem Internet verbunden ist. Führe folgenden Befehl aus:
ip route list default
default via 203.0.113.1 dev <INTERFACE-NAME> proto static
Der Teil nach dev
ist der Netzwerk-Interface-Name. Merk dir diesen Namen, den brauchst du später.
Bearbeite die WireGuard-Konfigurationsdatei /etc/wireguard/wg0.conf
und füge nach der Zeile SaveConfig = false
folgende Befehlszeilen hinzu:
PostUp = ufw route allow in on wg0 out on <INTERFACE-NAME>
PostUp = iptables -t nat -I POSTROUTING -o <INTERFACE-NAME> -j MASQUERADE
PreDown = ufw route delete allow in on wg0 out on <INTERFACE-NAME>
PreDown = iptables -t nat -D POSTROUTING -o <INTERFACE-NAME> -j MASQUERADE
Die PostUp Zeilen werden ausgeführt, wenn der VPN-Tunnel startet und erlauben die Weiterleitung und das Maskieren (Umschreiben der IP-Adressen).
Die PostDown Zeilen werden ausgeführt, wenn der Tunnel stoppt und entfernen diese Regeln wieder.
Zum Schluss solltest du noch den UDP-Port für WireGuard mit der UFW-Firewall freigeben und abschließend den Status überprüfen:
sudo ufw allow 51820/udp
sudo ufw allow OpenSSH
sudo ufw enable
sudo ufw status
Als Systemdienst automatisch starten
Damit WireGuard nach jedem Serverneustart automatisch ausgeführt wird, führe folgende Befehle aus und überprüfe den Status:
systemctl enable wg-quick@wg0.service
systemctl start wg-quick@wg0.service
systemctl status wg-quick@wg0.service
Wenn du im Status active (running)
feststellt, dann läuft der Dienst erfolgreich
Konfiguration eines WireGuard-Peers
Die Konfiguration eines WireGuard-Peers ähnelt der Einrichtung des WireGuard-Servers. Sobald du WireGuard mit dem Peer installiert hast, erzeugst du ein weiteren Schlüsselpaar aus einem öffentlichen und privaten Schlüssel. Wenn der Server einen vorausgetauschten Schlüssel erwartet, fügst du diesen ebenfalls in der Peer-Konfiguration ein.
[Interface]
Address = 172.16.16.2/32
PrivateKey = <PRIVATER_SCHLÜSSEL_DES_PEERS>
# DNS = 8.8.8.8
[Peer]
PublicKey = <ÖFFENTLICHER_SCHLÜSSEL_DES_SERVERS>
PresharedKey = <VORAUSGETAUSCHTER_SCHLÜSSEL>
AllowedIPs = 172.16.16.0/24
Endpoint = <ÖFFENTLICHE_IP_DES_SERVERS>:51820PersistentKeepalive = 25
Die IP-Adresse im Interface ist die IP-Adresse des eingerichteten Peers in der Serverkonfiguration.
Wenn du unterAllowedIPs = 0.0.0.0/0
einträgst, wird dein gesamter Internet-Traffic über den Tunnel gesendet und anschließend solltest du auch die OptionDNS = 8.8.8.8
auskommentieren. Gerne trägst du einen eigenen DNS-Server als den von Google ein.
PersistentKeepalive
stellt sicher, dass nach einem Netzwerkwechsel (beispielsweise WLAN) der VPN-Tunnel reibungslos aktiv bleibt.
Einrichten des ersten Peers im WireGuard-Server
Bevor Du den Peer mit dem Server verbindest, ist es wichtig, den öffentlichen Schlüssel des Peers zum WireGuard-Server hinzuzufügen. Dieser Schritt stellt sicher, dass Du dich verbinden und den Datenverkehr über das VPN routen kannst.
Füge folgende Zeilen im Boden der WireGuard-Konfiguration des Servers ein:
# Erstes Endgerät (Peer)
[Peer]
PublicKey = <ÖFFENTLICHER_SCHLÜSSEL_DES_PEERS>
PresharedKey = <VORAUSGETAUSCHTER_SCHLÜSSEL>
AllowedIPs = 172.16.16.2/32
Beachte, dass der TeilAllowedIPs
eine durch Kommas getrennte Liste von IPv4-Adressen erwartet. Du kannst einzelne IP-Adressen angeben, wenn Du die IP-Adresse, die ein Peer sich zuweisen darf, einschränken möchtest, oder einen Bereich, wie im Beispiel, wenn Deine Peers jede IP-Adresse im VPN-Bereich nutzen können. Keine zwei Peers dürfen dieselbeAllowedIPs
Einstellung haben.
Mit dem Befehl wg show
kannst du den Status aller VPN-Tunnel einsehen.
Den WireGuard-Peer mit dem Server verbinden
Da du den VPN-Tunnel vielleicht nur für bestimmte Anwendungsfälle aktivieren möchtest, verwenden wir den Befehl wg-quick
, um die Verbindung manuell herzustellen. Wenn Du den Tunnel wie auf dem Server automatisch beim Systemstart ausführen möchtest, dann wiederhole den obig erwähnten Schritt erneut .
Führe folgenden Befehl beim Peer für die manuelle Aktivierung des VPN-Tunnels:
wg-quick up <DATEINAME_DER_PEER_KONFIGURATIONSDATEI>
Installation von WireGuard VPN mit UFW und IP-Tables in GNU/Linux Debian