Limitador de largura de banda linux para sub-redes externas

2

Estou procurando iniciar um novo espelho de código aberto para minha empresa, mas também estou interessado em abrir também para clientes externos. No entanto, por razões óbvias, gostaria de limitar a largura de banda de saída a qualquer pessoa que não esteja em uma das minhas sub-redes locais (por exemplo, tráfego para um dos roteadores de borda).

Eu estava olhando originalmente para o apache mod_bw, no entanto, provavelmente haverá acesso FTP a esse espelho também. Eu vi uma série de opções promissoras usando 'tc', no entanto, parece que vai corresponder a um padrão baseado em sub-rede. Mas eu quero a negação disso - eu tenho uma lista de algumas (5 ou 6) sub-redes internas que não devem ter restrições, e todo o resto deve passar pelo shaper de tráfego. Para complicar as coisas, também precisarei corresponder às sub-redes v4 e v6.

Eu estava fazendo experiências com isto , mas novamente, eu basicamente preciso do inverso disso, então "não moldar essas sub-redes, aplique a política a todo o resto". Talvez duas classes, uma com um limitador de taxa e outra que não tenha? Ainda não tenho certeza de como a ordem de processamento vai com 'tc' - o processamento é finalizado depois que uma correspondência é encontrada ou continuará até o final? (por exemplo, será que um pega-tudo no final realmente captura tudo ou apenas o que ainda não foi correspondido?)

    
por ereisch 19.04.2016 / 21:21

1 resposta

1

Até onde eu sei, 'tc match' não pode ser usado com o ipv6. Você terá que usar o iptables com '-j CLASSIFY'.

Com o iptables, o processamento continua depois que uma correspondência é encontrada. Com o tc, o flowid redireciona o pacote para a classe e para o processamento.

Sobre a árvore, acho que o que você quer é:

  • qdisc raiz
  • classe com toda a largura de banda (assim as classes folha podem emprestar)
  • duas classes, com, por exemplo, 20% (externo) e 80% (interno) da largura de banda garantida e 100% no máximo: você não pode ter mais de 100% garantido
  • qdisc de uma folha (pfifo, fq, fq_codel) por classe

Embora eu não conheça sua arquitetura. Se você estiver usando o NAT, você terá que ser preciso (sem intervalo) nas regras do iptables. Se você estiver usando um proxy reverso, não poderá diferenciar o tráfego interno e externo.

Se você tiver um proxy reverso, as alternativas são:

  1. Forma no nível 7 (com mod_bw e equivalente para ftp), porque você poderá ver o cabeçalho X-Forwarded-For
  2. Configure o shaper no seu roteador de borda / Firewall (aquele com um IP público), porque você poderá ver o IP público (lembre-se de que você está sempre trabalhando no link de upload)

Dependendo da sua capacidade de fazer isso, a melhor opção é a segunda, porque você poderá modelar com precisão, com base na sua largura de banda WAN e não na NIC de 1 ou 10 Gb do seu servidor web. É sua melhor opção mesmo sem um proxy reverso.

Sobre a escolha da classe, você deve usar htb ou hfsc para um melhor uso da largura de banda dinâmica e a opção 'default' no qdisc raiz.

    
por 20.04.2016 / 14:14