seguinte situação: Somos um grupo de estudantes administrando a conexão de internet para as residências locais, com um total de cerca de 2.000 usuários finais.
Temos um sistema de ponto de tráfego, cada ponto de custo de carregamento ou de transferência de MB, novos pontos são adicionados por hora. No momento, bloqueamos o acesso à internet de um usuário quando ele gastou todos os seus pontos (colocando-o em uma política de REJECT no iptables em nosso roteador de gateway da 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 da nossa própria rede e da rede da universidade deve permanecer ilimitado.
Existe uma maneira de limitar a largura de banda somente para pacotes com um determinado destino ou intervalo de IP de origem (para saída e entrada) no Cisco IOS? Eu não consegui encontrar nada.
A outra maneira seria controlar o tráfego em nosso roteador de gateway. Várias soluções vêm à minha mente:
-
tc ou tcng - parece que ambos têm uma sintaxe bastante arcaica e nem oferecem bons recursos para fazer controle de tráfego por IP. Um QDisc dedicado para tantas pessoas provavelmente atrasaria muito o roteador. Além disso, a documentação de ambos está bastante desatualizada.
-
shorewall - parece ter uma sintaxe bastante nítida 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 SO destinado a propósitos como o nosso. No entanto, isso exigiria que nós reinstalássemos de forma compacta nosso roteador de gateway. Não temos outros sistemas BSD e o pfSense precisaria ter recursos de contabilidade de tráfego muito bons (também estamos usando fprobe-ulog e ulog-acctd no momento).
Qual é a sua experiência? Qual solução atende às nossas necessidades e pode ser mais facilmente mantida? Você tem outras ideias?
Se precisar de informações adicionais sobre o nosso sistema, não hesite em perguntar.
Obrigado antecipadamente.
EDIT : Eu implementei o sistema com iptables
e tc
.
Todo usuário tem uma sub-rede / 28, um IP de VPN (ambos de 10.0.0.0/8) e um IP externo, todos são direcionados por uma cadeia de iptables. Esta cadeia tem apenas uma regra, um 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 certo limite, duas classes tc são criadas para esse usuário (um para a entrada e outro para a interface de saída em nosso roteador de gateway), os IPs são inseridos em filtros tc pertencentes a essas classes . As classes são limitadas pela velocidade por um HTB.
Comparado ao sistema anterior com fprobe-ulog
e ulog-acctd
, isso é muito mais rápido, já que a contagem de bytes é feita pelo iptables.
A velocidade da rede melhorou consideravelmente para nossos usuários.