Zum Inhalt

WireGuard VPN

Einleitung

WireGuard ist ein freies und quelloffenes Peer-to-Peer (P2P) virtuelles privates Netzwerk (VPN). Es ist eine leichte und sichere moderne Ersatzlösung zu herkömmlichen VPNs mit großen Codebasen, die auf TCP-Verbindungen basieren. Da WireGuard ein P2P-VPN ist, kommuniziert jeder zum WireGuard-Netzwerk hinzugefügte Computer direkt miteinander. In dieser Anleitung wird ein Hub-Spoke-Modell verwendet, bei dem einem WireGuard-Peer eine öffentliche IP-Adresse als Gateway zur Weiterleitung des gesamten Datenverkehrs zugewiesen wird. Dadurch kann der WireGuard-Verkehr Carrier Grade NAT (CGNAT) umgehen, ohne dass die Portweiterleitung auf Ihrem Router aktiviert werden muss. Dies erfordert ein Rocky Linux-System mit einer öffentlichen IP-Adresse. Der einfachste Weg, dies zu erreichen, besteht darin, einen virtuellen privaten Server (VPS) über einen Cloud-Anbieter Ihrer Wahl einzurichten. Zum Zeitpunkt des Schreibens des Artikels bietet die Google Cloud Platform eine kostenlose Stufe für seine e2-Micro-Instanzen an.

Voraussetzungen

Die Mindestanforderungen für dieses Verfahren sind folgende:

  • Die Möglichkeit, Befehle als Root-Benutzer auszuführen oder sudo zu verwenden, um Privilegien entsprechend anzupassen
  • Ein Rocky Linux-System mit einer öffentlich zugänglichen IP-Adresse

WireGuard-Installation

Aktivieren Sie das EPEL-Repository (Extra Packages for Enterprise Linux):

sudo dnf install epel-release -y

Systempakete aktualisieren:

sudo dnf upgrade -y

WireGuard installieren:

sudo dnf install wireguard-tools -y

WireGuard Server — Konfiguration

Erstellen Sie einen Ordner, in dem Sie Ihre WireGuard-Konfigurationsdateien und -Schlüssel ablegen können:

sudo mkdir -p /etc/wireguard

Erstellen Sie eine Konfigurationsdatei mit einem Namen Ihrer Wahl und der Erweiterung .conf:

Anmerkung

Sie können auf derselben Maschine mehrere WireGuard-VPN-Tunnel erstellen, die jeweils eine andere Konfigurationsdatei, Netzwerkadresse und einen anderen UDP-Port verwenden.
sudo touch /etc/wireguard/wg0.conf

Generieren Sie ein neues privates und öffentliches Schlüsselpaar für den WireGuard-Server:

wg genkey | sudo tee /etc/wireguard/wg0 | wg pubkey | sudo tee /etc/wireguard/wg0.pub

Bearbeiten Sie die Konfigurationsdatei mit einem Editor Ihrer Wahl.

sudo vi /etc/wireguard/wg0.conf

Bitte Folgendes einfügen:

[Interface]
PrivateKey = server_privatekey
Address = x.x.x.x/24
ListenPort = 51820

Sie müssen server_privatekey durch den zuvor generierten privaten Schlüssel ersetzen. Sie können Ihren privaten Schlüssel anzeigen mit:

sudo cat /etc/wireguard/wg0

Als Nächstes müssen Sie x.x.x.x/24 durch eine Netzwerkadresse innerhalb des privaten IP-Adressbereichs ersetzen, der durch RFC 1918 definiert ist. Die in dieser Anleitung verwendete Netzwerkadresse lautet 10.255.255.0/24.

Schließlich können Sie jeden beliebigen UDP-Port auswählen, um Verbindungen mit WireGuard VPN zu akzeptieren. Für die Zwecke dieses Handbuchs wird der UDP-Port 51820 verwendet.

IP Forwarding aktivieren

Durch IP-Weiterleitung können Pakete zwischen Netzwerken geroutet werden. Dadurch können interne Geräte über den WireGuard-Tunnel miteinander kommunizieren:

Aktivieren Sie die IP-Weiterleitung für IPv4 und IPv6:

sudo sysctl -w net.ipv4.ip_forward=1 && sudo sysctl -w net.ipv6.conf.all.forwarding=1

firewalld-Konfiguration

Installieren Sie firewalld:

sudo dnf install firewalld -y

Aktivieren Sie firewalld nach der Installation:

sudo systemctl enable --now firewalld

Erstellen Sie eine permanente Firewall-Regel, die Datenverkehr auf UDP-Port 51820 in der öffentlichen Zone public zulässt:

sudo firewall-cmd --permanent --zone=public --add-port=51820/udp

Als Nächstes wird der Datenverkehr von der WireGuard-Schnittstelle zu anderen Schnittstellen in der internen Zone internal zugelassen.

sudo firewall-cmd --permanent --add-interface=wg0 --zone=internal

Fügen Sie eine Firewallregel hinzu, um IP-Masquerading für den internen Datenverkehr zu aktivieren. Dies bedeutet, dass zwischen Peers gesendete Pakete die Paket-IP-Adresse durch die IP-Adresse des Servers ersetzen:

sudo firewall-cmd --permanent --zone=internal --add-masquerade

Laden Sie abschließend firewalld neu:

sudo firewall-cmd --reload

WireGuard-Peer Konfiguration

