Optionen zur Bandbreitenverwaltung für eine gemeinsam genutzte Internetverbindung

10458
pmdj

Die Voraussetzung:

Ländliche Lage, nicht viele Optionen für Internetverbindungen mit hoher Bandbreite. Das mit Abstand schnellste Internet ist das Internet über Satellit, aber es ist teuer (sowohl für die Ausrüstung als auch für die monatlichen Kosten und hat Verzögerungen bei der Latenz). Daher möchten mehrere Haushalte es teilen.

Dies ist an sich einfach: Richten Sie einen Router mit einem Subnetz für jeden Haushalt (VLANs oder physische Ports) ein, blockieren Sie den Datenverkehr zwischen ihnen und konfigurieren Sie entweder das Modem für das Routing zu diesen Subnetzen oder richten Sie ein doppeltes NAT ein.

Das Problem:

Die normale Funktionsweise von TCP bedeutet, dass jede TCP-Verbindung mehr oder weniger 1 / n der verfügbaren Bandbreite erhält, wobei n die Anzahl der Verbindungen ist. Wenn also ein Haushalt / Benutzer viele Verbindungen erstellt, erhält er einen größeren Anteil an der Gesamtverbindung. Dies ist nicht besonders fair - mit einer gesättigten Verbindung sollte jeder Haushalt einen gleichen Anteil erhalten. Wenn jedoch niemand die Verbindung nutzt, sollte es möglich sein, die volle Bandbreite zu nutzen.

Angenommen, es gibt 4 Haushalte, die eine 12-Mbit / s-Down-Verbindung nutzen. Wenn einer von ihnen Download / Streaming / was auch immer ist, sollte er die vollen 12Mbit / s (oder fast genug) nutzen können. Wenn zwei Haushalte die Verbindung nutzen, sollten sie jeweils 6 MBit / s erhalten, unabhängig davon, ob ein Haushalt 1 und der andere 11 herunterlädt. (Ohne Bandbreitenverwaltung würde jede Datei etwa 1 MBit / s in diesem Fall herunterladen) 3 Haushalte bekomme jeweils 4Mbit / s und so weiter.

Was ich bisher herausgefunden habe:

Der beste Ort, um eine solche Richtlinie (für den Downstream) zu implementieren, wäre am anderen Ende der schmalen Pipe, dh beim ISP. Offensichtlich ist dies in diesem Fall nicht möglich, daher wäre es gut, wenn man es irgendwie annähern könnte. Aber wie? Gibt es handelsübliche Router, die so etwas unterstützen? Kann ich dazu eine Linux- oder BSD-Box konfigurieren? Es muss nicht kugelsicher sein - ein fehlerhafter TCP-Server oder ein aggressiver UDP-Dienst könnte vermutlich alles umgehen, was ich an meinem Ende tun kann -, aber es sollte für den allgemeinen Fall des Verkehrs, der aus vielen RFC-kompatiblen Daten besteht, funktionieren TCP-Verbindungen.

Um es klar zu sagen, ich spreche nicht von der Priorisierung bestimmter Anwendungen, sondern von aggregiertem Verkehr zu / von bestimmten Ethernet-Geräten oder IP-Adressbereichen. Es scheint gut unterstützt zu werden, einem Verkehr eine höhere Priorität einzuräumen als der andere Verkehr. Die Situation ist jedoch weniger eindeutig, wenn versucht wird, den Verkehrsklassen gleichermaßen Bandbreite zuzuweisen.

Es gibt eine Menge schlecht geschriebener / unbedenklich wiederhergestellter / sonst uninformierter Informationen zur Verkehrsgestaltung im Web. Die Dokumentation zu Router-Hardware ist schrecklich unspezifisch, daher renne ich im Kreis herum.

Wie ich es verstehe, ist der Weg, um TCP dazu zu bringen, sich so zu verhalten, eine etwas schmalere Pipe zu simulieren, als tatsächlich verfügbar ist, und Pakete künstlich fallen zu lassen, damit sie sich zurückzieht. Ich denke, es wäre ziemlich einfach, jedem im obigen Beispiel genau 3Mbit / s zu geben, indem zusätzliche Pakete künstlich gelöscht werden. Dies nutzt die Verbindung nicht wirklich effizient, da meist freie Kapazitäten vorhanden sind.

Gibt es eine Möglichkeit zu tun, was ich frage? Mache ich es falsch? Ich bin (oder eher die Haushalte in Fragen) bereit, dafür Geld auszugeben - sei es ein preisgünstiger handelsüblicher Router / Appliance oder eine generische Box für den Betrieb einer Linux- oder BSD-Distribution.

13

3 Antworten auf die Frage

4
mveroone

Wenn ich etwas bauen würde, um dieses Problem zu lösen, würde ich Folgendes einrichten:

Wir nehmen hier ein Beispiel von 4 Computern, die eine Verbindung haben. Das Netzwerk würde folgendermaßen aussehen:

{ ISP }=========[ SOHO router] ===LAN1=== [eth0 |Linux Box| eth1] ===LAN2=== Home Desktops/Laptops 

Angenommen, Sie verwenden statische IP-Adressierung in LAN2:

