On Monday 18 June 2007 21:22:27 you wrote:
> This e-mail Groucho's mode: berborragicus
>
> El Jueves, 24 de Mayo de 2007 11:25, Luciano Ruete escribió:
> > On Sunday 20 May 2007 01:51, xWin2 wrote:
> > > Alguien me puede guiar en el siguiente tema:
> > > Resulta que quiero limitarle la subida por ip a 5KB, sin tener en
> > > cuenta Layer7 ni nada de eso, que la limitación sea fija...
> > > Hay alguna forma de hacerlo en linux (distro ipcop) y de forma
> > > facil?
> >
> > htb-gen[1]
> >
> > Podes setear el ancho de banda por cada ip de tu LAN, tanto de
> > subida como de bajada. La conf es muy fácil.
> > [1] http://freshmeat.net/projects/htb-gen/
>
> Bien, estoy llegando a un punto donde me empiezan a interesar este
> tipo de temas.
> a) Suficiente ancho de banda disponible en mi casa como para que
> compartirlo con reglas explícitas tenga sentido.
> b) Compañeros de trabajo con comportamiento "agresivo" hacia la red,
> como correr peers p2p todo el tiempo en lugar circunstancialmente y
> sólo cuando no sería notado por la gente con autoridad para indicarme
> que filtre ese tipo de tráfico en el gateway a Internet.
>
>
> Tenía pendiente usar tu script htb-gen como primera aproximación al
> tema y para empezar a indagar en los conceptos relacionados. La
> limitación que creo que tiene tu script para mis casos de uso es que
> no maneja el uso de ancho de banda originado o terminado en el propio
> router, sólo el que pasa de largo de una interfaz a otra.

En realidad no es una limitación de htb-gen sino del kernel de Linux.
La limitación viene dada porque las classful qdisc[1] solo funcionan con 
tráfico saliente y no con tráfico entrante. 
Esto quiere decir que cuando yo "cuelgo" una qdisc de un device, esta funciona 
sólo para todo lo que va a salir por ese device y no para lo que entra. 

Hay una lógica de porque esto es así y es que a los desarrolladores les sonó 
más lógico manejar colas(queues) más complejas sobre algo en que yo tengo el 
control(el output) y no sobre algo que no lo tengo(el input). 

En la práctica, para regular el ancho de banda a un punto no queda otra que 
dropear paquetes para que el tráfico baje, y esto termina en retransmisiones 
hasta que el "congestion control" de tcp se adapta a la situación. 
Hacer eso en "output" y hacerlo en "input" es igual de eficaz como grosero. 

De hecho yo puedo inventar un device virtual(con IMQ o IFB), "colgarle" una 
classful qdisc, y hacer pasar por ese virtual device todo el tráfico que 
ingresa por un device real. 
IFB es parte oficial del kernel desde hace algunas versiones, y el que 
menciono es uno de sus usos más populares, por lo que los propios 
desarrolladores de alguna manera aceptan el uso de qdiscs para input. 

Otro camino es usar una qdisc especial llamada ingress[2], no permite 
jerarquía ni borrowing(es decir no es clasfull) pero permite usar tc filters 
con TBF para aplicar distintos anchos de banda a cada filtro.

> Significaría que el script se adapta a una configuración de router
> puro, como el que se encontraría en un cybercafé de barrio :-) pero
> no al caso de un servidor hogareño o de pequeña empresa que hace de
> router y de muchas otras cosas más, como servidor web, o peer p2p.
>
> Quiero que si dejo corriendo un programa p2p corriendo en el servidor
> de mi casa, que el acceso al sitio web hospedo en mi servidor no se
> vea adversamente afectado, ni quiero que durante las horas del día en
> las que hay otras máquinas encendidas y usando Internet en mi casa
> estas noten una degradación significativa de la calidad de servicio.
>
> En otras palabras, quiero que el tráfico originado o terminado en el
> servidor mismo que hace de router para mi red interna sufra la misma
> clasificación en "prio" y "junk" que el tráfico originado o terminado
> en los hosts de la red interna.
> htb-gen permite generar reglas a tal efecto?

short answer: no, htb-gen esta pensado para un router puro.

