Apex Legends Packetloss FIX 17-05-22/12:38

Apex Legends - Wireguard Tutorial

Wireguard ist noch ein recht junges VPN Projekt, was direkt im Linux-Kernel ab Version 5.6 aufwärts integriert ist. Gegenüber der Konkurrenz (OpenVPN z.B) ist der Aufbau des Codes und die Konfiguration absolut minimalistisch gehalten und hat dazu noch einen recht krassen Datendurchsatz. Wer also ein schnelles, sicheres und dazu noch sehr einfach zu konfiguriendes VPN benötigt, ist bei Wireguard an der richtigen Adresse. Folgend dazu wird es auch in den zukünftigten FritzOS Versionen zur Verfügung stehen, was für Roadwarrior (Unterwegs->VPN->Zuhause) ein enormer Vorteil in Sachen Geschwindigkeit und Stabilität sein wird.

heart Der eigentliche Hauptgrund für Wireguard war bei uns die Tatsache, dass die deutsche Telekom seit über einem Jahr Routing-Probleme zu den Diensten von EA (ElectronicArts) hat. Was dann darin resultiert, dass Spiele wie "Apex Legends" permanent von Packetloss geplagt sind. Mit einem Wireguard VPN zu einem unserer Server umgehen wir das Problem, da sich die Server nicht im Netz der Telekom befinden, sondern bei Hetzner und IONOS gehostet sind. Und diese routen daher nicht über einen der Telekom-Carrier sondern meistens direkt zum DE-CIX Knoten. Die Pingzeiten erhöhen sich, je nach Standort des Servers, nur minimal. In unserem Fall von 4ms auf 9ms (mit Ping auf heise.de). Ingame ein Unterschied wie Tag & Nacht! (für Telekom Kunden)
 


 


Anmerkung für APEX LEGENDS Spieler: Es gibt auch einige public/freie Wireguard Community Server auf die ihr euch verbinden könnt. Hat ja schließlich nicht jeder die Möglichkeit selbst einen aufzusetzen. Alternativ kann sich natürlich jeder einen vServer für 1-2 € / Mntl. holen und nach dieser Anleitung selbst einen Wireguard-Peer basteln. Hardware des Servers spielt eigentlich keine Rolle, so lange der Traffic nicht limitiert ist. Die paar Kröten sollten es einem Apex Legends Spieler auf jeden Fall Wert sein. Und fallt nicht auf die ganzen lustigen YouTube Videos rein, die euch irgendwas von Firewall & Router Einstellungen am heimischen PC erzählen wollen. Das Problem liegt am Endknoten der Telekom, da könnt ihr zuhause einstellen was ihr wollt, es wird das Problem nicht beheben! Nachtrag: Nach mehreren Wochen Apex Legends via Wireguard kein einziges Mal (!) mehr Packetloss gehabt. Nicht mal Lags, oder sonstwas!

 

 Schritt 1/4: Vorbereitung & Installation

# Vorab: Root-Rechte werden benötigt. Ich habe daher überall das 'sudo' weggelassen.

# Wie immer, System auf einen aktuellen Stand bringen
apt update
apt upgrade

# Wer Debian 10 Buster im Einsatz hat sollte noch die Backports hinzufügen
echo 'deb http://ftp.debian.org/debian buster-backports main' | sudo tee /etc/apt/sources.list.d/buster-backports.list
# In der aktuellen Distro vom Raspberry PI ist Wireguard schon als fertiges Paket enthalten.
# Bei Ubuntu könnten evtl. noch die Kernel-Header fehlen, das wird euch in der Shell aber mitgeteilt.

# Auf eurem Server muss der Port für Wireguard weitergeleitet werden
# Zuhause (als Beispiel auf einer Fritzbox) müsst ihr eine Freigabe einrichten
ufw allow PORTHIER/udp #Siehe weiter unten wg. Port
ufw disable && ufw enable

