Se eu fosse criar algo para resolver esse problema, configuraria isso:
Vamos pegar seu exemplo de 4 computadores compartilhando um link. A rede teria a seguinte forma:
{ ISP }=========[ SOHO router] ===LAN1=== [eth0 |Linux Box| eth1] ===LAN2=== Home Desktops/Laptops
Digamos que você use o endereçamento IP estático na 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
Primeiro, escrevo um pequeno script para detectar quais clientes estão fazendo o ping e gravando o resultado em algum lugar. "Isso é deixado como um exercício para o leitor" Calcular o número total de hosts conectados (1-4)
Certifique-se de lidar com o caso de nenhum host on-line.
Divida a largura de banda total, mas o número de hosts conectados. (12Mb para 1, 6Mb para 2, 4Mb para 3, 3Mb para 4)
Em seguida, use tc com o algoritmo HTB para limitar a largura de banda de cada endereço no dispositivo do lado da WAN. Primeiro, crie a classe raiz:
DEV="eth0"
TC="/sbin/tc"
TOT_BW=12
$TC qdisc add dev $DEV root handle 1: htb default 99
Em seguida, adicione uma classe para cada "cliente" (aqui, por exemplo, 3 clientes)
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
(o script acima é totalmente não testado e NÃO está livre de erros de digitação)
Agora, você ainda precisa criar um script adequado para ser executado a cada minuto e renovar blocos / filtros sempre que um novo host for ativado ou desativado.
Espero que você esteja na direção certa, boa sorte.
Solução alternativa
Instale um software de QoS local em todos os hosts para restringir sua largura de banda. Eu uso o NetLimiter (não-livre)