long answer(usando htb-gen-0.9-b1): podrías crear un virtual device con 
IMQ/IFB el cual reciba el tráfico entrante. Luego confiugrás en 
htb-gen-rates.conf la ip del propio servidor, usando el device virtual como 
entrante y el real como saliente. Y hasta aca todo bonito.
Habría un solo problema más.
<problema>
Si en htb-gen seteas para un cliente como prio el puerto 80(x ej), quiere 
decir que un cliente que está pidiendo una pagina web tiene prioridad. Esto 
se mapea a "dst port 80" en la interfaz de download y "src port 80" en la 
interfaz de upload. 
En el caso de poner puerto 80 para un servidor querrías exactamente el 
comportamiento contrario, es decir, "src port 80" en la interfaz de download 
y "dst port 80" en la interfaz de upload. 

Se me ocurren dos soluciones:
1)invertir a proposito los valores de iface_up e iface_down en la conf de las 
ips que corresponden a servidores.
2)implementando "yet another parameter" en htb-gen-rates.conf que determine si 
la ip es un server o un cliente(es decir si hace falta invertir el sentido de 
los puertos o no). 
</problema>

> La otra pregunta que tengo es qué es htb_init y si me pierdo algo por
> no usarlo. Entiendo que es otro generador de reglas y que tu htb-gen
> puede generar configuraciones para htb_init para htb_init genere las
> reglas... pero para qué querría hacer eso en lugar de hacer todo
> directamente con uno u otro script?

htb_init permite crear arboles de jerarquias a voluntad, lo cual permite ir 
separando el ancho de banda en porciones lógicas para luego en algún punto 
llegar a los clientes o servicioes reales, aprobechando la totalidad de la 
funcionalidad de htb. 

htb-gen oculta esta funcionalidad poniendo a todos los clientes al mismo 
nivel, bajo un mimso padre que tiene el total del ancho de banda, y luego 
genera unas jerarquías hijas por cliente para separar prio y junk. 
El beneficio de htb-gen es la simplicidad, ya que armar y mantener jerarquías 
usando htb_init resulta engorroso e imantenible con esquemas muy grandes o 
muy dinámicos. 

La capacidad de integrar htb-gen en htb_init(capacidad que fue removida de 
htb-gen para la versión 0.9 ya que nunca la use) permite crear jerarquías 
libremente con htb_init, y luego colgar de una de esas ramas una 
configuración de htb-gen.

> En cuanto a activar las reglas, un método que no parece estar
> mencionado en la configuración y que es el que yo creo que adoptaría
> sería colocar las reglas generadas en /etc/network/interfaces en
> sentencias "up" asociadas a las diferentes interfaces.

con "colocar las reglas generadas" a que te referis?, si es el comando 
up htb-gen tc_all estoy deacuerdo y se podría agregar a la doc, sobre todo al 
README.Debian, si lo que te referis es a colocar la salida de tc_stdout x ej, 
sería inmantenible tener que re-editar /etc/network/interfaces cada vez que 
cambias un toque htb-gen-rates.conf

> Finalmente, quisiera saber si estás aceptando parches cosméticos
> (ortografía, redacción, etc.), 

totalmente :-), en el TODO de htb-gen-0.8.4 se puede leer:
"-Someone correct my ofensive english along doc/scripts"

(probablemente hasta ofensive este mal escrito,...googling... sí, está mal 
escrito: es offensive)

> y si tendrías el paquete .deb fuente 

estem... te adjunto lo que sería mi paquete ".deb fuente" :-), es un script y 
se usa parado en el home del repo de htb-gen, y me facilita la creación de 
paquetes en cada release, de hecho si haces un pull[3] del repositorio de 
htb-gen lo vas a encontrar bajo el directorio "scripts/"

> disponible y si te interesaría que mantuviera un paquete de htb-gen
> oficial para Debian basado en el tuyo si eventualmente llego a
> aprender lo suficiente del tema de htb como para hacerme cargo de un
> paquete de htb-gen.

Absolutamente, bienvenido sea! :-D

[1]http://lartc.org/howto/lartc.qdisc.classful.html
[2]http://lartc.org/howto/lartc.adv-qdisc.ingress.html
[3]git-clone http://www.lugmen.org.ar/~luciano/git-repo/htb-gen/.git

-- 
Luciano

Attachment: debian-pkg.sh
Description: application/shellscript

Responder a