Wireguard ist ein VPN mit direkter Integration in den Linux Kernel. Wireguard ist mit ca. 4000 Zeilen Code vergleichsweise übersichtlich und deshalb wartbarer als z.B. OpenVPN. Wireguard ist außerdem schneller und um Längen leichter aufzusetzen. Alle benötigten Werkzeuge zur Schlüsselverwaltung sind dabei
In den meisten Distributionen ist Wireguard verfügbar. In CentOS 8 sollte man einfach Kernel 6.x nachinstallieren, denn das Wireguard Modul ist dort fest einkompiliert. Nach erfolgreicher Installation kann man das Kernelmodul testen.
modinfo wireguard
Server Grundkonfiguration
Wenn diese Ausgabe nicht leer ist, kann man loslegen. Wir generieren einen privaten Schlüssel und schreiben ihn direkt in eine neue Konfigurationsdatei.
sudo -i
cd /etc/wireguard/
wg genkey | tee wg0.conf
vim wg0.conf
Dann die Datei editieren und speichern.
[Interface]
PrivateKey = <privater Schlüssel>
Address = 192.168.10.1/24
ListenPort = 12345
PostUp = iptables -A FORWARD -i wg1 -j ACCEPT; iptables -t nat -A POSTROUTING -o ens11 -j MASQUERADE;
PostDown = iptables -D FORWARD -i wg1 -j ACCEPT; ip6tables -t nat -D POSTROUTING -o ens11 -j MASQUERADE;
Den Service aktivieren und starten
systemctl enable wg-quick@wg0.service --now
Firewall
Beispielkonfiguration für firewall-cmd
<?xml version="1.0" encoding="utf-8"?>
<service>
<short>Wireguard</short>
<description>Ports for currently configured Wireguard instances</description>
<port protocol="udp" port="12345"/>
...
</service>
Konfigurationsdatei nach /etc/firewalld/services/wireguard.xml
speichern. Dann den Service aktivieren und die Firewallkonfiguration neu laden.
firewall-cmd --add-service=wireguard --permanent
firewall-cmd --reload
Klient vorbereiten
Auf dem Klienten ebenfalls einen privaten Schlüssel erstellen.
wg genkey | tee wg0.conf | wg publickey >> wg0.conf
Der zugehörige öffentliche Schlüssel wird hier ebenfalls erzeugt und mit in die Konfigurationsdatei gespeichert, da wir ihn später brauchen und nur umständlich neu generieren können.
[Interface]
PrivateKey = <Privater Schlüssel (Zeile 1)>
Address = 192.168.10.2/24
# <Öffentlicher Schlüssel (Zeile 2)
# Angaben zum Server
[Peer]
Publickey = <Ausgabe des Kommandos `wg` auf Server enthält öffentlichen Schlüssel>
Endpoint = <öffentliche IP>:12345
AllowedIPs = 0.0.0.0/0 # Defaultroute für alle Pakete dieser Verbindung
PersistentKeepalive = 25
Klient auf dem Server hinzufügen
Auf dem Server für den Klienten einen Abschnitt in der Serverkonfiguration anlegen.
....
[Peer]
AllowedIPs = 192.168.10.2/32 # Ja, es muss 32 sein.
PublicKey = <öffentlicher Schlüssel des Klienten (2te Zeile aus der Konfigurationsdatei)>
Dann Server neu starten.
systemctl restart wg-quick@wg0.service
Klient starten
Mobiltelefon
Man kann die Klient Konfiguration verwenden, um damit z.B. ein Mobiltelefon zu konfigurieren. Dafür auf dem Telefon die Wireguard App installieren und die Konfigurationsdatei als QR-Code darstellen. Den QR-Code dann für die Einrichtung am Mobiltelefon verwenden.
qrencode -t ansiutf8 < wg0.conf
Als Systemd Service
systemctl enable wg-quick@wg0.service --now
Via NetworkManager
Man kann die Konfigurationsdatei auch in den NetworkManager importieren.
nmcli connection import type wireguard file wg0.conf
Über nm-connection-editor
kann man die Verbindung nachträglich bearbeiten und z.B. automatische Verbindung konfigurieren.