Zum Hauptinhalt springen

Wie konfiguriert man ein WireGuard Mesh-VPN?

Veröffentlicht am:
.
9 Minuten Lesezeit
.
Für die Englische Version

Ein Mesh-Netzwerk ist eine Art von Netzwerktopologie, bei der die Infrastrukturknoten direkte, dynamische und nicht-hierarchische Verbindungen zu so vielen anderen Knoten wie möglich herstellen und miteinander zusammenarbeiten. Ein Mesh-Netzwerk wird eingerichtet, um Daten effektiv zwischen Geräten und Clients zu leiten. Es hilft Organisationen, eine einheitliche und unterbrechungsfreie Verbindung über ein physisches Gebiet hinweg herzustellen. Ein Mesh-Netzwerk ermöglicht die Kommunikation zwischen Geräten über ein Virtual Private Network (VPN), ohne auf einen zentralen Server angewiesen zu sein.

WireGuard ist ein revolutionäres VPN (Virtual Private Network)-Programm, das entwickelt wurde, um praktisch überall betrieben zu werden und plattformübergreifend zu sein. Im Vergleich zu anderer VPN-Software zeichnet sich WireGuard durch seine überlegene Geschwindigkeit, verbesserte Sicherheit und vereinfachte Benutzerfreundlichkeit aus.

Dieses Tutorial zeigt die Verwendung von WireGuard zur Einrichtung eines privaten Mesh-Netzwerks, das die Erstellung einer sicheren und exklusiven Verbindung zwischen verschiedenen Servern und Instanzen ermöglicht.

Um diesem WireGuard-Mesh-VPN-Konfigurationstutorial folgen zu können, müssen Sie 4 Ubuntu 22.04 Linux-Server mit einer statischen öffentlichen IP-Adresse und zugänglichem UDP/51820 aus dem Internet haben. Wir werden die folgenden Namen und IP-Adressen für VPN Knoten verwenden:

NameÖffentliche IPErlaubte IPs
Node111.11.11.110.0.1.1
Node211.11.11.210.0.2.1
Node311.11.11.310.0.3.1
Node411.11.11.410.0.4.1

Tabelle 1. IP-Adresseneinstellungen für WireGuard-Mesh-Beispiel

Abbildung 1. WireGuard-Mesh-VPN-Topologie

Sie können WireGuard Mesh VPN konfigurieren, indem Sie die folgenden Hauptschritte befolgen:

  1. Installation von WireGuard auf Ubuntu-Servern
  2. Manuelles Erzeugen von privaten und öffentlichen Schlüsseln
  3. Ermöglichung des Zugriffs von VPN-Knoten auf die LANs über andere VPN-Knoten
  4. Manuelles Erstellen von WireGuard-Konfigurationsdateien
  5. Starten des WireGuard-Servers und Aktivieren beim Booten
  6. Überprüfung der Mesh-VPN-Konnektivität
WARNING

Privilegierter Zugriff auf Ihr Linux-System als Root oder über den sudo-Befehl.

Alle unten angegebenen Befehle sind mit root-Rechten auszuführen, entweder direkt als Root-Benutzer oder mit dem Befehl sudo.

Starten Sie noch heute kostenlos mit Zenarmor

1. Installation von WireGuard auf Ubuntu-Servern

Ubuntu 22.04 Linux-Server werden als WireGuard-VPN-Knoten konfiguriert. Sie können WireGuard ganz einfach auf allen Ubuntu-VPN-Knoten installieren, indem Sie die folgenden Schritte befolgen:

  1. Stellen Sie sicher, dass Ihre Ubuntu-Knoten auf dem neuesten Stand sind, indem Sie den folgenden Befehl ausführen:

    sudo apt update && sudo apt upgrade -y
  2. Installieren Sie WireGuard selbst und alle seine Abhängigkeiten, indem Sie den folgenden Befehl ausführen:

    sudo apt install wireguard wireguard-tools

Nachdem Sie WireGuard installiert haben, folgen Sie den untenstehenden Schritten, um Ihren Server weiter zu konfigurieren.

1. Manuelles Erzeugen von privaten und öffentlichen Schlüsseln

Einer der Hauptvorteile von WireGuard ist, dass es auf modernsten kryptografischen Primitiven basiert. Es ermöglicht Ihnen, einen sicheren VPN-Tunnel zu erstellen, indem Ihre Verbindung mit einem Paar kryptografischer Schlüssel verschlüsselt wird. Jeder Peer muss seine eigenen privaten und öffentlichen Schlüssel haben, um eine sichere Kommunikation in beide Richtungen zu gewährleisten. Um WireGuard zu verwenden, muss jeder Knoten sein eigenes Schlüsselpaar generieren und dann die öffentlichen Schlüssel austauschen.

