Linux Server Hack - Como limitar largura de banda com o Linux, TC, e iproute2!

por max na quinta-feira, 25 setembro, 2008

Lembre-se que fiz um post rápido sobre como escrever um script de balanceamento de carga (ou otimização de largura de banda)?

Bem, hoje eu encontrei um script legal para limitar a largura de banda. Eu acredito que este um caso mais complicado, mas se precisar, pode ser muito útil.

Aqui está o código via Adamsinfo.com:


# Set some variables
#!/bin/bash
EXT_IFACE=”eth0″
INT_IFACE=”eth1″
TC=”tc”
UNITS=”kbit”
LINE=”10000″ #maximum ext link speed
LIMIT=”5000″ #maximum that we'll allow


# Set algumas variáveis para o indivíduo "classes" que nós vamos usar a velocidade de upload forma interna, ou seja, modelar eth0
CLS1_RATE = "200" # classe de tráfego de alta prioridade tem 200Kbit
CLS2_RATE = "300" # Classe Média Prioridade tem 300 kbit
CLS3_RATE = "4500" # classe Bulk tem 4500kbit
# (Vamos definir quais pode pedir a partir do qual mais tarde)

# Set algumas variáveis para o indivíduo "classes" que nós vamos usar a velocidade de download forma interna, ou seja, modelar eth1
INT_CLS1_RATE = "1000" # Priority
INT_CLS2_RATE = "4000" # Bulk

