Options de gestion de la bande passante sur une connexion Internet partagée

13

La prémisse:

Emplacement rural, peu d'options pour les connexions Internet à large bande passante. L'Internet par satellite est de loin le plus rapide, mais il est cher (équipement et coût mensuel, et présente des inconvénients de latence), donc plusieurs ménages aimeraient le partager.

C'est simple en soi - configurez un routeur avec un sous-réseau pour chaque foyer (VLAN ou ports physiques), bloquez le trafic entre eux et configurez le modem pour qu'il route vers ces sous-réseaux ou configurez un double NAT.

Le problème:

Le fonctionnement normal de TCP signifie que chaque connexion TCP obtiendra plus ou moins 1 / n de la bande passante disponible, où n est le nombre de connexions. Donc, si un ménage / utilisateur crée de nombreuses connexions, il obtiendra une plus grande part de la connexion globale. Ce n'est pas particulièrement juste - avec un lien saturé, chaque ménage devrait obtenir une part égale. En revanche, lorsque personne d'autre n'utilise la connexion, il devrait être possible d'utiliser toute la bande passante.

Par exemple, supposons que 4 ménages partagent une connexion descendante à 12 Mbits / s. Si l'un d'eux télécharge / diffuse / quoi que ce soit, il devrait être en mesure d'utiliser le 12 Mbit / s (ou presque). Si 2 ménages utilisent la connexion, ils devraient obtenir 6 Mbit / s chacun, indépendamment du fait qu'un ménage télécharge 1 fichier et l'autre 11. (sans aucune gestion de la bande passante, chaque fichier serait téléchargé à environ 1 Mbit / s dans ce cas) 3 ménages obtenir 4Mbit / s chacun et ainsi de suite.

Ce que j'ai découvert jusqu'à présent:

