Einrichtung eines WireGuard VPN-Servers

In diesem Artikel beschreibe ich die Einrichtung eines WireGuard VPN-Servers, so wie ich es auf einem Linux-System durchgeführt habe. WireGuard ist ein modernes, einfaches und performantes VPN-Protokoll, das eine sichere Kommunikation über das Internet ermöglicht. Im Folgenden erkläre ich Schritt für Schritt, wie ich den Server installiert und konfiguriert habe, sowie die Einrichtung eines Clients.

Schritt 1: Aktualisierung des Systems und Installation von WireGuard

Zuerst habe ich das System aktualisiert und das WireGuard-Paket installiert. Dies stellt sicher, dass alle Abhängigkeiten und Pakete auf dem neuesten Stand sind.

apt update
apt install wireguard

Schritt 2: Generieren der Schlüssel für den Server

WireGuard verwendet ein Schlüsselpaar, bestehend aus einem privaten und einem öffentlichen Schlüssel. Um diese zu generieren, bin ich in das Verzeichnis /etc/wireguard gewechselt und habe den folgenden Befehl ausgeführt:

cd /etc/wireguard
umask 077
wg genkey | tee server-private.key | wg pubkey > server-public.key

Dieser Schritt erzeugt den privaten Schlüssel (server-private.key) und den öffentlichen Schlüssel (server-public.key). Der private Schlüssel wird später in der Konfigurationsdatei verwendet.

Schritt 3: Konfiguration des WireGuard-Interfaces

Ich habe die Konfigurationsdatei für das WireGuard-Interface erstellt. In diesem Fall ist die Datei wg0.conf, die das Netzwerk-Interface wg0 definiert. Hier wird die IP-Adresse für das VPN-Netzwerk, der private Schlüssel und der ListenPort konfiguriert:

nano /etc/wireguard/wg0.conf

Der Inhalt der Datei sieht folgendermaßen aus:

[Interface]
Address = 10.0.0.1/24, cafe:cafe:cafe::1/64
ListenPort = 51820
PrivateKey = SERVER_PRIVATE_KEY

Statt SERVER_PRIVATE_KEY habe ich den zuvor generierten privaten Schlüssel des Servers eingefügt.

Schritt 4: Aktivieren und Starten von WireGuard

Um sicherzustellen, dass WireGuard beim Systemstart automatisch aktiviert wird, habe ich den folgenden Befehl ausgeführt:

systemctl enable wg-quick@wg0

Dann habe ich das WireGuard-Interface manuell gestartet:

systemctl start wg-quick@wg0

Schritt 5: Aktivieren des IP-Forwardings

Damit der Server als Gateway fungieren kann und der Datenverkehr durch das VPN weitergeleitet wird, musste ich das IP-Forwarding aktivieren. Dazu habe ich die Datei /etc/sysctl.conf bearbeitet:

nano /etc/sysctl.conf

Folgende Zeilen habe ich hinzugefügt bzw. auskommentiert:

net.ipv4.ip_forward=1
net.ipv6.conf.all.forwarding=1

Anschließend habe ich die Änderungen mit dem folgenden Befehl aktiviert:

sysctl -p /etc/sysctl.conf

Schritt 6: Konfiguration von NAT mit nftables

Um den Datenverkehr vom VPN-Netzwerk ins Internet zu leiten, habe ich nftables installiert, das für Network Address Translation (NAT) verwendet wird:

apt install nftables
systemctl enable nftables.service

Die Konfiguration der NAT-Regeln erfolgt in der Datei /etc/nftables.conf. Ich habe dafür zwei Tabellen angelegt, eine für IPv4 und eine für IPv6:

table ip nat {
    chain postrouting {
        type nat hook postrouting priority 100; policy accept;
        ip saddr 10.0.0.0/24 oif "ens6" snat to IPV4_IP_DES_SERVERS
    }
}
table ip6 nat {
    chain postrouting {
        type nat hook postrouting priority 100; policy accept;
        ip6 saddr cafe:cafe:cafe::/64 oif "ens6" snat to IPV6_IP_DES_SERVERS
    }
}

In diesen Regeln habe ich ens6 als das Interface verwendet, das die Verbindung ins Internet bereitstellt. Die Werte IPV4_IP_DES_SERVERS und IPV6_IP_DES_SERVERS habe ich durch die entsprechenden externen IP-Adressen des Servers ersetzt.