Beachten Sie, dass bei WireGuard VPN der private Schlüssel niemals seinen Knoten verlässt. Die Bedeutung liegt darin, dass der private Schlüssel die einzige Fähigkeit hat, möglicherweise die Identität dieses Knotens während der Aushandlung einer WireGuard-Sitzung zu übernehmen. Folglich hat nur dieser spezifische Knoten die Fähigkeit, Pakete zu kodieren, die von ihm selbst stammen, oder Pakete zu dekodieren, die für ihn bestimmt sind. Es ist wichtig, dies im Hinterkopf zu behalten: WireGuard-Knotenverbindungen sind von Ende zu Ende verschlüsselt und folgen dem Prinzip des Zero-Trust-Netzwerkzugriffs. (ZTNA).

Sie können die folgenden Schritte befolgen, um private und öffentliche Schlüsselpaar für alle Mesh-VPN-Knoten zu generieren:

  1. Führen Sie den folgenden Befehl auf dem Ubuntu-Server aus, um ein öffentliches/privates Schlüsselpaar für Knoten#1 zu generieren.

    wg genkey | sudo tee /etc/wireguard/node1_private.key | wg pubkey | sudo tee /etc/wireguard/node1_public.key
  2. Führen Sie den folgenden Befehl aus, um ein öffentliches/privates Schlüsselpaar für Knoten#2 zu generieren.

    wg genkey | sudo tee /etc/wireguard/node2_private.key | wg pubkey | sudo tee /etc/wireguard/node2_public.key
  3. Führen Sie den folgenden Befehl aus, um ein öffentliches/privates Schlüsselpaar für Knoten#3 zu generieren.

    wg genkey | sudo tee /etc/wireguard/node3_private.key | wg pubkey | sudo tee /etc/wireguard/node3_public.key
  4. Führen Sie den folgenden Befehl aus, um ein öffentliches/privates Schlüsselpaar für Knoten#3 zu generieren.

    wg genkey | sudo tee /etc/wireguard/node3_private.key | wg pubkey | sudo tee /etc/wireguard/node3_public.key

Dies wird sowohl die privaten als auch die öffentlichen Schlüssel im Verzeichnis /etc/wireguard speichern.

warnung

Der private Schlüssel sollte niemals mit jemandem geteilt und immer sicher aufbewahrt werden.

tipp

Bitte notieren Sie die Schlüsselpaar, die in den folgenden Schritten zur Aktualisierung der WireGuard-Konfigurationsdatei verwendet werden.

2. Ermöglichung des Zugriffs von VPN-Knoten auf die LANs über andere VPN-Knoten

Sie möchten möglicherweise jedem Standortnetzwerk/LAN für alle VPN-Knoten über WireGuard Zugriff gewähren. Zu diesen Zwecken müssen Sie möglicherweise die Firewall-Regeln konfigurieren, einschließlich IP-Weiterleitung und NAT.

Damit der VPN-Server Pakete zwischen VPN-Knoten und dem LAN weiterleiten kann, müssen Sie IP-Weiterleitung auf allen WireGuard-Knoten aktivieren. Sie können die unten aufgeführten Anweisungen befolgen, um IP-Weiterleitung auf allen Ihren Knoten zu aktivieren:

  1. Öffnen Sie die Systemvariablen-Datei zur Bearbeitung.

    sudo nano /etc/sysctl.conf
  2. Fügen Sie die folgende Zeile hinzu oder kommentieren Sie sie aus, indem Sie das # am Anfang der Zeile entfernen.

    net.ipv4.ip_forward=1
  3. Save Sie die Datei und beenden Sie den Editor.

  4. Öffnen Sie /etc/ufw/sysctl.conf und entfernen Sie das Kommentarzeichen bei diesen Zeilen:

    net/ipv4/ip_forward=1
    net/ipv6/conf/default/forwarding=1
    net/ipv6/conf/all/forwarding=1
  5. Wenden Sie die Änderungen mit dem folgenden Befehl an. Die -p Option lädt die sysctl-Einstellungen aus der Datei /etc/sysctl.conf. Dieser Befehl wird unsere Änderungen nach einem Systemneustart beibehalten.

    sudo sysctl -p

3. Manuelles Erstellen von WireGuard-Konfigurationsdateien

Lassen Sie uns mit der Konfiguration von WireGuard beginnen, indem wir auf jedem Knoten eine neue Konfigurationsdatei namens wg0.conf im Ordner /etc/wireguard erstellen.

