Linux Server Hack - Cómo limitar el ancho de banda con Linux, TC, y iproute2!

por Max el Jueves, 25 de septiembre 2008

Recuerdo que hice un breve post sobre cómo escribir un script de balanceo de carga (o el límite de ancho de banda)?

Bueno, hoy he encontrado otro guión fresco para limitar el ancho de banda. Creo que ésta si es más complicado, pero si usted lo necesita, puede ser muy útil.

Aquí está el código a través deAdamsinfo.com:


# Establezca algunas variables
# / bin / bash
EXT_IFACE = "eth0"
INT_IFACE = "eth1"
TC = "TC"
UNIDADES = "kbit"
Line = "10000" # enlace ext velocidad máxima de
Limit = "5000" # máximo que vamos a permitir que


# Establezca algunas variables para los distintos "clases" que vamos a utilizar para dar forma a la velocidad de carga interna, es decir, la configuración de eth0
= "200 CLS1_RATE" # Alta Prioridad de tráfico de clase ha 200kbit
= "300 CLS2_RATE" # Medio clase de prioridad se ha 300kbit
= "4500 CLS3_RATE" clase masiva # tiene 4500kbit
# (Vamos a establecer cuáles pueden obtener préstamos de los que más tarde)

# Establezca algunas variables para los distintos "clases" que vamos a utilizar para dar forma a la velocidad de descarga interna, es decir, la configuración de eth1
= "1000 INT_CLS1_RATE" # prioridad
= "4000 INT_CLS2_RATE" # granel

# Borrar qdiscs actual. es decir, la limpieza
$ (TC) qdisc del dev $ () INT_IFACE raíz
$ (TC) qdisc del dev $ () EXT_IFACE raíz

# Asociar qdiscs raíz.Estamos utilizando HTB aquí, y la asignación de este qdisc para ambas interfaces. Vamos a la etiqueta "1:0"
$ (TC) qdisc add dev $ () INT_IFACE root handle 1:0 htb
$ (TC) qdisc añadir dev $ () EXT_IFACE root handle 1:0 htb

# Crear clases de raíz, con los límites máximos definidos
# Uno para eth1
$ (TC) class add dev $ (1:0) INT_IFACE padres classid 1:1 htb rate $ (LIMITE) $ () UNIDADES ceil $ (LIMITE) $ () UNIDADES
# Uno para eth0
$ (TC) class add dev $ (1:0) EXT_IFACE padres classid 1:1 htb rate $ (LIMITE) $ () UNIDADES ceil $ (LIMITE) $ () UNIDADES

# Crear clases secundarias
# Estas son para nuestra interfaz interna eth1
# Crear una clase de etiqueta "1:2" y darle el límite definido anteriormente
$ (TC) class add dev $ (1:1) INT_IFACE padres classid 1:2 htb rate $ (INT_CLS1_RATE) $ () UNIDADES ceil $ (LIMITE) $ () UNIDADES
# Crear una clase de etiqueta "1:3" y darle el límite definido anteriormente
$ (TC) class add dev $ (1:1) INT_IFACE padres classid 1:3 htb rate $ (INT_CLS2_RATE) $ () UNIDADES INT_CLS2_RATE ceil $ () $ () UNIDADES

# Ext_if (subir) ahora. También establece que las clases pueden pedir prestado y prestar.
# Esta clase está garantizada 200kbit y puede reventar hasta 5000kbit si está disponible
$ (TC) class add dev $ (1:1) EXT_IFACE padres classid 1:2 htb rate $ (CLS1_RATE) $ () UNIDADES ceil $ (LIMITE) $ () UNIDADES
# Esta clase está garantizada 300kbit y puede reventar hasta 5000kbit-200kbit = 4800kbit si está disponible
$ (TC) class add dev $ (1:1) EXT_IFACE padres classid 1:3 htb rate $ (CLS2_RATE) $ () UNIDADES techo `echo $ (LIMITE) - $ () CLS1_RATE | bc` $ () UNIDADES
4500kbit Esta clase puede se garantiza # y no puede estallar pasado (5000kbit-200kbit-300kbit = 4500kbit).
# Es decir, incluso si nuestro tráfico a granel se vuelve loco, las dos clases anteriores, está garantizado la disponibilidad.
$ (TC) class add dev $ (1:1) EXT_IFACE padres classid 1:4 htb rate $ (CLS3_RATE) $ () UNIDADES techo `echo $ (LIMITE) - $ (CLS1_RATE) - $ () CLS2_RATE | bc` $ UNIDADES ()

