seguinte situação: Somos um grupo de estudantes administrando a conexão com a Internet para as salas de residentes locais, com um total de cerca de 2.000 usuários finais.
Temos um sistema de pontos de tráfego, todos os MB para baixo ou pontos de custo de upload, novos pontos são adicionados a cada hora. No momento, bloqueamos o acesso à Internet de um usuário quando ele gastou todos os seus pontos (colocando-o em uma política REJECT em iptables em nosso roteador de gateway Debian).
Gostaríamos apenas de limitar a largura de banda de um usuário. Qual é a melhor maneira de fazer isso?
A resposta simples seria definir um limite de taxa na porta do switch do usuário (principalmente o Cisco Catalyst 3550s). No entanto, isso é indesejável, pois o tráfego dentro de nossa própria rede e para a rede da universidade deve permanecer ilimitado. Existe uma maneira de limitar a largura de banda apenas para pacotes com um determinado destino ou intervalo de IPs de origem (para saída e entrada) no Cisco IOS? Não consegui encontrar nada.
A outra maneira seria controlar o tráfego em nosso roteador de gateway. Várias soluções me vêm à mente:
tc ou tcng - parece que ambos têm uma sintaxe bastante misteriosa e nem oferecem bons recursos para fazer o controle de tráfego por IP. Um QDisc dedicado para tantas pessoas provavelmente desaceleraria bastante o roteador. Além disso, a documentação de ambos está bastante desatualizada.
shorewall - parece ter uma sintaxe bastante clara para configurações, no entanto, não tenho certeza se ele pode lidar com essa quantidade de tráfego e usuários e se é adequado para limitar o tráfego por IP
pfSense - parece um sistema operacional destinado a propósitos como o nosso. No entanto, isso exigiria a reinstalação compulsória do roteador do gateway. Não temos outros sistemas BSD e o pfSense precisaria ter recursos de contabilidade de tráfego muito bons (estamos usando fprobe-ulog e ulog-acctd lá no momento) também.
Qual a sua experiência? Qual solução atende às nossas necessidades e pode ser mais facilmente mantida? Você tem outras idéias?
Se você precisar de informações adicionais sobre o nosso sistema, não hesite em perguntar.
Desde já, obrigado.
EDIT : Eu implementei o sistema com iptables
e tc
.
Todo usuário tem uma sub-rede / 28, um IP VPN (ambos de 10.0.0.0/8) e um IP externo, todos são direcionados por uma cadeia de tabelas de ip. Essa cadeia tem apenas uma regra, uma simples RETURN
.
A cada cinco minutos, um script Python lê os contadores de bytes dessas regras. Ele redefine os contadores e atualiza a conta do ponto de tráfego do usuário em nosso banco de dados PostgreSQL.
Se o saldo de pontos de um usuário diminuir abaixo de um determinado limite, duas classes tc são criadas para esse usuário (uma para a entrada e outra para a interface de saída em nosso roteador de gateway), os IPs são inseridos nos filtros tc pertencentes a essas classes. As classes são limitadas por velocidade por um HTB.
Comparado com o sistema anterior com fprobe-ulog
e ulog-acctd
isso é muito mais rápido, pois a contagem de bytes é feita pelo iptables.
A velocidade da rede melhorou consideravelmente para nossos usuários.