So richten Sie WireGuard unter Ubuntu 22.04 ein

Einführung

WireGuard ist ein leichtgewichtiges Virtuelles Privates Netzwerk (VPN), das IPv4- und IPv6-Verbindungen unterstützt. Ein VPN ermöglicht es Ihnen, unsichere Netzwerke zu durchqueren, als ob Sie sich in einem privaten Netzwerk befinden würden. Es gibt Ihnen die Freiheit, sicher und geschützt auf das Internet zuzugreifen, wenn Sie mit einem unsicheren Netzwerk verbunden sind, wie zum Beispiel dem WLAN in einem Hotel oder einem Café, von Ihrem Smartphone oder Laptop aus.

Die Verschlüsselung von WireGuard basiert auf öffentlichen und privaten Schlüsseln, um zwischen den Peers einen verschlüsselten Tunnel aufzubauen. Jede Version von WireGuard verwendet eine spezifische kryptografische Cipher Suite, um Einfachheit, Sicherheit und Kompatibilität mit den Peers zu gewährleisten.

Im Vergleich dazu verwenden andere VPN-Software wie OpenVPN und IPSec Transport Layer Security (TLS) und Zertifikate, um verschlüsselte Tunnel zwischen Systemen zu authentifizieren und aufzubauen. Unterschiedliche Versionen von TLS unterstützen Hunderte von verschiedenen kryptografischen Suites und Algorithmen. Während dies eine große Flexibilität bietet, um verschiedene Clients zu unterstützen, macht es auch die Konfiguration eines VPNs, das TLS verwendet, zeitaufwendiger, komplexer und fehleranfälliger.

In diesem Tutorial werden Sie WireGuard auf einem Ubuntu 22.04 Server einrichten und dann eine andere Maschine konfigurieren, um sich als Peer damit zu verbinden, indem Sie sowohl IPv4- als auch IPv6-Verbindungen nutzen (üblicherweise als dualer Stack bezeichnet). Sie werden auch lernen, wie Sie den Internetverkehr des Peers über den WireGuard-Server in einer Gateway-Konfiguration routen, zusätzlich zur Verwendung des VPN für einen verschlüsselten Peer-to-Peer-Tunnel.

Zu den Zwecken dieses Tutorials werden wir ein weiteres Ubuntu 22.04-System als den Peer (auch als Client bezeichnet) zum WireGuard-Server konfigurieren. Nachfolgende Tutorials in dieser Serie werden erklären, wie Sie WireGuard auf Windows-, macOS-, Android- und iOS-Systemen und -Geräten installieren und ausführen können.

Hinweis: Wenn Sie WireGuard auf einem DigitalOcean-Droplet einrichten möchten, beachten Sie, dass wir wie viele Hosting-Anbieter für Bandbreitenüberschreitungen Gebühren erheben. Aus diesem Grund sollten Sie darauf achten, wie viel Traffic Ihr Server verarbeitet. Siehe diese Seite für weitere Informationen.

Voraussetzungen

Um diesem Tutorial zu folgen, benötigen Sie:

  • Einen Ubuntu 22.04 Server mit einem sudo-Benutzer ohne Root-Rechte und einer aktivierten Firewall. Um dies einzurichten, können Sie unserem Tutorial Initiale Servereinrichtung mit Ubuntu 22.04 folgen. Wir werden dies in diesem Leitfaden als den WireGuard Server bezeichnen.
  • Sie benötigen einen Client-Rechner, den Sie verwenden werden, um sich mit Ihrem WireGuard-Server zu verbinden. In diesem Tutorial bezeichnen wir diese Maschine als den WireGuard-Peer. Für die Zwecke dieses Tutorials wird empfohlen, dass Sie Ihre lokale Maschine als WireGuard-Peer verwenden, aber Sie können auch Remote-Server oder Mobiltelefone als Clients verwenden, wenn Sie möchten. Wenn Sie ein Remote-System verwenden, stellen Sie sicher, dass Sie alle optionalen Abschnitte später in diesem Tutorial befolgen, oder Sie könnten sich selbst aussperren.
  • Um WireGuard mit IPv6 zu verwenden, müssen Sie auch sicherstellen, dass Ihr Server so konfiguriert ist, dass er diesen Typ von Verkehr unterstützt. Wenn Sie IPv6-Unterstützung mit WireGuard aktivieren möchten und einen DigitalOcean-Droplet verwenden, lesen Sie bitte diese Dokumentationsseite So aktivieren Sie IPv6 auf Droplets. Sie können IPv6-Unterstützung hinzufügen, wenn Sie einen Droplet erstellen, oder später mithilfe der Anweisungen auf dieser Seite.

Schritt 1 – Installation von WireGuard und Generierung eines Schlüsselpaars

Der erste Schritt in diesem Tutorial besteht darin, WireGuard auf Ihrem Server zu installieren. Beginnen Sie damit, den Paketindex Ihres WireGuard-Servers zu aktualisieren und WireGuard mit den folgenden Befehlen zu installieren. Möglicherweise werden Sie aufgefordert, das Passwort Ihres sudo-Benutzers anzugeben, wenn Sie dies zum ersten Mal in dieser Sitzung verwenden:

  1. sudo apt update
  2. sudo apt install wireguard

Nun, da WireGuard installiert ist, ist der nächste Schritt, ein privates und öffentliches Schlüsselpaar für den Server zu generieren. Sie verwenden die integrierten Befehle wg genkey und wg pubkey, um die Schlüssel zu erstellen, und fügen dann den privaten Schlüssel zur Konfigurationsdatei von WireGuard hinzu.

Sie müssen auch die Berechtigungen für den Schlüssel ändern, den Sie gerade erstellt haben, indem Sie den chmod-Befehl verwenden, da die Datei standardmäßig von jedem Benutzer auf Ihrem Server lesbar ist.

Erstellen Sie den privaten Schlüssel für WireGuard und ändern Sie seine Berechtigungen mit den folgenden Befehlen:

  1. wg genkey | sudo tee /etc/wireguard/private.key
  2. sudo chmod go= /etc/wireguard/private.key

Der Befehl sudo chmod go=... entfernt alle Berechtigungen für Benutzer und Gruppen außer dem Root-Benutzer von der Datei, um sicherzustellen, dass nur dieser auf den privaten Schlüssel zugreifen kann.

Sie sollten eine einzelne Zeile mit Base64-codierter Ausgabe erhalten, die den privaten Schlüssel darstellt. Eine Kopie der Ausgabe wird auch in der Datei /etc/wireguard/private.key gespeichert, um später von dem tee-Teil des Befehls referenziert zu werden. Machen Sie sich sorgfältig eine Notiz über den privaten Schlüssel, da Sie ihn später in diesem Abschnitt zur Konfigurationsdatei von WireGuard hinzufügen müssen.

Der nächste Schritt ist die Erstellung des entsprechenden öffentlichen Schlüssels, der aus dem privaten Schlüssel abgeleitet wird. Verwenden Sie den folgenden Befehl, um die Datei mit dem öffentlichen Schlüssel zu erstellen:

  1. sudo cat /etc/wireguard/private.key | wg pubkey | sudo tee /etc/wireguard/public.key

Dieser Befehl besteht aus drei einzelnen Befehlen, die mithilfe des | (Pipe)-Operators verkettet sind:

  • sudo cat /etc/wireguard/private.key: Dieser Befehl liest die private Schlüsseldatei und gibt sie auf den Standardausgabestrom aus.
  • wg pubkey: Der zweite Befehl verwendet die Ausgabe des ersten Befehls als Standardeingabe und verarbeitet sie, um einen öffentlichen Schlüssel zu generieren.
  • sudo tee /etc/wireguard/public.key: Der letzte Befehl nimmt die Ausgabe des Befehls zur Generierung des öffentlichen Schlüssels und leitet sie in die Datei mit dem Namen /etc/wireguard/public.key um.