Linux Box 192.168.1.1 Home 1 192.168.1.11 Home 2 192.168.1.12 Home 3 192.168.1.13 Home 4 192.168.1.14 

Ich würde zuerst ein kleines Skript schreiben, um herauszufinden, welche Clients gerade aktiv sind, indem ich sie anpinge und irgendwo ein Ergebnis schreibe. "Dies ist eine Übung für den Leser" Berechnen Sie die Gesamtanzahl der verbundenen Hosts (1-4).

Vergewissern Sie sich, dass keine Hosts online sind.

Teilen Sie die gesamte Bandbreite, aber die Anzahl der verbundenen Hosts. (12 MB für 1, 6 MB für 2, 4 MB für 3, 3 MB für 4)

Als nächstes verwenden Sie tc mit dem HTB-Algorithmus, um die Bandbreite jeder Adresse auf WAN-seitigen Geräten zu begrenzen. Erstellen Sie zuerst die Stammklasse:

DEV="eth0" TC="/sbin/tc" TOT_BW=12 $TC qdisc add dev $DEV root handle 1: htb default 99 

Fügen Sie dann für jeden "Client" eine Klasse hinzu (hier zum Beispiel 3 Clients).

NB_CLT=3 CLT_BW=$(($TOT_BW/$NB_CLT))mbit for i in seq $NB_CLT do $TC class add def $DEV parent 1: classid 1:$i htb rate $CLT_BW ceil $CLT_BW burst 15k cburst 1500 $TC filter add dev $DEV protocol ip parent 1:0 prio 1 flowid 1:$i u32 \ match ip dst 192.168.1.1$i/32 \ match ip src [Router IP in LAN1]/32 done 

(Das obige Skript ist völlig ungetestet und NICHT schreibfehlerfrei.)

Jetzt müssen Sie immer noch das richtige Skript erstellen, um jede Minute ausgeführt zu werden und die Buckets / Filter jedes Mal zu erneuern, wenn ein neuer Host hoch- oder heruntergefahren wird.

Ich hoffe, das bringt Sie in die richtige Richtung, viel Glück.

Alternative Lösung

Installieren Sie auf allen Hosts eine lokale QoS-Software, um deren Bandbreite einzuschränken. Ich persönlich nutze NetLimiter (nicht frei)

Das Problem bei meinem Ansatz ist, dass jeder Host die Bandbreite des anderen reduziert, selbst wenn er nicht alle seine Anteile nutzt. Etwas zu entwerfen, das das Teilen nur erzwingt, wenn die Nachfrage hoch ist ... ist schwierig. mveroone vor 9 Jahren 0
2
user2313067

OpenWRT scheint es zu unterstützen, obwohl ich es selbst nie benutzt habe. Sie können sich die Seite Network Traffic Control auf ihrer Website ansehen, insbesondere das zweite Beispiel: Einfache Bandbreitennutzung (auch Traffic Shaping genannt) mit HTB . Dies erfordert einfache Aufrufe von qdisc, sodass jede Linux-Box dies tun könnte.

Ich stelle fest, dass dieses Beispiel für die * upload * -Seite ist. Ich lese gerade durch das [Linux Advanced Routing & Traffic Control-HOWTO] (http://www.lartc.org/howto/), das jedoch etwas vielversprechend erscheint und mir hoffentlich die Möglichkeit gibt, all diese `tc 'zu verstehen Regeln. Der Traffic Shaper von Linux sieht sicherlich vielversprechend aus. pmdj vor 10 Jahren 0
0
ndemou

Das in https://superuser.com/a/1210164/257859 beschriebene Setup führt genau das aus:

[...] Die Warteschlangen verteilen das begrenzte BW gleichmäßig auf alle LAN-Clients (genauer gesagt LAN-IPs).

Bitte posten Sie nicht die gleiche Antwort auf mehrere Fragen. Wenn dieselben Informationen tatsächlich beide Fragen beantworten, sollte eine Frage (normalerweise die neuere) als Duplikat der anderen Frage geschlossen werden. Sie können dies angeben, indem Sie [Abstimmung, um es als Duplikat zu schließen] (https://superuser.com/help/privileges/close-questions) oder, falls Sie nicht genügend Ansehen dafür haben, [Flagge setzen] ( https://superuser.com/help/privileges/flag-posts), um anzugeben, dass es sich um ein Duplikat handelt. Ansonsten passen Sie Ihre Antwort auf diese Frage an und fügen Sie dieselbe Antwort nicht einfach an mehreren Stellen ein. DavidPostill vor 6 Jahren 1
@DavidPostill Ich dachte darüber nach, als Duplikat zu schließen, zögerte jedoch, da dies eine 3 Jahre alte Frage ist. Ich habe sogar nach meta.superuser gesucht und unter https://meta.superuser.com/questions/3524/how-can-we-take-care-of-our-old-duplicates eine relevante Frage gefunden. Nach dem Lesen der Meta denke ich, dass die Situation kompliziert ist (ich habe eine Antwort auf zwei alte Fragen mit genug Diskussion in jeder) und das Hinterlassen einer kurzen Hinweis-Antwort scheint zumindest "nicht schlecht" zu sein. Ich bin aber offen, um deine Gedanken zu hören. ndemou vor 6 Jahren 0