Como controlar el ancho de banda usando HTB-GEN

Imagen de damage

HOla distinguidos usuarios, amigos y conocidos del foro, a pedido de muchos, voy a comentarles mi experiencia en cuanto al uso del htb-gen versión 0.8.4, no usaremos la 0.9 porque aún esta en face beta. Bueno pues, el htb-gen es como su nombre lo indica un generador de script del famoso y glorioso HTB, pero bueno vamos al asunto en mención, los pasos son los siguientes:

1.- Descargar el htb-gen de la pagina oficial http://www.praga.org.ar/wacko/DevPraga/htbgen/, aqui escojemos dependiendo de nuestra distro de linux, el paquete mas apropiado, yo como uso Centos 4.4 i386, descargue htb-gen-0.8.4-1.noarch.rpm, también lo he usado en x86_64 ya que es un rpm "noarch".

2. Luego de la descarga respectiva, lo instalamos, ya sea con doble click o desde la consola como sea mejor para cada quien:


rpm -iUvh htb-gen-0.8.4-1.noarch.rpm

3. Ahora ya esta instalado el htb-gen, desde la consola editamos el .conf, no dirijimos hacia:


# vi /etc/htb-gen/htb-gen.conf
Aquí declaramos, las interfaces de red tanto la que esta conectada al internet como la que esta del lado LAN:
iface_down="eth1" # Server LAN iface
iface_up="eth0" # Server INET iface

3.1 Luego declaramos el ancho de banda que tenemos asignado por ejemplo si nuestra red tiene un ancho de banda de 512 Kbits tanto de bajada como de subida lo declaramos asi:

total_rate_down=512
total_rate_up=512

O si tenemos 512k down y 256 up:

total_rate_down=512
total_rate_up=256

3.2 El siguiente paso es declarar los puertos a segmentar, por default viene unos 10 puertos, pero si nuestro server hace de proxy/firewall, es basta con declarar el 80 y el 8080:

prio_ports=80,8080,25,110,443,1863

El resto de variables que estan en el archivo no lo tocamos para nada (mucho cuidado), no hace falta.

4. Ahora vamos a declarar el ancho de banda que tendra cada ip, subred o red, para esto editamos esto:

# vi /etc/htb-gen/htb-gen-rates.conf

Aquí podemos jugar con los valores el archivo muestra 5 columnas donde la primera es la ip, o subred, la segunda el "rate" de bajada, la tercera el "ceil" de bajada y la cuarta y quinta son el "rate" y el "ceil" de subida, todo esto esta debidamente documentado en el mismo archivo (pero en ingles), ejemplo de comfiguración:


192.168.100.2 0 128 0 64
192.168.100.3 64 128 0 64
192.168.100.4 0 64 0 32

Esto que significa por ejemplo la ip 192.168.100.2, tendra un ancho de banda compartido ( ya que esta en 0 el rate), podiendo llegar a un maximo de 128k siempre y cuando exista ancho de banda disponible.
la ip 192.168.100.3, tendra 64k de ancho de banda asegurado ya que esta en el rate y un maximo de 128k.
Dentro del mismo archivo tenemos más ejemplos didacticos. Guardamos los cambios y listo.

5. OJO esto solo en el caso de que no controle bien el ancho de banda le meten mano de lo contrario lo dejan tal como viene.
Luego de hacer todo esto debemos hacerle unos retoques al script principal el cual esta en:

# vi /usr/bin/htb-gen

y vamos hasta donde dice:

# Make extra tables, cleaner & target match faster
iptables -t mangle -N htb-gen.down
iptables -t mangle -A FORWARD -o ${iface_down} -j htb-gen.down
y Añadimos esta linea:
iptables -t mangle -A OUTPUT -o ${iface_down} -j htb-gen.down
Luego bajamos dos lineas y añadimos:
iptables -t mangle -A POSTROUTING -o ${iface_up} -j htb-gen.up