Sie können WireGuard-Konfigurationsdateien für jeden Knoten erstellen, indem Sie die folgenden Schritte befolgen:

  1. Öffnen Sie die Datei wg0.conf mit einem Editor.

    sudo nano /etc/wireguard/wg0.conf
  2. Fügen Sie die folgenden Direktiven zur Konfigurationsdatei hinzu. Die folgende Konfiguration wird Ihren WireGuard-Server so einstellen, dass er Verbindungen zu 51820 akzeptiert und einen Knoten mit dem öffentlichen Schlüssel zulässt, der dem oben generierten privaten Schlüssel entspricht.

    # Name: Node1
    [Interface]
    PrivateKey = (contents-of-node1-privatekey)
    Address = (Node1-VPN-IP )
    ListenPort = 51820
    [Peer]
    # Node2
    PublicKey = (contents-of-node2-publickey)
    Endpoint = (Node2-Public-IP:51820)
    AllowedIPs = (Node2-VPN-IP), (Node2-LAN-Network-IP)
    PersistentKeepalive = 25

    [Peer]
    # Node3
    PublicKey = (contents-of-node3-publickey)
    Endpoint = (Node3-Public-IP:51820)
    AllowedIPs = (Node3-VPN-IP), (Node3-LAN-Network-IP)
    PersistentKeepalive = 25

    [Peer]
    # Node4
    PublicKey = (contents-of-node4-publickey)
    Endpoint = (Node4-Public-IP:51820)
    AllowedIPs = (Node4-VPN-IP), (Node4-LAN-Network-IP)
    PersistentKeepalive = 25
    tipp

    Die Erklärung der Einstellungen in der WireGuard-Konfigurationsdatei finden Sie unten:

    • PrivateKey: Der private Schlüssel des VPN-Knotens, der in der zuvor generierten Datei /etc/wireguard/node#n_private.key gefunden werden kann.
    • Address: definiert die privaten IPv4- und IPv6-Adressen für den WireGuard-Knoten. Jeder Peer im VPN-Netzwerk sollte eine eindeutige IP-Adresse haben.
    • ListenPort: gibt an, welchen Port WireGuard für eingehende Verbindungen verwenden wird. kann frei aus dem Hochportbereich ausgewählt werden. Wenn kein Port angegeben ist, ist es standardmäßig 51820/UDP.
    • PublicKey : Der öffentliche Schlüssel des entsprechenden VPN-Peer-Knotens, der in der zuvor generierten Datei /etc/wireguard/node#n_public.key zu finden ist.
    • Endpoint: Die öffentliche/WAN-IP-Adresse und Portnummer des entsprechenden VPN-Peer-Knotens.
    • AllowedIPs: Netzwerk- und IP-Adressen, die vom entsprechenden VPN-Peer-Knoten zugänglich oder geroutet werden. Sie können IP-Adressbereiche in der Liste festlegen, durch Kommas getrennt.
    • PersistentKeepalive: Senden Sie alle 25 Sekunden ein authentifiziertes leeres Paket an den Peer, um die Verbindung aufrechtzuerhalten. Wenn PersistentKeepalive nicht aktiviert ist, können die VPN-Knoten möglicherweise nicht miteinander pingen.
  3. Save und schließen Sie die Datei.

  4. Wiederholen Sie die Schritte 1-3 auf allen VPN-Knoten und ersetzen Sie Name, PrivateKey, PublicKey, Endpoint und AllowedIPs durch die korrekten Werte für jeden Knoten.

Nachdem Sie die oben genannten Schritte abgeschlossen haben, sollten Sie auf allen VPN-Knoten WireGuard-VPN-Konfigurationsdateien haben, die den untenstehenden Beispieldateien ähnlich sind. Verwenden Sie nicht die in den nächsten Beispielkonfigurationsdateien angegebenen privaten und öffentlichen Schlüssel; verwenden Sie Ihre eigenen Paare, die Sie im ersten Abschnitt oben generiert haben.

Die für Node1 generierte WireGuard-VPN-Konfigurationsdatei sieht folgendermaßen aus:

[Interface]
# Name: NODE1
Address = 10.0.1.1
PrivateKey = KHpX3JsGa1EQSqWzy32SatTMwiJTckFIqmIK+e+T/FQ=
ListenPort = 51820

[Peer]
# Name: NODE2
PublicKey = /X6VZ7MuwRQ6psUlT7e6lW0cYOahm2C24vDk005RrxU=
Endpoint = 11.11.11.2:51820
AllowedIPs = 10.0.2.1

[Peer]
# Name: NODE3
PublicKey = rnQGHyCFrRg+JDwZ+tJYo99KhKhO7o8RZ2aN/wpfPi8=
Endpoint = 11.11.11.3:51820
AllowedIPs = 10.0.3.1

[Peer]
# Name: NODE4
PublicKey = a+ITWT2UudgU4riPqtOoyQF/UfNiSVaw0SLjDsQ74nY=
Endpoint = 11.11.11.4:51820
AllowedIPs = 10.0.4.1

