WireGuard Hub-and-Spoke mit VPS und Raspberry Pi

Bei Standard-DSL-Verbindungn hat man nicht unbedingt eine feste IP-Adresse, um vom Internet auf lokale Ressourcen (Server) einfach zugreifen zu können. WireGuard kann hier Abhilfe schaffen, denn mit WireGuard kann schnell und einfach ein virtuelle privates Netzwerk (VPN) über eine verschlüsselte Verbindung eingerichtet werden. Das ganze ist OpenSource und somit kostenlos verfügbar.

Hub-and-Spoke

Das hier vorgestellte Szenario ist unter dem Begriff “Hub-and-Spoke” bekannt. Ein zentraler Dienst - der Hub - hat Verbindungen zu mehreren anderen Diensten - den Spokes (Speichen). Für unser Szenario bedeutet das, ein Rechner, der mit dem Internet verbunden ist, kann über das VPN auf einen Rechner im lokalen Netzwerk (Heimnetz) zugreifen, indem der Hub (ein Server im Internet) die Vermittlung des Datenverkehrs übernimmt. Dazu eine Grafik.

Hub-and-Spoke

Zusammengefasst: Dieses Setup verbindet drei Geräte über WireGuard:

Netzwerk: 10.200.200.0/24

Die Kommunikation läuft über UDP und den Port 51820. Dieser Port muss in der jeweils auf dem Gerät installierten Firewall freigeschaltet sein.

Konfiguration

Installation auf VPS

sudo apt update
sudo apt install wireguard -y

Prüfen: sudo modprobe wireguard

Schlüssel für VPS generieren

wg genkey | tee /etc/wireguard/privatekey | wg pubkey > /etc/wireguard/publickey

Die Inhalte von privatekey und publickey braucht man später.

Installation auf Raspberry Pi

sudo apt update
sudo apt install wireguard -y
sudo modprobe wireguard

Schlüssel generieren

wg genkey | tee ~/wg-privatekey | wg pubkey > ~/wg-publickey

Installation auf Mac

Über den App Store kann man sich WireGuard installieren. Die Einrichtung des Tunnels geht dann über die App. Zusätzlich kann man die wireguard-tools über homebrew installieren: brew install wireguard-tools

Nach der Installation muss man auch hier Schlüssel generieren: wg genkey | tee ~/wg-mac-privatekey | wg pubkey > ~/wg-mac-publickey

Konfiguration des VPS (Hub)

Der Hub kennt alle seine Spokes (Peers). Deshalb müssen auf dem Hub alle Peers konfiguriert werden.

/etc/wireguard/wg0.conf

[Interface]
Address = 10.200.200.1/24
ListenPort = 51820
PrivateKey = <VPS_PRIVATE_KEY>

# Raspberry Pi Peer
[Peer]
PublicKey = <PI_PUBLIC_KEY>
AllowedIPs = 10.200.200.2/32

# Mac Peer
[Peer]
PublicKey = <MAC_PUBLIC_KEY>
AllowedIPs = 10.200.200.3/32

IP forwarding

Ich hatte das Problem, dass der Traffic vom Mac nicht an den Raspberry Pi geleitet wurde. Das Einrichten dieser Weiterleitung schafft hier Abhilfe

  1. IP-Forwarding aktivieren
sudo sysctl -w net.ipv4.ip_forward=1
echo "net.ipv4.ip_forward=1" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
  1. Firewall Forwarding erlauben (falls iptables aktiv):
sudo iptables -A FORWARD -i wg0 -j ACCEPT
sudo iptables -A FORWARD -o wg0 -j ACCEPT

WireGuard starten

Entweder zum Testen mit wg-quick oder mit dem service wg-quick@wg0

sudo wg-quick up wg0
sudo systemctl enable wg-quick@wg0

Konfiguration Raspberry Pi

/etc/wireguard/wg0.conf

[Interface]
PrivateKey = <PI_PRIVATE_KEY>
Address = 10.200.200.2/24
DNS = 1.1.1.1

[Peer]
PublicKey = <VPS_PUBLIC_KEY>
AllowedIPs = 10.200.200.0/24
Endpoint = <VPS_PUBLIC_IP>:51820
PersistentKeepalive = 25

WireGuard starten

Entweder zum Testen mit wg-quick oder mit dem service wg-quick@wg0

sudo wg-quick up wg0
sudo systemctl enable wg-quick@wg0

Konfiguration Mac

WireGuard App oder Homebrew (wireguard-tools) Config

[Interface]
PrivateKey = <MAC_PRIVATE_KEY>
Address = 10.200.200.3/24
DNS = 1.1.1.1

[Peer]
PublicKey = <VPS_PUBLIC_KEY>
AllowedIPs = 10.200.200.0/24
Endpoint = <VPS_PUBLIC_IP>:51820
PersistentKeepalive = 25

WireGuard starten

In der App die Verbindung starten.

Test und Debug

a) Handshake prüfen

sudo wg show      # auf VPS / Pi
WireGuard App     # auf Mac

b) Pingtest

Mac –> Pi

ping 10.200.200.2
ssh pi@10.200.200.2

Mac –> VPS

ping 10.200.200.1
ssh pi@10.200.200.1

Hinweise

  1. VPS als Hub:
  1. Peers (Pi / Mac):
  1. Firewall:
  1. PersistentKeepalive = 25:
Zurück
2025-12-07 13:07