Überblick
WoW Forever läuft aktuell nur auf US-Servern. Für EU-Spieler bedeutet das oft 600–800 ms Ping statt spielbarer 100–200 ms. Ein normales VPN würde das fixen – aber dann liefe der komplette Rechner über die langsamere US-Leitung.
Die Lösung: eine eigene Netzwerk-Namespace – ein isolierter Netzwerk-Stack innerhalb von Linux. Nur Battle.net und WoW laufen darin und werden durch den VPN-Tunnel geroutet. Alles andere auf dem System bleibt auf der normalen Verbindung, mit voller Geschwindigkeit.
Voraussetzungen
- Arch-basierte Distro (CachyOS, Arch, Manjaro, …). Auf Ubuntu/Fedora:
pacman -Sunten durchapt installbzw.dnf installersetzen. - Steam mit Battle.net bereits als „Nicht-Steam-Spiel” eingerichtet und lauffähig (ohne VPN getestet).
- Root-Rechte (
sudo). - Ein kostenloses ProtonVPN-Konto – kein Abo nötig, der Gratis-Tarif hat einen US-Standort und kein Datenlimit.
1ProtonVPN-Konto & WireGuard-Config
- Kostenloses Konto anlegen: protonvpn.com
- Im Dashboard zu Downloads: account.protonvpn.com/downloads
- Runter zu WireGuard-Konfiguration scrollen
- Namen vergeben (z. B.
WoWBeta), Plattform GNU/Linux wählen - Bei „bestimmten Server auswählen” → Kostenlose Server-Konfigurationen → Abschnitt USA aufklappen (kommt nach Japan/Niederlande/Norwegen)
- Einen
US-FREE#-Server mit niedriger Auslastung wählen (grünes Icon, niedriger Prozentwert) → Erstellen - Im Popup auf Herunterladen – die
.conf-Datei landet in~/Downloads/
WoWBeta-US-FREE-41.conf durch den eigenen Dateinamen ersetzen.
2Netzwerk-Namespace einrichten
Legt die isolierte Namespace wowvpn an, konfiguriert das WireGuard-Interface aus der Config und trägt eine eng begrenzte Sudo-Regel ein (nur für ip netns exec wowvpn, kein pauschaler Root-Zugriff).
Pfad in WG_CONF= und REAL_USER= anpassen, dann als setup-wow-vpn-netns.sh speichern:
#!/usr/bin/env bash
# Richtet eine isolierte Netzwerk-Namespace "wowvpn" ein, in der nur WireGuard-Traffic
# zum ProtonVPN-US-Server laeuft. Alles andere auf dem System bleibt unberuehrt.
set -euo pipefail
if [[ $EUID -ne 0 ]]; then
echo "Bitte mit sudo ausfuehren: sudo $0" >&2
exit 1
fi
NETNS="wowvpn"
WG_IF="wg0"
WG_CONF="/home/DEINUSER/Downloads/WoWBeta-US-FREE-41.conf" # <- anpassen!
REAL_USER="DEINUSER" # <- anpassen!
if [[ ! -f "$WG_CONF" ]]; then
echo "Config nicht gefunden: $WG_CONF" >&2
exit 1
fi
echo "==> wireguard-tools installieren (falls noetig)"
pacman -S --needed --noconfirm wireguard-tools
echo "==> Alte Namespace/Interface entfernen, falls vorhanden (sauberer Neuaufbau)"
ip netns exec "$NETNS" ip link del "$WG_IF" 2>/dev/null || true
ip netns del "$NETNS" 2>/dev/null || true
echo "==> Namespace anlegen"
ip netns add "$NETNS"
ip netns exec "$NETNS" ip link set lo up
echo "==> WireGuard-Interface anlegen und in die Namespace verschieben"
ip link add "$WG_IF" type wireguard
ip link set "$WG_IF" netns "$NETNS"
ADDR=$(grep -m1 '^Address' "$WG_CONF" | sed -E 's/Address\s*=\s*//' | cut -d, -f1)
DNS=$(grep -m1 '^DNS' "$WG_CONF" | sed -E 's/DNS\s*=\s*//' | cut -d, -f1)
echo "==> Adresse setzen: $ADDR"
ip netns exec "$NETNS" ip addr add "$ADDR" dev "$WG_IF"
echo "==> WireGuard konfigurieren"
# Nicht wg-quick strip verwenden: das verlangt einen Dateinamen wie <interface>.conf
WG_STRIPPED=$(mktemp)
grep -vE '^\s*(Address|DNS)\s*=' "$WG_CONF" | grep -vE '^\s*#' > "$WG_STRIPPED"
ip netns exec "$NETNS" wg setconf "$WG_IF" "$WG_STRIPPED"
rm -f "$WG_STRIPPED"
ip netns exec "$NETNS" ip link set "$WG_IF" up
ip netns exec "$NETNS" ip route add default dev "$WG_IF"
echo "==> DNS fuer die Namespace setzen"
mkdir -p "/etc/netns/$NETNS"
echo "nameserver $DNS" > "/etc/netns/$NETNS/resolv.conf"
echo "==> Sudo-Regel eintragen (NUR fuer 'ip netns exec wowvpn', SETENV fuer -E/--preserve-env)"
cat > /etc/sudoers.d/99-wowvpn-netns <<EOF
${REAL_USER} ALL=(root) NOPASSWD:SETENV: /usr/bin/ip netns exec ${NETNS} *
EOF
chmod 440 /etc/sudoers.d/99-wowvpn-netns
visudo -c -f /etc/sudoers.d/99-wowvpn-netns
echo
echo "Fertig. Test (sollte eine US-IP zeigen):"
echo " sudo ip netns exec $NETNS sudo -u $REAL_USER curl -s ifconfig.me"
Ausführen:
sudo bash setup-wow-vpn-netns.sh
Idempotent – mehrfaches Ausführen räumt vorher sauber auf und baut neu.
3Launcher-Wrapper für Steam
Sorgt dafür, dass der Battle.net-Start innerhalb der wowvpn-Namespace passiert.
-E/--preserve-env auf beiden sudo-Ebenen ist Pflicht – sonst löscht sudo beim Nutzerwechsel Steams STEAM_COMPAT_*-Variablen, und Proton bricht lautlos mit „No compat data path?” ab.
Als ~/wow-vpn-launch.sh speichern (DEINUSER ersetzen):
#!/usr/bin/env bash
# Wrapper fuer Steam-Startoptionen: fuehrt den eigentlichen Battle.net/WoW-Start
# innerhalb der isolierten "wowvpn"-Netzwerk-Namespace aus (nur dieser Prozessbaum
# geht durchs VPN, der Rest des Systems bleibt auf der normalen Verbindung).
exec sudo -E ip netns exec wowvpn sudo -E -u DEINUSER -- "$@"
Ausführbar machen:
chmod +x ~/wow-vpn-launch.sh
4Steam-Startoptionen setzen
- In Steam: Rechtsklick auf Battle.net → Eigenschaften
- Bei Startoptionen eintragen:
/home/DEINUSER/wow-vpn-launch.sh %command%
- Fenster schließen, Battle.net ganz normal über Spielen starten – der Wrapper greift automatisch.
Verifizieren
Tunnel-Status (sollte eine US-IP zeigen, z. B. eine 37.19.221.x-Adresse):
sudo ip netns exec wowvpn sudo -u DEINUSER curl -s ifconfig.me
WireGuard-Handshake (sollte „latest handshake” in Sekunden/Minuten zeigen, nie „never”):
sudo ip netns exec wowvpn wg show
Läuft Battle.net/WoW wirklich isoliert (während das Spiel läuft)?
pgrep -f "Battle.net.exe|WowB.exe" | xargs -I{} readlink /proc/{}/ns/net
Der Wert sollte sich von readlink /proc/1/ns/net (Host-Namespace) unterscheiden. Zum Vergleich parallel im normalen Terminal curl -s ifconfig.me ausführen – die reguläre IP muss unverändert bleiben.
Troubleshooting
| Problem | Ursache | Fix |
|---|---|---|
wg-quick: config file must be a valid interface name… |
wg-quick strip verlangt einen Dateinamen wie wg0.conf, ProtonVPN liefert aber z. B. WoWBeta-US-FREE-41.conf |
Skript oben nutzt bereits einen eigenen grep-Filter statt wg-quick strip |
| Battle.net startet nicht (kein Fenster, kein Fehler) | sudo löscht beim Nutzerwechsel die Umgebung – STEAM_COMPAT_* geht verloren, Proton bricht lautlos ab |
Wrapper nutzt -E auf beiden sudo-Ebenen + NOPASSWD:SETENV: in der Sudoers-Regel |
sudo ip netns exec … fragt nach Passwort |
Sudoers-Regel fehlt oder ist falsch | Setup-Skript erneut mit sudo bash … ausführen (idempotent) |
| Ping bleibt hoch trotz VPN | Überlasteter Server gewählt | Anderen US-FREE# mit niedrigerer Auslastung erstellen, Schritt 1+2 wiederholen |
| Nach Neustart funktioniert nichts mehr | Die Namespace ist nicht persistent, geht beim Reboot verloren | Setup-Skript (Schritt 2) nach jedem Neustart erneut ausführen |