Linux · Steam · WireGuard

WoW Forever Beta: VPN Split-Tunnel Setup

Route nur Battle.net und WoW über einen kostenlosen US-VPN-Server. Der Rest des Systems – Browser, Twitch, Downloads – bleibt komplett unberührt auf der normalen Verbindung.

600–800 ms
Ping vorher (EU → US)
150–200 ms
Ping mit Tunnel
0
Kosten (Free-Tier)

Ü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 -S unten durch apt install bzw. dnf install ersetzen.
  • 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

  1. Kostenloses Konto anlegen: protonvpn.com
  2. Im Dashboard zu Downloads: account.protonvpn.com/downloads
  3. Runter zu WireGuard-Konfiguration scrollen
  4. Namen vergeben (z. B. WoWBeta), Plattform GNU/Linux wählen
  5. Bei „bestimmten Server auswählen” → Kostenlose Server-Konfigurationen → Abschnitt USA aufklappen (kommt nach Japan/Niederlande/Norwegen)
  6. Einen US-FREE#-Server mit niedriger Auslastung wählen (grünes Icon, niedriger Prozentwert) → Erstellen
  7. Im Popup auf Herunterladen – die .conf-Datei landet in ~/Downloads/
Hinweis Dateiname und Serverstandort sind individuell. In den folgenden Schritten 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:

setup-wow-vpn-netns.sh
#!/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:

shell
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.

Wichtig -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):

wow-vpn-launch.sh
#!/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:

shell
chmod +x ~/wow-vpn-launch.sh

4Steam-Startoptionen setzen

  1. In Steam: Rechtsklick auf Battle.net → Eigenschaften
  2. Bei Startoptionen eintragen:
Startoptionen
/home/DEINUSER/wow-vpn-launch.sh %command%
  1. 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):

shell
sudo ip netns exec wowvpn sudo -u DEINUSER curl -s ifconfig.me

WireGuard-Handshake (sollte „latest handshake” in Sekunden/Minuten zeigen, nie „never”):

shell
sudo ip netns exec wowvpn wg show

Läuft Battle.net/WoW wirklich isoliert (während das Spiel läuft)?

shell
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

ProblemUrsacheFix
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