Die für Node2 generierte WireGuard VPN-Konfigurationsdatei sieht folgendermaßen aus:

[Interface]
# Name: NODE2
Address = 10.0.2.1
PrivateKey = GAT/al+KhZwSVw95XxAuOZ+ezs5qtgJgMpp3i0TNP0Y=
ListenPort = 51820

[Peer]
# Name: NODE1
PublicKey = aFg3Jx1uTXZQlnrNrOyN5PAobcmmEX359d1nfOpOnQM=
Endpoint = 11.11.11.1:51820
AllowedIPs = 10.0.1.1

[Peer]
# Name: NODE3
PublicKey = rnQGHyCFrRg+JDwZ+tJYo99KhKhO7o8RZ2aN/wpfPi8=
Endpoint = 11.11.11.3:51820
AllowedIPs = 10.0.3.1

[Peer]
# Name: NODE4
PublicKey = a+ITWT2UudgU4riPqtOoyQF/UfNiSVaw0SLjDsQ74nY=
Endpoint = 11.11.11.4:51820
AllowedIPs = 10.0.4.1

Die für Node3 generierte WireGuard VPN-Konfigurationsdatei sieht folgendermaßen aus:

[Interface]
# Name: NODE3
Address = 10.0.3.1
PrivateKey = sLXHpUKvNIbZRqVeIMKb3gW+tK9NK0ECIbJPGCulN3w=
ListenPort = 51820

[Peer]
# Name: NODE1
PublicKey = aFg3Jx1uTXZQlnrNrOyN5PAobcmmEX359d1nfOpOnQM=
Endpoint = 11.11.11.1:51820
AllowedIPs = 10.0.1.1

[Peer]
# Name: NODE2
PublicKey = /X6VZ7MuwRQ6psUlT7e6lW0cYOahm2C24vDk005RrxU=
Endpoint = 11.11.11.2:51820
AllowedIPs = 10.0.2.1

[Peer]
# Name: NODE4
PublicKey = a+ITWT2UudgU4riPqtOoyQF/UfNiSVaw0SLjDsQ74nY=
Endpoint = 11.11.11.4:51820
AllowedIPs = 10.0.4.1

Die für Node4 generierte WireGuard-VPN-Konfigurationsdatei sieht folgendermaßen aus:

[Interface]
# Name: NODE4
Address = 10.0.4.1
PrivateKey = EJYvbLKcWqxzcQD1EESkZbdhjCS3R/A2RCFxh0CBjHE=
ListenPort = 51820

[Peer]
# Name: NODE1
PublicKey = aFg3Jx1uTXZQlnrNrOyN5PAobcmmEX359d1nfOpOnQM=
Endpoint = 11.11.11.1:51820
AllowedIPs = 10.0.1.1

[Peer]
# Name: NODE2
PublicKey = /X6VZ7MuwRQ6psUlT7e6lW0cYOahm2C24vDk005RrxU=
Endpoint = 11.11.11.2:51820
AllowedIPs = 10.0.2.1

[Peer]
# Name: NODE3
PublicKey = rnQGHyCFrRg+JDwZ+tJYo99KhKhO7o8RZ2aN/wpfPi8=
Endpoint = 11.11.11.3:51820
AllowedIPs = 10.0.3.1

4. Starten des WireGuard-Servers und Aktivieren beim Booten

Wir sind bereit, den Server zu starten, jetzt wo wir die Konfiguration abgeschlossen haben. WireGuard hat einen praktischen Wrapper namens wg-quick, der verwendet werden kann, um neue Schnittstellen zu starten, ohne sich mit den Konfigurationsdetails auseinandersetzen zu müssen.

Sie sollten den WireGuard-Dienst auf allen VPN-Knoten starten. Um den WireGuard-Dienst zu starten und die WireGuard-Schnittstelle (wg0) hochzufahren, führen Sie den folgenden Befehl auf dem Server aus:

sudo wg-quick up wg0

Dies lädt die Konfigurationsdatei /etc/wireguard/wg0.conf. und Sie sollten eine Ausgabe wie die folgende sehen, wenn Sie die Schnittstelle erfolgreich gestartet haben:

[#] ip link add wg0 type wireguard
[#] wg setconf wg0 /dev/fd/63
[#] ip -4 address add 10.0.1.1/24 dev wg0
[#] ip link set mtu 1420 up dev wg0

Um den WireGuard-Dienst auf einem VPN-Knoten zu stoppen, führen Sie den folgenden Befehl aus:

sudo wg-quick down wg0

Sie können den systemd-Dienst verwenden, um WireGuard zu starten, indem Sie den folgenden Befehl ausführen:

sudo systemctl start [email protected]

Sie können den Zustand und die Konfiguration von WireGuard mit den folgenden Befehlen überprüfen. Sein Status sollte aktiv sein. (exited).

sudo wg show wg0

Sie sollten die Ausgabe ähnlich wie unten sehen:

interface: wg0
public key: sMX4WwdC85Z1UTyDFFCHq8EoaPqMj2f+DdvSTnJ/kmY=
private key: (hidden)
listening port: 51820

peer: /X6VZ7MuwRQ6psUlT7e6lW0cYOahm2C24vDk005RrxU=
endpoint: 11.11.11.2:51820
allowed ips: 10.0.2.1/32
latest handshake: 1 minute, 34 seconds ago
transfer: 259.25 KiB received, 70.45 KiB sent

peer: rnQGHyCFrRg+JDwZ+tJYo99KhKhO7o8RZ2aN/wpfPi8=
endpoint: 11.11.11.3:51820
allowed ips: 10.0.3.1/32
latest handshake: 1 minute, 3 seconds ago
transfer: 476 B received, 564 B sent

peer: a+ITWT2UudgU4riPqtOoyQF/UfNiSVaw0SLjDsQ74nY=
endpoint: 11.11.11.4:51820
allowed ips: 10.0.4.1/32
latest handshake: 1 minute, 4 seconds ago
transfer: 476 B received, 564 B sent

Um die WireGuard-Schnittstelle beim Systemstart automatisch zu aktivieren, führen Sie den folgenden Befehl aus:

sudo systemctl enable wg-quick@wg0

Jetzt, wo der WireGuard-Server läuft, ist er bereit, VPN-Knotenverbindungen anzunehmen.

5. Überprüfung der Mesh-VPN-Konnektivität

Sie können den nächsten Befehl auf jedem VPN-Knoten ausführen, um den Zustand der WireGuard-Schnittstelle zu überprüfen:

ip a show wg0

Sie sollten eine Ausgabe ähnlich der untenstehenden für Node1 sehen:

6: wg0: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1420 qdisc noqueue state UNKNOWN group default qlen 1000
link/none
inet 10.0.1.1/24 scope global wg0
valid_lft forever preferred_lft forever

Sie können versuchen, von jedem VPN-Knoten aus auf alle anderen Knoten zuzugreifen, indem Sie den Ping-Befehl ausführen. Jeder VPN-Peer antwortet auf den Ping-Befehl des anderen Peers, was darauf hinweist, dass die VPN-Verbindung aktiv ist.

Für unser Beispiel führen Sie die nächsten Befehle auf Node1 aus. Dann sollten Sie auf alle VPN-Teilnehmer zugreifen:

ping 10.0.2.1
64 bytes from 10.0.2.1: icmp_seq=1 ttl=64 time=1.87 ms
64 bytes from 10.0.2.1: icmp_seq=2 ttl=64 time=0.992 ms
64 bytes from 10.0.2.1: icmp_seq=3 ttl=64 time=1.37 ms
64 bytes from 10.0.2.1: icmp_seq=4 ttl=64 time=1.21 ms
64 bytes from 10.0.2.1: icmp_seq=5 ttl=64 time=1.57 ms
64 bytes from 10.0.2.1: icmp_seq=6 ttl=64 time=1.43 ms
--- 10.0.2.1 ping statistics ---
6 packets transmitted, 6 received, 0% packet loss, time 5008ms
rtt min/avg/max/mdev = 0.992/1.577/1.873/0.607 ms
ping 10.0.3.1
64 bytes from 10.0.3.1: icmp_seq=1 ttl=64 time=1.87 ms
64 bytes from 10.0.3.1: icmp_seq=2 ttl=64 time=0.992 ms
64 bytes from 10.0.3.1: icmp_seq=3 ttl=64 time=1.37 ms
64 bytes from 10.0.3.1: icmp_seq=4 ttl=64 time=1.21 ms
64 bytes from 10.0.3.1: icmp_seq=5 ttl=64 time=1.57 ms
64 bytes from 10.0.3.1: icmp_seq=6 ttl=64 time=1.43 ms
--- 10.0.3.1 ping statistics ---
6 packets transmitted, 6 received, 0% packet loss, time 5008ms
rtt min/avg/max/mdev = 0.992/1.577/1.873/0.607 ms
ping 10.0.4.1
64 bytes from 10.0.4.1: icmp_seq=1 ttl=64 time=1.87 ms
64 bytes from 10.0.4.1: icmp_seq=2 ttl=64 time=0.992 ms
64 bytes from 10.0.4.1: icmp_seq=3 ttl=64 time=1.37 ms
64 bytes from 10.0.4.1: icmp_seq=4 ttl=64 time=1.21 ms
64 bytes from 10.0.4.1: icmp_seq=5 ttl=64 time=1.57 ms
64 bytes from 10.0.4.1: icmp_seq=6 ttl=64 time=1.43 ms
--- 10.0.4.1 ping statistics ---
6 packets transmitted, 6 received, 0% packet loss, time 5008ms
rtt min/avg/max/mdev = 0.992/1.577/1.873/0.607 ms

Automatische Generierung von Schlüsselpaaren und WireGuard-Konfigurationsdateien

Die manuelle Konfiguration einer erheblichen Anzahl von Knoten in einem WireGuard-Mesh-Netzwerk ist eine zeitaufwändige Aufgabe. Um einen neuen Knoten zum Mesh-VPN-Netzwerk hinzuzufügen, müsste der Administrator die O(n2)-Knoteneinstellungen jedes Mal ändern, wenn ein neuer Client hinzugefügt wird.

Mehrere WireGuard-Mesh-Tools existieren, um die automatisierte Erstellung von WireGuard-Einstellungen für die nahtlose Verwaltung Ihrer Mesh-Netzwerke zu ermöglichen. Die gebräuchlichsten WireGuard-Mesh-Tools sind unten aufgeführt:

  1. Tailscale
  2. Headscale
  3. Netmaker
  4. Wesher
  5. Netbird
  6. wgmesh
  7. wiresmith

In diesem Tutorial werden wir ein Python-Skript namens WireGuard Mesh Configurator, wgmesh, verwenden, um die Konfigurationsdateien für unsere Knoten zu erstellen.

Sie können die nächsten Schritte auf einem Ihrer VPN-Knoten oder einer lokalen Linux-Maschine ausführen, um automatisch WireGuard-Mesh-Konfigurationsdateien zu generieren:

  1. Installieren Sie git, python3-pip und python3-Pakete, indem Sie den folgenden Befehl ausführen:

    apt install git python3-pip python3 libncurses-dev -y
  2. Klonen Sie das GitHub-Repository des WireGuard Mesh Configurators, wgmesh, indem Sie den folgenden Befehl ausführen:

    git clone https://github.com/k4yt3x/wg-meshconf
  3. Führen Sie die nächsten Befehle aus, um in Ihr Verzeichnis zu gelangen und die erforderlichen Pakete für wgmesh zu installieren:

    cd wg-meshconf
    pip install 'wg-meshconf@git+https://github.com/k4yt3x/wg-meshconf.git'
  4. Führen Sie den nächsten Befehl aus, um eine neue Datenbankdatei zu starten, da Sie zuerst die Informationen der Peers zur Datenbank hinzufügen müssen. Standardmäßig heißt die Datenbankdatei database.csv. Sie können den Dateinamen auch über -d angeben.:

    wg-meshconf init
  5. Sie müssen alle VPN-Teilnehmer zur Datenbank hinzufügen. Geben Sie den folgenden Befehl für jedes VPN-Peer ein, das Sie hinzufügen möchten:

    wg-meshconf addpeer NAME --address VPN_IP_ADDRESS --address LAN_IP_ADDRESS --endpoint PUBLIC_IP_ADDRESS

    Dieser Befehl generiert automatisch einen neuen privaten Schlüssel, wenn keiner angegeben ist, und setzt den Standardwert für ListenPort auf 51820.

    tipp

    You may use wg-meshconf addpeer -h to view more details.

    Wiederholen Sie diesen Schritt für alle VPN-Teilnehmer in Ihrem Mesh-Netzwerk. Für unser Beispiel führen wir die nächsten Befehle aus:

    wg-meshconf addpeer NODE1 --address 10.0.1.1 --endpoint 11.11.11.1
    wg-meshconf addpeer NODE2 --address 10.0.2.1 --endpoint 11.11.11.2
    wg-meshconf addpeer NODE3 --address 10.0.3.1 --endpoint 11.11.11.3
    wg-meshconf addpeer NODE4 --address 10.0.4.1 --endpoint 11.11.11.4
  6. Führen Sie den folgenden Befehl aus, um sicherzustellen, dass Ihre Peers korrekt hinzugefügt wurden.

    wg-meshconf showpeers

    Sie sollten eine Tabelle sehen, die der folgenden ähnlich ist:


    ----------------------------------------------------------------------------------------------

    -- NAME -- ADDRESS -- LISTENPORT -- PRIVATEKEY -- ENDPOINT --

    ----------------------------------------------------------------------------------------------

    -- NODE1 -- 10.0.1.1 -- 51820 -- KHpX3JsGa1EQSqWzy32SatTMwiJTckFIqmIK+e+T/FQ= -- 11.11.11.1 --

    ----------------------------------------------------------------------------------------------

    -- NODE2 -- 10.0.2.1 -- 51820 -- GAT/al+KhZwSVw95XxAuOZ+ezs5qtgJgMpp3i0TNP0Y= -- 11.11.11.2 --

    ----------------------------------------------------------------------------------------------

    -- NODE3 -- 10.0.3.1 -- 51820 -- sLXHpUKvNIbZRqVeIMKb3gW+tK9NK0ECIbJPGCulN3w= -- 11.11.11.3 --

    ----------------------------------------------------------------------------------------------

    -- NODE4 -- 10.0.4.1 -- 51820 -- EJYvbLKcWqxzcQD1EESkZbdhjCS3R/A2RCFxh0CBjHE= -- 11.11.11.4 --

    ----------------------------------------------------------------------------------------------

  7. Um die WireGuard-Mesh-VPN-Konfigurationsdateien für alle Peers zu generieren, führen Sie den nächsten Befehl aus. Um die Einstellungen für einen bestimmten Peer zu exportieren, geben Sie einfach den Namen des Peers an. Die Konfigurationsdateien werden nach den Namen der Peers benannt. Standardmäßig werden alle Konfigurationsdateien automatisch in einem Unterordner namens "output" gespeichert.

    wg-meshconf genconfig
  8. Sie können die WireGuard-Konfigurationsdateien mit dem Befehl cat anzeigen. Für unser Beispiel können wir die Konfigurationsdatei von Node1 anzeigen, indem wir den folgenden Befehl ausführen:

    cat output/Node1.conf
  9. Übertragen Sie die generierten WireGuard-Konfigurationsdateien auf jeden VPN-Knoten mit einer beliebigen bevorzugten Technik, wie z.B. SFTP. Stellen Sie sicher, dass die Konfiguration in /etc/wireguard/wg0.conf gespeichert ist, um die wg-quick-Funktion für eine schnellere Einrichtung zu verwenden.

  10. Verbinden Sie sich mit jedem Knoten.

  11. Starten Sie den WireGuard-Dienst und testen Sie die VPN-Verbindungen wie im vorherigen Abschnitt beschrieben.

Sie haben erfolgreich ein Mesh-Netzwerk mit WireGuard eingerichtet, das es Ihren Knoten ermöglicht, sicher und privat miteinander zu interagieren. Aufgrund des Fehlens eines zentralen Servers wird das Netzwerk auch dann funktionsfähig bleiben, wenn einer der Peers ausfällt.

Was ist die Hub-and-Spoke-Architektur?

Die Hub-and-Spoke-Topologie ist eine Netzwerkkonfiguration, bei der ein zentrales Gerät, das als Hub bezeichnet wird, mit mehreren anderen Geräten, die als Speichen bezeichnet werden, zur Datenübertragung und -kommunikation verbunden ist. Dieses System bietet eine einfache und effiziente Methode zur Steuerung und Überwachung von Daten in einem Netzwerk, mit der Ausnahme, dass der Hub einen einzigen Ausfallpunkt darstellt. Der zentrale Hub fungiert als Vermittler für alle Kommunikation, erleichtert die Konfiguration der Sicherheitseinstellungen und die Überwachung des Datenverkehrs. Die Hub-and-Spoke-Architektur ist bekannt für ihre Einfachheit, ihre Fähigkeit, Wachstum zu bewältigen, und ihre verbesserten Sicherheitsmerkmale, was sie zu einer nützlichen Option für Unternehmen macht.

Typischerweise stellen VPN-Nutzer, einschließlich WireGuard-Nutzer, eine "Hub-and-Spoke"-Struktur her, bei der jedes Client-Gerät (wie ein Desktop-PC) eine Verbindung zu einem zentralen "Konzentrator" oder VPN-Gateway herstellt.

Die Einrichtung von WireGuard wird vereinfacht, indem sichergestellt wird, dass jeder Knoten im Netzwerk die wesentlichen Informationen des öffentlichen Schlüssels, der öffentlichen IP-Adresse und der Portnummer jedes gewünschten Knotens für die direkte Verbindung hat. Um eine vollständige Konnektivität über 10 Knoten zu erreichen, muss jeder Knoten über 9 Peer-Knoten informiert sein, was zu 90 verschiedenen Tunnel-Endpunkten führt. Ein Hub-and-Spoke-Netzwerk besteht aus einem einzigen zentralen Hub-Knoten und 9 peripheren Knoten, die durch Speichen verbunden sind, was zu einer viel einfacheren Struktur führt. Der Hub-Knoten hat oft eine feste IP-Adresse und eine Firewall-Öffnung, die seine Auffindbarkeit für alle Benutzer erleichtert. Anschließend kann es eingehende Verbindungen von Knoten an verschiedenen IP-Adressen empfangen, unabhängig davon, ob sich diese Knoten ebenfalls hinter einer Firewall befinden, gemäß dem konventionellen Ansatz der Client-Server-Internetprotokolle.

Was sind die Nachteile der Hub-and-Spoke-Architektur?

Das Hub-and-Spoke-Modell ist effektiv, hat jedoch einige Nachteile. Primär besitzen die meisten zeitgenössischen Organisationen keinen bestimmten Standort, den sie als zentralen Knotenpunkt identifizieren möchten. Sie besitzen mehrere Büros, verschiedene geografische Standorte, mehrere Cloud-Datenzentren und Virtual Private Clouds (VPCs) unter anderem. Das Hub-and-Spoke-VPN-Design erlaubt es Ihren Knoten nicht, miteinander zu kommunizieren. Typischerweise richten Unternehmen in herkömmlichen VPN-Konfigurationen einen einzelnen VPN-Konzentrator ein und stellen anschließend zusätzliche Tunnel (häufig unter Verwendung von IPsec) ein, die andere Standorte verbinden. Fernbenutzer werden zum VPN-Konzentrator an einem Standort geleitet, von wo aus ihr Datenverkehr dann zu seinem endgültigen Ziel an einem anderen Standort weitergeleitet wird.

Die Skalierung ist mit dieser konventionellen Hub-and-Spoke-VPN-Konfiguration herausfordernd. Zunächst sollte darauf hingewiesen werden, dass entfernte Benutzer möglicherweise in der Nähe des VPN-Konzentrators sind oder auch nicht. Falls sie weit entfernt sind, werden sie erhebliche Verzögerungen beim Herstellen einer Verbindung dazu erleben. Darüber hinaus befindet sich das gewünschte Rechenzentrum möglicherweise nicht in unmittelbarer Nähe des VPN-Konzentrators. In solchen Fällen wird es zu einem signifikanten Anstieg der Latenz kommen. Betrachten Sie folgendes Szenario: Ein Mitarbeiter in New York versucht, eine Verbindung zu einem Server in New York herzustellen, indem er den VPN-Konzentrator des Unternehmens nutzt, der sich in der Hauptniederlassung in Kalifornien befindet.

Wie löst WireGuard das Problem der Hub-and-Spoke-Architektur?

WireGuard hat besondere Eigenschaften und eine Sammlung von äußerst leichten Tunneln. Die WireGuard-Tunnel sind leicht genug, um die Einrichtung einer Multi-Hub-Konfiguration mit wenig Aufwand zu ermöglichen. WireGuard-Mesh-VPN ermöglicht direkte Verbindungen zwischen allen Knoten, sodass jeder Knoten mit jedem anderen Knoten verbunden werden kann. Jeder Knoten ist effizient und zuverlässig mit jedem Knoten im WireGuard-Mesh-VPN-Netzwerk verbunden.

Es ist jedoch unerlässlich, dass jedes Rechenzentrum mit einer statischen IP-Adresse, einem offenen Firewall-Port und einem spezifischen Satz von WireGuard-Schlüsseln ausgestattet ist. Beim Hinzufügen eines neuen Benutzers wird es notwendig sein, den neuen Schlüssel an alle fünf Server zu verteilen. Bei der Hinzufügung eines neuen Servers wird es notwendig sein, seinen Schlüssel an jeden Benutzer zu verteilen. Es erfordert jedoch etwa fünfmal so viel Aufwand im Vergleich zu einem einzelnen Hub, was nicht viel Arbeit ist.

Mesh vs Hub-and-Spoke

Ein Mesh-Netzwerk, oder vollständig verbundenes Netzwerk, ist ein Netzwerk, in dem jeder Knoten direkt mit jedem anderen Knoten verbunden ist. Mesh-Topologie garantiert effiziente und ungehinderte Kommunikationskanäle zwischen allen beteiligten Parteien. Es wird jedoch kompliziert und schwer zu verwalten, wenn die Anzahl der Knoten aufgrund der Anzahl der Verbindungen steigt.

Im Vergleich dazu ist ein Hub-and-Spoke-Netzwerk einfacher, da jeder Speiche direkt nur mit dem Hub verbunden ist. Der Prozess der Zentralisierung könnte die Koordination der Aktivitäten optimieren, aber er führt zu einer Abhängigkeit vom zentralen Knotenpunkt. Zentralisierte Kontrolle ist geeigneter, wenn es einen Bedarf an zentralisierter Kontrolle gibt; jedoch ist ein vollständig vernetztes Netzwerk vorzuziehen, wenn direkter Kontakt zwischen allen Parteien unerlässlich ist.