Configurar QoS en una red de VoIP
Es áltamente recomendable separar físicamente las redes de VoIP y las redes de datos para evitar la saturación de tráfico que puede provocar cortes en el audio o algún ruido extraño de manera aleatoria al intentar completar el trozo de audio que falta entre dos tramas RTP.
No siempre esto es posible, y debemos recurir a una técnica conocida aunque no siempre muy bien dominada por muchos administradores de redes llamado QoS (Calidad de Servicio).
Este QoS permite establecer colas de paquetes en cuanto llegan y permitir acelerar aquellos paquetes que tengan más prioridad lo que se establece generalmente por una «etiqueta».
Los terminales IP permiten, por lo general, establecer dicha etiqueta para que los paquetes que salgan del teléfono la lleven adosada y pueda ser priorizada nada más salir, pero una vez que llega al switch o al router, éste lo procesa como un paquete más a no ser que tengamos priorizado dicho paquete. Cada switch o router tiene su propio interfaz de administración de QoS, por lo que tendremos que aprender a utilizarlo si queremos poder utilizar QoS en nuestra red.
Una vez que llegan al servidor Asterisk, si este servidor tiene más servicios configurados, recibirá todos los paquetes por igual, a no ser que configuremos el QoS en nuestro Asterisk.
Para hacer esto, utilizaremos la herramienta ‘traffic control’ también conocida como ‘tc’.
Para poder crear las colas de prioridades, lo primero es saber qué tipos de prioridades podemos configurar. Hay 16 tipos diferentes:
1: 0x00: no QoS is set -> to 3rd queue (2)
2: 0x02: Mimimize Monetary Cost (MMC) (2)
3: 0x04: Maximize Reliability (MR) (2)
4: 0x06: MMC + MR (2)
5: 0x08: Maximize Throughput (MT) (2)
6: 0x0a: MT + MMC (2)
7: 0x0c: MT + MR (2)
8: 0x0e: MT + MR + MMC (2)
9: 0x10: Minimize Delay (MD) (1)
10: 0x12: MD + MMC (1)
11: 0x14: MD + MR (1)
12: 0x16: MD + MMC + MR (1)
13: 0x18: MD + MT (1)
14: 0x1a: MD + MT + MMC (1)
15: 0x1c: MD + MT + MR (1)
16: 0x1e: MD + MT + MR + MMC (0)
De todas estas, las señaladas en negrita son las que suelen implementar los terminales IP, por lo que tendremos que configurarlas en las colas que vamos a crear:
tc qdisc add dev eth1 parent 1:1 handle 10: sfq limit 3000
tc qdisc add dev eth1 parent 1:2 handle 20: sfq
tc qdisc add dev eth1 parent 1:3 handle 30: sfq
Con esta configuración, crearemos una cola para unos 3000 paquetes como máximo y la mayoría de los paquetes irán por la cola número 3.
Si queremos que los paquetes IAX vayan por la primera cola, deberemos decirle que, todos los paquetes que provengan del puerto 4569, vayan por la cola número 1:
tc filter add dev eth1 protocol ip parent 1: prio 1 u32 match ip dport 4569 0xffff flowid 1:1
tc filter add dev eth1 protocol ip parent 1: prio 1 u32 match ip sport 4569 0xffff flowid 1:1
tc filter add dev eth1 protocol ip parent 1: prio 1 u32 match ip tos 0x10 0xff flowid 1:2
Y con esto, tendremos el protocolo IAX priorizado al máximo mientras todos los demás van por la cola menos prioritaria. Con el protocolo SIP y el RTP, pasaría lo mismo pero habría que cambiar de puertos a los definidos en sip.conf (por defecto al 5060) y en rtp.conf (por defecto entre el 10.000 y el 20.000).
Para poder ver unas estadísticas del tráfico, tan solo tenemos que ejecutar:
tc -s qdisc ls dev eth1
Si después de hacer estos cambios queremos dejarlo todo como estaba, (sin colas configuradas) únicamente tendremos que limpiarlas:
tc qdisc del dev eth1 root
Espero que esto os ayude cuando no podais separar las redes de VoIP y las de datos.
Enlace: http://www.tweako.com/qos_and_traffic_shaping_for_voip_users_using_iproute2_and_asterisk