Da alle Computer in einem WireGuard-Netzwerk technisch gesehen Peers sind, ist dieser Vorgang nahezu identisch mit der Konfiguration des WireGuard-Servers, weist jedoch geringfügige Unterschiede auf.

Erstellen Sie einen Ordner, in dem Sie Ihre WireGuard-Konfigurationsdateien und -Schlüssel ablegen können:

sudo mkdir -p /etc/wireguard

Erstellen Sie eine Konfigurationsdatei und geben Sie ihr einen Namen Ihrer Wahl. Die Datei muss mit der Erweiterung .conf enden:

sudo touch /etc/wireguard/wg0.conf

Generieren Sie ein neues Paar aus privatem und öffentlichem Schlüssel:

wg genkey | sudo tee /etc/wireguard/wg0 | wg pubkey | sudo tee /etc/wireguard/wg0.pub

Bearbeiten Sie die Konfigurationsdatei mit einem Editor Ihrer Wahl und fügen Sie diesen Inhalt hinzu:

[Interface]
PrivateKey = peer_privatekey
Address = 10.255.255.2/24

[Peer]
PublicKey = server_publickey
AllowedIPs = 10.255.255.1/24
Endpoint = serverip:51820
PersistentKeepalive = 25

Ersetzen Sie peer_privatekey durch den privaten Schlüssel des Peers, der auf dem Peer in /etc/wireguard/wg0 gespeichert ist.

Mit diesem Befehl können Sie sich den Schlüssel ausgeben lassen, um ihn zu kopieren:

sudo cat /etc/wireguard/wg0

Ersetzen Sie server_publickey durch den öffentlichen Schlüssel des Servers, der auf dem Server in /etc/wireguard/wg0.pub gespeichert ist.

Mit diesem Befehl können Sie sich den Schlüssel ausgeben lassen, um ihn zu kopieren:

sudo cat /etc/wireguard/wg0.pub

Ersetzen Sie serverip durch die öffentliche IP-Adresse des WireGuard-Server.

Sie können die öffentliche IP-Adresse des Servers mit dem folgenden Befehl auf dem Server ermitteln:

ip a | grep inet

Die Konfigurationsdatei des Peers enthält jetzt die Regel PersistentKeepalive = 25. Diese Regel weist den Peer an, alle 25 Sekunden einen Ping an den WireGuard-Server zu senden, um die Verbindung des VPN-Tunnels aufrechtzuerhalten. Ohne diese Einstellung kommt es zu einer Zeitüberschreitung nach Inaktivität des VPN-Tunnels.

WireGuard VPN aktivieren

Um WireGuard zu aktivieren, führen Sie den folgenden Befehl sowohl auf dem Server als auch auf dem Peer aus:

sudo systemctl enable wg-quick@wg0

Starten Sie dann das VPN, indem Sie diesen Befehl sowohl auf dem Server als auch auf dem Peer ausführen:

sudo systemctl start wg-quick@wg0

Fügen Sie den Client-Schlüssel zur WireGuard-Serverkonfiguration hinzu

Den öffentlichen Schlüssel des Peers ausgeben und kopieren:

sudo cat /etc/wireguard/wg0.pub

Führen Sie auf dem Server den folgenden Befehl aus und ersetzen Sie peer_publickey durch den öffentlichen Schlüssel des Peers:

sudo wg set wg0 peer peer_publickey allowed-ips 10.255.255.2

Die Verwendung von wg set nimmt nur vorübergehende Änderungen an der WireGuard-Schnittstelle vor. Für dauerhafte Konfigurationsänderungen können Sie die Konfigurationsdatei manuell bearbeiten und den Peer hinzufügen. Sie müssen die WireGuard-Schnittstelle neu laden, nachdem Sie dauerhafte Konfigurationsänderungen vorgenommen haben.

Bearbeiten Sie die Konfigurationsdatei des Servers mit einem Editor Ihrer Wahl.

sudo vi /etc/wireguard/wg0.conf

Fügen Sie den Peer zur Konfigurationsdatei hinzu. Der Inhalt sollte etwa wie folgt aussehen:

[Interface]
PrivateKey = +Eo5oVjt+d3XWvFWYcOChaLroGj5vapdXKH8UZ2T2Fc=
Address = 10.255.255.1/24
ListenPort = 51820

[Peer]
PublicKey = 1vSho8NvECkG1PVVk7avZWDmrd2VGZ2xTPaNe5+XKSg=
AllowedIps = 10.255.255.2/32

Interface herunterfahren:

sudo wg-quick down wg0

Interface hochfahren:

sudo wg-quick up wg0

WireGuard-Schnittstellen anzeigen und Konnektivität testen

Sie können WireGuard-Informationen sowohl auf dem Server als auch auf dem Peer mit folgendem Befehl anzeigen:

sudo wg

Sie können die Konnektivität testen, indem Sie vom Peer aus einen Ping an den Server senden:

ping 10.255.255.1

Zusammenfassung

Mit dieser Anleitung haben Sie erfolgreich ein WireGuard-VPN mit dem Hub-Spoke-Modell eingerichtet. Diese Konfiguration bietet eine sichere, moderne und effiziente Möglichkeit, mehrere Geräte über das Internet zu verbinden. Schauen Sie auf der offiziellen WireGuard-Website nach.

Author: Joseph Brinkman

Contributors: Steven Spencer, Ganna Zhyrnova