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.

Zusammengefasst: Dieses Setup verbindet drei Geräte über WireGuard:
- VPS (Hub, öffentliche IP)
- Raspberry Pi (VPN-Peer)
- Mac (VPN-Peer)
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
- 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
- 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
[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
- VPS als Hub:
- AllowedIPs der Peers = nur deren IP
- IP-Forwarding muss aktiviert sein
- Peers (Pi / Mac):
- AllowedIPs = 10.200.200.0/24 → alles über Hub
- Firewall:
- UDP-Port 51820 offen
- Forwarding erlaubt
- PersistentKeepalive = 25:
- Hält NAT-Tunnel bei dynamischen IPs aktiv
Zurück2025-12-07 13:07