# Agregar pfifo. Lea más acerca de pfifo en otros lugares, fuera del alcance de esta guía.
$ (TC) qdisc add dev $ () INT_IFACE padres 1:2 manejar 12: límite pfifo 10
$ (TC) qdisc add dev $ () INT_IFACE padres 1:3 manejar 13: límite pfifo 10
$ (TC) qdisc add dev $ () EXT_IFACE padres 1:2 manejar 12: límite pfifo 10
$ (TC) qdisc add dev $ () EXT_IFACE padres 1:3 manejar 13: límite pfifo 10
$ (TC) qdisc add dev $ () EXT_IFACE padres 1:4 manejar 14: límite pfifo 10

# # # Hecho de agregar todas las clases, ahora establecido algunas reglas! # # #
# INT_IFACE
# Tenga en cuenta la dirección del 'horario de verano'. De tráfico que sale de nuestra interfaz interna y de nuestros servidores es a la velocidad de descarga del servidor, por lo que SOME_IMPORTANT_IP se asigna a 1:2 de clase para su descarga.
$ (TC) filter add dev $ () INT_IFACE padres 1:0 prio 1 u32 IP IP SOME_IMPORTANT_IP/32 partido DST flowid 1:2
$ (TC) filter add dev $ () INT_IFACE padres 1:0 prio 1 u32 IP IP SOME_OTHER_IMPORTANT_IP/32 partido DST flowid 1:2
# Todos los demás servidores velocidad de descarga va a 1:3 - no tan importante como los dos anteriores
$ (TC) filter add dev $ () INT_IFACE padres 1:0 prio IP 1 u32 match ip dst 0.0.0.0 / 0 flowid 1:3

# EXT_IFACE
# Dar prioridad a las solicitudes de DNS
$ (TC) filter add dev $ () EXT_IFACE padres 1:0 prio IP 1 u32 match ip src IMPORTANT_IP/32 deporte coinciden con IP 53 0xffff flowid 1:2
# SSH es importante
$ (TC) filter add dev $ () EXT_IFACE matriz 1:0 prio IP 1 u32 match ip src IMPORTANT_IP/32 deporte coinciden con IP 22 0xffff flowid 1:2
# Nuestro servidor SMTP exim es importante también
$ (TC) filter add dev $ () EXT_IFACE padres 1:0 prio IP 1 u32 match ip src 217.10.156.197/32 deporte match ip 25 0xffff flowid 1:3
# La mayor parte
$ (TC) filter add dev $ () EXT_IFACE padres 1:0 prio IP flowid 1 u32 match ip src 0.0.0.0 / 0 1:4

Ritmo

1 Estrella 2 Estrellas 3 Estrellas 4 Estrellas 5 Estrellas
Loading ... Cargando ...


Patrocinadores de la web
Tokyoflash



Relacionado Noticias y recursos

  • Yaron
    Hola,
    Grandes explica, funciona muy bien:).
    Tengo una pregunta:
    ¿Qué ocurrirá con las corrientes que ya existen? el filtro contarlos?
    (ya que el deporte y dport ya se cambió, antes de aplicar el filtro)

    Por ejemplo:
    $ (TC) filter add dev $ () EXT_IFACE padres 1:0 prio IP 1 u32 match ip src 217.10.156.197/32 deporte match ip 25 0xffff flowid 1:3

    el puerto de origen no podría ser de 25 para una conexión que ya se había iniciado.
blog alimentado por Disqus
Si te gusta este post, por favor suscribirse a mi feed RSS.

También puede suscribirse por correo electrónico rellenando tu nombre y e-mail a continuación:

Nombre: Email:


¿Tienes un nuevo hack, bricolaje, howto, o gadget? Consejo que estamos aquí.

Goohack Trate de encontrar un nuevo Hack:


Sitios recomendados De Zedomax Red de Blog