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
debian-pkg.sh
Description: application/shellscript