Wenn Sie den Befehl ausführen, erhalten Sie erneut eine einzelne Zeile mit base64 codierter Ausgabe, die den öffentlichen Schlüssel für Ihren WireGuard-Server darstellt. Kopieren Sie ihn zur Referenz, da Sie den öffentlichen Schlüssel an jeden Peer verteilen müssen, der sich mit dem Server verbindet.

Schritt 2 — Auswahl von IPv4- und IPv6-Adressen

In dem vorherigen Abschnitt haben Sie WireGuard installiert und ein Schlüsselpaar generiert, das zum Verschlüsseln des Datenverkehrs zum und vom Server verwendet wird. In diesem Abschnitt erstellen Sie eine Konfigurationsdatei für den Server und richten WireGuard so ein, dass es automatisch gestartet wird, wenn Ihr Server neu gestartet wird. Sie definieren auch private IPv4- und IPv6-Adressen, die mit Ihrem WireGuard-Server und Peers verwendet werden sollen.

Wenn Sie sowohl IPv4- als auch IPv6-Adressen verwenden möchten, befolgen Sie beide Abschnitte. Andernfalls folgen Sie den Anweisungen im entsprechenden Abschnitt für die Netzwerkanforderungen Ihres VPNs.

Schritt 2(a) – Auswahl eines IPv4-Bereichs

Wenn Sie Ihren WireGuard-Server mit IPv4-Peers verwenden, benötigt der Server einen Bereich privater IPv4-Adressen für die Verwendung durch Clients und für seine Tunnel-Schnittstelle. Sie können jeden Bereich von IP-Adressen aus den folgenden reservierten Adressblöcken auswählen (wenn Sie mehr über die Zuordnung dieser Blöcke erfahren möchten, besuchen Sie die RFC 1918-Spezifikation):

  • 10.0.0.0 bis 10.255.255.255 (10/8 Präfix)
  • 172.16.0.0 bis 172.31.255.255 (172.16/12 Präfix)
  • 192.168.0.0 bis 192.168.255.255 (192.168/16 Präfix)

Zu Demonstrationszwecken verwenden wir 10.8.0.0/24 als Block von IP-Adressen aus dem ersten Bereich reservierter IPs. Dieser Bereich ermöglicht bis zu 255 verschiedene Peer-Verbindungen und sollte im Allgemeinen keine sich überschneidenden oder konfliktierenden Adressen mit anderen privaten IP-Bereichen haben. Wählen Sie einen Adressbereich aus, der mit Ihrer Netzwerkkonfiguration kompatibel ist, wenn dieser Beispielbereich nicht mit Ihren Netzwerken kompatibel ist.

Der WireGuard-Server wird eine einzelne IP-Adresse aus dem Bereich für seine private Tunnel-IPv4-Adresse verwenden. Hier verwenden wir 10.8.0.1/24, aber jede Adresse im Bereich von 10.8.0.1 bis 10.8.0.255 kann verwendet werden. Notieren Sie sich die IP-Adresse, die Sie wählen, wenn Sie etwas anderes als 10.8.0.1/24 verwenden. Sie werden diese IPv4-Adresse zur Konfigurationsdatei hinzufügen, die Sie in Schritt 3 – Erstellen einer WireGuard-Serverkonfiguration definieren.

Schritt 2(b) – Auswahl eines IPv6-Bereichs

Wenn Sie WireGuard mit IPv6 verwenden, müssen Sie einen eindeutigen lokalen IPv6-Unicast-Adresspräfix generieren, basierend auf dem Algorithmus in RFC 4193. Die Adressen, die Sie mit WireGuard verwenden, werden mit einer virtuellen Tunnel-Schnittstelle verbunden sein. Sie müssen einige Schritte ausführen, um einen zufälligen, eindeutigen IPv6-Präfix innerhalb des reservierten Blocks fd00::/8 privater IPv6-Adressen zu generieren.

Gemäß dem RFC ist die empfohlene Methode zum Erhalten eines eindeutigen IPv6-Präfixes, die Uhrzeit des Tages mit einem eindeutigen Identifikationswert aus einem System wie einer Seriennummer oder einer Geräte-ID zu kombinieren. Diese Werte werden dann gehasht und abgeschnitten, was zu einer Reihe von Bits führt, die als eindeutige Adresse innerhalb des reservierten privaten fd00::/8-IP-Blocks verwendet werden können.

Um mit der Generierung eines IPv6-Bereichs für Ihren WireGuard-Server zu beginnen, sammeln Sie einen 64-Bit-Zeitstempel mit dem date-Dienstprogramm und folgendem Befehl:

  1. date +%s%N

Sie erhalten eine Nummer wie folgt, die die Anzahl der Sekunden (das %s im date-Befehl) und Nanosekunden (das %N) seit 1970-01-01 00:00:00 UTC kombiniert:

Output
1650301699497770167

Notieren Sie den Wert an einem sicheren Ort für die Verwendung später in diesem Abschnitt. Kopieren Sie als nächstes den machine-id-Wert für Ihren Server aus der Datei /var/lib/dbus/machine-id. Diese Kennung ist eindeutig für Ihr System und sollte sich so lange nicht ändern, wie der Server existiert.

  1. cat /var/lib/dbus/machine-id

Sie erhalten eine Ausgabe wie folgt:

/var/lib/dbus/machine-id
610cef4946ed46da8f71dba9d66c67fb

Jetzt müssen Sie den Zeitstempel mit der machine-id kombinieren und den resultierenden Wert mit dem SHA-1-Algorithmus hashen. Der Befehl verwendet das folgende Format:

printf <timestamp><machine-id> | sha1sum

Führen Sie den Befehl aus, indem Sie Ihre Zeitstempel- und Maschinenidentitätswerte einsetzen:

  1. printf 1650301699497770167610cef4946ed46da8f71dba9d66c67fb | sha1sum

Sie erhalten einen Hashwert wie folgt:

Output
442adea1488d96388dae9ab816045b24609a6c18 -

Beachten Sie, dass die Ausgabe des sha1sum-Befehls hexadezimal ist, daher verwendet die Ausgabe zwei Zeichen, um ein einzelnes Byte an Daten darzustellen. Zum Beispiel sind 4f und 26 in der Beispiel-Ausgabe die ersten beiden Bytes der gehashten Daten.

Der Algorithmus im RFC erfordert nur die am wenigsten signifikanten (nachlaufenden) 40 Bits oder 5 Bytes des gehashten Ausgangs. Verwenden Sie den cut-Befehl, um die letzten 5 hexadezimal codierten Bytes vom Hash auszugeben:

  1. printf 442adea1488d96388dae9ab816045b24609a6c18 | cut -c 31-

Das Argument -c teilt dem Befehl cut mit, nur eine bestimmte Reihe von Zeichen auszuwählen. Das Argument 31- sagt cut, alle Zeichen ab Position 31 bis zum Ende der Eingabezeile auszugeben.

Sie sollten eine Ausgabe wie folgt erhalten:

Output
24609a6c18

In diesem Beispiel ist die Byte-Reihe: 24 60 9a 6c 18.

Jetzt können Sie Ihren einzigartigen IPv6-Netzwerkpräfix erstellen, indem Sie die 5 generierten Bytes mit dem Präfix fd anfügen und jede 2 Bytes mit einem : Doppelpunkt für die Lesbarkeit trennen. Da jedes Subnetz in Ihrem einzigartigen Präfix insgesamt 18.446.744.073.709.551.616 mögliche IPv6-Adressen enthalten kann, können Sie das Subnetz für die Einfachheit auf eine Standardgröße von /64 beschränken.

