Optionen für die Bandbreitenverwaltung bei einer gemeinsam genutzten Internetverbindung

13

Die Voraussetzung:

Ländliche Lage, nicht viele Optionen für Internetverbindungen mit hoher Bandbreite. Das mit Abstand schnellste ist das Satelliten-Internet, aber es ist teuer (sowohl die Geräte als auch die monatlichen Kosten und es weist Latenzprobleme auf), sodass mehrere Haushalte es gerne gemeinsam nutzen möchten.

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

Das Problem:

Die Art und Weise, wie TCP normalerweise funktioniert, 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 herstellt, erhält er einen größeren Anteil an der Gesamtverbindung. Dies ist nicht besonders gerecht - mit einem gesättigten Link sollte jeder Haushalt einen gleichen Anteil erhalten. Wenn andererseits niemand die Verbindung nutzt, sollte es möglich sein, die gesamte Bandbreite zu nutzen.

Angenommen, es gibt 4 Haushalte, die sich eine 12-Mbit / s-Verbindung teilen. Wenn einer von ihnen herunterlädt / streamt / was auch immer, sollte er in der Lage sein, die vollen 12 Mbit / s (oder fast genug) zu nutzen. Wenn 2 Haushalte die Verbindung verwenden, sollten sie jeweils 6 Mbit / s erhalten, unabhängig davon, ob ein Haushalt 1 Datei und der andere 11 eine Datei herunterlädt Holen Sie sich jeweils 4Mbit / s und so weiter.

Was ich bisher ausgearbeitet habe:

Der beste Ort für die Implementierung einer solchen Richtlinie (für den Downstream) wäre das andere Ende der engen Leitung, dh der ISP. Offensichtlich ist das 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 eine Linux- oder BSD-Box dafür konfigurieren? Es muss nicht kugelsicher sein - ein sich schlecht verhaltender TCP-Server oder ein aggressiver UDP-Dienst könnten vermutlich alles umgehen, was ich an meinem Ende tun kann -, aber es sollte für den allgemeinen Fall funktionieren, dass der größte Teil des Datenverkehrs aus vielen RFC-kompatiblen Daten besteht TCP-Verbindungen.

Um es klar auszudrücken, ich spreche nicht von der Priorisierung bestimmter Anwendungen, sondern von der Zusammenfassung des Datenverkehrs zu / von bestimmten Ethernet-Geräten oder IP-Adressbereichen. Es scheint gut unterstützt zu sein, einem Teil des Datenverkehrs eine höhere Priorität als dem anderen zuzuweisen, aber die Situation ist weniger klar, wenn versucht wird, die Bandbreite gleichmäßig auf die Verkehrsklassen zu verteilen.

Es gibt viele schlecht geschriebene / unüberlegte / ansonsten uninformierte Informationen zur Verkehrsgestaltung im Web. Die Dokumentation zur Router-Hardware ist fürchterlich unspezifisch, so dass ich scheinbar im Kreis herumlaufe.

So wie ich es verstehe, besteht die Möglichkeit, TCP dazu zu bringen, sich auf diese Weise zu verhalten, darin, eine etwas schmalere Pipe zu simulieren, als tatsächlich verfügbar ist, und Pakete künstlich abzulegen, um sie zurückzusetzen. Ich denke, es wäre ziemlich einfach, im obigen Beispiel jedem genau 3 Mbit / s zuzuweisen, indem zusätzliche Pakete künstlich verworfen werden. Dadurch wird die Verbindung nicht wirklich effizient genutzt, da die meiste Zeit über freie Kapazität verfügt.

Gibt es eine Möglichkeit, das zu tun, wonach ich frage? Gehe ich falsch? Ich bin (oder besser gesagt, die Haushalte in Frage kommen) bereit, Geld dafür auszugeben - sei es ein handelsüblicher Router / eine handelsübliche Appliance oder eine generische Box für den Betrieb einer Linux- oder BSD-Distribution.

pmdj
quelle

Antworten:

4

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

Wir werden hier ein Beispiel für 4 Computer nehmen, die sich einen Link teilen. Das Netzwerk würde folgendermaßen aussehen:

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

Angenommen, Sie verwenden eine statische IP-Adresse 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 festzustellen, welche Clients aktiv sind, indem ich sie pinge und irgendwo ein Ergebnis schreibe. "Dies ist eine Übung für den Leser" Berechnen Sie die Gesamtzahl der verbundenen Hosts (1-4)

Behandeln Sie den Fall, dass keine Hosts online sind.

Teilen Sie die Gesamtbandbreite auf, 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)

Verwenden Sie anschließend tc mit dem HTB-Algorithmus, um die Bandbreite jeder Adresse auf dem WAN-seitigen Gerät zu begrenzen. Erstellen Sie zunächst 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 tippfehlerfrei)

Jetzt müssen Sie das Skript noch ordnungsgemäß ausführen, um es jede Minute auszuführen und die Buckets / Filter jedes Mal zu erneuern, wenn ein neuer Host hoch- oder runterfährt.

Ich hoffe, das zeigt Ihnen die richtige Richtung, viel Glück.

Alternative Lösung

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

mveroone
quelle
Das Problem bei meinem Ansatz ist, dass jeder Host die Bandbreite des anderen verringert, auch wenn er nicht seinen gesamten Anteil nutzt. Es ist jedoch schwierig, etwas zu entwerfen, das das Teilen nur erzwingt, wenn die Nachfrage hoch ist.
mveroone
2

OpenWRT scheint es zu unterstützen, obwohl ich es selbst nie benutzt habe. Sie können einen Blick auf die Network Traffic Control- Seite auf ihrer Website werfen , insbesondere auf das zweite Beispiel: einfache gemeinsame Nutzung der Bandbreite (auch bekannt als Traffic Shaping) mit HTB . Dies beinhaltet einfache Aufrufe von qdisc, so dass jede Linux-Box dies tun kann.

user2313067
quelle
Ich stelle fest, dass dieses Beispiel für die Upload- Seite ist. Momentan lese ich mich durch das Linux Advanced Routing & Traffic Control HOWTO, das allerdings etwas vielversprechend erscheint und es mir hoffentlich ermöglicht, all diese tcRegeln zu verstehen . Der Traffic Shaper von Linux sieht sicherlich vielversprechend aus.
pmdj
0

Das unter /superuser//a/1210164/257859 beschriebene Setup bewirkt genau Folgendes:

[...] Die Warteschlangen verteilen das eingeschränkte BW gleichmäßig auf alle LAN-Clients (LAN-IPs um genau zu sein).

ndemou
quelle
1
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 geschlossen werden. Sie können dies anzeigen, indem Sie abstimmen, um es als Duplikat zu schließen, oder, wenn Sie nicht genug Reputation dafür haben , ein Flag setzen, um anzuzeigen, dass es sich um ein Duplikat handelt. Passen Sie andernfalls Ihre Antwort auf diese Frage an und fügen Sie dieselbe Antwort nicht an mehreren Stellen ein.
DavidPostill
@DavidPostill Ich dachte darüber nach, das Voting als Duplikat abzuschließen, zögerte aber, da dies eine 3 Jahre alte Frage ist. Ich habe sogar meta.superuser durchsucht und unter meta.superuser.com/questions/3524/… eine relevante Frage gefunden . Nachdem ich das Meta gelesen habe, denke ich, dass die Situation kompliziert ist (ich habe eine Antwort auf zwei alte Fragen mit genügend Diskussionen in jeder) und eine kurze Zeigerantwort zu hinterlassen, scheint zumindest "nicht schlecht". Ich bin jedoch offen für Ihre Gedanken.
Ndemou