Nach dem Hinzufügen der Regeln habe ich nftables neu geladen:

nft -f /etc/nftables.conf

Schritt 7: Hinzufügen eines Clients

Um einen Client mit dem VPN zu verbinden, musste ich den öffentlichen Schlüssel des Clients und dessen erlaubte IP-Adressen in die wg0.conf des Servers einfügen. Der Client-Schlüssel wird unter der Sektion [Peer] hinzugefügt:

[Peer] 
PublicKey = CLIENT_PUBLIC_KEY 
AllowedIPs = 10.0.0.2/32, fd8f:d4dc:9de9::2/128

Der Eintrag AllowedIPs definiert die IP-Adressen, die der Client im VPN-Netzwerk erhält.

Fazit

Mit diesen Schritten konnte ich erfolgreich einen WireGuard VPN-Server einrichten und konfigurieren. Durch die Verwendung von WireGuard bietet das VPN eine sehr hohe Geschwindigkeit und Sicherheit. Die Integration mit nftables ermöglicht es zudem, den Datenverkehr korrekt weiterzuleiten, sodass VPN-Clients über den Server auf das Internet zugreifen können.

Um die Konfiguration für einen WireGuard-Client auf einem Smartphone oder Tablet bequem zu übertragen, können Sie aus der Konfigurationsdatei einen QR-Code generieren. Dies ist besonders nützlich, wenn Sie die WireGuard-App auf mobilen Geräten verwenden. Hier ist eine Anleitung, wie Sie das mit dem Tool qrencode unter Linux durchführen können.

Schritt 1: Installation von qrencode

Zunächst müssen Sie das Tool qrencode installieren. Dieses Hilfsprogramm ermöglicht es, Text oder Dateien in QR-Codes umzuwandeln. Unter Debian-basierten Systemen (wie Ubuntu) können Sie es mit folgendem Befehl installieren:

sudo apt install qrencode

Schritt 2: QR-Code aus der Konfigurationsdatei erstellen

Sobald qrencode installiert ist, können Sie den Inhalt der WireGuard-Konfigurationsdatei in einen QR-Code umwandeln. Verwenden Sie dazu den folgenden Befehl, wobei die Datei wg0.conf die entsprechende Client-Konfiguration enthält:

qrencode -t ansiutf8 < wg0.conf

Dieser Befehl erstellt einen QR-Code in Textform (UTF-8) direkt in Ihrem Terminal. Sie können ihn dann einfach mit der WireGuard-App auf Ihrem Smartphone oder Tablet scannen, um die Konfiguration zu importieren.

Schritt 3: Übertragen der Konfiguration auf das mobile Gerät

  • Öffnen Sie die WireGuard-App auf Ihrem Smartphone oder Tablet.
  • Gehen Sie zur Option, eine neue Verbindung hinzuzufügen.
  • Wählen Sie die Option, einen QR-Code zu scannen.
  • Scannen Sie den QR-Code, der im Terminal ausgegeben wurde.

Auf diese Weise wird die VPN-Konfiguration direkt in die App importiert und ist sofort einsatzbereit.

Alternative: QR-Code als Bild speichern

Falls Sie den QR-Code als Bild speichern möchten, um ihn später zu verwenden oder weiterzugeben, können Sie ihn in eine Bilddatei exportieren:

qrencode -o wg0.png < client.conf

Dieser Befehl speichert den QR-Code als Bilddatei wg0.png, die Sie dann an das Smartphone senden oder in einer App öffnen können.

Über Raffael Haberland 21 Artikel
Ich habe Informatik an der Technischen Universität Darmstadt sowie Wirtschaftswissenschaften an der Universität Heidelberg studiert. Derzeit bin ich als Testmanager in der Testautomation und Softwareentwicklung im Telekommunikationssektor tätig. Mein Fokus liegt auf der Bewertung von Prototypen sowie der Qualitätssicherung und Optimierung von Prozessen, insbesondere durch die Entwicklung und Implementierung automatisierter Tests.

Ersten Kommentar schreiben

Antworten

Deine E-Mail-Adresse wird nicht veröffentlicht.


*