esta parte del script quedará asi:
iptables -t mangle -N htb-gen.down
iptables -t mangle -A FORWARD -o ${iface_down} -j htb-gen.down
iptables -t mangle -A OUTPUT -o ${iface_down} -j htb-gen.down
iptables -t mangle -N htb-gen.up
iptables -t mangle -A POSTROUTING -o ${iface_up} -j htb-gen.up
iptables -t mangle -A FORWARD -o ${iface_up} -j htb-gen.up

Bajamos un poco más y encontraremos esto:
#delete old htb-gen entries(chains)
iptables -t mangle -D FORWARD -o ${iface_down} -j htb-gen.down 2>/dev/null
iptables -t mangle -D FORWARD -o ${iface_up} -j htb-gen.up 2>/dev/null
Y lo remplazamos adicionando lineas correspondientes a las anterirmente declaradas, en fin debe quedar asi:

#delete old htb-gen entries(chains)
iptables -t mangle -D FORWARD -o ${iface_down} -j htb-gen.down 2>/dev/null
iptables -t mangle -D OUTPUT -o ${iface_down} -j htb-gen.down 2>/dev/null
iptables -t mangle -D POSTROUTING -o ${iface_up} -j htb-gen.up 2>/dev/null
iptables -t mangle -D FORWARD -o ${iface_up} -j htb-gen.up 2>/dev/null

6. Una vez guardados los cambios, desde consoloa tecleamos:

# htb-gen tc_all

Con esto htb-gen generara automaticamente, los script's correspondientes con las clases y la parte de iptables.

7. Verificamos que todo se halla generado con:

# iptables -nL -t mangle

8. Listo todo en orden a relajarce con unas chelas ya que tendran un problema menos que cargar, Salud.

NOTA: Deben tener instaldo iproute para que esto funcione de lo contrario, no generara mensajes de error, recuerden que el comando TC es parte de iproute y este comando es parte fundamental tanto en el uso de htb como de cbq.

Debido a la gran cantidad de preguntas respecto a el mensaje de "check rates conf, not enough download bandwidth", eso se da porque estan declarando más RATE del que tienen asignado en el "Total RATE" del htb-gen.conf. Pilas lean las palabritas que tiene cada archivito para que se enteren que no hacer.

Así mismo he visto que preguntan de manera insistente que se les indique porque no les funciona el htb-gen, muchos usuarios solo lo instalan y listo, pero aveces hay que ver que más pasa, yo nunca tuve inconvenientes con el htb-gen realizaba lo posteado y listo, pero con la versión 0.9b, el error se da que este no asigna la chain de mangle a la eth1 si no a la eth0, he ahi el error ya que personalmente la eth0 la declaro como interfaz externa.
Recomiendo tecleen iptables -nL -t mangle y se fijen en que eth se general el reporte, la solución la estoy analizando, la misma la posteare a futuro, por el momento si necesitan usar el htb-gen 0.9 usen la version 0.9-1 con la cual no se me ha presentado el inconveniente.

ACTUALIZACIÓN 11/07/2009
Viendo varios post similares sobre el problema de la segmentación de subida, lastimosamente muchos solo pensaron de que era cosa de instalar dar dos clic's, poner las ip's y listo, pero no este problema de subida se soluciona, y repito como dije hace meses atras (por eso nunca di respuesta antes ya que no lo creía necesario debido a "que lo habia dicho antes") se debe jugar con las reglas de iptables, en la versión del htb gen 0.9.1 que es la cual muchos usan,se debe adicionar una linea en la cual marque el FORWARD con la opción -i, con eso es suficiente para solucionar el dilema de la subida, espero que prueben y apliquen lo recomendado. No me pregunten el porque, se los dejo de tarea.
En cuanto a la versión 0.8.x no hay que hacerlos tal como se explica es suficiente, si tienes algun problema con el squid o alguna relacionado, me he topado con muchas personas que tienen script de iptables que hacen flush de reglas en la cadena mangle lo cual interfiere con las reglas de mangle del htb-gen, deben ver todas las opciones antes de decir NO FUNCIONA.

