WireGuard

Aus Foxwiki

WireGuard ist eine Software zum Aufbau eines VPN (Virtual Private Network)

Beschreibung

  • Kryptografie mit öffentlichen und privaten Schlüsseln
  • Verwendung einer spezifischen kryptografischen Cipher-Suite, um Einfachheit, Sicherheit und Kompatibilität mit Clients zu gewährleisten.
    • Im Vergleich dazu verwenden andere VPN-Software wie OpenVPN und IPSec Transport Layer Security (TLS) und Zertifikate, um sich zu authentifizieren und verschlüsselte Tunnel zwischen Systemen aufzubauen.
    • Verschiedene Versionen von TLS beinhalten Unterstützung für Hunderte verschiedener kryptografischer Suiten und Algorithmen, und während dies eine große Flexibilität zur Unterstützung verschiedener Clients ermöglicht, macht es auch die Konfiguration eines VPN, das TLS verwendet, zeitaufwendiger, komplexer und fehleranfälliger.

Server

Installation

# apt install wireguard

Schlüsselpaar erzeugen

Privaten Schlüssel erzeugen
# wg genkey > /etc/wireguard/private.key
Zugriffsrechte anpassen
# chmod go= /etc/wireguard/private.key
Öffentlichen Schlüssel erzeugen
# cat /etc/wireguard/private.key | wg pubkey > /etc/wireguard/public.key

IPv4-Bereich

Sie können einen beliebigen Bereich von IP-Adressen aus den folgenden reservierten Adressblöcken auswählen

  • (wenn Sie mehr darüber erfahren möchten, wie diese Blöcke zugewiesen werden, besuchen Sie die RFC 1918-Spezifikation):
10.0.0.0 zu 10.255.255.255 (10/8 Präfix) 
172.16.0.0 zu 172.31.255.255 (Präfix 172.16/12) 
192.168.0.0 zu 192.168.255.255 (Präfix 192.168/16) 

Hier verwenden wir 10.8.0.0/24 als Block von IP-Adressen aus dem ersten Bereich reservierter IPs.

  • Dieser Bereich lässt bis zu 255 verschiedene Client-Verbindungen zu und sollte im Allgemeinen keine überlappenden oder widersprüchlichen Adressen mit anderen privaten IP-Bereichen haben.
  • Sie können gerne einen Adressbereich auswählen, der mit Ihrer Netzwerkkonfiguration funktioniert, wenn dieser Beispielbereich nicht mit Ihren Netzwerken kompatibel ist.

Der WireGuard Server verwendet eine einzelne IP-Adresse aus dem Bereich für seine private Tunnel-IPv4-Adresse.

  • Wir werden verwenden 10.8.0.1/24 hier, aber jede Adresse im Bereich von 10.8.0.1 zu 10.8.0.255 kann verwendet werden.
  • Notieren Sie sich die IP-Adresse, die Sie wählen, wenn Sie etwas anderes verwenden 10.8.0.1/24.
  • Sie fügen diese IPv4-Adresse der Konfigurationsdatei hinzu, die Sie in Schritt 3 – Erstellen einer WireGuard-Serverkonfiguration.

IPv6-Bereich

Wenn Sie WireGuard mit IPv6 verwenden, müssen Sie basierend auf dem Algorithmus in RFC 4193.

  • Die Adressen, die Sie mit WireGuard verwenden, werden einer virtuellen Tunnelschnittstelle zugeordnet.
  • Sie müssen einige Schritte ausführen, um ein zufälliges, eindeutiges IPv6-Präfix innerhalb der reservierten zu generieren fd00::/8 Block privater IPv6-Adressen.

Laut RFC besteht die empfohlene Methode zum Abrufen eines eindeutigen IPv6-Präfix darin, die Uhrzeit mit einem eindeutigen Identifizierungswert aus einem System wie einer Seriennummer oder einer Geräte-ID zu kombinieren.

Diese Werte werden dann gehasht und abgeschnitten, was zu einem Satz von Bit führt, die als eindeutige Adresse innerhalb der reservierten privaten verwendet werden können fd00::/8 Block von IPs.

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

$ date +%s%N
1628101352127592197

Sie erhalten eine Zahl wie die folgende, die die Anzahl der Sekunden (die %sin dem dateBefehl) und Nanosekunden (die %N) seit 1970-01-01 00:00:00 UTC kombiniert:

Notieren Sie den Wert irgendwo zur späteren Verwendung in diesem Abschnitt.

  • Als nächstes kopieren Sie die machine-id Wert für Ihren Server aus dem /var/lib/dbus/machine-id Datei.
  • Diese Kennung ist für Ihr System eindeutig und sollte sich nicht ändern, solange der Server existiert.
$ cat /var/lib/dbus/machine-id
20086c25853947c7aeee2ca1ea849d7d