# Delete qdiscs atual. ou seja, limpar
$) (TC qdisc del dev $ (INT_IFACE raiz)
$) (TC qdisc del dev $ (EXT_IFACE raiz)

# Attach qdiscs raiz. Estamos usando HTB aqui, e anexar esta qdisc para ambas as interfaces. Nós vamos rotulá-la "1:0"
$) (TC qdisc add dev $ (INT_IFACE root handle 1:0 htb)
$) (TC qdisc add dev $ (EXT_IFACE root handle 1:0 htb)

# Criar classes de raiz, com os limites máximos definidos
# Um para eth1
$ (TC class add dev $) (1:0) INT_IFACE mãe classid 1:1 htb rate $ (LIMIT) $ (unidades) ceil $ (LIMIT) $ (unidades)
# Um para eth0
$ (TC class add dev $) (1:0) EXT_IFACE mãe classid 1:1 htb rate $ (LIMIT) $ (unidades) ceil $ (LIMIT) $ (unidades)

# Criar classes de criança
# Estes são para nossa interface interna eth1
# Crie uma classe rotulada "1:2" e dar-lhe o limite acima definido
$ (TC class add dev $) (1:1) INT_IFACE mãe classid 1:2 htb rate $ (INT_CLS1_RATE) $ (unidades) ceil $ (LIMIT) $ (unidades)
# Crie uma classe rotulada "1:3" e dar-lhe o limite acima definido
$ (TC class add dev $) (1:1) INT_IFACE mãe classid 1:3 htb rate $ (INT_CLS2_RATE) $ (unidades) ceil $ (INT_CLS2_RATE) $ (unidades)

# Ext_if upload () agora. Nós também definir quais classes podem pedir emprestado e emprestar.
# Essa classe é garantido 200Kbit e pode estourar até 5000kbit se disponível
$ (TC class add dev $) (1:1) EXT_IFACE mãe classid 1:2 htb rate $ (CLS1_RATE) $ (unidades) ceil $ (LIMIT) $ (unidades)
# Essa classe é garantido 300 kbit e pode estourar até 5000kbit-200Kbit = 4800kbit se disponível
$ (TC class add dev $) (1:1) EXT_IFACE mãe classid 1:3 htb rate $ (CLS2_RATE) $ (unidades) ceil `echo $ (LIMIT) - $ (CLS1_RATE) | bc` $ (unidades)
# 4500kbit Essa classe pode é garantida e não pode estourar passou (5000kbit-200Kbit-300 kbit = 4500kbit).
# Ou seja, mesmo que o nosso volume de tráfego vai louco, as duas classes acima são ainda garantida a disponibilidade.
$ (TC class add dev $) (1:1) EXT_IFACE mãe classid 1:4 htb rate $ (CLS3_RATE) $ (unidades) ceil `echo $ (LIMIT) - $ (CLS1_RATE) - $ (CLS2_RATE) | bc` $ (unidades)

# Adicione pfifo. Leia mais sobre pfifo em outros lugares, está fora do escopo deste HOWTO.
$) (TC qdisc add dev $ (INT_IFACE pai) 1:2 handle 12: limite pfifo 10
$) (TC qdisc add dev $ (INT_IFACE pai) 1:3 handle 13: limite pfifo 10
$) (TC qdisc add dev $ (EXT_IFACE pai) 1:2 handle 12: limite pfifo 10
$) (TC qdisc add dev $ (EXT_IFACE pai) 1:3 handle 13: limite pfifo 10
$) (TC qdisc add dev $ (EXT_IFACE pai) 1:4 handle 14: limite pfifo 10

# # # Feito acrescentando todas as classes, agora criar algumas regras! # # #
# INT_IFACE
# Nota direção do "horário de verão '. O tráfego que sai da nossa interface interna e para os nossos servidores é a velocidade de download do servidor, de modo SOME_IMPORTANT_IP é alocada para 1:2 classe para download.
$) (TC filter add dev $ (INT_IFACE pai) 1:0 protocol ip prio 1 u32 match ip dst SOME_IMPORTANT_IP/32 flowid 1:2
$) (TC filter add dev $ (INT_IFACE pai) 1:0 protocol ip prio 1 u32 match ip dst SOME_OTHER_IMPORTANT_IP/32 flowid 1:2
# Velocidade Todos os outros servidores de download vai 1:3 - não tão importante como os dois acima
$) (TC filter add dev $ (INT_IFACE pai) 1:0 prio protocolo ip dst 1 u32 match ip 0.0.0.0 / 0 flowid 1:3

# EXT_IFACE
# Priorizar os pedidos de DNS
$) (TC filter add dev $ (EXT_IFACE pai) 1:0 protocol ip prio 1 u32 match ip src IMPORTANT_IP/32 match ip sport 53 0xffff flowid 1:2
# O SSH é importante
$) (TC filter add dev $ (EXT_IFACE pai) 1:0 protocol ip prio 1 u32 match ip src IMPORTANT_IP/32 match ip sport 22 0xffff flowid 1:2
# O nosso servidor SMTP Exim também é importante
$) (TC filter add dev $ (EXT_IFACE pai) 1:0 protocol ip prio 1 u32 match ip src 217.10.156.197/32 match ip sport 25 0xffff flowid 1:3
# O volume
$) (TC filter add dev $ (pais) EXT_IFACE flowid 1:0 protocol ip prio 1 u32 match ip src 0.0.0.0 / 0 1:4

Categoria

1 Star2 Stars3 Stars4 Stars5 Stars
Loading ... Carregando ...



20.000 GPS POI's $ 9,99

Related News and Resources

Other Interesting News From Our Friends

  • Yaron
    Oi,
    Great explica, ele funciona muito bem:).
    Eu tenho uma pergunta:
    O que acontecerá com os córregos que já existem? será o filtro de contá-los?
    (desde que o esporte e dport já foram alterados, antes de aplicar o filtro)

    Por exemplo:
    $) (TC filter add dev $ (EXT_IFACE pai) 1:0 protocol ip prio 1 u32 match ip src 217.10.156.197/32 match ip sport 25 0xffff flowid 1:3

    a porta de origem não poderia ser de 25 para uma conexão que já foi começado.
blog comentários powered by Disqus
Se você gostou deste post então por favor subscrever a minha plena feed RSS.

Você também pode se inscrever por e-mail, preencha o seu nome e e-mail abaixo:

Nome: Email:


Tem um novo truque, bricolage, howto, ou gadget? Dica nós aqui.

Tente goohack para encontrar um corte novo:


Featured Sites From Zedomax Blog Network