Unter Verwendung der zuvor generierten Bytes mit der Subnetzgröße /64 ergibt sich der folgende Präfix:

Unique Local IPv6 Address Prefix
fd24:609a:6c18::/64

Dieser Bereich fd24:609a:6c18::/64 wird verwendet, um individuelle IP-Adressen den WireGuard-Tunnel-Interfaces auf dem Server und den Peers zuzuweisen. Um eine IP für den Server zuzuweisen, fügen Sie eine 1 nach den letzten :: Zeichen hinzu. Die resultierende Adresse lautet fd24:609a:6c18::1/64. Peers können jede IP im Bereich verwenden, aber normalerweise erhöhen Sie den Wert jedes Mal um eins, wenn Sie einen Peer hinzufügen, z.B. fd24:609a:6c18::2/64. Notieren Sie sich die IP und fahren Sie mit der Konfiguration des WireGuard-Servers im nächsten Abschnitt dieses Tutorials fort.

Schritt 3 — Erstellen einer WireGuard-Serverkonfiguration

Bevor Sie die Konfiguration Ihres WireGuard-Servers erstellen, benötigen Sie die folgenden Informationen:

  1. Vergewissern Sie sich, dass Sie den privaten Schlüssel aus Schritt 1 — Installation von WireGuard und Generierung eines Schlüsselpaars verfügbar haben.

  2. Wenn Sie WireGuard mit IPv4 verwenden, benötigen Sie die IP-Adresse, die Sie für den Server in Schritt 2(a) — Auswahl eines IPv4-Bereichs gewählt haben, die in diesem Beispiel 10.8.0.1/24 ist.

  3. Wenn Sie WireGuard mit IPv6 verwenden, benötigen Sie die IP-Adresse für den Server, die Sie in Schritt 2(b) — Auswahl eines IPv6-Bereichs generiert haben. In diesem Beispiel lautet die IP fd24:609a:6c18::1/64.

Nachdem Sie den erforderlichen privaten Schlüssel und die IP-Adresse(n) haben, erstellen Sie eine neue Konfigurationsdatei mit nano oder Ihrem bevorzugten Editor, indem Sie den folgenden Befehl ausführen:

  1. sudo nano /etc/wireguard/wg0.conf

Fügen Sie die folgenden Zeilen zur Datei hinzu und ersetzen Sie Ihren privaten Schlüssel durch den markierten Wert base64_encoded_private_key_goes_here und die IP-Adresse(n) in der Address-Zeile. Sie können auch die ListenPort-Zeile ändern, wenn Sie möchten, dass WireGuard auf einem anderen Port verfügbar ist:

/etc/wireguard/wg0.conf
[Interface] PrivateKey = base64_encoded_private_key_goes_here Address = 10.8.0.1/24, fd24:609a:6c18::1/64 ListenPort = 51820 SaveConfig = true

Die Zeile SaveConfig stellt sicher, dass beim Herunterfahren einer WireGuard-Schnittstelle Änderungen in der Konfigurationsdatei gespeichert werden.

Speichern und schließen Sie die Datei /etc/wireguard/wg0.conf. Wenn Sie nano verwenden, können Sie dies mit STRG+X, dann Y und EINGABE bestätigen. Sie haben nun eine initiale Serverkonfiguration, auf der Sie je nach Ihren Plänen für die Verwendung Ihres WireGuard-VPN-Servers aufbauen können.

Schritt 4 — Anpassen der Netzwerkkonfiguration des WireGuard-Servers

Wenn Sie WireGuard verwenden, um einen Peer mit dem WireGuard-Server zu verbinden, um nur auf Dienste auf dem Server zuzugreifen, müssen Sie diesen Abschnitt nicht abschließen. Wenn Sie den Internetverkehr Ihres WireGuard-Peers über den WireGuard-Server routen möchten, müssen Sie die IP-Weiterleitung gemäß diesem Abschnitt des Tutorials konfigurieren.

Um die Weiterleitung zu konfigurieren, öffnen Sie die Datei /etc/sysctl.conf mit nano oder Ihrem bevorzugten Editor:

  1. sudo nano /etc/sysctl.conf

Wenn Sie IPv4 mit WireGuard verwenden, fügen Sie die folgende Zeile am Ende der Datei hinzu:

/etc/sysctl.conf
net.ipv4.ip_forward=1

Wenn Sie IPv6 mit WireGuard verwenden, fügen Sie diese Zeile am Ende der Datei hinzu:

/etc/sysctl.conf
net.ipv6.conf.all.forwarding=1

Wenn Sie sowohl IPv4 als auch IPv6 verwenden, stellen Sie sicher, dass Sie beide Zeilen einbeziehen. Speichern und schließen Sie die Datei, wenn Sie fertig sind.

Um die Datei zu lesen und die neuen Werte für Ihre aktuelle Terminalsession zu laden, führen Sie aus:

  1. sudo sysctl -p
Output
net.ipv6.conf.all.forwarding = 1 net.ipv4.ip_forward = 1

Jetzt kann Ihr WireGuard-Server eingehenden Datenverkehr vom virtuellen VPN-Ethernet-Gerät an andere auf dem Server weiterleiten und von dort ins öffentliche Internet. Durch diese Konfiguration können Sie den gesamten Webverkehr Ihres WireGuard-Peers über die IP-Adresse Ihres Servers routen, und die öffentliche IP-Adresse Ihres Clients wird effektiv versteckt sein.

Bevor jedoch Datenverkehr ordnungsgemäß über Ihren Server geroutet werden kann, müssen Sie einige Firewall-Regeln konfigurieren. Diese Regeln stellen sicher, dass der Datenverkehr zu und von Ihrem WireGuard-Server und Peers ordnungsgemäß fließt.

Schritt 5 — Konfigurieren der Firewall des WireGuard-Servers

In diesem Abschnitt werden Sie die Konfiguration des WireGuard-Servers bearbeiten, um Firewall-Regeln hinzuzufügen, die sicherstellen, dass der Datenverkehr zwischen Server und Clients korrekt geroutet wird. Wie im vorherigen Abschnitt überspringen Sie diesen Schritt, wenn Sie Ihren WireGuard-VPN nur für eine Maschine-zu-Maschine-Verbindung verwenden, um auf Ressourcen zuzugreifen, die auf Ihren VPN beschränkt sind.

Um den WireGuard-VPN-Verkehr durch die Firewall des Servers zu ermöglichen, müssen Sie das Masquerading aktivieren, das ein iptables-Konzept ist, das eine dynamische Netzwerkadressübersetzung (NAT) bereitstellt, um Clientverbindungen korrekt zu routen.

Zuerst finden Sie die öffentliche Netzwerkschnittstelle Ihres WireGuard-Servers mithilfe des Befehls ip route sub-command:

  1. ip route list default

Die öffentliche Schnittstelle ist der String, der in der Ausgabe dieses Befehls gefunden wird und dem Wort „dev“ folgt. Zum Beispiel zeigt dieses Ergebnis die Schnittstelle namens eth0, die unten hervorgehoben ist:

Output
default via 203.0.113.1 dev eth0 proto static

Notieren Sie sich den Namen Ihres Geräts, da Sie ihn im nächsten Schritt den iptables-Regeln hinzufügen werden.

Um Firewall-Regeln zu Ihrem WireGuard-Server hinzuzufügen, öffnen Sie erneut die Datei /etc/wireguard/wg0.conf mit nano oder Ihrem bevorzugten Editor.

  1. sudo nano /etc/wireguard/wg0.conf

