Qual é a melhor solução para controle de tráfego em um sistema grande (cerca de 2000 usuários)?

11

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 iptablese 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-uloge ulog-acctdisso é muito mais rápido, pois a contagem de bytes é feita pelo iptables.

A velocidade da rede melhorou consideravelmente para nossos usuários.

Christoph Wurm
fonte

Respostas:

2

Não tenho certeza do quanto você está interessado em reconfigurar toda a sua configuração (por exemplo, substituir o Debian), ou quão viável seria colocar algo assim atrás do seu gateway, mas o FreeBSD possui um recurso no ipfw conhecido como dummynet . Como parece que você não deseja obter um modelador de tráfego de hardware dedicado, isso pode ser uma opção para você. Atualmente, o usamos para bloquear o tráfego SMTP de entrada e saída através de um de nossos gateways de proxy, para impedir que um sistema de back-end NFS antigo fique sobrecarregado e subseqüentemente não responda.

Com alguns scripts e configuração inteligente de seus conjuntos de regras, seria possível controlar o tráfego de milhares de endereços IP individuais.

brent
fonte
0

Vou ter que perguntar o que estamos usando, mas nosso pessoal da ResTek tem um dispositivo na fronteira da Internet que executa funções de qualidade de serviço. Ele tem uma prioridade padrão para fluxos não classificados e prioriza outro tráfego com base em regras. É o recurso prioritário que realmente o vende, pois eles também operam um cluster de cache baseado no Squid listado como a mais alta prioridade no dispositivo de borda. As pessoas em sua rede têm a opção de navegar na Web com prioridade padrão (e um tanto chata), ou usar o proxy e obter uma resposta muito rápida. Eles também aceitam solicitações de prioridade do servidor de jogos, já que são sensíveis à latência, mas com baixa largura de banda.

Há uma quantidade considerável de trabalho para lidar com solicitações de servidores de jogos, mas elas estão lentamente indo para o lado à medida que mais e mais jogos se afastam de servidores privados. No geral, ouvi dizer que funciona muito bem para eles. Eles podem impedir coisas como o bittorrent de invadir todo o tráfego e ainda manter o tempo de carregamento das pessoas no YouTube rapidamente.

sysadmin1138
fonte
0

Com tantos usuários, a maioria das coisas simples baseadas em software começará a se decompor.

Considere olhar para o packeteer e dispositivos semelhantes. Hoje em dia, eles são quase mais caros do que apenas comprando mais largura de banda (nos EUA e na Europa, os pobres da Austrália ainda são muito altos).

LapTop006
fonte
Infelizmente, não podemos investir muito dinheiro nisso, nem para um modelador de pacotes dedicado nem para mais largura de banda. Nosso sistema está funcionando no momento, a questão é como, em vez de bloquear usuários que excederam o tráfego alocado, podemos apenas reduzir a largura de banda disponível para eles.
Christoph Wurm
0

dummynet é uma sugestão muito boa na minha opinião. Mas eu tenho certeza que o iptables também é capaz de modelar o tráfego , então você pode fazer isso na sua caixa debian.

monomito
fonte
0

o tc deve funcionar bem. Acredito que o que você deseja fazer é alterar as regras atuais do iptables para marcar em vez de REJECT, mas você pode usar um pequeno número de regras tc para aplicar a modelagem de tráfego aos fluxos marcados.

veja também o ipset para gerenciar a lista de usuários limitados http://ipset.netfilter.org/

Justin
fonte
0

Trafficpanel parece ser uma solução. Entre outros recursos:

  • Limitando a velocidade máxima do HTTP por conexão
  • Limitando a quantidade total de tráfego de recursos da Web por host de rede local
  • Registrar o tráfego da Internet por host da rede local
  • Limitando a velocidade máxima de tráfego por host de rede local
  • Limitando a quantidade total de tráfego da Internet por host da rede local

Na verdade, nunca tentei isso, mas parece ok.

AlekS
fonte