You are here

Un simple pero efectivo script QoS para todo el tráfico IAX de un host

Veo en Computer Tech Union, un maravilloso script para ofrecer calidad de servicio en el trafico IAX de un host en concreto:

Se ha probado este script y se notan grandes diferencias en conexiones DSL cutres aunque no se soluciona a la perfección. En las conexiones T1, la diferencia es enorme. Este script está pensado para el uso con comunicaciones IAX de servidor a servidor o con efectos limitados, un teléfono sip con el bit QoS 0x10 (minimizar latencia).

en Debian estable...

apt-get install iproute
nano qos.sh

#copiar esto en el script guardar y salir del programa
tc qdisc add dev eth0 root handle 1: prio priomap 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 0
tc qdisc add dev eth0 parent 1:1 handle 10: sfq limit 3000
tc qdisc add dev eth0 parent 1:2 handle 20: sfq
tc qdisc add dev eth0 parent 1:3 handle 30: sfq
tc filter add dev eth0 protocol ip parent 1: prio 1 u32 match ip dport 4569 0xffff flowid 1:1
tc filter add dev eth0 protocol ip parent 1: prio 1 u32 match ip sport 4569 0xffff flowid 1:1
tc filter add dev eth0 protocol ip parent 1: prio 1 u32 match ip tos 0x10 0xff flowid 1:2
tc filter add dev eth0 parent 1:0 protocol ip u32 match ip dport 4569 0xffff match ip dst a.b.c.d/32 classid 1:10

Asumiendo que estamos en el mismo directorio que nuestro programa:

chmod +x qos.sh
./qos.sh

Se asume que ETH0 es el interfaz externo
Se asume que a.b.c.d es la DIRECCION IP del servidor de VOIP hacia donde encaminamos el tráfico.

Este script instala 3 pipes diferentes. Permitirá siempre que el pipe 1:10 vaya antes del 1:20. Permitirá siempre que 1:20 vaya antes de 1:30. Entonces clasifica todo el tráfico que esté en el puerto 4569 (IAX) para meterlo en el grupo 1:10. Cualquier cosa que tenga el FLAG 0x10 QOS (minimizar latencia) se coloca en el grupo 1:20 (muchos teléfonos voip tienen esta opción solamente necesitamos activarla en el interfaz de los teléfonos). Entonces, finalmente, cada cosa que no fue emparejada va la última (esto es básicamente todo lo que no es voip).

La PRUEBA es simple. Mientras que tenemos una llamada IAX conectada, ejecutamos una de esas pruebas de velocidad. Mientras le echamos un vistazo a google earth (cantidad de ancho de banda). Antes de activar el script, tendremos un corte de 30 segundos en la conversación. Ahora ejecutamos el script y veremos la diferencia.
Dejar un comentario aquí, si el script ha funcionado

Para ver el script en acción:

watch tc -s qdisc ls dev eth0

Para quitar el script y volver a los ajustes por defecto:

tc qdisc del dev eth0 root
Asterisk: 
Qué te parece: 

Comments

Te hago una pregunta como modificas este escript para que controle el trafico de sip y iax.

 

desde ya muchas gracias.

Hola Federico,

Puede ser útil también para priorizar tráfico SIP, es el mismo concepto pero sustituyendo el puerto 4569 (usado por el protocolo  IAX) por el 5060 (que se suele usar en SIP). El flag 0x10 (minimizar latencia) continua siendo el mismo.

Saludos.

SIP se negocia por el puerto 5060 pero los datos cuando se hace una llamada son transmitidos por el rango UDP 10000-20000

Hola,

En la linea:

tc filter add dev eth0 parent 1:0 protocol ip u32 match ip dport 4569 0xffff match ip dst a.b.c.d/32 classid 1:10

Cuando se asume que a.b.c.d es la DIRECCION IP del servidor de VOIP hacia donde encaminamos el tráfico.
Yo entiendo que debo colocar esa linea por cada servidor asterisk que tenga ¿es asi? ejemplo si tengo 3 oficinas
Coloco en el servidor asteriskr de la oficina 1
match ip dst ip-branch2/32 classid 1:10
match ip dst ip-branch3/32 classid 1:10
Coloco en el servidor asteriskr de la oficina 2
match ip dst ip-branch1/32 classid 1:10
match ip dst ip-branch3/32 classid 1:10
Coloco en el servidor asteriskr de la oficina 3
match ip dst ip-branch1/32 classid 1:10
match ip dst ip-branch2/32 classid 1:10

Es asi?

Hola Adriana,

siento la respuesta tardía. Por lo que veo, si que me parece correcto.

Es este esquema en el servidor de cada oficina les pones las direcciones IP de los servidores que están en las otras dos oficinas.,

Por tanto, debería valerte.

Un saludo.

Hola porfa, quisiera que me ayudes, mira e construido mi script con reglas QoS para balancear la carga, pero no se en donde guardarlo y con que tipo de extension (si cabe el termino), y como hacer que se inicie en el arranque o cargarlo, te agradeceria mucho de tu ayuda. Gracias

Hola Carlos,

para que se cargue al inicio debes colocar el script en el directorio /etc/init.d, darle permisos de ejecución con el comando chmod +x nombredelficheroscript y finalmente ejecutar el comando sudo update-rc.d nombredelficheroscript defaults.

Cambia nombredelficheroscript por el nombre que tenga el fichero donde guardaste tu script. Guiño

Un saludo.