Opzioni per la gestione della larghezza di banda su una connessione Internet condivisa


13

La premessa:

Posizione rurale, non molte opzioni per connessioni Internet a larghezza di banda elevata. Il più veloce è di gran lunga l'internet via satellite, ma è costoso (sia le apparecchiature che i costi mensili, e ha degli svantaggi di latenza), quindi più famiglie vorrebbero condividerla.

Questo è di per sé semplice: imposta un router con una sottorete per ogni famiglia (VLAN o porte fisiche), blocca il traffico tra di loro e configura il modem per instradare verso quelle sottoreti o configurare un doppio NAT.

Il problema:

Il modo in cui TCP normalmente funziona significa che ogni connessione TCP otterrà più o meno 1 / n della larghezza di banda disponibile, dove n è il numero di connessioni. Quindi, se una famiglia / utente crea molte connessioni, otterrà una quota maggiore della connessione complessiva. Questo non è particolarmente giusto - con un collegamento saturo, ogni famiglia dovrebbe ottenere una quota uguale. D'altra parte, quando nessun altro utilizza la connessione, dovrebbe essere possibile utilizzare l'intera larghezza di banda.

Ad esempio, supponiamo che ci siano 4 famiglie che condividono una connessione down da 12 Mbit / s. Se uno di essi sta scaricando / streaming / qualunque cosa, dovrebbe essere in grado di utilizzare l'intero 12Mbit / s (o abbastanza vicino). Se 2 famiglie utilizzano la connessione, dovrebbero ottenere 6 Mbit / s ciascuna, indipendentemente dal fatto che una famiglia stia scaricando 1 file e l'altra 11. (senza alcuna gestione della larghezza di banda, ogni file verrà scaricato a circa 1 Mbit / s in quel caso) 3 famiglie ottenere 4Mbit / s ciascuno e così via.

Quello che ho elaborato finora:

La posizione migliore per attuare una politica come questa (per il downstream) sarebbe all'altra estremità del tubo stretto, cioè all'ISP. Ovviamente, in questo caso non è possibile, quindi sarebbe bene poterlo approssimare in qualche modo. Ma come? Esistono router standard che supportano qualcosa del genere? Posso configurare una scatola Linux o BSD per farlo? Non deve essere a prova di proiettile - un server TCP che si comporta male o un servizio UDP aggressivo potrebbe presumibilmente eludere qualsiasi cosa io possa fare da parte mia - ma dovrebbe funzionare per il caso comune della maggior parte del traffico costituito da un sacco di conformità RFC Connessioni TCP.

Per essere chiari, io non parlando di priorità specifiche applicazioni, ma il traffico piuttosto aggregata per / da particolari dispositivi Ethernet o intervalli di indirizzi IP. Dare un po 'di priorità al traffico rispetto a un altro traffico sembra essere ben supportato, ma la situazione è meno chiara quando si cerca di allocare equamente la larghezza di banda a classi di traffico.

Ci sono molte informazioni mal scritte / rigurgitate inconsapevolmente / altrimenti non informate sul traffico che modella sul web. La documentazione sull'hardware del router è terribilmente aspecifica, quindi mi sembra di girare in tondo.

A quanto ho capito, il modo per far sì che TCP si comporti in questo modo è in effetti simulare una pipe leggermente più stretta di quanto sia realmente disponibile e far cadere artificialmente i pacchetti per farlo tornare indietro. Quindi penso che sarebbe abbastanza semplice dare a tutti esattamente 3Mbit / s nell'esempio sopra facendo cadere artificialmente eventuali pacchetti extra. Questo non utilizza davvero la connessione in modo efficiente poiché la maggior parte delle volte c'è capacità disponibile.

C'è un modo per fare quello che sto chiedendo? Sto sbagliando? Sono (o meglio le famiglie in questione) disposte a spendere soldi per questo, che si tratti di un router / appliance standard o di un box generico per eseguire una distribuzione Linux o BSD.

Risposte:


4

Se dovessi costruire qualcosa per risolvere questo problema, installerei questo:

Prenderemo qui il tuo esempio di 4 computer che condividono un link. La rete sarebbe modellata in questo modo:

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

Supponiamo che tu usi l'indirizzamento IP statico 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

Vorrei prima scrivere un piccolo script per rilevare quali client sono attivi eseguendo il ping e scrivendo i risultati da qualche parte. "Questo è lasciato come esercizio per il lettore" Calcola il numero totale di host collegati (1-4)

Assicurati di gestire il caso di nessun host online.

Dividi la banda totale con ma il numero di host collegati. (12 Mb per 1, 6 Mb per 2, 4 Mb per 3, 3 Mb per 4)

Quindi utilizzare tc con l'algoritmo HTB per limitare la larghezza di banda di ciascun indirizzo sul dispositivo lato WAN. Innanzitutto, crea la classe radice:

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

Quindi, aggiungi una classe per ogni "client" (qui, ad esempio, 3 client)

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

(lo script sopra è totalmente non testato e NON privo di errori di digitazione)

Ora devi ancora eseguire correttamente lo script da eseguire ogni minuto e rinnovare bucket / filtri ogni volta che un nuovo host va su o giù.

Spero che ti indichi nella giusta direzione, buona fortuna.

Soluzione alternativa

Installa un software QoS locale su tutti gli host per limitare la larghezza di banda. I Personnaly uso NetLimiter (non gratuito)


Il problema con il mio approccio è che ogni host in su riduce la larghezza di banda dell'altro anche se non usa tutta la sua condivisione. Ma progettare qualcosa che imponga la condivisione solo quando la domanda è alta ... è difficile.
mveroone,

2

OpenWRT sembra supportarlo, anche se non l'ho mai usato da solo. Puoi dare un'occhiata alla pagina Network Traffic Control sul loro sito web, e in particolare il secondo esempio: la semplice condivisione della larghezza di banda (aka traffic shaping) con HTB . Ciò comporta semplici chiamate a qdisc, quindi qualsiasi box Linux potrebbe farlo.


Noto che l'esempio è per il lato upload . Attualmente sto leggendo la mia strada attraverso il Linux Advanced Routing & Traffic Control HOWTO che sembra un po 'promettente e spero che mi permetta di dare un senso a tutte queste tcregole. Lo shaper del traffico di Linux sembra sicuramente promettente.
pmdj,

0

La configurazione descritta in /superuser//a/1210164/257859 fa esattamente questo:

[...] le code distribuiscono quel BW limitato uniformemente tra tutti i client LAN (per la precisione gli IP LAN).


1
Si prega di non pubblicare la stessa risposta a più domande. Se le stesse informazioni rispondono davvero ad entrambe le domande, allora una domanda (di solito la più recente) dovrebbe essere chiusa come duplicata dell'altra. Puoi indicarlo votando per chiuderlo come duplicato o, se non hai abbastanza reputazione per quello, alza un flag per indicare che è un duplicato. Altrimenti personalizza la tua risposta a questa domanda e non incollare la stessa risposta in più punti.
David Post

@DavidPostill Ho pensato di votare per chiudere come duplicato ma ho esitato perché questa è una domanda di 3 anni. Ho anche cercato meta.superuser e ho trovato una domanda pertinente su meta.superuser.com/questions/3524/… . Dopo aver letto il meta penso che la situazione sia complicata (ho una risposta per due vecchie domande con sufficiente discussione in ognuna) e lasciare una breve risposta del puntatore sembra almeno "non male". Sono aperto a sentire i tuoi pensieri però.
ndemou,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.