overflow763
Goto Top

WireGuard: Instabile Verbindung zwischen Gateway und Client (über Server)

Hallo zusammen,

ich hoffe, hier auf jemanden zu treffen, der mir bei einem merkwürdigen Problem mit meiner WireGuard-Konfiguration weiterhelfen kann. Vielleicht hat jemand ähnliche Erfahrungen gemacht.

Ausgangssituation:

Server: Externer VPS mit 2.5 Gbit Anbindung
Client: 1 Gbit Down / 100 Mbit Up
Gateway im Heimnetzwerk: Linux-Server mit 1 Gbit Down / 100 Mbit Up

Verbindungen im Detail:

Client ↔ Server: Die Verbindung ist stabil und erreicht die maximale Geschwindigkeit, kein Problem hier.
Gateway ↔ Server: Ebenfalls stabil und schnell.
Problemfall: Gateway ↔ Client über den Server

Hier kommt es zu deutlichen Problemen: Die Verbindung ist extrem schwankend, meist nur 5–50 Mbit und alles andere als stabil. Bei iperf3-Tests zwischen Client und Gateway beobachte ich, dass die Übertragungsrate ständig hoch und runter geht. Oft sind es nur 20 Mbit oder weniger, manchmal steigen sie kurzzeitig auf 50-80 Mbit.

Was ich bereits versucht habe:

MTU-Optimierung: Die besten Ergebnisse konnte ich bisher mit einer MTU von 1280 erzielen. Jedoch ist das Problem damit nicht behoben.
Verschiedene Clients: Getestet habe ich unter Windows, Linux, Android und iOS – das Verhalten ist auf allen Plattformen gleich.
CPU-Auslastung geprüft: Auf allen beteiligten Systemen ist die CPU-Auslastung minimal und dürfte nicht der Grund für die Limitierungen sein.

Mein Ziel:
Ich möchte eine stabile, schnelle Verbindung vom Heimnetzwerk zu meinen Clients erreichen, sodass die Clients dabei auch die Internetverbindung des Heimnetzwerks nutzen können. Grundsätzlich erfüllt die aktuelle Konfiguration dieses Ziel, allerdings ist die Verbindung viel zu instabil, um darüber zu arbeiten.

Habt ihr eine Idee, was hier der Grund sein könnte oder Tipps, wie ich die Verbindung optimieren kann?

Danke vorab für jede Hilfe!


WG-Konfig Server:
[Interface]
Address = 10.22.33.1/24
PrivateKey = XXXX
ListenPort = 51820
MTU = 1280

# IPv4 Forwarding aktivieren
PreUp = sysctl -w net.ipv4.ip_forward=1

# nftables Regeln setzen
PostUp = nft add table ip nat
PostUp = nft add chain ip nat postrouting { type nat hook postrouting priority 100 \; }
PostUp = nft add rule ip nat postrouting oifname "ens6" ip saddr 10.22.0.0/16 ip daddr != {10.22.0.0/16, 10.22.33.0/24} masquerade  

PostUp = nft add table ip filter
PostUp = nft add chain ip filter forward { type filter hook forward priority 0 \; }
PostUp = nft add rule ip filter forward iifname "wg0" oifname "ens6" ip daddr 10.22.0.0/16 accept  
PostUp = nft add rule ip filter forward iifname "ens6" oifname "wg0" ip saddr 10.22.0.0/16 accept  
PostUp = nft add rule ip filter forward iifname "wg0" oifname "wg0" ip saddr 10.22.33.0/24 ip daddr 10.22.33.0/24 accept  
PostUp = nft add rule ip filter forward iifname "wg0" oifname "wg0" ip saddr 10.22.0.0/16 ip daddr 10.22.0.0/16 accept  

# nftables Regeln entfernen
PreDown = nft delete table ip nat
PreDown = nft delete table ip filter

# Gateway
[Peer]
PublicKey = XXXX
AllowedIPs = 0.0.0.0/0

# Client 1
[Peer]
PublicKey = XXXX
AllowedIPs = 10.22.33.3/32


WG-Konfig Gateway:
[Interface]
Address = 10.22.33.2/24
PrivateKey = XXXX
DNS = 10.22.22.81
ListenPort = 51822
MTU = 1280

# IPv4-Weiterleitung aktivieren
PreUp = sysctl -w net.ipv4.ip_forward=1

# nftables Regeln für Routing
PostUp = nft add table ip filter
PostUp = nft add chain ip filter forward { type filter hook forward priority 0 \; }

# Erlaube Forwarding zwischen WireGuard-Netzwerk (10.22.33.0/24) und lokalem Netzwerk (10.22.0.0/16)
PostUp = nft add rule ip filter forward iifname "wg0" oifname "eth0" ip saddr 10.22.33.0/24 ip daddr 10.22.0.0/16 accept  
PostUp = nft add rule ip filter forward iifname "eth0" oifname "wg0" ip saddr 10.22.0.0/16 ip daddr 10.22.33.0/24 accept  

# Erlaube DNS und andere wichtige Dienste, falls benötigt (optional)
# Hier Beispielregel, um DNS über das Interface zu erlauben
PostUp = nft add rule ip filter forward iifname "wg0" oifname "eth0" ip daddr 10.22.22.81 udp dport 53 accept  

# nftables Regeln beim Herunterfahren löschen
PreDown = nft delete table ip filter

# WireGuard Peer-Verbindung zum Server
[Peer]
PublicKey = XXXX
Endpoint = <Server-IP>:51820
AllowedIPs = 10.22.33.0/24
PersistentKeepalive = 25


WG-Konfig Client:
[Interface]
PrivateKey = XXXX
Address = 10.22.33.3/32
ListenPort = 51821
DNS = 10.22.22.81
MTU = 1280

[Peer]
PublicKey =XXXX
Endpoint = <Server-IP>:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25

Content-ID: 669346

Url: https://administrator.de/contentid/669346

Ausgedruckt am: 07.11.2024 um 20:11 Uhr

aqui
aqui 07.11.2024 aktualisiert um 20:37:44 Uhr
Goto Top
Bitte in aller Ruhe das hiesige Wireguard Tutorial lesen und entsprechend umsetzen:
Merkzettel: VPN Installation mit Wireguard

Die gröbsten Fehler:
  • Wie leider so oft die falschen Subnetzmasken bei der internen IP Adressierung konfiguriert! Regel für die internen IPs: Verwendete Netzwerk Maske (z.B. /24) am internen Interface aber /32er Hostmasken in den AllowedIPs andernfalls scheitert das Cryptokey Routing. Am Server ist es bis auf das Gateway richtig am Gateway selber aber falsch!
  • Das Gateway sollte in jedem Falle Split Tunneling verwenden aber niemals Gateway Redirect!
  • Es ist wenig zielführend und auch kontraproduktiv die Firewall in die WG Kofig zu integrieren. Die nftables FW Funktion gehört da nicht hin sondern statisch in die /etc/nftables.conf! Das Tutorial gibt entsprechende Hinweise dazu. Das Masquerading Kommando ist zudem fehlerhaft.
Weiterführende nftables Konfig und wie das umzusetzen ist auch HIER.
Trinatrium
Trinatrium 07.11.2024 um 20:58:01 Uhr
Goto Top
Das Netzwerk des VPS Hoster hat auch genug Bandbreite und Forward für deine Kiste?