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

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.