Fügen Sie am Ende der Datei nach der Zeile SaveConfig = true die folgenden Zeilen ein:

/etc/wireguard/wg0.conf
. . . PostUp = ufw route allow in on wg0 out on eth0 PostUp = iptables -t nat -I POSTROUTING -o eth0 -j MASQUERADE PostUp = ip6tables -t nat -I POSTROUTING -o eth0 -j MASQUERADE PreDown = ufw route delete allow in on wg0 out on eth0 PreDown = iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE PreDown = ip6tables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

Die PostUp-Zeilen werden ausgeführt, wenn der WireGuard-Server den virtuellen VPN-Tunnel startet. Im Beispiel hier werden drei ufw– und iptables-Regeln hinzugefügt:

  • ufw route allow in on wg0 out on eth0 – Diese Regel erlaubt die Weiterleitung von IPv4- und IPv6-Verkehr, der über die VPN-Schnittstelle wg0 hereinkommt, auf die Netzwerkschnittstelle eth0 des Servers. Sie funktioniert in Verbindung mit den net.ipv4.ip_forward– und net.ipv6.conf.all.forwarding-Sysctl-Werten, die Sie im vorherigen Abschnitt konfiguriert haben.
  • iptables -t nat -I POSTROUTING -o eth0 -j MASQUERADE – Diese Regel konfiguriert Masquerading und ändert den IPv4-Verkehr, der über die wg0-VPN-Schnittstelle hereinkommt, so um, dass es so aussieht, als käme er direkt von der öffentlichen IPv4-Adresse des WireGuard-Servers.
  • ip6tables -t nat -I POSTROUTING -o eth0 -j MASQUERADE – Diese Regel konfiguriert Masquerading und ändert den IPv6-Verkehr, der über die wg0-VPN-Schnittstelle hereinkommt, so um, dass es so aussieht, als käme er direkt von der öffentlichen IPv6-Adresse des WireGuard-Servers.

Die PreDown-Regeln werden ausgeführt, wenn der WireGuard-Server den virtuellen VPN-Tunnel stoppt. Diese Regeln sind das Gegenteil der PostUp-Regeln und dienen dazu, die Weiterleitungs- und Masquerading-Regeln für die VPN-Schnittstelle rückgängig zu machen, wenn der VPN-Tunnel gestoppt wird.

In beiden Fällen bearbeiten Sie die Konfiguration, um die IPv4- und IPv6-Regeln einzubeziehen oder auszuschließen, die für Ihr VPN geeignet sind. Wenn Sie beispielsweise nur IPv4 verwenden, können Sie die Zeilen mit den ip6tables-Befehlen ausschließen.

Umgekehrt, wenn Sie nur IPv6 verwenden, bearbeiten Sie die Konfiguration so, dass nur die ip6tables-Befehle enthalten sind. Die ufw-Zeilen sollten für jede Kombination von IPv4- und IPv6-Netzwerken vorhanden sein. Speichern Sie die Datei, wenn Sie fertig sind.

Der letzte Teil der Firewall-Konfiguration auf Ihrem WireGuard-Server besteht darin, den Datenverkehr zum und vom WireGuard-UDP-Port selbst zuzulassen. Wenn Sie den Port in der Datei /etc/wireguard/wg0.conf des Servers nicht geändert haben, ist der Port, den Sie öffnen werden, 51820. Wenn Sie einen anderen Port gewählt haben, wenn Sie die Konfiguration bearbeiten, stellen Sie sicher, dass Sie ihn im folgenden UFW-Befehl ersetzen.

Falls Sie vergessen haben, den SSH-Port bei der Durchführung des vorherigen Tutorials zu öffnen, fügen Sie ihn hier ebenfalls hinzu:

  1. sudo ufw allow 51820/udp
  2. sudo ufw allow OpenSSH

Hinweis: Wenn Sie eine andere Firewall verwenden oder Ihre UFW-Konfiguration angepasst haben, müssen möglicherweise zusätzliche Firewall-Regeln hinzugefügt werden. Wenn Sie sich zum Beispiel entscheiden, den gesamten Netzwerkverkehr über die VPN-Verbindung zu tunneln, müssen Sie sicherstellen, dass der Port 53 für DNS-Anfragen zugelassen ist, sowie die Ports 80 und 443 für HTTP- bzw. HTTPS-Verkehr. Wenn Sie andere Protokolle über die VPN-Verbindung verwenden, müssen Sie ebenfalls Regeln dafür hinzufügen.

Nachdem Sie diese Regeln hinzugefügt haben, deaktivieren und aktivieren Sie UFW, um es neu zu starten und die Änderungen aus allen von Ihnen modifizierten Dateien zu laden:

  1. sudo ufw disable
  2. sudo ufw enable

Sie können bestätigen, dass die Regeln vorhanden sind, indem Sie den Befehl ufw status ausführen. Führen Sie ihn aus, und Sie sollten eine Ausgabe wie die folgende erhalten:

  1. sudo ufw status
Output
Status: active To Action From -- ------ ---- 51280/udp ALLOW Anywhere 22/tcp ALLOW Anywhere 51280/udp (v6) ALLOW Anywhere (v6) 22/tcp (v6) ALLOW Anywhere (v6)

Ihr WireGuard-Server ist jetzt so konfiguriert, dass er den Datenverkehr des VPN korrekt behandelt, einschließlich Weiterleitung und Maskierung für Peers. Mit den Firewall-Regeln können Sie den WireGuard-Dienst selbst starten, um auf Peer-Verbindungen zu lauschen.

Schritt 6 — Starten des WireGuard-Servers

WireGuard kann so konfiguriert werden, dass es als systemd-Dienst mit seinem integrierten wg-quick-Skript ausgeführt wird. Obwohl Sie den Tunnel jedes Mal manuell mit dem wg-Befehl erstellen könnten, wenn Sie das VPN verwenden möchten, ist dies ein manueller Prozess, der wiederholend und fehleranfällig wird. Stattdessen können Sie mit Hilfe des systemctl-Befehls den Tunnel mit dem wg-quick-Skript verwalten.

Die Verwendung eines systemd-Dienstes bedeutet, dass Sie WireGuard so konfigurieren können, dass es beim Booten startet, sodass Sie sich jederzeit mit Ihrem VPN verbinden können, solange der Server läuft. Um dies zu erreichen, aktivieren Sie den wg-quick-Dienst für den wg0-Tunnel, den Sie definiert haben, indem Sie ihn zu systemctl hinzufügen:

  1. sudo systemctl enable [email protected]

Beachten Sie, dass der Befehl den Namen des Tunnelgeräts wg0 als Teil des Dienstnamens angibt. Dieser Name entspricht der Konfigurationsdatei /etc/wireguard/wg0.conf. Diese Namensgebung ermöglicht es Ihnen, so viele separate VPN-Tunnel zu erstellen, wie Sie möchten, indem Sie Ihren Server verwenden.

Zum Beispiel könnten Sie ein Tunnelgerät mit dem Namen prod haben und dessen Konfigurationsdatei wäre /etc/wireguard/prod.conf. Jede Tunnelkonfiguration kann verschiedene IPv4-, IPv6- und Client-Firewall-Einstellungen enthalten. Auf diese Weise können Sie mehrere verschiedene Peer-Verbindungen unterstützen, von denen jede ihre eigenen eindeutigen IP-Adressen und Routing-Regeln hat.

Starten Sie nun den Dienst:

  1. sudo systemctl start [email protected]

Überprüfen Sie mit dem folgenden Befehl, ob der WireGuard-Dienst aktiv ist. Sie sollten active (running) in der Ausgabe sehen:

  1. sudo systemctl status [email protected]
