OpenMandriva: Mageia (Mageia 9) 20/Agosto/2023 - Anuncio, Descargas.
Blogdrake recomienda descargar las imágenes de instalación (iso) vía torrent para evitar corrupción de datos, aprovechar mejor su ancho de banda y mejorar la difusión de las distribuciones.
Trasteando con QoS. Navegar rápido con el emule puesto.
Me pasaba una cosa típica de la gente que usaba amule y demas sofware p2p. Que para navegar va mas lento que el caballo del malo.
Pues me entere de que existía una cosa llamado QoS priorización de servicio el día que mi ISP ONO, me capó la conexión de 4Mb para que el emule no pudiese bajar a más de 80 kb/s. Pensé que podría hacer lo mismo en mi linux, pero en vez de capar, priorizar el tráfico que para mi era más importante.
Primeramente busque programas que hiciesen eso y de todo lo que leí, el que me pareció mejor fue "wondershapper" pero tras configurarlo los resultados fueron menos de los esperado. Sabía que no iba a ser la panacea pero esperaba algo mas.
Seguí buscando información e irremediablemente acababa entre otras en esta paginas web
Aquí explica todo lo necesario, pero otra cosa diferente es enterlo y saber llevarlo a cabo. No soy informático.
Finalmente en Bulma http://bulma.net/body.phtml?nIdNoticia=2084 y en este archivo pdf http://www.redes-linux.com/manuales/ancho_banda/filter_qos.pdf encontré algo que me permitio trastear.
Concretamente copie el script de la página 31(del documento,pag 35 del archivo pdf) y lo adapte a mi conexión y necesidades quedándome algo así:
#!/bin/bash
echo "Arrancando QoS"
# 10 -> ssh,syn,DNS,ipv6 (40kbits) --> PRIO 1
# 11 -> smtp,pop3,imap,news (1kbits) --> PRIO 2
# 12 -> http,https,ftp (98kbits) --> PRIO 3
# 13 -> emule... (10kbits) --> PRIO 4
MAX1=100
MAX2=140
MAX3=170
IPT=/sbin/iptables
TC=/sbin/tc
IF_EXT="eth0"
$TC qdisc add dev $IF_EXT root handle 1: htb default 13
$TC class add dev $IF_EXT parent 1: classid 1:1 htb rate ${MAX3}kbit ceil ${MAX3}kbit
$TC class add dev $IF_EXT parent 1:1 classid 1:10 htb rate 40kbit ceil ${MAX1}kbit prio 1
$TC class add dev $IF_EXT parent 1:1 classid 1:11 htb rate 1kbit ceil ${MAX3}kbit prio 2
$TC class add dev $IF_EXT parent 1:1 classid 1:12 htb rate 98kbit ceil ${MAX2}kbit prio 3
$TC class add dev $IF_EXT parent 1:1 classid 1:13 htb rate 10kbit ceil ${MAX1}kbit prio 4
$TC qdisc add dev $IF_EXT parent 1:10 handle 100: sfq perturb 10 quantum 1500
$TC qdisc add dev $IF_EXT parent 1:11 handle 110: sfq perturb 10 quantum 1500
$TC qdisc add dev $IF_EXT parent 1:12 handle 120: sfq perturb 10 quantum 1500
$TC qdisc add dev $IF_EXT parent 1:13 handle 130: sfq perturb 10 quantum 1500
$TC filter add dev $IF_EXT parent 1:0 protocol ip prio 1 handle 1 fw classid 1:10
$TC filter add dev $IF_EXT parent 1:0 protocol ip prio 2 handle 2 fw classid 1:11
$TC filter add dev $IF_EXT parent 1:0 protocol ip prio 3 handle 3 fw classid 1:12
$TC filter add dev $IF_EXT parent 1:0 protocol ip prio 4 handle 4 fw classid 1:13
#Empezamos con el marcaje de paquetes!!!
# ICMP
$IPT -t mangle -A PREROUTING -p icmp -j MARK --set-mark 1
$IPT -t mangle -A PREROUTING -p icmp -j RETURN
$IPT -t mangle -A OUTPUT -p icmp -j MARK --set-mark 1
$IPT -t mangle -A OUTPUT -p icmp -j RETURN
# SSH
$IPT -t mangle -A PREROUTING -p tcp --dport 22 -j MARK --set-mark 1
$IPT -t mangle -A PREROUTING -p tcp --dport 22 -j RETURN
$IPT -t mangle -A OUTPUT -p tcp --dport 22 -j MARK --set-mark 1
$IPT -t mangle -A OUTPUT -p tcp --dport 22 -j RETURN
#HTTP & HTTPS
$IPT -t mangle -A PREROUTING -p tcp --dport 80 -j MARK --set-mark 2
$IPT -t mangle -A PREROUTING -p tcp --dport 80 -j RETURN
$IPT -t mangle -A PREROUTING -p tcp --dport 443 -j MARK --set-mark 2
$IPT -t mangle -A PREROUTING -p tcp --dport 443 -j RETURN
#AMSN
$IPT -t mangle -A PREROUTING -p tcp --dport 1863 -j MARK --set-mark 2
$IPT -t mangle -A PREROUTING -p tcp --dport 1863 -j RETURN
#FTP
$IPT -t mangle -A PREROUTING -p tcp --dport 20:21 -j MARK --set-mark 2
$IPT -t mangle -A PREROUTING -p tcp --dport 20:21 -j RETURN
$IPT -t mangle -A OUTPUT -p tcp --dport 20:21 -j MARK --set-mark 3
$IPT -t mangle -A OUTPUT -p tcp --dport 20:21 -j RETURN
#POP3
$IPT -t mangle -A PREROUTING -p tcp --dport 110 -j MARK --set-mark 2
$IPT -t mangle -A PREROUTING -p tcp --dport 110 -j RETURN
#IMAP
$IPT -t mangle -A PREROUTING -p tcp --dport 143 -j MARK --set-mark 3
$IPT -t mangle -A PREROUTING -p tcp --dport 143 -j RETURN
#SMTP
$IPT -t mangle -A PREROUTING -p tcp --dport 25 -j MARK --set-mark 2
$IPT -t mangle -A PREROUTING -p tcp --dport 25 -j RETURN
$IPT -t mangle -A OUTPUT -p tcp --dport 25 -j MARK --set-mark 2
$IPT -t mangle -A OUTPUT -p tcp --dport 25 -j RETURN
#DNS
$IPT -t mangle -A PREROUTING -p udp --dport 53 -j MARK --set-mark 1
$IPT -t mangle -A PREROUTING -p udp --dport 53 -j RETURN
$IPT -t mangle -A OUTPUT -p udp --dport 53 -j MARK --set-mark 1
$IPT -t mangle -A OUTPUT -p udp --dport 53 -j RETURN
# TCP con el bit SYN activado (principio de conexión)
$IPT -t mangle -I PREROUTING -p tcp --syn -j MARK --set-mark 1
$IPT -t mangle -I PREROUTING -p tcp --syn -j RETURN
#AMULE
#$IPT -t mangle -A OUTPUT -m owner --cmd-owner amule -j MARK --set-mark 4
$IPT -t mangle -A PREROUTING -p tcp --dport 4662 -j MARK --set-mark 4
$IPT -t mangle -A PREROUTING -p tcp --dport 4662 -j RETURN
$IPT -t mangle -A OUTPUT -p tcp --dport 4662 -j MARK --set-mark 4
$IPT -t mangle -A OUTPUT -p tcp --dport 4662 -j RETURN
$IPT -t mangle -A PREROUTING -p tcp -m ipp2p --ipp2p -j MARK --set-mark 4
$IPT -t mangle -A PREROUTING -p tcp -m ipp2p --ipp2p -j RETURN
$IPT -t mangle -A OUTPUT -p tcp -m ipp2p --ipp2p -j MARK --set-mark 4
$IPT -t mangle -A OUTPUT -p tcp -m ipp2p --ipp2p -j RETURN
#SKYPE
#$IPT -t mangle -A OUTPUT -m owner --cmd-owner skype -j MARK --set-mark 1
$IPT -t mangle -A PREROUTING -p udp --dport 40830 -j MARK --set-mark 1
$IPT -t mangle -A PREROUTING -p udp --dport 40830 -j RETURN
$IPT -t mangle -A OUTPUT -p udp --dport 40830 -j MARK --set-mark 1
$IPT -t mangle -A OUTPUT -p udp --dport 40830 -j RETURN
#IAX
#$IPT -t mangle -A PREROUTING --dport 4569 -j MARK --set-mark 1
#$IPT -t mangle -A PREROUTING --dport 4569 -j RETURN
#$IPT -t mangle -A OUTPUT --dport 4569 -j MARK --set-mark 1
#$IPT -t mangle -A OUTPUT --dport 4569 -j RETURN
#Tráfico en general
$IPT -t mangle -A PREROUTING -j MARK --set-mark 3
$IPT -t mangle -A OUTPUT -p tcp -j MARK --set-mark 3
$IPT -t mangle -A OUTPUT -p tcp -j RETURN
#Fin script
Lo que se hace es crear varios "carriles de trafico" con diferentes prioridades y asignar cada tipo de tráfico a un carril. Si un carril esta libre puede ocupar el de priordad superior siempre y cuando este no tenga tráfico. Con MAX se marca el ancho de banda máximo para un tipo de tráfico.
Se pueden marcar los paquetes que corresponden a los programas p2p con la opcion ipp2p, por los puertos o protocolos. La opcion "owner --cmd-owner" que redirige el tráfico debido a un programa no fui capaz de hacerlo funcionar porque había que parcher el kernel con no se que movida y no fui capaz.
Total que ejecute como root el script qos.sh y el resultado fue sorprendente. De un ping de 8000ms a google pase a 43ms con el amule puesto, por supuesto la velocidad del amule baja, y navegaba bien. Cuando dejaba de navegar el amule volvía a coger velocidad.
La pega era que al ejecutar el script me quedaba sin firewall, porque se iba a la mierda la configuracion de iptables hechas con firestarter. Vamos que cree un agujero de seguridad de tamaño de una catedral. A esto no he sido capaz de darle solución por lo que realmente no utilizo el script.
Con el script en todo caso conseguía regular el tráfico de subida pero el de bajado había que utilizar "imq" que tambien habia que parchear el kernel y ahi me quede.
Modifique el script de modo que se pudiese iniciar y parar como un servicio en el panel de control de mandriva. Pero claro el firewall con iptables se va al garete. También tenía pensado otro script que directamente descartase los paquetes del emule mediante la opcion "drop" para por ejemplo utilizar los programas de voz ip y que se pudiese activar o desactivar con una combinación de teclas.
Me parece un gran ventaja esto del QoS en linux con respecto a windows por ejemplo que lo tendría más complicado y sin embargo que yo tenga constancia apenas se utiliza para Pc de escritorio porque no hay ningun programa sencillo de utilizar. Y creo que todos utilizamos las redes p2p en mayor o menor medida.
Por ejemplo en Mac os X existe este programa http://www.faq-mac.com/bitacoras/brocolifresco/?p=81 que se puede configurar gráficamente todo, incluso sale las opciones de kazza, emule, etc...¿No hay nada asi para linux que no sean scripts?
Opino que una cosa asi sería muy útil para el rendimiento de una conexión y que se debería implantar por defecto en distribuciones como Mandriva.
Por último comentar que como podreis haber observado me he dedicado a dar palos de ciego mas que a otra cosa. Cualquier sugerencia, consejo, aclaración o crítica constructiva será bienvenida.
Usuario
# 14439 Firewall sigue activo.
Al ejecutar el script se añaden reglas a las iptables para la sesion. Se desactivaba el firewall cuando reseteaba las iptables para deshacer las reglas añadidas (al no saber quitar solo las hechas por el script). Podeis probarlo sin problemas ajustando los valores a vuestra velocidad de subida frente a las 150kb/s que tengo yo. Cuando reinicieis volvereis al estado inicial.
Todo es relativo.
Todo es relativo.
Usuario
# 61834 siempre tenemos la
Editado por un BOFH. Spammer a la vista
Usuario
# 24698 Gracias por el link SGaleano.
Me instalaré el programa mastershaper y comentaré los resultados obtenidos.
Saludos.
Todo es relativo.
Todo es relativo.
Usuario
# 28650 PREROUTING y OUTPOUT
Una duda:
Cuando el router linux debe hacer QOS, el marcado lo aplicamos en la cadena FORWARD únicamente.
Cuando lo hacemos en nuestro equipo, es realmente necesario realizar el marcado en PREROUTING y OUTPUT? No valdría con hacerlo en uno de los dos?
Usuario
# 28653 Veamos.
Si te has leído mi post original, verás que no soy un experto en esto del QoS. A ver si alguién que sepa realmente de esto de responde y me corrige la especulación siguiente.
Por lo que me enteré en su día cacharreando, prerouting y output no es exactamente lo mismo. Explicándotelo con mis palabras: el prerouting es la prioridad de un paquete en ser evaluado y entrar en una cola (la que sea) y el output es la prioridad una vez que el paquete ya está en su cola correspondiente.
Todo es relativo.
Todo es relativo.
Usuario
# 28665 te refieres a que la
te refieres a que la estructura de colas que hemos creado está en varios lugares internos diferentes? y que por eso hay que marcarlos según donde se encuentren?
No lo entiendo, porque un paquete que vaya hacia la salida pasará por el OUTPUT no?
Es más, la duda me surje porque tú mismo en tu ejemplo aplicaste el marcado en las dos cadenas (yo solo conocía el caso de filtrado en un router con respecto a otros pcs y se marca en FORWARD), y no lo haces en todos los casos! Eso es lo que me sorprende.
Por qué unos protocolos (la mayoría) se marcan en prerouting y output, y otros solamente en uno de los dos?
Sé de donde has sacado el script, y que lo adaptaste, pero tengo esa duda que no me deja dormir :)
Usuario
# 28751 He hablado con el autor
He hablado con el autor (sí, por mail) y esto es lo que me ha dicho:
"Hace muuucho tiempo que escribí este manual y he tenido que revisarlo porque no me acordaba :b . Como la máquina hace de router, utilizo la cadena PREROUTING para que marque todos los protocolos de las máquinas que vienen de la subred, y para aquellos protocolos que se utilizan también desde el propio router utilizo la cadena OUTPUT (como muy bien dices arriba).
Para el ejemplo de la pag 32, marco el DNS y el FTP para que priorice el tráfico FTP que permite que se actualice el sistema, y marco también el SSH porque desde el router lanzaba conexiones SSH a otros servidores. "
Ahora ya está todo claro :D
Usuario
# 28760 Pues ya sabes más que yo.
Aclaración. Cuando digo que no controlaba de algo, no es falsa humildad. Es que de veras que no controlo.
Ahora que me he refresacado la memoria creo que añadí output a las aplicaciones protocolos que necesitaban envios. Que enviaban
información.
Pero si ya has hablado con el autor y te lo ha aclarado pues mejor. Has tenido un tutor de lujo.
Me he dado cuenta que la gente que maneja realmente estos temas son gente que se pueden contar con los dedos de las manos y los pies. Y la mayoría estarán fichados por los ISP me da la impresión. En todo caso, agradecer a Joan Fuster Monzó que es el autor del pdf al que haces referencia y del cual adapte el script, las molestias tomados en la creación de documentación de calidad.
Si te sigue picando la curiosidad tienes abundante información de calidad aquí. En la sección de ancho de banda tienes más información.
Todo es relativo.
Todo es relativo.