# Zusätzlich noch das ipv4 Forwarding aktivieren
# Damit der Traffic auch den Server verlassen kann
nano /etc/sysctl.conf
net.ipv4.ip_forward = 1 # Muss auskommentiert, also aktiviert werden

 

Der magische Hauptteil ^^

apt install wireguard

 

 Schritt 2/4: Server & Client-Keys erstellen

# Wir benötigen jeweils einen Private & einen Public Key für Server & Client
# Sprich 2 Keys für den Server und zwei Keys für jeden Client

# In den Wireguard Ordner springen
cd /etc/wireguard

# Server Keys erstellen
wg genkey | tee server-private.key | wg pubkey > server-public.key

# Danach die Keys direkt auslesen..
cat server-private.key  # <-- Ausgabe kopieren und separat speichern
cat server-public.key   # <-- Ausgabe kopieren und separat speichern 

# Im Anschluss direkt die Key(s) für unsere zukünftigen Clients erstellen.
# Am besten gleich für mehrere, wer weiß für was man die zukünftig braucht. LOL
wg genkey | tee cl1-private.key | wg pubkey > cl1-public.key
wg genkey | tee cl2-private.key | wg pubkey > cl2-public.key

# Danach die Keys ebenfalls wieder direkt auslesen und extern speichern..
cat cl1-private.key  # <-- Ausgabe kopieren und separat speichern
cat cl1-public.key   # <-- Ausgabe kopieren und separat speichern
cat cl2-private.key  # <-- Ausgabe kopieren und separat speichern
cat cl2-public.key   # <-- Ausgabe kopieren und separat speichern

 

 Schritt 3/4: Configs erstellen!
Die wirklich harte Arbeit (Copy & Paste) haben wir nun hinter uns. In Putty reicht es wenn die betreffenden Zeilen einfach markiert werden, diese werden dann automatisch kopiert. 

# Server Config für unseren Wireguard-Peer erstellen
nano /etc/wireguard/wg0.conf

 

Folgenden Inhalt könnt ihr direkt in die wg0.conf einfügen und dort noch anpassen. Wichtig ist, dass die richtige Netzwerkschnittstelle in den PostUp/Down Regeln eingetragen ist. Bei den meisten ist es "eth0", doch neuere Distros verwenden eher so was wie "enps50". Bekommt man am schnellsten mit "ip addr show" heraus.

# /etc/wireguard/wg0.conf

[Interface]
Address = 10.0.0.1/24 
ListenPort = 51820
MTU = 1380
PrivateKey = <server-private.key hier einfügen>

PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

# Client Nummero 1 
[Peer]
PublicKey = <cl1-public.key hier einfügen>
AllowedIPs = 10.0.0.2/32

# Client Nummero 2
[Peer]
PublicKey = <cl2-public.key hier einfügen>
AllowedIPs = 10.0.0.3/32

Erklärung:

  • Adress: Der Gateway vom Wireguard Peer. 192.x oder 172.x ebenfalls möglich. Hauptsache nicht der Adressbereich den ihr für euer Heimnetz verwendet.
  • ListenPort: Auf welchem Port Wireguard lauschen soll
  • MTU: Standardmäßig kommt Wireguard mit einem MTU Wert von 1420 daher, was aber (außer bei Kabelinternet) technisch unsinnig ist. Meine Tests haben gezeigt das bei vDSL bis 500mbit, Werte zwischen 1300 & 1380 optimal sind. 
  • PrivateKey: Der PrivateKey vom Server
  • PostUp/PostDown: Firewall Regeln fürs weiterleiten des Traffics, wenn das Interface aktiviert/deaktivert wird.
     

 

Nun wird für jeden unserer beiden Clients eine eigene Config erstellt. Diese kann dann später auch in die Wireguard App (oder TunSafe) importiert/eingefügt werden.

# /etc/wireguard/cl1.conf

[Interface]
PrivateKey = <cl1-private.key hier einfügen>
Address = 10.0.0.2
DNS = 8.8.8.8 # Google DNS Server