Jetzt müssen Sie den Zeitstempel mit dem kombinieren machine-id und hash den resultierenden Wert mit dem SHA-1-Algorithmus.

$ printf <timestamp><machine-id> | sha1sum

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

$ printf 162810135212759219720086c25853947c7aeee2ca1ea849d7d | sha1sum
4f267c51857d6dc93a0bca107bca2f0d86fac3bc  -

Beachten Sie, dass die Ausgabe der sha1sum hexadezimal ist, sodass die Ausgabe zwei Zeichen verwendet, um ein einzelnes Datenbyte darzustellen.

  • Zum Beispiel 4f und 26in der Beispielausgabe sind die ersten zwei Bytes der gehashten Daten.

Der Algorithmus im RFC erfordert nur die niederwertigsten (nachgestellten) 40 Bit oder 5 Bytes der gehashten Ausgabe.

  • Verwenden Sie die cut Befehl zum Drucken der letzten 5 hexadezimal codierten Bytes aus dem Hash:
$ printf 4f267c51857d6dc93a0bca107bca2f0d86fac3bc | cut -c 31-
0d86fac3bc

Die -c Argument sagt die cut Befehl, um nur einen bestimmten Satz von Zeichen auszuwählen.

  • Das 31- Argument erzählt cut um alle Zeichen von Position 31 bis zum Ende der Eingabezeile zu drucken.

Jetzt können Sie Ihr eindeutiges IPv6-Netzwerkpräfix erstellen, indem Sie die 5 Bytes, die Sie generiert haben, mit anhängen fd Präfix, trennen alle 2 Bytes mit a : Doppelpunkt für bessere Lesbarkeit.

  • Da jedes Subnetz in Ihrem eindeutigen Präfix insgesamt 18.446.744.073.709.551.616 mögliche IPv6-Adressen enthalten kann, können Sie das Subnetz auf eine Standardgröße von /64 der Einfachheit halber.

Unter Verwendung der zuvor mit der generierten Bytes /64Subnetzgröße lautet das resultierende Präfix wie folgt:

Unique Local IPv6 Address Prefix
fd0d:86fa:c3bc::/64

Das fd0d:86fa:c3bc::/64 Bereich verwenden Sie, um Ihren WireGuard-Tunnelschnittstellen auf dem Server und den Clients individuelle IP-Adressen zuzuweisen.

  • Um dem Server eine IP zuzuweisen, fügen Sie a hinzu 1 nach dem Finale :: Figuren.
  • Die resultierende Adresse lautet fd0d:86fa:c3bc::/64.
  • Clients können jede IP im Bereich verwenden, aber normalerweise erhöhen Sie den Wert jedes Mal um eins, wenn Sie einen Client hinzufügen, z fd0d:86fa:c3bc::/64.
  • Notieren Sie sich die IP-Adresse und fahren Sie mit der Konfiguration des WireGuard-Servers im nächsten Abschnitt dieses Tutorials fort.

Konfigurationsdatei

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

  1. Sie sicher, dass Sie den privaten Schlüssel aus Schritt 1 – Installieren von WireGuard und Generieren eines Schlüsselpaars – .
  2. Wenn Sie WireGuard mit IPv4 verwenden, benötigen Sie die IP-Adresse, die Sie in Schritt 2(a) – Auswahl eines IPv4- haben, was in diesem Beispiel lautet.
  3. Wenn Sie WireGuard mit IPv6 verwenden, benötigen Sie die IP-Adresse für den Server, die Sie in Schritt 2(b) Auswählen eines IPv6.
  • In diesem Beispiel ist die IP.

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

# nano /etc/wireguard/wg0.conf

Fügen Sie der Datei die folgenden Zeilen hinzu und ersetzen Sie den hervorgehobenen durch Ihren privaten Schlüssel base64_encoded_private_key_goes_hereWert und die IP-Adresse(n) auf der AddressLinie.

  • Sie können die auch ändern ListenPort Zeile, 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, fd0d:86fa:c3bc::1/64
ListenPort = 51820
SaveConfig = true

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

Speichern und schließen Sie die /etc/wireguard/wg0.conf Datei.

  • Wenn Sie verwenden nano, können Sie dies mit tun CTRL+X, dann Y und ENTER bestätigen.
  • Sie haben jetzt eine anfängliche Serverkonfiguration, auf der Sie aufbauen können, je nachdem, wie Sie Ihren WireGuard VPN-Server verwenden möchten.

Netzwerkkonfiguration

Wenn Sie WireGuard verwenden, um einen Client mit dem WireGuard-Server zu verbinden, um nur auf Dienste auf dem Server, müssen Sie diesen Abschnitt nicht ausfüllen.

  • Wenn Sie den Internetverkehr Ihres WireGuard-Clients über den WireGuard-Server leiten möchten, müssen Sie die IP-Weiterleitung konfigurieren, indem Sie diesem Abschnitt des Tutorials folgen.
# echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
# echo "net.ipv6.conf.all.forwarding=1" >> /etc/sysctl.conf
# sysctl -p
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 und von dort an das öffentliche Internet weiterleiten.

  • Mit dieser Konfiguration können Sie den gesamten Webverkehr von Ihrem WireGuard Client über die IP-Adresse Ihres Servers leiten, und die öffentliche IP-Adresse Ihres Clients wird effektiv verborgen.

Bevor der Datenverkehr jedoch korrekt über Ihren Server geleitet werden kann, müssen Sie einige Firewall-Regeln konfigurieren.

  • Diese Regeln stellen sicher, dass der Datenverkehr zu und von Ihrem WireGuard-Server und Clients ordnungsgemäß fließt.

Firewall

In diesem Abschnitt bearbeiten Sie die Konfiguration des WireGuard-Servers, um Firewall-Regeln hinzuzufügen, die sicherstellen, dass der Datenverkehr zum und vom Server und den Clients korrekt weitergeleitet wird.

  • Wie im vorherigen Abschnitt überspringen Sie diesen Schritt, wenn Sie Ihr WireGuard VPN nur für eine Maschine-zu-Maschine-Verbindung verwenden, um auf Ressourcen zuzugreifen, die auf Ihr VPN beschränkt sind.

Um WireGuard VPN-Datenverkehr durch die Firewall des Servers zuzulassen, müssen Sie Masquerading aktivieren, ein iptables-Konzept, das eine dynamische Netzwerkadressübersetzung (NAT) im laufenden Betrieb bereitstellt, um Client-Verbindungen korrekt weiterzuleiten.

Suchen Sie zunächst die öffentliche Netzwerkschnittstelle Ihres WireGuard Servers mit der ip route Unterbefehl:

$ ip route list default

Die öffentliche Schnittstelle ist die Zeichenfolge, die in der Ausgabe dieses Befehls gefunden wird, die auf das Wort „dev“ folgt.

  • Dieses Ergebnis zeigt beispielsweise die benannte Schnittstelle eth0, die unten hervorgehoben wird:
default via 203.0.113.1 dev eth0 proto static

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

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

# nano /etc/wireguard/wg0.conf

Am Ende der Datei nach dem SaveConfig = true Zeile, fügen Sie 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 Leitungen laufen, wenn der WireGuard Server den virtuellen VPN-Tunnel startet.

  • Im Beispiel hier werden drei hinzugefügt ufw und iptables Regeln:
  • ufw route allow in on wg0 out on - Diese Regel ermöglicht die Weiterleitung von IPv4- und IPv6-Datenverkehr, der auf dem eingeht wg0 VPN-Schnittstelle zum eth0 Netzwerkschnittstelle auf dem Server.
  • Es funktioniert in Verbindung mit der net.ipv4.ip_forward und net.ipv6.conf.all.forwarding sysctl-Werte, die Sie im vorherigen Abschnitt konfiguriert haben.
  • iptables -t nat -I POSTROUTING -o eth0 -j MASQUERADE- Diese Regel konfiguriert Masquerading und schreibt IPv4-Datenverkehr um, der auf dem eingeht wg0VPN-Schnittstelle, damit es so aussieht, als stamme es direkt von der öffentlichen IPv4-Adresse des WireGuard-Servers.
  • ip6tables -t nat -I POSTROUTING -o eth0 -j MASQUERADE- Diese Regel konfiguriert Masquerading und schreibt IPv6-Datenverkehr um, der auf dem eingeht wg0VPN-Schnittstelle, damit es so aussieht, als stamme es 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 die Umkehrung der PostUp Regeln und die Funktion, die Weiterleitungs- und Maskierungsregeln für die VPN-Schnittstelle rückgängig zu machen, wenn das VPN gestoppt wird.

Bearbeiten Sie in beiden Fällen die Konfiguration, um die für Ihr VPN geeigneten IPv4- und IPv6-Regeln ein- oder auszuschließen.

  • Wenn Sie beispielsweise nur IPv4 verwenden, können Sie die Zeilen mit ausschließen ip6tables Befehle.

Wenn Sie dagegen nur IPv6 verwenden, bearbeiten Sie die Konfiguration so, dass sie nur die enthält ip6tables Befehle.

  • Das ufw Leitungen sollten für jede Kombination von IPv4- und IPv6-Netzwerken vorhanden sein.
  • Speichern und schließen Sie die Datei, wenn Sie fertig sind.

Der letzte Teil der Konfiguration der Firewall auf Ihrem WireGuard-Server besteht darin, Datenverkehr zum und vom WireGuard-UDP-Port selbst zuzulassen.

  • Wenn Sie den Port im Server nicht geändert haben /etc/wireguard/wg0.conf Datei, der Port, den Sie öffnen werden, ist 51820.
  • Wenn Sie beim Bearbeiten der Konfiguration einen anderen Port ausgewählt haben, stellen Sie sicher, dass Sie ihn im folgenden UFW-Befehl ersetzen.
