Bandbreiten-Limit für Youtube … (mit Squid) – Nie mehr „Lags“ beim spielen oder Aussetzer beim Telefonieren [Teil 1 – Upload]

In diesem Artikel erkläre ich Schritt für schritt wie man seinen Internetanschluss gerecht auf alle Teilnehmer aufteilt. Ich versuche alles so simpel wie möglich zu halten und so viele Referenzen wie möglich an zu geben. Falls jemand Verbesserungsvorschläge hat einfach ein Kommentar hinterlassen. Die Zielgruppe dieses Artikels sind vermutlich recht viele Kids. Die seien bereits gewarnt. Man muss ein gewisses Grundwissen (von Netzwerk) und Lernbereitschaft mitbringen um so etwas zu realisieren. Ich halte nicht viel von einfachen HowTo’s ohne viel Erklärungen man muss verstehen was man tut, nur so kann man Fehler finden falls etwas nicht so läuft wie geplant.

Lektüre für Newbs und Kiddies

Viele Spieler leiden unter einem Problem. Sie selbst brauchen nicht viel Bandbreite aber eine „freie“ Leitung. Nichts ist ärgerlicher als eine von YouTube, iTunes … zugemüllte Leitung. Vor allem in einem Haushalt mit mehreren Personen ist es mit einer geringen Internet Bandbreite kaum möglich zu zocken während jemand im Internet surft.

Um die Bandbreite in seinem Netzwerk gerecht auf zu teilen. Reicht es nicht einfach seinen Router etwas zu konfigurieren. Lädt jemand große Files aus dem Internet ist der Downstream dicht. Eine Zeitkritische Anwendung wie Voice over IP (Telefon), Spiele … leiden darunter, weil einfach viele Pakete zu spät ankommen (der ping steigt sehr hoch und es kommt zu lags).

Den Upload ins Internet kann man mit guten Routern einfach regeln in dem man QoS-Regeln definiert. So werden Zeitkritische Pakete bevorzugt und vor unkritischen Paketen (http, smtp …) ins Internet gesendet.

Um die Internetanbindung zu optimieren und die Bandbreite gerecht auf zu teilen wird folgendes benötigt:

  1. Ein guter Router der „Quality of Service“ beherrscht (ich verwende eine Fritzbox)
  2. Ein kleiner Server/alter PC (bei mir bereits vorhanden als NAS, Mailserver ….)
  3. Eine Linux Distribuition seiner Wahl

Folgende Software wird am Server benötigt (wird per Paketverwaltung installiert, Download nicht notwendig!!!!):

Zur Analyse des Traffics auf Clients bietet sich Wireshark an
http://www.wireshark.org/

Upload optimieren (QoS – Regeln defienieren)

Ich defniere hier als Beispiel QoS-Regeln auf einer Fritzbox. Leider übertrieben es die Hersteller vieler Geräte beim „eindeutschen“ und übersetzen übliche Fachbegriffe ins deutsche, in der Hoffnung es so einfacher zu machen. Leider wird es dadurch kaum einfacher sich bei den verschiedenen Routern im Menü gewirr zurecht zu finden. Bei der Fritzbox findet man die QoS-Regeln unter Internet -> Filter -> Priorisierung

Bildschirmfoto vom 2013-01-13 11:15:16

Zuerst definiert man seine „Netzwerkanwendungen“. Man definiert einfach welche Pakete (Erkennbar an Quell und Zielport) priorisoert werden sollen. Es kann natürlich auch sein das ein Programm/Spiel mehrere Verbindungen nutzt und mit unterschiedlichen Servern im Internet unterschiedliche Protkolle spricht. Es gibt also keine einfache Anleitung wie man die Regel definieren muss damit alles klappt. Auch im Internet findet man kaum richtige Angaben oder unwahrheiten. Also niemals Port 80, 443, 25 … priorsieren. Auserdem verwenden Zeitkritische Anwendungen meist das UDP Protkoll und nicht TCP. Bevorzugt man HTTP Traffic (Port 80) genau so wie seine Spiele sind die Regeln ja komplett sinnlos weil wieder zwischen den beiden stur abgearbeitet wird.

Um raus zu finden welche Verbindungen ein Programm nutzt, verwende ich Wireshark. Wireshark ist ein Paketsniffer. Damit zeichnet man auf was gesendet und empfangen wird.

