Fazendo iptables reconhecer fluxos do youtube e arquivos grandes

4

Eu uso o servidor Ubuntu 10.04 com o kernel padrão como um roteador NAT. Eu uso iptables e tc para fazer a priorização de tráfego baseado em porta. Está funcionando bem. Eu dei mais prioridade ao http. Então, minha rede fica sobrecarregada com o youtube e maiores downloads http. A minha pergunta é: É possível fazer com que o iptables reconheça e marque os pacotes que pertencem aos fluxos do youtube ou arquivos maiores? Meu objetivo é tornar a navegação na página mais rápida.

    
por nixnotwin 16.04.2011 / 15:03

3 respostas

3

Você pode tentar usar -m connbytes . Tem que coincidir com algo grande. Em seguida, marque o pacote e use o mecanismo de correspondência fwmark de tc .

No entanto, eu costumo concordar com os outros que, para esse propósito, você deve usar algo que funcione na Camada 7.

Exemplo de uso de -m connbytes

iptables -A FORWARD -i $WAN_IFACE -o $LAN_IFACE -m connbytes --connbytes $TRIGGER_SIZE: --connbytes-dir reply --connbytes-mode bytes -j CONNMARK --set-mark $BULK_MARKER
iptables -t mangle -A PREROUTING -m connmark --mark $BULK_MARKER -j CONNMARK --restore-mark

A primeira regra corresponderá a conexões cujo total de bytes transferidos é maior que $ TRIGGER_SIZE (cuidadoso; que dois pontos devem existir!)

A segunda regra transferirá o CONNMARK para o pacote MARK (fwmark), de modo que tc possa fazer alguns estrangulamentos / policiamento.

Note que eu especifico -i, -o e -dir reply na primeira regra; isto irá combinar contra pacotes que entram na interface WAN (e saem da interface LAN) que são respostas para uma conexão de saída iniciada por alguém na LAN. Se você não especificar -i e -o e / ou usar -dir ambos, você também corresponderá aos pacotes de saída (por exemplo, e-mails do servidor de e-mail).

    
por 18.04.2011 / 16:59
3

Isso na perspectiva de iptables por um segundo. Quando você lida com pacotes um por um, não é possível identificar um pacote como proveniente da transferência de um arquivo grande ou pequeno, basta passá-los. Se você fizer uma inspeção profunda de pacotes, poderá encontrar um pouco mais sobre o conteúdo, mas ainda não saberá realmente o tamanho de um arquivo ou mesmo que seja parte de um arquivo e não de uma página da Web.

Você pode marcar os pacotes encaminhados de e para o Youtube e filtrá-los separadamente, mas acho que a última coisa que você quer fazer com a mídia de streaming é diminuí-lo. Quanto mais rápido isso acontece, mais felizes são os usuários e mais cedo o tráfego fica fora do caminho. Você pode usar o TC para colocar tudo que vem dos servidores do YouTube (por bloqueio de IP) em uma fila de prioridade mais baixa, mas se seus usuários ainda estiverem assistindo vídeos, demorem muito tempo ou baixem o mesmo número de bytes para passar pela sua rede.

Sugiro que você considere isso, pelo menos parcialmente, como um problema de RH e faça e imponha (usando comunicação humana, não detecção digital) algumas políticas de uso aceitáveis. Então, se você ainda precisa de capacidade de rede, aumente sua infraestrutura um pouco.

    
por 16.04.2011 / 15:09
3

Como já foi postado pelo Caleb, isso não é uma tarefa para o iptables, já que você não possui recursos de inspeção de conteúdo "adequados". Você pode querer dar uma olhada em um proxy HTTP como o Squid . Versões recentes vêm com sofisticados mecanismos de regulação de largura de banda chamados "pools de delay" que podem ser combinados com mecanismos de tags chamados "ACLs" para cenários complexos de gerenciamento de largura de banda.

Nós configuramos instalações de squid em sites de clientes com requisitos muito semelhantes aos seus.

    
por 16.04.2011 / 15:28

Tags