Internet-Bandbreite fürs Online-Spielen beschränken
Written by Mathias Zander   
Saturday, 10 February 2007

In Wohngemeinschaften oder Familien wird natürlich in der Regel eine Internetverbindung geteilt. Das ist wohl nicht selten der Ausgangspunkt für Streit, weil beispielsweise der Bruder gern viel downloadet, grad wenn man einen einen guten Ping beim Spielen oder VoIP haben will. Für dieses Problem gibt es verschiedene Lösungen, wobei ich hier die eines Linux-Routers genauer beschreiben will. Ich muss aber darauf hinweisen, dass es hier nur um einen erhöhten Ping durchgleichzeitige Benutzung der Verbindung von anderen Personen oder Rechnern geht. Wer auch ohne anderen Datenverkehr auf seiner Internetverbindung eine hohe Latenz hat, wird dies mit diesen Maßnahmen auch nicht verbessern können. Außerdem kann ich natürlich keine Funktionsgarantie auf die vorgestellten Lösungen geben und setzte ein gewisses Maß an Netzwerk-Kenntnissen voraus.

Zum Einen gibt es die Möglichkeit, die Bandbreite zu erhöhen (DSL 6000, ADSL2+, VDSL etc.) - was aber nicht immer möglich ist oder vielleicht trotzdem nicht reicht. Oder man holt sich einen 2. Internet-Anschluss, z.B. DSL und Kabel, was deutlich teurer ist und auch nicht immer möglich.

Um trotz einer begrenzten Bandbreite und nebenher laufenden Up- und Downloads einen guten Ping  zu behalten gibt es Verfahren, die versuchen den zeitkritischen Datenverkehr bevorzugt zu behandeln. Hier haben sich Begriffe wie Quality of Service, Traffic-Shaping oder Bandwidth-Management eingebürgert, die zum Teil das Gleiche meinen. Es gibt in diesem Bereich Softwarelösungen sowohl für Linux als auch für Windows. Ich habe den Bandwidth Controller Standard eine ganze Weile benutzt und mit der Begrenzung auf ca. 1/3 der Bandbreite gute Ergebnisse erzielt. Weitere Informationen finden sich unter meinen Links zum Thema

Wenn man aber nicht extra einen Rechner den ganzen Tag laufen lassen will, um die Internetverbindung zu teilen, dann wäre ein Router mit dieser Funktionalität die Lösung. Leider sind die Geräte mit Quality of Service in der Regel viel zu teuer für den Heimgebrauch. Als Alternative böten sich die so genannten Gaming Router DGL-4100 und DGL-4300 von D-Link an. Leider wird in der Werbung und Testberichten nicht erwähnt, dass sie nur den Upload regeln. Wer mit den Downloads keine Probleme hat und bei wem nur die Uploads einen Engpass darstellen (dass könnte bei DSL 6000 und ADSL2+ der Fall sein) kann mit den Geräten einfach zu einem dauerhaft guten Ping kommen. Von DrayTek gibt es auch erschwingliche Router, die eine Bandbreitenbeschränkung erlauben sollen, was ich aber selbst nicht getestet habe.

Jetzt möchte ich meine aktuelle Lösung vorstellen, ein Router mit Linux als Betriebssystem. Es gibt sowohl Router die mit Linux ausgeliefert werden, als auch solche die erst mit einer neuen Firmware zum OpenSource Router werden. Bei diesem Flashen geht natürlich die Garantie verloren, man sollte also wissen was man tut. Ich habe mich für die Firmeware X-Wrt (eine Erweiterung von OpenWrt) entschieden. Als Hardware kommen verschiedene Router in Frage; eine Übersicht gibt diese Tabelle. Da es ein möglichst billiges Gerät sein sollte habe ich mich für den WHR-G54S von Buffalo entschieden. 

Im Folgenden stelle ich meine Arbeitsschritte zu meiner Netzwerkkonfiguration vor. Sie stellt nur eine der möglichen Lösungen dar. Die Idee ist, dass ein automatisch beim Laden eines Spieles gestartetes Programm ein Kommando an den Router sendet und dieser daraufhin die Bandbreite begrenzt. Beim Beenden des Spieles soll die Beschränkung automatisch wieder aufgehoben werden.