# ufw allow 51820/udp
# ufw allow OpenSSH
Hinweis 
Wenn Sie eine andere Firewall verwenden oder Ihre UFW-Konfiguration angepasst haben, müssen Sie möglicherweise zusätzliche Firewall-Regeln hinzufügen. 
  • Wenn Sie sich beispielsweise entscheiden, Ihren gesamten Netzwerkverkehr über die VPN-Verbindung zu tunneln, müssen Sie diesen Port sicherstellen 53 Datenverkehr ist für DNS-Anfragen und Ports wie zulässig 80und 443für HTTP- bzw. HTTPS-Verkehr.
  • Wenn es andere Protokolle gibt, die Sie über das VPN verwenden, müssen Sie auch Regeln für diese hinzufügen.

Deaktivieren Sie nach dem Hinzufügen dieser Regeln UFW und aktivieren Sie es erneut, um es neu zu starten und die Änderungen aus allen von Ihnen geänderten Dateien zu laden:

# ufw disable
# ufw enable

Sie können bestätigen, dass die Regeln vorhanden sind, indem Sie die ausführen ufw status Befehl.

# ufw status
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 VPN-Datenverkehr korrekt verarbeitet, einschließlich Weiterleitung und Maskierung für Clients.

  • Wenn die Firewall-Regeln vorhanden sind, können Sie den WireGuard-Dienst selbst starten, um auf Client-Verbindungen zu lauschen.

Server starten

WireGuard kann so konfiguriert werden, dass es als ausgeführt wird systemd Dienst mit seinem eingebauten wg-quickSkript.

  • Während Sie die manuell verwenden könnten wgBefehl, den Tunnel jedes Mal zu erstellen, wenn Sie das VPN verwenden möchten, ist dies ein manueller Prozess, der sich wiederholt und fehleranfällig wird.
  • Stattdessen können Sie verwenden systemctl den Tunnel mit Hilfe des zu verwalten wg-quick Skript.

Verwendung einer systemd Service 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.

  • Aktivieren Sie dazu die wg-quick Dienst für die wg0 Tunnel, den Sie durch Hinzufügen definiert haben systemctl:
# systemctl enable wg-quick@wg0.service

Beachten Sie, dass der Befehl den Namen des Tunnels angibt wg0 Gerätename als Teil des Dienstnamens.

  • Dieser Name entspricht dem /etc/wireguard/.conf Konfigurationsdatei.
  • Dieser Ansatz zur Benennung bedeutet, dass Sie mit Ihrem Server so viele separate VPN-Tunnel erstellen können, wie Sie möchten.

Beispielsweise könnten Sie ein Tunnelgerät und den Namen von haben prod und seine Konfigurationsdatei wäre /etc/wireguard/prod.conf.

  • Jede Tunnelkonfiguration kann unterschiedliche IPv4-, IPv6- und Client-Firewall-Einstellungen enthalten.
  • Auf diese Weise können Sie mehrere verschiedene Client-Verbindungen unterstützen, jede mit ihren eigenen eindeutigen IP-Adressen und Routing-Regeln.
# systemctl start wg-quick@wg0.service

Überprüfen Sie mit dem folgenden Befehl, ob der WireGuard-Dienst aktiv ist.

# systemctl status wg-quick@wg0.service

● wg-quick@wg0.service - WireGuard via wg-quick(8) for wg0
     Loaded: loaded (/lib/systemd/system/wg-quick@.service; enabled; vendor preset: enabled)
     Active: active (exited) since Wed 2021-08-25 15:24:14 UTC; 5s 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: 3245 ExecStart=/usr/bin/wg-quick up wg0 (code=exited, status=0/SUCCESS)
   Main PID: 3245 (code=exited, status=0/SUCCESS)

