Zum Inhalt springen

Installation von WireGuard VPN mit UFW und IP-Tables in GNU/Linux Debian

31. Juli 2025 durch
Christian Lisec
| 1 Kommentieren

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>:51820

PersistentKeepalive = 25

Die IP-Adresse im Interface ist die IP-Adresse des eingerichteten Peers in der Serverkonfiguration.

Wenn du unter AllowedIPs = 0.0.0.0/0 einträgst, wird dein gesamter Internet-Traffic über den Tunnel gesendet und anschließend solltest du auch die Option DNS = 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 Teil AllowedIPs​ 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 dieselbe AllowedIPsEinstellung 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>
Christian Lisec 31. Juli 2025
Diesen Beitrag teilen