Le meilleur endroit pour mettre en œuvre une politique comme celle-ci (pour l'aval) serait à l'autre extrémité du tuyau étroit, c'est-à-dire au niveau du FAI. De toute évidence, ce n'est pas possible dans ce cas, il serait donc bon de pouvoir l'approcher d'une manière ou d'une autre. Mais comment? Existe-t-il des routeurs standard qui prennent en charge quelque chose comme ça? Puis-je configurer une box Linux ou BSD pour le faire? Il ne doit pas être à l'épreuve des balles - un serveur TCP mal agissant ou un service UDP agressif pourrait vraisemblablement contourner tout ce que je peux faire de mon côté - mais cela devrait fonctionner pour le cas commun de la plupart du trafic composé de beaucoup de conformité RFC Connexions TCP.

Pour être clair, je ne parle pas de prioriser des applications spécifiques, mais plutôt d'agréger le trafic vers / depuis des périphériques Ethernet particuliers ou des plages d'adresses IP. Donner à certains trafics une priorité plus élevée que les autres trafics semble être bien pris en charge, mais la situation est moins claire lorsqu'on essaie d'allouer également la bande passante aux classes de trafic.

Il y a beaucoup d'informations mal écrites / irréfléchies régurgitées / autrement non informées sur la configuration du trafic sur le Web. La documentation sur le matériel du routeur est terriblement peu spécifique, donc je semble tourner en rond.

Si je comprends bien, le moyen pour que TCP se comporte de cette façon est en fait de simuler un tuyau légèrement plus étroit que ce qui est réellement disponible et de supprimer artificiellement des paquets pour le faire reculer. Je pense donc qu'il serait assez simple de donner à tout le monde exactement 3 Mbit / s dans l'exemple ci-dessus en supprimant artificiellement tous les paquets supplémentaires. Cela n'utilise pas vraiment la connexion efficacement car la plupart du temps il y a de la capacité disponible.

Existe-t-il un moyen de faire ce que je demande? Est-ce que je me trompe? Je suis (ou plutôt les ménages en question) sont prêts à dépenser de l'argent pour cela - que ce soit un routeur / appareil standard à prix modéré ou une boîte générique pour exécuter une distribution Linux ou BSD.

pmdj
la source

Réponses:

4

Si je devais construire quelque chose pour résoudre ce problème, je configurerais ceci:

Nous allons ici prendre votre exemple de 4 ordinateurs partageant un lien. Le réseau aurait la forme suivante:

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

Disons que vous utilisez l'adressage IP statique dans 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

J'écrirais d'abord un petit script pour détecter quels clients sont en place en les cinglant et en écrivant le résultat quelque part. "Ceci est laissé comme exercice pour le lecteur" Calculez le nombre total d'hôtes connectés (1-4)

Assurez-vous de gérer le cas d'aucun hôte en ligne.

Divisez la bande passante totale mais le nombre d'hôtes connectés. (12 Mo pour 1, 6 Mo pour 2, 4 Mo pour 3, 3 Mo pour 4)

Ensuite, utilisez tc avec l'algorithme HTB pour limiter la bande passante de chaque adresse sur le périphérique côté WAN. Créez d'abord la classe racine:

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

Ensuite, ajoutez une classe pour chaque "client" (ici, par exemple, 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

(le script ci-dessus est totalement non testé et PAS sans erreur de frappe)

Maintenant, vous devez toujours correctement le script à exécuter chaque minute et renouveler les compartiments / filtres chaque fois qu'un nouvel hôte monte ou descend.

J'espère que cela vous orientera dans la bonne direction, bonne chance.

Solution alternative

Installez un logiciel QoS local sur tous les hôtes pour limiter leur bande passante. J'utilise personnellement NetLimiter (non gratuit)

mveroone
la source
Le problème avec mon approche est que chaque hôte réduit la bande passante de l'autre même s'il n'utilise pas tout son partage. Mais concevoir quelque chose qui impose le partage uniquement lorsque la demande est élevée ... est difficile.
mveroone
2

OpenWRT semble le supporter, même si je ne l'ai jamais utilisé moi-même. Vous pouvez jeter un coup d'œil à la page Network Traffic Control sur leur site Web, et en particulier le deuxième exemple: le partage simple et simple de la bande passante (aka mise en forme du trafic) avec HTB . Cela implique de simples appels à qdisc, donc n'importe quelle boîte Linux pourrait le faire.

user2313067
la source
Je remarque que cet exemple concerne le côté téléchargement . Je lis actuellement mon chemin à travers le Linux Advanced Routing & Traffic Control HOWTO qui semble quelque peu prometteur et qui, espérons-le, me permettra de donner un sens à toutes ces tcrègles. Le shaper de trafic de Linux semble certainement prometteur.
pmdj
0

La configuration décrite dans /superuser//a/1210164/257859 fait exactement cela:

[...] les files d'attente répartissent ce BW limité uniformément entre tous les clients LAN (IP LAN pour être précis).

ndemou
la source
1
Veuillez ne pas poster la même réponse à plusieurs questions. Si la même information répond vraiment aux deux questions, alors une question (généralement la plus récente) doit être fermée en double de l'autre. Vous pouvez l'indiquer en votant pour le fermer en tant que doublon ou, si vous n'avez pas assez de réputation pour cela, lever un drapeau pour indiquer qu'il s'agit d'un doublon. Sinon, adaptez votre réponse à cette question et ne collez pas simplement la même réponse à plusieurs endroits.
DavidPostill
@DavidPostill J'ai pensé à voter pour fermer en double mais j'ai hésité car c'est une question vieille de 3 ans. J'ai même recherché meta.superuser et trouvé une question pertinente sur meta.superuser.com/questions/3524/… . Après avoir lu la méta, je pense que la situation est compliquée (j'ai une réponse pour deux vieilles questions avec suffisamment de discussion dans chacune) et laisser une courte réponse de pointeur semble au moins "pas mal". Je suis cependant ouvert à entendre vos pensées.
ndemou