Achtung: Scheinbar hat der Router mit Linux Perfomaceprobleme unter bestimmten Bedingungen. Nach dem Spielen von Counter-Strike Source, war der Router zwar über das Webinterface, aber nicht mehr über ssh erreichbar. Da ich im openWrt-Forum habe ich Ähnliches gelesen habe, teste ich dies sofort. Schon nach einem Refresh der Serverliste in Steam war wieder kein ssh-Zugriff möglich. Bei deaktiviertem QoS trat das Problem bis jetzt nicht auf, aber die Server in der Liste hatten einen erheblich höheren Ping, als dies beim Kontrolllauf, mit direkter Verbindung zum alten Router, der Fall war.

  1. Vorbereitung

    Zuerst benötigt man die passende Firmware, das sollte man unbedingt in der Online-Dokuentation nachlesen. Für meinen Router WHR-G54S war es diese. Außerdem benötigen wir Putty (ein ssh-Client). Von der Downloadpage speichern wir putty.exe und plink.exe in ein beliebiges Verzeichnis, z.B. C:\Programme\SSH.

    Wenn man weiß, wie man einen Internet-Router richtig konfiguriert, dann ist die Variante 3a wahrscheinlich die einfachere. Man kann sie auch erst einmal ausprobieren, bevor man an seinem alten Router die Einstellungen ändert und vielleicht nicht mehr ins Internet kommt.

  2. Flashen der Linux-Firmware

    Wichtige Hinweise zum Flashen finden sich hier und hier. Ich habe meine Netzwerkkarte auf die IP 192.168.11.2,  Netmask  255.255.255.0  konfiguriert (den Rest leer lassen) und das Kabel mit dem Port 1 des Routers verbunden. In der Eingabeaufforderung bin ich zum Verzeichnis mit der Firmware gewechselt. Dort habe ich folgendes reingeschrieben ohne Enter zu drücken:

    tftp -i 192.168.11.1 PUT openwrt-brcm-2.4-squashfs.trx

    Nun habe ich für einige Sekunden den Stromanschluss des Routers entfernt. Gleich nach der Verbindungsmeldung von Windows XP unten rechts im Tray drückte ich die Enter Taste. Nach der erfolgreichen Übertragung erscheint eine Meldung wie:

    Übertragung erfolgreich: 1982464 Bytes in 14 Sekundens, 141604 Bytes/s

    Wenn es nicht geklappt hat erscheint nach einer Weile eine Zeitüberschreitung. Es kann durchaus einige Versuche erfordern bis es klappt.

    Unter http://192.168.11.1/ sollte man nun das Webinterface der neuen Firmware erreichen. Dort sollte man nun ein sicheres Password vergeben und sich aufschreiben, der Username ist root. Wenn das Flashen gar nicht funktioniert, geben die oben angegeben Links zum Flashen weitere Hilfe.

  3.  Linux-Router konfigurieren

    Im Webinterface unter Network->QoS QoS Service auf Enabled stellen. WAN Upload Speed und WAN Download Speed sollten auf die richtigen Werte eingestellt werden. Mit Save Changes die Einstellung speichern und mit Apply Changes übernehmen.

    a) Wenn der Router sich direkt ins Internet einwählen soll, muss hier nun die Konfiguration erfolgen, die aber nur durch einen erfahrenen Benutzer erfolgen sollte, damit keine Sicherheitslöcher geöffnet werden. Wenn alles funktioniert geht es bei Punkt 5 weiter.

    b) Ich habe mich dazu entschieden den Linux-Router zusätzlich zum alten Router ins Netzwerk einzubinden. So kann man Funktionen des alten Routers, beispielsweise VoIP,  weiter nutzen und die Firewall des Netzwerks ist ein Router mit Original Firmware. Mein Linux-Router hat auch kein eingebautes DSL-Modem. Es ist so auch möglich, aber nicht zwingend notwendig, gezielt nur bestimmte Rechner in der Bandbreite zu beschränken, wenn der bevorzugte Rechner direkt an den alten Router angeschlossen wird. Sollte das WLAN des Linux-Routers nicht benötigt werden, dann sollte es unbedingt abgeschaltet werden. Unter Network->Wireless das Wireless-Interface auf Disabled stellen und wie oben speichern.

    Die Konfiguration der Netzwerkkarte im PC sollte man jetzt auf "IP-Adresse und DNS-Serveradresse automatisch beziehen" stellen. Der Zugriff auf das Webinterface des Routers sollte jetzt immer noch funktionieren. Ich gehe davon aus, dass der alte Router die IP-Adressen über DHCP automatisch verteilt und dass die Rechner Adressen aus dem Bereich 192.168.0.* haben sollen. Auf der Seite Network->WAN-LAN sollte "WAN Connection Type" auf DHCP stehen und die LAN-IP-Adresse 192.168.0.1 sein. Speichern und Anwenden nicht vergessen. Nach einem kurzem Entfernen und wieder Einstecken des Netzwerkkabels sollte das Webinterface nun unter 192.168.0.1 zu erreichen sein.

    Jetzt wird Putty gebraucht, das wir ja schon heruntergeladen hatten. Bei Host-Name muss 192.168.0.1 eingetragen werden. Der Port sollte auf 22 stehen und Connection-Type auf SSH. Mit "Open" wird die Verbindung hergestellt. Die folgende Warnung erscheint immer bei unbekannten Servern und muss mit "Ja" akzeptiert werden. Login ist root mit eurem Passwort. Da die Firewall nur stört, wenn sich der Router nicht direkt ins Internet einwählt, deaktivieren wir sie:

    mv /etc/init.d/S35firewall /etc/init.d/_S35firewall

    Danach noch ein Reboot:

    reboot

  4. Einstellen des alten Routers

    Der PC muss jetzt wieder mit dem Internet-Router verbunden werden. Im Router-Interface muss die LAN-IP 192.168.1.1 eingestellt werden und die Änderungen müssen angewendet werden. Eventuell wieder kurz das Netzwerkkabel entfernen. Der Router sollte nun unter dieser Adresse erreichbar sein. Dann wird der WAN-Port des Linux-Routers ebenfalls mit dem Internet-Router verbunden. Im Webinterface des Internet-Routers sollte jetzt der Linux-Router mit seiner MAC-Adresse angezeigt werden. Die Zuweisung der Client-IP-Adressen soll per DHCP erfolgen Der MAC-Adresse des Linux-Routers wird jedoch eine feste IP (192.168.1.10) zugewiesen. Außerdem muss eine Route hinzugefügt werden: Ziel 192.168.0.0, Maske 255.255.255.0, Gateway 192.168.1.10. Eventuell müssen beide Router neu gebootet werden vor dem Hinzufügen der neuen Route, damit das Gateway 192.168.1.10 (Linux-Router) existiert. Diese Einstellungen sind bei jedem Router anders zu machen, müsten aber bei jedem modernen Router möglich sein.

    Alternativ kann man im Webinterface des Linux-Routers das WAN-Interface auf die Statische IP 192.168.1.10, Maske 255.255.255.0, Gateway 192.168.1.1 eingestellen. Die DNS-Server müssen dann aber leider von Hand eingetragen werden, da Sie vom Internet-Router nicht über DHCP konfiguriert werden. Die Route auf dem Internet-Server muss aber in jedem Fall gesetzt werden.

    Wenn jetzt der PC mit dem Linux-Router verbunden wird, sollte eine normale Verbindung ins Internet möglich sein. Ist dies nicht möglich, kann man versuchen die einzelnen Stationen abzufragen; also anpingen von 192.168.0.1, 192.168.1.10 (beides Linux-Router), 192.168.1.1 (Internet-Router) und einer beliebigen IP-Adresse aus dem Internet. Sollte alle diese Pings funktionieren, so liegt es bestimmt am fehlenden DNS-Server. Ansonsten hilft vielleicht das nochmalige Durchgehen aller Arbeitsschritte und neu booten aller Geräte.

  5. Optimieren der QoS Einstellungen

    Die Standardeinstellungen des QoS-Scripts garantieren nicht wirklich einen guten Ping. Mit dem nötigen Know-How lässt sich hier noch viel optimieren und automatisieren. Ich habe einen recht simplen Weg gewählt ohne all zu tief in die Materie einzusteigen. Jetzt loggen wir uns wieder auf dem Linux-Router mit Putty ein. Diesmal muss bei Host-Name 192.168.0.1 eingetragen werden.

    qos-stat

    Mit diesem Befehl fragt man den Status des QoS-Scripts ab. Es sollten verschiedene Regeln wie diese ausgegeben werden.

    class hfsc 1:1 parent 1: sc m1 0bit d 0us m2 366000bit ul m1 0bit d 0us m2 366000bit
     Sent 0 bytes 0 pkts (dropped 0, overlimits 0)
     period 803682 work 129373033 bytes level 1


    Erscheint nur EGRESS STATUS und INGRESS STATUS ist QoS im Webinterface möglicherweise nicht aktiviert. Als nächstes ist die Konfiguration drei mal zu kopieren.

    cp /etc/config/qos /etc/config/qos.game
    cp /etc/config/qos /etc/config/qos.normal
    cp /etc/config/qos /etc/config/qos.backup


    Die Datei qos.backup bleibt als Sicherung der Orignaldatei und qos.normal muss normalerweise auch nicht verändert werden. Wer nicht mit dem Linux-Texteditor vertraut ist, bearbeitet die qos.game am besten über das Webinterface. Bei der von mir vorgeschlagenen Netzwerkonfiguration sollte das dieser Link sein http://192.168.0.1/cgi-bin/webif/system-editor.sh?path=/etc/config&edit=qos.game . Ich habe am Ende der Datei die Option limitrate in den Kategorien Normal und Bulk hinzugefügt, beziehungsweise geändert. Sie gibt die prozentuale Begrenzung der Up- und Downloads ausgehend von der angegeben Bandbreite der Internetverbindung an. Ohne großes Testen erhalte ich damit schon sehr gute Ergebnisse.

    config class "Normal"
        option packetsize  1500
        option packetdelay 150
        option avgrate     20
        option linksharing 30
            option limitrate   40
    config class "Normal_down"
        option avgrate     30
            option limitrate   30

    config class "Bulk"
        option linksharing 10
            option limitrate   35
    config class "Bulk_down"
        option avgrate     15
        option limitrate   25


    Das Speichern im Webinterface nicht vergessen und einen größeren Download starten. Nun in Putty folgende Befehle eingeben:

    cp /etc/config/qos.game /etc/config/qos
    qos-start


    Die Downloadrate sollte jetzt deutlich zurückgehen. Um wieder die alten Einstellungen zu erhalten, einfach qos.game mit qos.normal ersetzen. Mit dem Befehl qos-stop kann man das Quality of Service auch ganz abschalten.

  6. Script aktivieren beim Spielstart

    Damit plink.exe funktioniert müssen in Putty noch drei Programme an die richtige Stelle kopiert werden.

    cp /usr/sbin/iptables /sbin/
    cp /usr/sbin/nvram  /sbin/
    cp /usr/sbin/tc  /sbin/


    Von dem Programm plink.exe sind nun zwei Verküpfungen zu erstellen, eine nenen wir "qos game" und die andere "qos normal". In "qos game" sollte als Ziel folgendes eingetragen werden:

    C:\Programme\ssh\plink.exe -l root -pw <passwort> 192.168.0.1 cp /etc/config/qos.game /etc/config/qos; qos-start

    Natürlich an eure Gegebenheiten angepasst. Ausführen am besten Minimiert. Entsprechend "qos normal":

    C:\Programme\ssh\plink.exe -l root -pw <passwort> 192.168.0.1 cp /etc/config/qos.normal /etc/config/qos; qos-start

    Oder für vollständig deaktiviertes QoS:

    C:\Programme\ssh\plink.exe -l root -pw <passwort> 192.168.0.1 qos-stop

    Nach anklicken der Verknüpfungen müsste sich die Bandbreitenbeschränkung ein- bzw. ausschalten.

    Jetzt kann man das Ganze bequem mit entsprechenden Programmen automatisieren. Ich möchte das kurz an HLSW zeigen. Unter Einstellungen->Einstellungen->Verbinden Beim Verbinden: Minimieren zum System Tray und im selben Abschnitt Anwendung ausführen->Hinzufügen. Ein Haken bei "Anwendung bei Verbinden zum Server ausführen" und eventuell einen Haken bei  "Abwarten bis Anwendung beendet ist", wenn man öfter auf Servern spielt die eine Pingbegrenzung haben. Unter Anwendung folgendes eintragen:

    C:\Programme\ssh\plink.exe


    Und bei Parameter:

    -l root -pw <passwort> 192.168.0.1 cp /etc/config/qos.game /etc/config/qos; qos-start


    Nach dem Bestätigen noch einmal "Hinzufügen". Diesmal nur ein Haken bei "Anwendung bei Rückkehr vom Server ausführen". Anwendung und Parameter entsprechend anpassen. Damit sollte immer beim Spielen ein guter Ping möglich sein und ansonsten die (fast) volle Bandbreite zur Verfügung stehen.

    Ergänzung: Es ist natürlich auch möglich die Verknüpfung zum Start von QoS in den Autostartordner zu legen und damit automatisch bei jedem Rechnerstart zu aktivieren. Um die Bandbreitenbegenzung beim Herunterfahren wieder zu deaktivieren, muss man einen anderen Weg gehen. Als erstes muss eine batch-Datei mit einem Texteditor angelegt werden, beispielsweise qos.off.bat mit folgendem Inhalt:

    @echo off
    C:\Programme\ssh\plink.exe -l root -pw <passwort> 192.168.0.1 qos-stop
    EXIT

    Jetzt wird die Datei im Gruppenrichtlinieneditor zur Ausführung beim Abmelden eingetragen.

    Start->Ausführen->gpedit.msc
    Benutzerkonfiguration->Windows-Einstellungen->Skripts(Anmelden/Abmelden)->Abmelden
    Unter Hinzufügen die Datei auswählen

 

Um zu zeigen, dass sich der ganze Aufwand lohnt, habe ich einen Test durchgeführt, der mit anderen Programmen, Servern und Internetanbindungen natürlich ganz anders ausfallen kann. Es gibt sicher noch viele Möglichenkeiten selbst Hand anzulegen und die Einstellungen zu optimieren. Viel Spass dabei.

Last Updated ( Monday, 02 April 2007 )