Actualización al 14 de Septiembre del 2010:

Se me presento en una institución que no es ISP que se necesitaba colo controlar el ancho de banda hacia Internet, pero resulta que como el htb-gen segmenta todo el tráfico en la tabla del FORWARD, pues eso tría complicaciones cuando el mismo gateway de Internet es también el router de varias subredes de una LAN, por ejemplo un servidor de aplicaciones esta dentro del segmento 192.168.0.1/24 y tengo hosts en el segmento 192.168.2.0/29, ambas redes son ruteadas por el Linux en este caso el Htb-gen me segmentara el trafico local entre ambas subredes, lo cual nos pondra en problemas, para solucionar esto se debe hacer los siguiente (gracias a Razametal por dar una luz ;) ):
iptables -t mangle -I FORWARD -p ALL -d 192.168.0.1/24 -s 192.168.2.0/29 -j RETURN
iptables -t mangle -I FORWARD -p ALL -s 192.168.0.1/24 -d 192.168.2.0/29 -j RETURN

Listo con esto adicionado al final del script principal de htb-gen (/usr/local/bin/htb-gen) tenemos todo resuelto.
Recuerden una vez ejecutado el script con las lineas de Return adicionadas, remplacen el -I con -A, ojo.

Saludos amigos.

Comentarios

PROBLEMAS HTB-GEN CON "arno-iptables-firewall de centos"

Imagen de gonzalogar

Hola sabes tengo este problema espero que me puedas dar una manitoa, estoy iniciandome en el mundo de linux

Tengo instalado Centos 5.2 y comparti mi conexion de internet con arno-iptables-firewall, hice las respectivas pruebas y todo bien, pero cuando instale htb-gen para segmentar el internet ya no tuve respuesta a la ip del servidor y ya no tengo internet internet

Esta es la configuracion de htb-gen

# vi /etc/htb-gen/htb-gen.conf

iface_down="eth1" # Server LAN iface
iface_up="eth0" # Server INET iface

total_rate_down=1024
total_rate_up=1024

prio_ports=80,8080,25,110,443,1863

# vi /etc/htb-gen/htb-gen-rates.conf
172.16.1.2 32 64 0 32
172.16.1.3 32 64 0 32
172.16.1.4 32 64 0 32

# vi /usr/bin/htb-gen
iptables -t mangle -N htb-gen.down
iptables -t mangle -A FORWARD -o ${iface_down} -j htb-gen.down
iptables -t mangle -A OUTPUT -o ${iface_down} -j htb-gen.down
iptables -t mangle -N htb-gen.up
iptables -t mangle -A POSTROUTING -o ${iface_up} -j htb-gen.up
iptables -t mangle -A FORWARD -o ${iface_up} -j htb-gen.up

#delete old htb-gen entries(chains)
iptables -t mangle -D FORWARD -o ${iface_down} -j htb-gen.down 2>/dev/null
iptables -t mangle -D OUTPUT -o ${iface_down} -j htb-gen.down 2>/dev/null
iptables -t mangle -D POSTROUTING -o ${iface_up} -j htb-gen.up 2>/dev/null
iptables -t mangle -D FORWARD -o ${iface_up} -j htb-gen.up 2>/dev/null

# htb-gen tc_all
# iptables -nL -t mangle

Se debieron borrar algunas

Imagen de damage

Se debieron borrar algunas cadenas que pone el Arno-firewall, el htb-gen hace flush de reglas de la tabla de mangle ,pero creo son chain's propias del htb-gen, no croe que haga un flush de las reglas que existan, pero estoy especulando:

while read line ;do
test -z "${line##:htb-gen*}" || continue # filter htb-gen chains only
chain=(${line/:/})
iptables -t mangle -F $chain
iptables -t mangle -X $chain
done <<-EOF

Por eso simpre recomiendo hacer un script de iptables a manuela jeje, no hay nada mejor, arno-firewall es bueno, pero... para entender como camella iptables, debes darle duro al terminal, aunque por lo general, solonecesitas enmascarar, hacer forward de algun puerto x o varios y quizas redireccionar el puerto del proxy si lo usas de forma transparente para que des salida a inet, arno-firewall creo pone las politicas por defecto en DROP, revisa eso y te recomiendo bajes el arno y uses un script basico de iptables y vayas probando.

Te recomiendo leas los

Imagen de damage

Te recomiendo leas los manuales de pello:

http://www.pello.info/filez/firewall/iptables.html

Te sera de muchisima utilidad a comprender iptables, la pagina tiene ejemplos practicos y basicos, pona tencion en la teoria sobre INPUT, OUTPUT y FORWARD que es lo que normalmente nos confundimos cuando empezamos.

Saludos.

Interfaz web para HTB

hola amigos, tengo una inquietud...
Podrìa por favor alguien realizar un COMO sobre el manejo del HTB mediante un entorno web???
Esto debido a que nunca pude controlar el ancho de banda que utiliza cada uno de los usuarios de mi red; ni siquiera siguiendo los howtos de ecualug. GRACIAS :) :)

Si no pudiste via consola

Imagen de damage

Si no pudiste via consola controlar el recurso de tu red, no tiene sentido hacerlo por entorno WEB ya que este utiliza los mismos script's, lo mejor es que veas donde tienes tu problema, lo resuelvas y trates nuevamente. Personalmente he puesto un sin número de servidores con htb, htb-gen, cbq y todos funcionan desde que son configurados.

Help

Imagen de falcom

Saludos, haber si me das un hilo, instale y todo ok, al probar si esta filtrando el ancho de banda con
iptables -L -t mangle -vxn, pues nada salen marcados los paquetes pero no frena el consumo x ejemplo a la ip .15 sale lo siguiente:

Chain htb-gen.up-192.168.0.15 (1 references)
pkts bytes target prot opt in out source destination
0 0 MARK all -- * * 0.0.0.0/0 0.0.0.0/0 MARK match 0x0 length 0:100 MARK set 0x1d7a
0 0 MARK udp -- * * 0.0.0.0/0 0.0.0.0/0 MARK match 0x0 MARK set 0x1d7a
0 0 MARK icmp -- * * 0.0.0.0/0 0.0.0.0/0 MARK match 0x0 MARK set 0x1d7a
0 0 MARK tcp -- * * 0.0.0.0/0 0.0.0.0/0 MARK match 0x0 multiport dports 80,8080,22,25,110,443,1863 MARK set 0x1d7a
0 0 MARK all -- * * 0.0.0.0/0 0.0.0.0/0 MARK match 0x0 helper match "ftp" MARK set 0x1d7a
0 0 MARK all -- * * 0.0.0.0/0 0.0.0.0/0 MARK match 0x0 MARK set 0x1d7b
0 0 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0

con iptables -nL -t mangle

Chain htb-gen.up-192.168.0.15 (1 references)
target prot opt source destination
MARK all -- 0.0.0.0/0 0.0.0.0/0 MARK match 0x0 length 0:100 MARK set 0x1d7a
MARK udp -- 0.0.0.0/0 0.0.0.0/0 MARK match 0x0 MARK set 0x1d7a
MARK icmp -- 0.0.0.0/0 0.0.0.0/0 MARK match 0x0 MARK set 0x1d7a
MARK tcp -- 0.0.0.0/0 0.0.0.0/0 MARK match 0x0 multiport dports 80,8080,22,25,110,443,1863 MARK set 0x1d7a
MARK all -- 0.0.0.0/0 0.0.0.0/0 MARK match 0x0 helper match "ftp" MARK set 0x1d7a
MARK all -- 0.0.0.0/0 0.0.0.0/0 MARK match 0x0 MARK set 0x1d7b
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0