Um raus zu finden was ein Programm so sendet und empfängt gehe ich wie folgt vor

  1. Alles stoppen was unnötigen Traffic verursacht. (Spotify, Steam, Updates von Programmen, Skype, keine offenen Browser …) Einfach alles aus was irgendwie Traffic verursacht. Das erleichtert die Suche der relevanten Pakete.
  2. Wireshark starten und alles mit loggen (keine Filter definieren)
  3. Spiel starten und eine runde anzocken (ein paar Minuten in Game). Danach das Spiel wieder beenden. Zeitpunkte notieren wann was im Spiel gemacht wurde (beim Identifizieren des Traffics hilfreich).

    Zum Beispiel:

    • Spiel gestartet 11:42:13
    • Login im Spiel 11:42:46
    • Server liste geöffnet 11:43:06
    • Server gejoint 11:43:44
    • ….
  4. Als nächstes suche ich alle DNS Requests und Respones raus um raus zu finden mit welchen Servern das Spiel kommuniziert. (Oft gibt es cluster oder Round robin DNS Einträge von den Spielherstellern um die Last auf zu teilen)

    Nun weis man mit welchen Servern das Spiel komuniziert. Und kann in Wireshark einen Filter für diese IPs setzen und erhält nur mehr den Triffic der zu den Relevanten Servern geht

  5. Einfach den Traffic anschauen und notieren welche Zielports ausgehende Pakete ansprechen. Mit den Zeitpunkten die man notiert hat kann man sich bei den vielen Paketen leichter orientieren und so rausfinden welcher Server für was zuständig ist bzw. welche Protokolle für was benutzt werden. Bei vielen Shootern läuft die Serversuche per HTTP (da ist im Spiel einfach ein Browser integriert der einen HTTP-Server des Herstellers nach einer Serverliste fragt (DB Query). Richtig bevorzugt müssen eigentlich nur die Server werden mit die während dem Spielen komuniziert wird.

    Also nur auf Pakete achten die von dem PC zum Server im Internet gehen (Source IP ist die Rechner IP, Ziel IP ist einer der möglichen Server). Der Qellport ist meist einfach ein zufälliger Port. Aber der Zielport ist meist immer der gleiche oder in einem gewissen Bereich (wenn mehrere Game-Server auf einer Maschine laufen)

Nun hat man alle Informationen um genaue Regeln zu definieren.

Battle.net nutzt z.B. den UDP-Port 1119

Ich habe also die Anwendung wie folgt definiert
Protokoll: UDP
Quellport: beliebig
Zielport: 1119

Danach wird die Anwendung einfach zu den Echtzeitanwendungen hinzugefügt.

Kommt nun ein HTTP-Paket und ein BattleNet Paket gleichzeitig daher. Wird das Paket für battle.net zuerst gesendet. Große Fileuploads per HTTP haben das nachsehen gegenüber Starcraft2, Warcraft 3, Diablo 3 ….

Damit ist die hälfte geschaft nur was passiert mit dem Download?

Download Limit einrichten

Den Upload kann man ja selbst beeinflussen in dem man dem Router bei bringt was wichtig ist und was nicht. Der Provider weis aber nicht was einem Kunden wichtig ist und was nicht. Der Provider arbeitet bei einfachen Kunden einfach alles stur ab. Man kann aber die Bandbreite etwas aufteilen und so immer etwas Restkapazität über lassen. 15-30 KBit/s reichen für ein Spiel meist vollkommen aus. Störend ist ja meist nur YouTube, Facebook … wenn Videos abgespielt werden. Oder iTunes wenn mal wieder wer Musik kauft. Oder simple Updates von Spielen. All das sind aber fast immer HTTP-Downloads und können mit einem HTTP-Proxy einfach ausgebremst werden.

Was also gemacht wird um immer etwas Downloadbandbreite über zu lassen.

  1. Der Netzwerkverkehr wird bevor er den eigentlichen Router zu einem Linux-Rechner gesendet. Das bedeutet das default Gateway muss auf allen Rechnern geändert werden. Hier kommt der DHCP Server ins Spiel
  2. Ein Proxy wird installiert.
  3. Der linux Server routet aber nicht einfach stur weiter. Er nimmt die HTTP-Pakete und sendet sie an den Proxy der verarbeitet den HTTP-Traffic. Dadurch ist jeder gezwungen den Proxy zu verwenden. Egal was er auf seinem PC einstellt oder nicht am Proxy kommt er nicht vorbei.
  4. Der Proxy kann so konfiguriert werden, dass er böse Seiten Filtert (youporn …) und bei größeren Files die Downloadrate begrenzt

Das ist der Plan um ungestört zocken zu können

TO BE CONTINUED

About Florian