Output
[email protected] - WireGuard via wg-quick(8) for wg0 Loaded: loaded (/lib/systemd/system/[email protected]; enabled; vendor preset: enabled) Active: active (exited) since Mon 2022-04-18 17:22:13 UTC; 2s ago Docs: man:wg-quick(8) man:wg(8) https://www.wireguard.com/ https://www.wireguard.com/quickstart/ https://git.zx2c4.com/wireguard-tools/about/src/man/wg-quick.8 https://git.zx2c4.com/wireguard-tools/about/src/man/wg.8 Process: 98834 ExecStart=/usr/bin/wg-quick up wg0 (code=exited, status=0/SUCCESS) Main PID: 98834 (code=exited, status=0/SUCCESS) CPU: 193ms Apr 18 17:22:13 thats-my-jam wg-quick[98834]: [#] wg setconf wg0 /dev/fd/63 Apr 18 17:22:13 thats-my-jam wg-quick[98834]: [#] ip -4 address add 10.8.0.1/24 dev wg0 Apr 18 17:22:13 thats-my-jam wg-quick[98834]: [#] ip -6 address add fd24:609a:6c18::1/64 dev wg0 Apr 18 17:22:13 thats-my-jam wg-quick[98834]: [#] ip link set mtu 1420 up dev wg0 Apr 18 17:22:13 thats-my-jam wg-quick[98834]: [#] ufw route allow in on wg0 out on ens3 Apr 18 17:22:13 thats-my-jam wg-quick[98890]: Rule added Apr 18 17:22:13 thats-my-jam wg-quick[98890]: Rule added (v6) Apr 18 17:22:13 thats-my-jam wg-quick[98834]: [#] iptables -t nat -I POSTROUTING -o ens3 -j MASQUERADE Apr 18 17:22:13 thats-my-jam wg-quick[98834]: [#] ip6tables -t nat -I POSTROUTING -o ens3 -j MASQUERADE Apr 18 17:22:13 thats-my-jam systemd[1]: Finished WireGuard via wg-quick(8) for wg0.

Die Ausgabe zeigt die ip-Befehle, die verwendet werden, um das virtuelle Gerät wg0 zu erstellen und ihm die IPv4- und IPv6-Adressen zuzuweisen, die Sie der Konfigurationsdatei hinzugefügt haben. Diese Regeln können Sie zum Troubleshooting des Tunnels verwenden oder direkt mit dem wg-Befehl, falls Sie die VPN-Schnittstelle manuell konfigurieren möchten.

Mit dem konfigurierten und laufenden Server ist der nächste Schritt die Konfiguration Ihrer Client-Maschine als WireGuard-Peer und die Verbindung zum WireGuard-Server.

Schritt 7 — Konfigurieren eines WireGuard-Peers

Das Konfigurieren eines WireGuard-Peers ist ähnlich wie das Einrichten des WireGuard-Servers. Sobald Sie die Client-Software installiert haben, generieren Sie ein öffentliches und privates Schlüsselpaar, entscheiden sich für eine oder mehrere IP-Adressen für den Peer, definieren eine Konfigurationsdatei für den Peer und starten dann den Tunnel mit dem wg-quick-Skript.

Sie können beliebig viele Peers zu Ihrem VPN hinzufügen, indem Sie einen Schlüsselpaar und eine Konfiguration generieren, indem Sie die folgenden Schritte ausführen. Wenn Sie mehrere Peers zum VPN hinzufügen, achten Sie darauf, ihre privaten IP-Adressen zu verfolgen, um Kollisionen zu vermeiden.

Um den WireGuard-Peer zu konfigurieren, stellen Sie sicher, dass Sie das WireGuard-Paket installiert haben, indem Sie die folgenden apt-Befehle verwenden. Führen Sie auf dem WireGuard-Peer aus:

  1. sudo apt update
  2. sudo apt install wireguard

Erstellen des WireGuard-Peer-Schlüsselpaars

Anschließend müssen Sie auf dem Peer das Schlüsselpaar generieren, indem Sie dieselben Schritte wie auf dem Server ausführen. Gehen Sie von Ihrer lokalen Maschine oder einem entfernten Server, der als Peer dient, vor und erstellen Sie den privaten Schlüssel für den Peer mit den folgenden Befehlen:

  1. wg genkey | sudo tee /etc/wireguard/private.key
  2. sudo chmod go= /etc/wireguard/private.key

Erneut erhalten Sie eine einzelne Zeile mit base64-codierter Ausgabe, die den privaten Schlüssel darstellt. Eine Kopie der Ausgabe wird auch in der Datei /etc/wireguard/private.key gespeichert. Notieren Sie sich sorgfältig den ausgegebenen privaten Schlüssel, da Sie ihn später in diesem Abschnitt zur Konfigurationsdatei von WireGuard hinzufügen müssen.

Verwenden Sie anschließend den folgenden Befehl, um die Datei mit dem öffentlichen Schlüssel zu erstellen:

  1. sudo cat /etc/wireguard/private.key | wg pubkey | sudo tee /etc/wireguard/public.key

Sie erhalten erneut eine einzelne Zeile mit base64-codierter Ausgabe, die den öffentlichen Schlüssel für Ihren WireGuard-Peer darstellt. Kopieren Sie ihn irgendwohin zur Referenz, da Sie den öffentlichen Schlüssel an den WireGuard-Server verteilen müssen, um eine verschlüsselte Verbindung herzustellen.

Erstellen der Konfigurationsdatei für den WireGuard-Peer

Jetzt, da Sie ein Schlüsselpaar haben, können Sie eine Konfigurationsdatei für den Peer erstellen, die alle Informationen enthält, die er benötigt, um eine Verbindung zum WireGuard-Server herzustellen.

Sie benötigen einige Informationen für die Konfigurationsdatei:

  • Den Base64-codierten privaten Schlüssel, den Sie auf dem Peer generiert haben.

  • Die IPv4- und IPv6-Adressbereiche, die Sie auf dem WireGuard-Server definiert haben.

  • Den Base64-codierten öffentlichen Schlüssel vom WireGuard-Server.

  • Die öffentliche IP-Adresse und Portnummer des WireGuard-Servers. Normalerweise handelt es sich dabei um die IPv4-Adresse, aber wenn Ihr Server eine IPv6-Adresse hat und Ihr Clientrechner eine IPv6-Verbindung zum Internet hat, können Sie stattdessen diese verwenden.

Mit all diesen Informationen vorliegend, öffnen Sie eine neue /etc/wireguard/wg0.conf Datei auf dem WireGuard Peer-Rechner mit nano oder Ihrem bevorzugten Editor:

  1. sudo nano /etc/wireguard/wg0.conf

Fügen Sie die folgenden Zeilen zur Datei hinzu und ersetzen Sie die verschiedenen Daten in den hervorgehobenen Abschnitten nach Bedarf:

/etc/wireguard/wg0.conf
[Interface] PrivateKey = base64_encoded_peer_private_key_goes_here Address = 10.8.0.2/24 Address = fd24:609a:6c18::2/64 [Peer] PublicKey = U9uE2kb/nrrzsEU58GD3pKFU3TLYDMCbetIsnV8eeFE= AllowedIPs = 10.8.0.0/24, fd24:609a:6c18::/64 Endpoint = 203.0.113.1:51820

Bemerken Sie, wie die erste Address-Zeile eine IPv4-Adresse aus dem von Ihnen zuvor gewählten 10.8.0.0/24 Subnetz verwendet. Diese IP-Adresse kann beliebig sein innerhalb des Subnetzes, solange sie sich von der IP des Servers unterscheidet. Das Inkrementieren der Adressen um jeweils 1 jedes Mal, wenn Sie einen Peer hinzufügen, ist im Allgemeinen der einfachste Weg, IPs zuzuweisen.

