WireGuard Site-to-Site VPN Verbindung mit zwei Linux Server
Für die Einrichtung einer WireGuard Site-to-Site VPN-Verbindung zwischen zwei Servern benötigen wir zwei Linux-Server, auf denen das Betriebssystem installiert ist. Im folgenden Beispiel werden wir davon ausgehen, dass beide Server über das gleiche Betriebssystem (z. B. Ubuntu oder Debian) verfügen.
Beispiel Daten die in dieser Doku Verwendet werden:
Subnet Server-1: 192.168.0.0/24
Subnet Server-2: 192.168.178.0/24
Inhalt
Beide Server
Zunächst solltest du sicherstellen, dass beide Server auf dem neuesten Stand sind, indem du alle verfügbaren Updates installierst. Dies kannst du mit den folgenden Befehlen tun:
1 | apt-get update && apt-get upgrade -y |
Anschließend installieren wir WireGuard auf beiden Servern. Auf beiden Servern kannst du dies mit dem folgenden Befehl tun:
1 | apt install wireguard |
Damit der Server Daten zwischen den Netzwerken weiterleiten kann, muss die IP-Weiterleitung aktiviert werden. Dies erfolgt durch die Bearbeitung der Datei /etc/sysctl.conf. Öffne die Datei mit einem Texteditor:
1 2 3 | nano /etc/sysctl .conf uncomment net.ipv4.ip_forward=1 |
Suche die Zeile mit net.ipv4.ip_forward=1
und entferne das Kommentarzeichen (#
) davor. Dadurch wird die IP-Weiterleitung aktiviert. Speichere die Datei und schließe den Editor. Wende die Änderungen an, indem du den folgenden Befehl ausführst:
1 | sysctl -p |
WireGuard benötigt für jede Verbindung ein Public/Private Key-Paar. Dies kannst du auf jedem Server generieren:
1 2 3 | cd /etc/wireguard umask 077; wg genkey | tee privatekey | wg pubkey > publickey |
Dieser Befehl generiert ein PrivateKey und ein PublicKey, die du später in der Konfiguration verwenden wirst.
Server 1
Für Server 1 erstellen wir die Datei wg0.conf, welche die Verbindungseinstellungen enthält. Öffne dafür die Konfigurationsdatei:
1 | nano /etc/wireguard/wg0 .conf |
Füge die folgenden Konfigurationen ein, wobei du die Platzhalter <site-1 private-key>
und <site-2 public-key>
durch die entsprechenden Schlüssel ersetzt:
1 2 3 4 5 6 7 8 9 10 11 12 | [Interface] PrivateKey = <site-1 private-key> Address = 10.0.0.1 /24 SaveConfig = true PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE ListenPort = 51820 [Peer] PublicKey = <site-2 public-key> AllowedIPs = 10.0.0.0 /24 , 192.168.178.0 /24 PersistentKeepalive = 25 |
Erklärung:
- PrivateKey: Der private Schlüssel von Server 1.
- Address: Die IP-Adresse, die Server 1 im VPN-Netzwerk verwenden soll.
- PostUp und PostDown: Befehle, die ausgeführt werden, wenn die VPN-Verbindung gestartet oder gestoppt wird, um die Netzwerkrouten zu konfigurieren.
- Peer: Hier definieren wir Server 2 als Peer und geben den öffentlichen Schlüssel von Server 2 sowie die erlaubten IP-Bereiche an.
Server 2
Für Server 2 erstellst du ebenfalls eine wg0.conf-Datei. Öffne die Konfigurationsdatei mit:
1 | nano /etc/wireguard/wg0 .conf |
Füge die folgenden Konfigurationen ein, wobei du die Platzhalter <site-2 private-key>
und <site-1 public-key>
durch die entsprechenden Schlüssel ersetzt und den Platzhalter <FQDN> durch deinen Öffentlichen DYNDNS Namen.
1 2 3 4 5 6 7 8 9 10 11 12 | [Interface] PrivateKey = <site-2 private-key> Address = 10.0.0.3 /24 SaveConfig = true PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE [Peer] PublicKey = <site-1 public-key> Endpoint = <FQDN>:51820 AllowedIPs = 10.0.0.0 /24 , 192.168.0.0 /24 PersistentKeepalive = 25 |
Erklärung:
- PrivateKey: Der private Schlüssel von Server 2.
- Address: Die IP-Adresse, die Server 2 im VPN-Netzwerk verwenden soll.
- Endpoint: Die öffentliche IP-Adresse oder der FQDN von Server 1.
- AllowedIPs: Hier definieren wir, welche IP-Bereiche von Server 2 erreichbar sind.
Beide Server
Nachdem die Konfigurationsdateien auf beiden Servern erstellt wurden, kannst du die VPN-Verbindung starten:
1 | wg-quick up wg0 |
Um den Status der VPN-Verbindung zu überprüfen, kannst du den folgenden Befehl verwenden:
1 | wg show |
Um sicherzustellen, dass die VPN-Verbindung bei jedem Neustart des Servers automatisch gestartet wird, kannst du WireGuard so konfigurieren, dass es beim Hochfahren des Systems startet:
1 | systemctl enable wg-quick@wg0 |
Damit ist die VPN-Verbindung automatisch aktiv, wenn der Server hochfährt.
Wenn man den Wireguard Dienst beenden will muss man folgenden Befehl verwenden.
1 | wg-quick down wg0 |
Mit dieser Konfiguration hast du nun eine funktionierende WireGuard Site-to-Site VPN-Verbindung zwischen zwei Linux-Servern eingerichtet.