Repartição de largura de banda justa entre vários usuários

4

Eu tenho um servidor Debian em casa usando minha conexão de internet pessoal (50 Mbps). Configurei um serviço SFTP simples com o OpenSSH para compartilhar arquivos grandes (10 Gb +) com vários usuários.

Aqui está o meu problema: em relação à repartição de largura de banda, é a selva. Eu tenho usuários com conexão ADSL padrão, outros com conexão de fibra ótica, etc. Cada usuário tem uma velocidade de download diferente, e geralmente a maior largura de banda de download ganha.

Gostaria de saber se é possível dividir minha largura de banda de upload "quase igualmente" entre os usuários.

Idealmente, cada usuário seria capaz de baixar um arquivo de até 50 / n mbps (onde n é o número de usuários conectados).

Muito obrigado pela sua ajuda.

    
por Nicolas Bazire 18.10.2010 / 22:03

2 respostas

3

Já que você está usando o Debian Linux, você pode fazê-lo bem simples. Você pode usar esse script para uma repartição "justa" na largura de banda:

#Put here your Internet-interface instead of eth1
ext_iface=eth1
eiface_addr=192.169.158.150

###############Remove shaper rules###############################3
iptables -t mangle --flush

tc qdisc del dev $ext_iface root 2> /dev/null > /dev/null

iptables -t mangle -D POSTROUTING -o $ext_iface -j shape-in 2> /dev/null > /dev/null
iptables -t mangle -F shape-in 2> /dev/null > /dev/null
iptables -t mangle -X shape-in 2> /dev/null > /dev/null

##############Adding shaper rules###################################
tc qdisc add dev $ext_iface root handle 1:0 htb default 10
tc class add dev $ext_iface parent 1:0 classid 1:1 htb rate 100mbit ceil 100mbit

tc class add dev $ext_iface parent 1:1 classid 1:5 htb rate 100mbit ceil 100mbit prio 0
tc class add dev $ext_iface parent 1:1 classid 1:10 htb rate 48mbit ceil 48mbit prio 0

tc qdisc add dev $ext_iface parent 1:5 handle 5: pfifo limit 5
tc qdisc add dev $ext_iface parent 1:10 handle 10: pfifo limit 10

iptables -t mangle -N shape-in
iptables -t mangle -I POSTROUTING -o $ext_iface -j shape-in

#Priority for pings
iptables -t mangle -A shape-in -p icmp -j MARK --set-mark 5

#Priority for Server Access
iptables -t mangle -A shape-in -s $eiface_addr -j MARK --set-mark 5

#Othet packets (user\'s internet traffic)
iptables -t mangle -A shape-in -m mark --mark 0 -j MARK --set-mark 10

tc filter add dev $ext_iface parent 1:0 prio 0 protocol ip handle 5 fw flowid 1:5
tc filter add dev $ext_iface parent 1:0 prio 1 protocol ip handle 10 fw flowid 1:10

Observe que os usuários receberão 48 / n canal e restam dois Mbs para uma reserva.

    
por 19.10.2010 / 09:27
0

Qual é exatamente o problema que você está tendo? Os baixadores mais lentos estão morrendo de fome completamente sempre que alguém com uma linha de fibra está fazendo o download? A menos que seja esse o caso, você provavelmente deve deixar a pilha TCP / IP do seu servidor lidar com as velocidades de download variáveis dos seus clientes da melhor maneira possível. Todos devem, eventualmente, receber o seu pedaço do seu upload.

Além disso, acredito que sua noção de 50 / n Mbps por usuário como "justa" está equivocada. Por exemplo, digamos que você tenha apenas dois usuários conectados, um em fibra capaz de download de 50 mbps e outro em discagem a 56 kbps. Você realmente quer limitar o downloader de fibra a apenas 25 mbps e basicamente desperdiçar os 25 mbps restantes no usuário de discagem?

Se eu estivesse em sua posição, não me incomodaria em tentar impor essa noção particular de "justiça". Se o fizesse, não demoraria muito para os usuários descobrirem uma maneira de obter uma parte maior de sua largura de banda de upload, por exemplo, abrindo conexões adicionais.

    
por 18.10.2010 / 22:44