Ebenso fällt auf, wie die zweite Address-Zeile eine IPv6-Adresse aus dem zuvor generierten Subnetz verwendet und die Adresse des Servers um eins erhöht. Auch hier ist jede IP im Bereich gültig, wenn Sie sich entscheiden, eine andere Adresse zu verwenden.

Der andere bemerkenswerte Teil der Datei ist die letzte AllowedIPs-Zeile. Diese beiden IPv4- und IPv6-Bereiche weisen den Peer an, den Datenverkehr über das VPN nur dann zu senden, wenn das Zielsystem eine IP-Adresse in einem der beiden Bereiche hat. Mit der AllowedIPs-Direktive können Sie das VPN auf dem Peer so konfigurieren, dass es nur eine Verbindung zu anderen Peers und Diensten über das VPN herstellt, oder Sie können die Einstellung so konfigurieren, dass der gesamte Datenverkehr über das VPN getunnelt wird und den WireGuard-Server als Gateway verwendet.

Wenn Sie nur IPv4 verwenden, lassen Sie den abschließenden fd24:609a:6c18::/64-Bereich (einschließlich des , Kommas) weg. Umgekehrt, wenn Sie nur IPv6 verwenden, fügen Sie nur das fd24:609a:6c18::/64-Präfix ein und lassen Sie den 10.8.0.0/24-IPv4-Bereich aus.

In beiden Fällen, wenn Sie den gesamten Datenverkehr Ihres Peers über das VPN senden möchten und den WireGuard-Server als Gateway für alle Daten verwenden möchten, können Sie 0.0.0.0/0 verwenden, was den gesamten IPv4-Adressraum repräsentiert, und ::/0 für den gesamten IPv6-Adressraum.

(Optional) Konfigurieren eines Peers zum Weiterleiten des gesamten Datenverkehrs über den Tunnel

Wenn Sie sich dafür entschieden haben, den gesamten Datenverkehr des Peers über den Tunnel unter Verwendung der Routen 0.0.0.0/0 oder ::/0 zu leiten und der Peer ein entferntes System ist, müssen Sie die Schritte in diesem Abschnitt abschließen. Wenn Ihr Peer ein lokales System ist, ist es am besten, diesen Abschnitt zu überspringen.

Für entfernte Peers, auf die Sie über SSH oder ein anderes Protokoll unter Verwendung einer öffentlichen IP-Adresse zugreifen, müssen Sie einige zusätzliche Regeln zur wg0.conf-Datei des Peers hinzufügen. Diese Regeln stellen sicher, dass Sie sich auch dann noch mit dem System verbinden können, wenn es außerhalb des Tunnels verbunden ist. Andernfalls wird, wenn der Tunnel hergestellt ist, der gesamte Datenverkehr, der normalerweise über die öffentliche Netzwerkschnittstelle behandelt würde, nicht ordnungsgemäß zum Umgehen der wg0-Tunnelschnittstelle geroutet, was zu einem nicht erreichbaren entfernten System führt.

Zuerst müssen Sie die IP-Adresse bestimmen, die das System als seinen Standardgateway verwendet. Führen Sie den folgenden Befehl ip route aus:

  1. ip route list table main default

Sie erhalten eine Ausgabe wie folgt:

Output
default via 203.0.113.1 dev eth0 proto static

Beachten Sie die markierte IP-Adresse des Gateways 203.0.113.1 für spätere Verwendung und das Gerät eth0. Ihr Gerätename kann unterschiedlich sein. Ersetzen Sie ihn in den folgenden Befehlen, falls erforderlich, anstelle von eth0.

Finden Sie als Nächstes die öffentliche IP-Adresse für das System, indem Sie das Gerät mit dem Befehl ip address show untersuchen:

  1. ip -brief address show eth0

Sie erhalten eine Ausgabe wie die folgende:

Output
eth0 UP 203.0.113.5/20 10.20.30.40/16 2604:a880:400:d1::3d3:6001/64 fe80::68d5:beff:feff:974c/64

In diesem Beispiel ist die markierte IP-Adresse 203.0.113.5 (ohne das abschließende /20) die öffentliche Adresse, die dem Gerät eth0 zugewiesen ist, die Sie zur WireGuard-Konfiguration hinzufügen müssen.

Öffnen Sie nun die Datei des WireGuard-Peers /etc/wireguard/wg0.conf mit nano oder Ihrem bevorzugten Editor.

  1. sudo nano /etc/wireguard/wg0.conf

Vor der Zeile [Peer] fügen Sie die folgenden 4 Zeilen hinzu:

PostUp = ip rule add table 200 from 203.0.113.5
PostUp = ip route add table 200 default via 203.0.113.1
PreDown = ip rule delete table 200 from 203.0.113.5
PreDown = ip route delete table 200 default via 203.0.113.1

[Peer]
. . .

Diese Zeilen erstellen eine benutzerdefinierte Routing-Regel und fügen eine benutzerdefinierte Route hinzu, um sicherzustellen, dass öffentlicher Datenverkehr zum System den Standardgateway verwendet.

  • PostUp = ip rule add table 200 from 203.0.113.5 – Dieser Befehl erstellt eine Regel, die nach Routingeinträgen in der Tabelle mit der Nummer 200 sucht, wenn die IP mit der öffentlichen IP-Adresse des Systems 203.0.113.5 übereinstimmt.
  • PostUp = ip route add table 200 default via 203.0.113.1 – Dieser Befehl stellt sicher, dass jeglicher Datenverkehr, der von der Tabelle 200 verarbeitet wird, den Gateway 203.0.113.1 für das Routing verwendet, anstatt das WireGuard-Interface.

Die PreDown-Zeilen entfernen die benutzerdefinierte Regel und Route, wenn der Tunnel heruntergefahren wird.

Hinweis: Die Tabellennummer 200 ist beliebig, wenn diese Regeln erstellt werden. Sie können einen Wert zwischen 2 und 252 verwenden oder einen benutzerdefinierten Namen hinzufügen, indem Sie eine Bezeichnung zur Datei /etc/iproute2/rt_tables hinzufügen und dann anstelle des numerischen Werts auf den Namen verweisen.

Weitere Informationen darüber, wie Routing-Tabellen in Linux funktionieren, finden Sie im Abschnitt Routing-Tabellen des Leitfadens für die IP-Layer-Netzwerkverwaltung mit Linux.

Wenn Sie den gesamten Datenverkehr des Peers über das VPN routen, stellen Sie sicher, dass Sie die richtigen sysctl– und iptables-Regeln auf dem WireGuard-Server in Schritt 4 — Anpassen der Netzwerkkonfiguration des WireGuard-Servers und Schritt 5 — Konfigurieren der Firewall des WireGuard-Servers eingerichtet haben.

(Optional) Konfigurieren der DNS-Resolver des WireGuard-Peers

Wenn Sie den WireGuard-Server als VPN-Gateway für den gesamten Datenverkehr Ihrer Peers verwenden, müssen Sie eine Zeile zum Abschnitt [Interface] hinzufügen, die DNS-Resolver angibt. Wenn Sie diese Einstellung nicht hinzufügen, können Ihre DNS-Anfragen möglicherweise nicht durch das VPN gesichert werden oder sie könnten Ihrem Internetdienstanbieter oder anderen Dritten offengelegt werden.

Wenn Sie WireGuard nur verwenden, um auf Ressourcen im VPN-Netzwerk oder in einer Peer-to-Peer-Konfiguration zuzugreifen, können Sie diesen Abschnitt überspringen.

