Linux - Prioridade de tráfego de rede por IP

2

Estou usando o Ubuntu 12.10 e procurando uma maneira de moldar o tráfego de rede com base no endereço IP. Eu tenho uma LAN, digamos de 192.168.1.2 - 192.168.1.254. O servidor está em 192.168.1.1. Todos os IPs devem ter o máximo de velocidade de rede possível (todas as portas, mas o Samba é o verdadeiro culpado). No momento em que um determinado IP ou intervalo de IP (por exemplo: 192.168.1.100) se conecta, a velocidade total deve ser dada a esse IP, todas as outras velocidades de IPs devem ser reduzidas ao mínimo. Quando o tráfego de IPs estiver concluído, o restante da velocidade dos IPs conectados deverá ser restaurada.

Eu praticamente tenho um servidor e se meu próprio PC se conecta a ele, eu quero velocidade máxima. Somente se eu não estiver usando o servidor, o restante deve ter acesso total.

Eu encontrei algumas soluções on-line com o tc, mas todas elas limitam IPs específicos com uma certa velocidade. No entanto, quero que todas as pessoas tenham a velocidade máxima, exceto se um determinado IP estiver conectado. Então, basicamente, meu IP deve ter a prioridade mais alta e o restante, a menor prioridade.

Alguém pode me ajudar com um script ou um programa que já existe?

    
por goocreations 13.02.2013 / 16:31

1 resposta

2

tc é o caminho a percorrer. O truque é priorizar o tráfego sem limitá-lo.

link , seção 9.5.3 "O qdisc do PRIO"; Por padrão, ele cria 3 filas, mas você pode ignorar o terceiro. A abordagem mais simples seria:

Crie as disciplinas de fila (qdisc)

tc qdisc add dev eth0 root handle 1: prio

tc qdisc add dev eth0 parent 1:1 handle 10: sfq
tc qdisc add dev eth0 parent 1:2 handle 20: sfq
tc qdisc add dev eth0 parent 1:3 handle 30: sfq

Todos eles têm o mesmo algoritmo de fila; em seguida, atribua seus servidores (IP 192.168.1.0-127 neste caso) para manipular 10: e o restante para 20::

tc filter add dev eth0 protocol ip parent 1:1 prio 1 u32 match ip dst 192.168.1.0/25 flowid 10:
tc filter add dev eth0 protocol ip parent 1:2 prio 2 flowid 20:

(Aviso: já faz algum tempo desde que eu toquei essas coisas, você pode ter que experimentar com os valores depois de parent e flowid )

O uso de intervalos com potências de 2 é muito mais fácil do que os limites decimais. O / 25 após o endereço IP ignora os últimos 7 bits do endereço IP, portanto, um intervalo de 0 a 127. Use um / 26 para limitar o intervalo a 0,63, se necessário.

Na mesma página, Hierarchical Token Bucket é discutido, o que é uma maneira mais eficiente de distribuir largura de banda. O truque é criar para duas classes com uma relação de largura de banda distorcida, digamos 1:10 (100 mbit vs 1000 mbit). Isso deixará alguma largura de banda para seus outros clientes.

    
por 14.02.2013 / 18:39