[Peer]
PublicKey = <server-public.key hier einfügen>
Endpoint = ÖFFENTLICHE_IP_VOM_SERVER_ODER_MYFRITZ_ADRESSE:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 45
# /etc/wireguard/cl2.conf

[Interface]
PrivateKey = <cl2-private.key hier einfügen>
Address = 10.0.0.3
DNS = 8.8.8.8 # Google DNS Server

[Peer]
PublicKey = <server-public.key hier einfügen>
Endpoint = ÖFFENTLICHE_IP_VOM_SERVER_ODER_MYFRITZ_ADRESSE:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 45

Erklärung:

  • Adress: Die VPN IP welche der Client bekommen soll
  • DNS: DNS Server, kann auch der eigene PiHole sein
  • Endpoint: Die WAN IP vom Server. (hostname -I). Wer das ganze zuhause laufen lässt müsste hier ein DynDNS Dienst eintragen oder, im Falle einer Fritzbox, die MyFritz Adresse.
  • AllowedIps: Mit "0.0.0.0/0" wird der komplette Traffic durchs VPN geroutet. Kann mit Kommas auch separiert oder erweitert werden.
  • PersistentKeepalive: Die Verbindung aufrecht halten - Ohne diesen Wert würde Wireguard unsere Verbindung bei Inaktivität irgendwann trennen.
     

 

 Schritt 4/4: Wireguard starten...

# Wireguard starten
wg-quick up wg0

# ip link add wg0 type wireguard
# wg setconf wg0 /dev/fd/63
# ip -4 address add 10.0.0.1/24 dev wg0
# ip link set mtu 1380 up dev wg0
# iptables -A FORWARD -i wg0 -j ACCEPT; iptables -A FORWARD -o wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE


# Wireguard Status ansehen
wg show

# interface: wg0
#  public key: ib8GUN4dfgdg0Q/tq2ddgdfgfgdfgdhmpUVg8c28=
#  private key: (hidden)
#  listening port: 51820

# peer: ClLghjghjgjIZ7ujghgjf8P1Uu4xgczdfgdfgDJQClY=
#  endpoint: EURE_ADRESSE_HIER:51544
#  allowed ips: 10.0.0.2/32

# peer: ClLghjghjgjIZ7ujghgjf8P1Uu4xgczdfgdfgDJQClY=
#  endpoint: EURE_ADRESSE_HIER:51544
#  allowed ips: 10.0.0.3/32


# Wireguard beenden
wg-quick down wg0

# wg showconf wg0
# ip link delete dev wg0
# iptables -D FORWARD -i wg0 -j ACCEPT; iptables -D FORWARD -o wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE


# Wenn der ganze Kram beim Booten gestartet werden soll, einfach eintragen
systemctl enable wg-quick@wg0


# Zu guter letzt noch die Verzeichnisse vor anderen Usern schützen
chown -R root:root /etc/wireguard/
chmod -R og-rwx /etc/wireguard/*

Das war im grunde schon alles. Auch wenn sich die Anleitung hier über mehrere Blöcke erstreckt, ist der ganze Kram in unter 5 Minuten komplett erledigt. Spätestens wenn man es ein zweites Mal einrichtet. Kleiner Tip: Falls später die VPN Verbindung zu stande kommt aber keine Daten fließen, startet mal den Server/Raspberry/WasAuchImmer neu - evtl. wurde das IP-Forwarding noch nicht übernommen.

 

 Einrichtung auf Clientseite:
Hier könnt ihr entweder die hauseigene Wireguard App für Windoof nutzen oder auch Alternativen wie z.B. TunSafe. Bzgl. Android/iOS gibt es noch genug weitere Anleitungen im Netz , selbst mit QR-Code direkt aus der Shell. Folgender Abschnitt bezieht sich jedoch nur auf die offizielle App. In den Alternativen sollte es aber nach gleichen Prinzip funktionieren.

In der Wireguard App einfach eine der erstellten Client Configs einfügen.
Tunnel hinzufügen oder direkt als *.conf File importieren

Aktivieren, Verbunden, Fertig! 



Amen! cheeky



S P A M B O X !