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.
Antworten