Aug 25 15:24:14 wg0 wg-quick[3245]: [#] wg setconf wg0 /dev/fd/63
Aug 25 15:24:14 wg0 wg-quick[3245]: [#] ip -4 address add 10.8.0.1/24 dev wg0
Aug 25 15:24:14 wg0 wg-quick[3245]: [#] ip -6 address add fd0d:86fa:c3bc::1/64 dev wg0
Aug 25 15:24:14 wg0 wg-quick[3245]: [#] ip link set mtu 1420 up dev wg0
Aug 25 15:24:14 wg0 wg-quick[3245]: [#] ufw route allow in on wg0 out on eth0
Aug 25 15:24:14 wg0 wg-quick[3279]: Rule added
Aug 25 15:24:14 wg0 wg-quick[3279]: Rule added (v6)
Aug 25 15:24:14 wg0 wg-quick[3245]: [#] iptables -t nat -I POSTROUTING -o eth0 -j MASQUERADE
Aug 25 15:24:14 wg0 wg-quick[3245]: [#] ip6tables -t nat -I POSTROUTING -o eth0 -j MASQUERADE
Aug 25 15:24:14 wg0 systemd[1]: Finished WireGuard via wg-quick(8) for wg0.

Die Ausgabe zeigt die ip Befehle, die zum Erstellen der virtuellen Datei verwendet werden wg0 Gerät und weisen Sie ihm die IPv4- und IPv6-Adressen zu, die Sie der Konfigurationsdatei hinzugefügt haben.

  • Sie können diese Regeln verwenden, um Fehler im Tunnel zu beheben, oder mit dem wg Befehl selbst, wenn Sie versuchen möchten, die VPN-Schnittstelle manuell zu konfigurieren.

Wenn der Server konfiguriert und ausgeführt wird, besteht der nächste Schritt darin, Ihren Client-Computer als WireGuard-Client zu konfigurieren und eine Verbindung zum WireGuard-Server herzustellen.

Client

Installation

# apt install wireguard

Schlüsselpaar erstellen

Privaten Schlüssel erstellen

# wg genkey | /etc/wireguard/private.key

Zugriffsrechte anpassen

# chmod go= /etc/wireguard/private.key

Öffentlichen Schlüssel erstellen

# cat /etc/wireguard/private.key | wg pubkey | /etc/wireguard/public.key

Konfigurationsdatei

/etc/wireguard/wg0.conf
Direktive Wert Beschreibung
[Interface]
PrivateKey = base64_encoded_Client_private_key_goes_here
Address = 10.8.0.2/24
Address = fd0d:86fa:c3bc::2/64
[Client]
PublicKey = U9uE2kb/nrrzsEU58GD3pKFU3TLYDMCbetIsnV8eeFE=
AllowedIPs = 10.8.0.0/24, fd0d:86fa:c3bc::/64
Endpoint = 203.0.113.1:51820

Beachten Sie, wie die erste Addressline verwendet eine IPv4-Adresse von der 10.8.0.0/24 Subnetz, das Sie zuvor ausgewählt haben.

  • Diese IP-Adresse kann alles im Subnetz sein, solange sie sich von der IP des Servers unterscheidet.
  • Das Erhöhen von Adressen um 1 jedes Mal, wenn Sie einen Client hinzufügen, ist im Allgemeinen der einfachste Weg, IPs zuzuweisen.

Beachten Sie ebenso, wie die zweite Address line verwendet eine IPv6-Adresse aus dem Subnetz, das Sie zuvor generiert haben, und erhöht die Adresse des Servers um eins.

  • 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 der letzte AllowedIPs Linie.

  • Diese beiden IPv4- und IPv6-Bereiche weisen den Client an, Datenverkehr nur dann über das VPN zu senden, wenn das Zielsystem eine IP-Adresse in einem der beiden Bereiche hat.
  • Verwendung der AllowedIPs Direktive können Sie das VPN auf dem Client darauf beschränken, sich nur mit anderen Clients und Diensten im VPN zu verbinden, oder Sie können die Einstellung so konfigurieren, dass der gesamte Datenverkehr über das VPN getunnelt und der WireGuard-Server als Gateway verwendet wird.

Wenn Sie nur IPv4 verwenden, lassen Sie das abschließende Zeichen weg fd0d:86fa:c3bc::/64 Bereich (einschließlich der ,Komma).

  • Umgekehrt, wenn Sie nur IPv6 verwenden, dann schließen Sie nur die ein fd0d:86fa:c3bc::/64 voranstellen und weglassen 10.8.0.0/24 IPv4-Bereich.

Wenn Sie in beiden Fällen den gesamten Datenverkehr Ihres Clients über das VPN senden und den WireGuard-Server als Gateway für den gesamten Datenverkehr verwenden möchten, können Sie verwenden 0.0.0.0/0, die den gesamten IPv4-Adressraum darstellt, und ::/0 für den gesamten IPv6-Adressraum.

Datenverkehr durch den Tunnel leiten

Gesamten Datenverkehr durch den Tunnel

  • Wenn Sie sich dafür entschieden haben, den gesamten Datenverkehr des Clients über den Tunnel zu leiten, indem Sie die 0.0.0.0/0 oder ::/0 routen und der Client ein Remote-System ist, müssen Sie die Schritte in diesem Abschnitt ausführen.
  • Wenn Ihr Client ein lokales System ist, überspringen Sie diesen Abschnitt am besten.
  • Für Remote-Clients, auf die Sie über SSH oder ein anderes Protokoll mit einer öffentlichen IP-Adresse zugreifen, müssen Sie einige zusätzliche Regeln zu den Clients hinzufügen wg0.conf Datei.
  • Diese Regeln stellen sicher, dass Sie sich immer noch von außerhalb des Tunnels mit dem System verbinden können, wenn es verbunden ist.
  • Andernfalls wird beim Aufbau des Tunnels der gesamte Datenverkehr, der normalerweise über die öffentliche Netzwerkschnittstelle abgewickelt würde, nicht korrekt geroutet, um die zu umgehen wg0 Tunnelschnittstelle, was zu einem unzugänglichen Remote-System führt.
  • Zunächst müssen Sie die IP-Adresse ermitteln, die das System als Standard-Gateway verwendet.
# ip route list table main default
default via 203.0.113.1 dev eth0 proto static

Beachten Sie die hervorgehobene IP-Adresse des Gateways für spätere Verwendung und Gerät.

  • Ihr Gerätename kann anders lauten.
  • Wenn ja, ersetzen Sie es durch eth0 in den folgenden Befehlen.

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

# ip -brief address show eth0
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 dieser Beispielausgabe ist die hervorgehobene IP (ohne die nachgestellte /20) ist die öffentliche Adresse, die der zugewiesen ist eth0 Gerät, das Sie der WireGuard-Konfiguration hinzufügen müssen.

Öffnen Sie nun die des WireGuard Clients /etc/wireguard/wg0.conf Datei mit nano oder Ihren bevorzugten Editor.

Vor dem [Client]Zeile, fügen Sie die folgenden 4 Zeilen hinzu:

/etc/wireguard/wg0.conf
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

[Client]
. . .

Diese Zeilen erstellen eine benutzerdefinierte Routing-Regel und fügen eine benutzerdefinierte Route hinzu, um sicherzustellen, dass der öffentliche Datenverkehr zum System das Standard-Gateway verwendet.

PostUp = ip rule add table 200 from 

Dieser Befehl erstellt eine Regel, die nach Routing-Einträgen in der Tabelle mit der Nummer sucht 200wenn die IP mit der öffentlichen des Systems übereinstimmt die Anschrift.

PostUp = ip route add table 200 default via 

Dieser Befehl stellt sicher, dass jeglicher Datenverkehr von verarbeitet wird 200Tabelle verwendet die Gateway für das Routing anstelle der WireGuard-Schnittstelle.

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

Hinweis
Die Tabellennummer 200 ist hier willkürlich. 
  • Sie können einen Wert zwischen 2 und 252 verwenden, oder Sie können einen benutzerdefinierten Namen verwenden, indem Sie dem eine Bezeichnung hinzufügen /etc/iproute2/rt_tables Datei und bezieht sich dann auf den Namen anstelle des numerischen Werts.
  • Weitere Informationen zur Funktionsweise von Routing-Tabellen unter Linux finden Sie im Abschnitt „Routing-Tabellen“ des Handbuchs zur IP-Layer-Netzwerkverwaltung unter Linux.

Wenn Sie den gesamten Datenverkehr des Clients über das VPN leiten, stellen Sie sicher, dass Sie das richtige konfiguriert haben sysctlund iptablesRegeln auf dem WireGuard-Server in Schritt 4 – Anpassen der Netzwerkkonfiguration des WireGuard-Servers und Schritt 5 – Konfigurieren der Firewall des WireGuard-Servers.

DNS-Auflösung

  • Wenn Sie den WireGuard Server als VPN-Gateway für den gesamten Datenverkehr Ihres Clients verwenden, müssen Sie eine Zeile zu hinzufügen [Interface] Abschnitt, der DNS-Resolver angibt.
  • Wenn Sie diese Einstellung nicht hinzufügen, werden Ihre DNS-Anforderungen möglicherweise nicht durch das VPN gesichert oder sie werden Ihrem Internetdienstanbieter oder anderen Dritten offengelegt.
  • Wenn Sie WireGuard nur für den Zugriff auf Ressourcen im VPN-Netzwerk oder in einer Client-to-Client-Konfiguration verwenden, können Sie diesen Abschnitt überspringen.
  • Um DNS-Resolver zur Konfiguration Ihres Clients hinzuzufügen, ermitteln Sie zunächst, welche DNS-Server Ihr WireGuard-Server verwendet.

Führen Sie den folgenden Befehl auf dem WireGuard-Server aus und ersetzen Sie dabei Ihren Ethernet-Gerätenamen anstelle von eth0wenn es sich von diesem Beispiel unterscheidet:

resolvectl dns eth0 
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 vom Server verwendeten DNS-Resolver.

  • Sie können wählen, ob Sie einige oder alle davon verwenden möchten, oder nur IPv4 oder IPv6, je nach Ihren Anforderungen.
  • Notieren Sie sich die Resolver, die Sie verwenden werden.

Als Nächstes müssen Sie Ihre ausgewählten Resolver zur Konfigurationsdatei des WireGuard Clients hinzufügen.

  • Zurück auf dem WireGuard Client, öffnen /etc/wireguard/wg0.conf Datei verwenden nano oder Ihr bevorzugter Editor:
# nano /etc/wireguard/wg0.conf

Vor dem [Client]Zeile folgendes hinzufügen:

DNS = 67.207.67.2 2001:4860:4860::8844

[Client]
. . .

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

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

Sie können auch überprüfen, ob Ihr Client die konfigurierten Resolver mit verwendet resolvectl dns Befehl, 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:
Global: 67.207.67.2 67.207.67.3
. . .

Mit all diesen DNS-Resolver-Einstellungen können Sie nun den öffentlichen Schlüssel des Clients zum Server hinzufügen und dann den WireGuard-Tunnel auf dem Client starten.

Öffentlichen Schlüssels des Clients hinzufügen

Bevor Sie den Client mit dem Server verbinden, ist es wichtig, den öffentlichen Schlüssel des Clients zum WireGuard Server hinzuzufügen.

  • Dieser Schritt stellt sicher, dass Sie sich mit dem VPN verbinden und Datenverkehr darüber leiten können.
  • Ohne diesen Schritt wird der WireGuard-Server dem Client nicht erlauben, Datenverkehr über den Tunnel zu senden oder zu empfangen.

Stellen Sie sicher, dass Sie eine Kopie der haben base64 verschlüsselter öffentlicher Schlüssel für den WireGuard-Client, indem Sie Folgendes ausführen:

# cat /etc/wireguard/public.key
PeURxj4Q75RaVhBKkRTpNsBPiPSGb5oQijgJsTa29hg=

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

# wg set wg0 Client PeURxj4Q75RaVhBKkRTpNsBPiPSGb5oQijgJsTa29hg= allowed-ips 10.8.0.2,fd0d:86fa:c3bc::2

Notiere dass der allowed-ipsDer Teil des Befehls enthält eine durch Kommas getrennte Liste von IPv4- und IPv6-Adressen.

  • Sie können einzelne IPs angeben, wenn Sie die IP-Adresse einschränken möchten, die sich ein Client selbst zuweisen kann, oder einen Bereich wie im Beispiel, wenn Ihre Clients eine beliebige IP-Adresse im VPN-Bereich verwenden können.
  • Beachten Sie auch, dass keine zwei Clients dasselbe haben können allowed-ips Einstellung.

Wenn Sie die aktualisieren möchten allowed-ipsFür einen vorhandenen Client können Sie denselben Befehl erneut ausführen, aber die IP-Adressen ändern.

  • Mehrere IP-Adressen werden unterstützt.
  • Zum Beispiel, um den WireGuard-Client, den Sie gerade hinzugefügt haben, zu ändern, um eine IP wie hinzuzufügen 10.8.0.100zum Bestehenden 10.8.0.2 und fd0d:86fa:c3bc::2IPs, würden Sie Folgendes ausführen:
# wg set wg0 Client PeURxj4Q75RaVhBKkRTpNsBPiPSGb5oQijgJsTa29hg= allowed-ips 10.8.0.2,10.8.0.100,fd0d:86fa:c3bc::2

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

# wg
interface: wg0
 public key: U9uE2kb/nrrzsEU58GD3pKFU3TLYDMCbetIsnV8eeFE=
 private key: (hidden)
 listening port: 51820

Client: PeURxj4Q75RaVhBKkRTpNsBPiPSGb5oQijgJsTa29hg=
 allowed ips: 10.8.0.2/32, fd0d:86fa:c3bc::/128

Beachten Sie, wie die ClientZeile zeigt den öffentlichen Schlüssel des WireGuard Clients und die IP-Adressen oder Adressbereiche, die er verwenden darf, um sich selbst eine IP zuzuweisen.

Nachdem Sie nun die Verbindungsparameter der Gegenstelle auf dem Server festgelegt haben, starten Sie im nächsten Schritt den Tunnel auf der Gegenstelle.

Anwendungen

Verbinden des Clients

Nachdem sowohl Ihr Server als auch Ihr Client so konfiguriert sind, dass sie IPv4, IPv6, Paketweiterleitung und DNS-Auflösung Ihrer Wahl unterstützen, ist es an der Zeit, den Client mit dem VPN-Tunnel zu verbinden.

Da Sie das VPN möglicherweise nur für bestimmte Anwendungsfälle aktivieren möchten, verwenden wir die wg-quick Befehl, um die Verbindung manuell herzustellen.

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

# apt install resolvconf

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

# wg-quick up wg0

Sie erhalten eine Ausgabe wie die folgende:

[#] 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 fd0d:86fa:c3bc::2/64 dev wg0
[#] ip link set mtu 1420 up dev wg0
[#] resolvconf -a tun.wg0 -m 0 -x

Beachten Sie die hervorgehobenen IPv4- und IPv6-Adressen, die Sie dem Client zugewiesen haben.

Wenn Sie die einstellen AllowedIPs auf dem Client zu 0.0.0.0/0und ::/0 (oder um andere Bereiche als die, die Sie für das VPN ausgewählt haben, zu verwenden), sieht Ihre Ausgabe wie folgt aus:

[#] 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 fd0d:86fa:c3bc::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

Beachten Sie in diesem Beispiel die hervorgehobenen Routen, die der Befehl hinzugefügt hat und die dem entsprechen AllowedIPsin der Client-Konfiguration.

Sie können den Status des Tunnels auf dem Client mit überprüfen wgBefehl:

# wg
interface: wg0
 public key: PeURxj4Q75RaVhBKkRTpNsBPiPSGb5oQijgJsTa29hg=
 private key: (hidden)
 listening port: 49338
 fwmark: 0xca6c

Client: U9uE2kb/nrrzsEU58GD3pKFU3TLYDMCbetIsnV8eeFE=
 endpoint: 203.0.113.1:51820
 allowed ips: 10.8.0.0/24, fd0d:86fa:c3bc::/64
 latest handshake: 1 second ago
 transfer: 6.50 KiB received, 15.41 KiB sent
  • Sie können den Status auf dem Server auch erneut überprüfen und erhalten eine ähnliche Ausgabe.
  • Überprüfen Sie, ob Ihr Client das VPN verwendet, indem Sie die verwenden ip routeund ip -6 route Befehle.
  • Wenn Sie das VPN als Gateway für Ihren gesamten Internetverkehr verwenden, prüfen Sie, welche Schnittstelle für den Datenverkehr von CloudFlare verwendet wird 1.1.1.1 und 2606:4700:4700::1111 DNS-Resolver.

Wenn Sie WireGuard nur für den Zugriff auf Ressourcen im VPN verwenden, ersetzen Sie diese Befehle durch eine gültige IPv4- oder IPv6-Adresse wie das Gateway selbst.

Zum Beispiel 10.8.0.1oder fd0d:86fa:c3bc::1.

# ip route get 1.1.1.1
1.1.1.1 dev wg0 table 51820 src 10.8.0.2 uid 1000
   cache

Beachten Sie die wg0verwendete Gerät und die IPv4-Adresse 10.8.0.2 die Sie dem Client zugewiesen haben. Wenn Sie IPv6 verwenden, führen Sie ebenfalls Folgendes aus:

# ip -6 route get 2606:4700:4700::1111
2606:4700:4700::1111 from :: dev wg0 table 51820 src fd0d:86fa:c3bc::2 metric 1024 pref medium

Beachten Sie wieder die wg0Schnittstelle und die IPv6-Adresse fd0d:86fa:c3bc::2 die Sie dem Client zugewiesen haben.

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

Sobald Sie bereit sind, die Verbindung zum VPN auf dem Client zu trennen, verwenden Sie die wg-quickBefehl:

# wg-quick down wg0

Sie erhalten eine Ausgabe wie die folgende, die anzeigt, dass der VPN-Tunnel heruntergefahren ist:

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

Wenn Sie die einstellen AllowedIPs auf dem Client zu 0.0.0.0/0und ::/0(oder um andere Bereiche als die, die Sie für das VPN ausgewählt haben, zu verwenden), sieht Ihre Ausgabe wie folgt aus:

[#] 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 wieder mit dem VPN zu verbinden, führen Sie die wg-quick up wg0 Befehl erneut auf dem Client.
  • Wenn Sie die Konfiguration eines Clients vollständig vom WireGuard-Server entfernen möchten, können Sie den folgenden Befehl ausführen und sicherstellen, dass Sie den richtigen öffentlichen Schlüssel für den Client ersetzen, den Sie entfernen möchten:
# wg set wg0 Client PeURxj4Q75RaVhBKkRTpNsBPiPSGb5oQijgJsTa29hg= remove
  • Normalerweise müssen Sie eine Client-Konfiguration nur entfernen, wenn der Client nicht mehr existiert oder wenn seine Kryptografiesschlüssel kompromittiert oder geändert wurden.
  • Andernfalls ist es besser, die Konfiguration beizubehalten, damit sich der Client wieder mit dem VPN verbinden kann, ohne dass Sie seinen Schlüssel und hinzufügen müssen allowed-ips jedes Mal.

Syntax

Parameter

Optionen

Sicherheit

Dokumentation

Dateien

RFC

Man-Pages

Info-Pages

Projekt-Homepage

Links

Siehe auch

Weblinks

  1. https://wireguard.com

Einzelnachweise


Testfragen

Testfrage 1

Antwort1

Testfrage 2

Antwort2

Testfrage 3

Antwort3

Testfrage 4

Antwort4

Testfrage 5

Antwort5