Um DNS-Resolver zur Konfiguration Ihres Peers hinzuzufügen, bestimmen Sie zunächst, welche DNS-Server Ihr WireGuard-Server verwendet. Führen Sie auf dem WireGuard-Server den folgenden Befehl aus und ersetzen Sie dabei Ihren Ethernet-Gerätenamen durch eth0, wenn er von diesem Beispiel abweicht:

  1. resolvectl dns eth0

Sie sollten eine Ausgabe wie folgt erhalten:

Output
Link 2 (eth0): 67.207.67.2 67.207.67.3 2001:4860:4860::8844 2001:4860:4860::8888

Die ausgegebenen IP-Adressen sind die DNS-Resolver, die der Server verwendet. Sie können wählen, alle oder einige davon zu verwenden, oder nur IPv4 oder IPv6, abhängig von Ihren Anforderungen. Notieren Sie sich die Resolver, die Sie verwenden möchten.

Anschließend müssen Sie Ihre ausgewählten Resolver zur Konfigurationsdatei des WireGuard-Peers hinzufügen. Gehen Sie zurück zum WireGuard-Peer, öffnen Sie die Datei /etc/wireguard/wg0.conf mit nano oder Ihrem bevorzugten Editor:

  1. sudo nano /etc/wireguard/wg0.conf

Vor der [Peer]-Zeile fügen Sie folgendes hinzu:

DNS = 67.207.67.2 2001:4860:4860::8844

[Peer]
. . .

Je nach Ihren Vorlieben oder Anforderungen für IPv4 und IPv6 können Sie die Liste entsprechend Ihren Bedürfnissen bearbeiten.

Sobald Sie in folgendem Schritt mit dem VPN verbunden sind, können Sie überprüfen, ob Sie DNS-Anfragen über das VPN senden, indem Sie eine Website wie DNS-Leak-Test.com verwenden.

Sie können auch überprüfen, ob Ihr Peer die konfigurierten Resolver mit dem Befehl resolvectl dns verwendet, wie Sie ihn auf dem Server ausgeführt haben. Sie sollten eine Ausgabe wie die folgende erhalten, die die DNS-Resolver zeigt, die Sie für den VPN-Tunnel konfiguriert haben:

Output
Global: 67.207.67.2 67.207.67.3 . . .

Mit all diesen DNS-Resolver-Einstellungen sind Sie nun bereit, den öffentlichen Schlüssel des Peers zum Server hinzuzufügen und dann den WireGuard-Tunnel auf dem Peer zu starten.

Schritt 8 — Hinzufügen des öffentlichen Schlüssels des Peers zum WireGuard-Server

Bevor Sie den Peer mit dem Server verbinden, ist es wichtig, den öffentlichen Schlüssel des Peers zum WireGuard-Server hinzuzufügen. Dieser Schritt stellt sicher, dass Sie eine Verbindung herstellen und Datenverkehr über das VPN leiten können. Ohne diesen Schritt wird der WireGuard-Server dem Peer nicht gestatten, Datenverkehr über den Tunnel zu senden oder zu empfangen.

Vergewissern Sie sich, dass Sie eine Kopie des base64-codierten öffentlichen Schlüssels für den WireGuard-Peer haben, indem Sie folgenden Befehl ausführen:

  1. sudo cat /etc/wireguard/public.key
Output
PeURxj4Q75RaVhBKkRTpNsBPiPSGb5oQijgJsTa29hg=

Melden Sie sich nun am WireGuard-Server an und führen Sie den folgenden Befehl aus:

  1. sudo wg set wg0 peer PeURxj4Q75RaVhBKkRTpNsBPiPSGb5oQijgJsTa29hg= allowed-ips 10.8.0.2,fd24:609a:6c18::2

Beachten Sie, dass der Abschnitt allowed-ips des Befehls eine durch Kommas getrennte Liste von IPv4- und IPv6-Adressen akzeptiert. Sie können einzelne IPs angeben, wenn Sie die IP-Adresse einschränken möchten, die ein Peer sich selbst zuweisen kann, oder einen Bereich wie im Beispiel, wenn Ihre Peers eine beliebige IP-Adresse im VPN-Bereich verwenden können. Beachten Sie auch, dass keine zwei Peers dieselbe allowed-ips-Einstellung haben können.

Wenn Sie die allowed-ips für einen vorhandenen Peer aktualisieren möchten, können Sie denselben Befehl erneut ausführen, aber die IP-Adressen ändern. Mehrere IP-Adressen werden unterstützt. Um beispielsweise den WireGuard-Peer, den Sie gerade hinzugefügt haben, zu aktualisieren und eine IP wie 10.8.0.100 zu den bestehenden 10.8.0.2 und fd24:609a:6c18::2-IPs hinzuzufügen, würden Sie folgendes ausführen:

  1. sudo wg set wg0 peer PeURxj4Q75RaVhBKkRTpNsBPiPSGb5oQijgJsTa29hg= allowed-ips 10.8.0.2,10.8.0.100,fd24:609a:6c18::2

Nachdem Sie den Befehl zum Hinzufügen des Peers ausgeführt haben, überprüfen Sie den Status des Tunnels auf dem Server mithilfe des wg-Befehls:

  1. sudo wg
Output
interface: wg0 public key: U9uE2kb/nrrzsEU58GD3pKFU3TLYDMCbetIsnV8eeFE= private key: (hidden) listening port: 51820 peer: PeURxj4Q75RaVhBKkRTpNsBPiPSGb5oQijgJsTa29hg= allowed ips: 10.8.0.2/32, fd24:609a:6c18::/128

Bemerken Sie, wie die Zeile peer den öffentlichen Schlüssel des WireGuard-Peers und die IP-Adressen oder Adressbereiche zeigt, die er verwenden darf, um sich eine IP zuzuweisen.

Jetzt, da Sie die Verbindungsinformationen des Peers auf dem Server definiert haben, ist der nächste Schritt, den Tunnel auf dem Peer zu starten.

Schritt 9 — Verbindung des WireGuard-Peers mit dem Tunnel herstellen

Nun, da Ihr Server und Peer beide so konfiguriert sind, dass sie Ihre Wahl von IPv4, IPv6, Paketweiterleitung und DNS-Auflösung unterstützen, ist es an der Zeit, den Peer mit dem VPN-Tunnel zu verbinden.

Da Sie das VPN möglicherweise nur für bestimmte Anwendungsfälle aktivieren möchten, verwenden wir das wg-quick-Befehl, um die Verbindung manuell herzustellen. Wenn Sie den Tunnel automatisch starten möchten, wie Sie es auf dem Server getan haben, befolgen Sie stattdessen die Schritte im Abschnitt Schritt 6 – Starten des WireGuard-Servers anstelle des wq-quick-Befehls.

Wenn Sie den gesamten Datenverkehr über das VPN leiten und die DNS-Weiterleitung eingerichtet haben, müssen Sie auf dem WireGuard-Peer das Dienstprogramm resolvconf installieren, bevor Sie den Tunnel starten. Führen Sie den folgenden Befehl aus, um dies einzurichten:

  1. sudo apt install resolvconf

Um den Tunnel zu starten, führen Sie Folgendes auf dem WireGuard-Peer aus:

  1. sudo wg-quick up wg0

Sie erhalten eine Ausgabe wie folgt:

