Tipp: Sie können für alle Dateinamen und Verzeichnisse die automatische Vervollständigung mithilfe der Tab-Taste nutzen, sodass Sie nicht die kompletten Datei- oder Verzeichnisnamen manuell eintippen müssen.
Diese Anleitung wurde am 03.04.2023 zuletzt überprüft und aktualisiert.
Allgemeine Informationen zu WireGuard
WireGuard ist eine sehr simpel aufgebaute kostenlose VPN-Lösung, welche zugleich schnell und sicher ist. Es handelt sich dabei um eine Open-Source-Software, die modernste Verschlüsselungsverfahren einsetzt. Die Performance ist besser als bei IPsec und OpenVPN und WireGuard wird auf vielen Betriebssystemen unterstützt. Dazu zählen Windows, macOS, Linux, BSD, iOS und Android.
Eine VPN-Verbindung wird durch den Austausch von öffentlichen Schlüsseln (Public-Keys) hergestellt, genau wie beim Austausch von SSH-Schlüsseln. Der Konfigurationsaufwand ist vergleichsweise gering. Ein weiterer Vorteil von WireGuard ist die Unterstützung des Roamings zwischen IP-Adressen.
Installation und Konfiguration - Server
- Falls Sie es noch nicht getan haben, laden Sie das Programm "PuTTY" herunter.
- Verbinden Sie sich mithilfe von PuTTY via SSH mit Ihrem Root- oder vServer. Hierfür öffnen Sie PuTTY und geben im Textfeld "Host Name (or IP address)" die Domain oder IP-Adresse Ihres Servers ein. Klicken Sie anschließend unten auf "OK".
- Aktualisieren Sie nun Ihre Paketlisten mit dem Befehl
apt update
. - Installieren Sie jetzt möglicherweise verfügbare Updates der auf Ihrem Server bereits installieren Pakete mit dem Befehl
apt upgrade -y
. - Als nächstes installieren Sie Pakete, die für die weiteren Installationen benötigt werden, mit folgendem Befehl:
apt install ca-certificates apt-transport-https nano -y
- Bis einschließlich Debian/Raspbian 10 (bei Ubuntu und Debian 11 nicht notwendig):
- Fügen Sie mithilfe des Befehls
echo "deb http://deb.debian.org/debian/ unstable main" > /etc/apt/sources.list.d/unstable.list
nun die für die Installation benötigte Paketquelle hinzu. - Führen Sie daraufhin den Befehl
printf 'Package: *\nPin: release a=unstable\nPin-Priority: 90\n' > /etc/apt/preferences.d/limit-unstable
aus, um die APT-Einstellungen festzulegen. - Falls Sie die Installation auf einem Raspberry Pi durchführen, fügen Sie den für die Paketquelle benötigen Key hinzu:
Für Raspbian 10:apt-key adv --keyserver keyserver.ubuntu.com --recv-keys DC30D7C23CBBABEE
Für Raspbian 9:apt-key adv --keyserver keyserver.ubuntu.com --recv-keys E0B11894F66AEC98
- Aktualisieren Sie nun erneut Ihre Paketlisten mit dem Befehl
apt update
.
- Fügen Sie mithilfe des Befehls
- Installieren Sie WireGuard sowie weitere benötigte Pakete mit folgendem Befehl:
apt install wireguard -y
- Aktivieren Sie anschließend die IP-Weiterleitung im Kernel des Servers. Öffnen Sie dafür zunächst die Konfigurationsdatei der Kernel-Parameter, indem Sie den Befehl
nano /etc/sysctl.conf
ausführen. - Als nächstes entfernen Sie das "#"-Zeichen vor der Zeile "net.ipv4.ip_forward=1" und speichern Sie Ihre Änderungen der Konfiguration, indem Sie STRG + X, danach die "Y"-Taste und anschließend Enter drücken.
- Laden Sie die Einstellungen der "sysctl.conf"-Datei nun mithilfe des Befehls
sysctl -p
neu. Alternativ können Sie Ihren Server auch neu starten. - Wechseln Sie mit dem Befehl
cd /etc/wireguard/
in das Verzeichnis der WireGuard-Konfiguration - Führen Sie jetzt den Befehl
umask 077
aus, um die Benutzerrechte der Dateien, die Sie in den nächsten Schritten erstellen, einzuschränken. Damit können diese Dateien nur noch vom Besitzer (root) gelesen und geschrieben werden (chmod 600). - Generieren Sie einen Private- und Public-Key für den Server mit dem folgenden Befehl:
wg genkey | tee server_private.key | wg pubkey > server_public.key
- Generieren Sie nun auch einen Private- und Public-Key für den ersten VPN-Client. Dieser Schritt ist für jeden Client notwendig und Sie können ihn auch auf einem Client-System durchführen. Für die Konfiguration auf dem Server wird nur der Public-Key der Clients benötigt. Daher sollte der Private-Key nicht auf dem Server gespeichert bleiben. Der Befehl lautet wie folgt:
wg genkey | tee client1_private.key | wg pubkey > client1_public.key
. Diese Keys können Sie sich anzeigen lassen, indem Sie beispielsweise den Befehlcat server_private.key
verwenden. - Erstellen Sie anschließend eine Konfigurationsdatei für das WireGuard-Interface "wg0", indem Sie den Befehl
nano /etc/wireguard/wg0.conf
ausführen. Es sind auch mehrere WireGuard-Interfaces möglich (mit unterschiedlichen Ports). - Fügen Sie in diese Konfigurationsdatei folgenden Inhalt ein und ersetzen Sie dabei "<Server Private-Key>" durch den Private-Key des Servers, "<Client Public-Key>" durch den Public-Key des entsprechenden Clients und "eth0" durch den Namen des physischen Netzwerk-Interfaces:Auch das IP-Subnetz können Sie anpassen, ebenso den Port (UDP). In diesem Beispiel wird 192.168.200.1/24 verwendet und es ist der Standard-Port 51820 eingestellt. Der Server hat die IP-Adresse 192.168.200.1 und der erste Client die 192.168.200.2. Der Parameter "AllowedIPs" legt fest, welche Quell-IP-Adressen dieser Client verwenden darf und an welchen Client bzw. Peer die Pakete geschickt werden sollen, für die diese IP-Adresse die Ziel-IP-Adresse ist. Pro Client muss ein "[Peer]"-Block angelegt werden.
[Interface]
Address = 192.168.200.1/24
ListenPort = 51820
PrivateKey = <Server Private-Key>
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
# Client1
[Peer]
PublicKey = <Client Public-Key>
AllowedIPs = 192.168.200.2/32 - Speichern Sie Ihre Änderungen der Konfiguration, indem Sie STRG + X, danach die "Y"-Taste und anschließend Enter drücken.
- Aktivieren Sie das soeben konfigurierte WireGuard-Interface mit dem Befehl
wg-quick up wg0
. - Falls Sie möchten, dass das WireGuard-Interface nach dem Hochfahren Ihres Servers automatisch gestartet wird, führen Sie den Befehl
systemctl enable wg-quick@wg0
aus.
Installation und Konfiguration - Clients
- Erstellen Sie eine Konfigurationsdatei pro Client und nennen Sie diese z.B. "client1.conf". In diesem Beispiel wird nur ein Client ("client1") angelegt. Daher ist in der WireGuard-Konfigurationsdatei auf dem Server auch nur ein Client/Peer eingerichtet. Falls Sie die Client-Konfiguration unter Linux erstellen möchten, führen Sie den Befehl
nano client1.conf
aus. - Fügen Sie in diese Konfigurationsdatei folgenden Inhalt ein und ersetzen Sie dabei "<Client Private-Key>" durch den zuvor generierten Private-Key des Clients, "<Server Public-Key>" durch den Public-Key des Servers und "Server-IP" durch die IP-Adresse oder den FQDN Ihres Servers:Sie können den DNS-Server, den der Client verwenden soll (Parameter "DNS"), frei anpassen. Falls Sie das IP-Subnetz in der Server-Konfiguration geändert haben, muss es hier ebenso geändert werden. Der Parameter "AllowedIPs" legt an dieser Stelle fest, welche Quell-IP-Adressen für eingehende Pakete erlaubt sind und definiert zudem, welche Pakete über den VPN-Tunnel verschickt werden sollen (Ziel-IP-Adressen). In diesem Beispiel werden alle Pakete über den VPN-Tunnel verschickt (0.0.0.0/0).
[Interface]
PrivateKey = <Client Private-Key>
Address = 192.168.200.2
DNS = 1.1.1.1
[Peer]
PublicKey = <Server Public-Key>
Endpoint = Server-IP:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25 - Laden Sie sich nun - je nach Betriebssystem des Clients - die passende WireGuard-Anwendung von der WireGuard-Website herunter und importieren Sie dort die soeben erstelle Client-Konfigurationsdatei. Damit kann die VPN-Verbindung hergestellt werden. Falls es sich beim Client um ein Linux-System handelt, ist die Installation mit der des VPN-Servers identisch. In der Konfiguration des WireGuard-Interfaces unter "/etc/wireguard/wg0.conf" wird dann jedoch entsprechend die Client-Konfiguration eingetragen. Es sind auch hier mehrere WireGuard-Interfaces möglich.