en el archivo htb-gen-rates.conf tengo
192.168.0.15 0 64 0 64
osea q comparta hasta un maximo de 64 Kbps de subida y de bajada, pero al probar una descarga con la ip me jala todo el ancho de banda que tengo.
Alguna idea gracias!

Mira que te da cuando

Imagen de damage

Mira que te da cuando tecleas iptables -nL -t mangle |grep eth1, debe salir algo asi:

iptables -nL -t mangle |grep eth1
htb-gen.eth1 all -- 0.0.0.0/0 0.0.0.0/0
htb-gen.eth1 all -- 0.0.0.0/0 0.0.0.0/0
Chain htb-gen.eth1 (2 references)
htb-gen.eth1-192.168.100.4 all -- 0.0.0.0/0 192.168.100.4
htb-gen.eth1-192.168.100.5 all -- 0.0.0.0/0 192.168.100.5
htb-gen.eth1-192.168.100.253 all -- 0.0.0.0/0 192.168.100.253
Chain htb-gen.eth1-192.168.100.253 (1 references)
Chain htb-gen.eth1-192.168.100.4 (1 references)
Chain htb-gen.eth1-192.168.100.5 (1 references)

y con eth0 debe estar asi:


iptables -nL -t mangle |grep eth0
htb-gen.eth0 all -- 0.0.0.0/0 0.0.0.0/0
htb-gen.eth0 all -- 0.0.0.0/0 0.0.0.0/0
Chain htb-gen.eth0 (2 references)
htb-gen.eth0-192.168.100.4 all -- 192.168.100.4 0.0.0.0/0
htb-gen.eth0-192.168.100.5 all -- 192.168.100.5 0.0.0.0/0
htb-gen.eth0-192.168.100.253 all -- 192.168.100.253 0.0.0.0/0
Chain htb-gen.eth0-192.168.100.253 (1 references)
Chain htb-gen.eth0-192.168.100.4 (1 references)
Chain htb-gen.eth0-192.168.100.5 (1 references)

Si te fijas bien son diferentes, en lo que corresponde al destino y al source que envia los paquetes.

Si no sale asi quizas el htb-gen no esta identificando bien las interfaces, verfica eso en el htb-gen que esta en /usr/.....

P.D. Mirando lo que has posteado ahi esta miralo:

Chain htb-gen.up-192.168.0.15

Si ves la palabra "up", eso indica que lo que esta ahi es para la subida mas no pa'la bajada.

Gracias x responder

Imagen de falcom

Gracias x responder efectivamente yo estaba equivocando las interfaces, ahora al dar iptables -nL -t mangle | grep eth0 y iptables -nL -t mangle | grep eth1 pues nada no arroja nada.
Y si doy:

htb-gen tc_all

me sale

too many links
too many links

pero si doy:

iptables -L -t mangle -vxn | more


Chain htb-gen.down (4 references)
pkts bytes target prot opt in out source destination
538 421634 htb-gen.down-192.168.0.11 all -- * * 0.0.0.0/0 192.168.0.11
0 0 htb-gen.down-192.168.0.10 all -- * * 0.0.0.0/0 192.168.0.10
0 0 htb-gen.down-192.168.0.13 all -- * * 0.0.0.0/0 192.168.0.13
0 0 htb-gen.down-192.168.0.12 all -- * * 0.0.0.0/0 192.168.0.12
10151 40034462 htb-gen.down-192.168.0.15 all -- * * 0.0.0.0/0 192.168.0.15

veo q efectivamente a la ip 0.15 le esta marcando paquetes y x lo tanto controlando la bajada a no mas de 64 Kbps, segun lo puesto
que sucedera?
gracias x contestar!

Páginas