Output
[#] ip link add wg0 type wireguard [#] wg setconf wg0 /dev/fd/63 [#] ip -4 address add 10.8.0.2/24 dev wg0 [#] ip -6 address add fd24:609a:6c18::2/64 dev wg0 [#] ip link set mtu 1420 up dev wg0 [#] resolvconf -a tun.wg0 -m 0 -x

Bemerken Sie die hervorgehobenen IPv4- und IPv6-Adressen, die Sie dem Peer zugewiesen haben.

Wenn Sie die AllowedIPs auf dem Peer auf 0.0.0.0/0 und ::/0 (oder auf andere Bereiche als die, die Sie für das VPN ausgewählt haben) eingestellt haben, wird Ihre Ausgabe wie folgt aussehen:

Output
[#] ip link add wg0 type wireguard [#] wg setconf wg0 /dev/fd/63 [#] ip -4 address add 10.8.0.2/24 dev wg0 [#] ip -6 address add fd24:609a:6c18::2/64 dev wg0 [#] ip link set mtu 1420 up dev wg0 [#] resolvconf -a tun.wg0 -m 0 -x [#] wg set wg0 fwmark 51820 [#] ip -6 route add ::/0 dev wg0 table 51820 [#] ip -6 rule add not fwmark 51820 table 51820 [#] ip -6 rule add table main suppress_prefixlength 0 [#] ip6tables-restore -n [#] ip -4 route add 0.0.0.0/0 dev wg0 table 51820 [#] ip -4 rule add not fwmark 51820 table 51820 [#] ip -4 rule add table main suppress_prefixlength 0 [#] sysctl -q net.ipv4.conf.all.src_valid_mark=1 [#] iptables-restore -n

In diesem Beispiel bemerken Sie die hervorgehobenen Routen, die der Befehl hinzugefügt hat, die den AllowedIPs in der Peer-Konfiguration entsprechen.

Sie können den Status des Tunnels auf dem Peer mit dem Befehl wg überprüfen:

  1. sudo wg
Output
interface: wg0 public key: PeURxj4Q75RaVhBKkRTpNsBPiPSGb5oQijgJsTa29hg= private key: (hidden) listening port: 49338 fwmark: 0xca6c peer: U9uE2kb/nrrzsEU58GD3pKFU3TLYDMCbetIsnV8eeFE= endpoint: 203.0.113.1:51820 allowed ips: 10.8.0.0/24, fd24:609a:6c18::/64 latest handshake: 1 second ago transfer: 6.50 KiB received, 15.41 KiB sent

Sie können auch den Status erneut auf dem Server überprüfen, und Sie erhalten eine ähnliche Ausgabe.

Überprüfen Sie, ob Ihr Peer das VPN verwendet, indem Sie die Befehle ip route und ip -6 route verwenden. Wenn Sie das VPN als Gateway für Ihren gesamten Internetverkehr verwenden, überprüfen Sie, über welche Schnittstelle der Verkehr zu CloudFlares DNS-Resolvern 1.1.1.1 und 2606:4700:4700::1111 geleitet wird.

Wenn Sie WireGuard nur verwenden, um auf Ressourcen im VPN zuzugreifen, ersetzen Sie eine gültige IPv4- oder IPv6-Adresse wie das Gateway selbst durch diese Befehle. Zum Beispiel 10.8.0.1 oder fd24:609a:6c18::1.

  1. ip route get 1.1.1.1
Output
1.1.1.1 dev wg0 table 51820 src 10.8.0.2 uid 1000 cache

Beachten Sie, dass das Gerät wg0 verwendet wird und die IPv4-Adresse 10.8.0.2, die Sie dem Peer zugewiesen haben. Wenn Sie IPv6 verwenden, führen Sie Folgendes aus:

  1. ip -6 route get 2606:4700:4700::1111
Output
2606:4700:4700::1111 from :: dev wg0 table 51820 src fd24:609a:6c18::2 metric 1024 pref medium

Beachten Sie erneut die Schnittstelle wg0 und die IPv6-Adresse fd24:609a:6c18::2, die Sie dem Peer zugewiesen haben.

Wenn Ihr Peer einen Browser installiert hat, können Sie auch ipleak.net und ipv6-test.com besuchen, um zu bestätigen, dass Ihr Peer seinen Verkehr über das VPN leitet.

Wenn Sie bereit sind, die Verbindung zum VPN auf dem Peer zu trennen, verwenden Sie den Befehl wg-quick:

  1. sudo wg-quick down wg0

Sie erhalten eine Ausgabe wie folgt, die anzeigt, dass der VPN-Tunnel geschlossen ist:

Output
[#] ip link delete dev wg0 [#] resolvconf -d tun.wg0 -f

Wenn Sie die AllowedIPs auf dem Peer auf 0.0.0.0/0 und ::/0 (oder auf andere Bereiche als die, die Sie für das VPN gewählt haben) gesetzt haben, ähnelt Ihre Ausgabe der folgenden:

Output
[#] ip rule delete table 200 from 203.0.113.5 [#] ip route delete table 200 default via 203.0.113.1 [#] ip -4 rule delete table 51820 [#] ip -4 rule delete table main suppress_prefixlength 0 [#] ip -6 rule delete table 51820 [#] ip -6 rule delete table main suppress_prefixlength 0 [#] ip link delete dev wg0 [#] resolvconf -d tun.wg0 -f [#] iptables-restore -n [#] ip6tables-restore -n

Um sich erneut mit dem VPN zu verbinden, führen Sie den Befehl wg-quick up wg0 erneut auf dem Peer aus. Wenn Sie die Konfiguration eines Peers vollständig vom WireGuard-Server entfernen möchten, können Sie den folgenden Befehl ausführen. Stellen Sie sicher, dass Sie den richtigen öffentlichen Schlüssel für den zu entfernenden Peer einsetzen:

  1. sudo wg set wg0 peer PeURxj4Q75RaVhBKkRTpNsBPiPSGb5oQijgJsTa29hg= remove

In der Regel müssen Sie eine Peer-Konfiguration nur entfernen, wenn der Peer nicht mehr vorhanden ist oder wenn seine Verschlüsselungsschlüssel kompromittiert oder geändert wurden. Andernfalls ist es besser, die Konfiguration beizubehalten, damit der Peer eine Verbindung zum VPN herstellen kann, ohne dass Sie jedes Mal seinen Schlüssel und allowed-ips hinzufügen müssen.

Abschluss

In diesem Tutorial haben Sie das WireGuard-Paket und die Tools sowohl auf dem Server als auch auf den Client-Systemen Ubuntu 22.04 installiert. Sie haben Firewall-Regeln für WireGuard eingerichtet und Kernel-Einstellungen konfiguriert, um Paketweiterleitung mit dem Befehl sysctl auf dem Server zu ermöglichen. Sie haben gelernt, wie man private und öffentliche WireGuard-Verschlüsselungsschlüssel generiert und wie man den Server und den Peer (oder die Peers) konfiguriert, um eine Verbindung herzustellen.

Wenn Ihr Netzwerk IPv6 verwendet, haben Sie auch gelernt, wie Sie einen eindeutigen lokalen Adressbereich generieren, der für Peer-Verbindungen verwendet werden soll. Schließlich haben Sie gelernt, wie Sie den Datenverkehr einschränken können, der über das VPN gehen soll, indem Sie die Netzwerkpräfixe beschränken, die der Peer verwenden kann, sowie wie Sie den WireGuard-Server als VPN-Gateway verwenden, um den gesamten Internetverkehr für Peers zu verarbeiten.

Wenn Sie mehr über WireGuard erfahren möchten, einschließlich der Konfiguration fortgeschrittenerer Tunnel oder der Verwendung von WireGuard mit Containern, besuchen Sie die offizielle WireGuard-Dokumentation.

Source:
https://www.digitalocean.com/community/tutorials/how-to-set-up-wireguard-on-ubuntu-22-04