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.