Configurar OpenWRT para QoS con Asterisk

WRT54GEn una centralita IP, sobre todo si usas proveedores IP, es fundamental tener un sistema de QoS (Calidad del Servicio, en inglés), que regule el tráfico de/hacia Internet, y priorice el tráfico importante del que no lo es tanto.

De nada sirve (aunque ayuda) tener una conexión de 20 “megas” si, cuando un usuario de la red enchufa el bittorrent, tu interlocutor se convierte en Robocop. Por ello, la principal función del router será discriminar los paquetes que salen (y llegan) de Internet, en distintas clases, de forma que los pertenecientes a las clases con alta prioridad salgan los primeros, y los menos importantes salgan cuando puedan o, directamente, no salgan. Que un email tarde 20 segundos más en enviarse es un problema menor. Que no te escuchen, o te escuchen mal, es inaceptable.

En el mercado hay multitud de dispositivos que permiten hacer QoS. Routers Cisco, HP, Dell, y un largo etcétera. En la mayoría de casos, caros, muy caros. Si he de ser sincero, debo decir que no tengo experiencia con ningún Router “con mayúscula”. Amigos, la pela es la pela.

Sigue leyendo…

OpenWRT

OpenWRT es una distribución linux, que trabaja en sistemas embebidos. El nombre le viene porque inicialmente se desarrollo para los WRT54G de Linksys. Existen otras distribuciones, DD-WRT, la de Sveasoft, que incorporan mejoras que no vienen con el firmware de fábrica de estos routers.

La principal diferencia de OpenWRT, y por lo que me gusta tanto, es que es modular. Puedes empezar por un sistema super-básico, que solo tenga un servidor ssh y las utilidades línux principales (ls, cd, find, grep, etc), e ir incorporando aplicaciones a través de su sistema de paquetes, el ipkg.

Objetivo

La idea será disponer de un router bueno y barato (no hace falta que sea bonito), que redireccione el tráfico SIP/RTP a nuestra centralita basada en Asterisk, y que priorice este tráfico para consiguir la máxima calidad de voz.

Requisitos previos

  1. Conexión a internet, ADSL o Cable.
  2. Dirección IP estática. No es estrictamente necesario, pero evitas problemas (parte de nuestro objetivo)
  3. El modem/router ADSL configurado en “monopuesto”. Esto es, el “router” ADSL se convertirá en un “módem caro”, ya que solo hará de puente entre la línea ADSL y nuestro router con OpenWRT.

En los ejemplos usaremos las siguientes direcciones IP y redes:

  1. IP pública proporcionada por nuestro ISP: 1.2.3.4. Máscara de subred 255.255.255.0. El modem ADSL tendrá la IP 1.2.3.1.
  2. Nuestro router con OpenWRT tendrá la IP pública en su interfaz WAN (1.2.3.4), y la IP privada 192.168.1.1 (máscara de red 255.255.255.0) en su interfaz LAN.
  3. Asterisk estará en 192.168.1.250.

Flasheando el router

AVISO: Este es un proceso delicado, y seguramente anule la garantía del router. No me hago responsable.

Descargamos la imagen correspondiente a nuestro modelo de router de http://downloads.openwrt.org/whiterussian/newest/micro/. Entramos en el interfaz web del router, buscamos la sección del Firmware Upgrade, subimos la imagen, rezamos 3 “padrenuestros” y cuando deje de parpadear la luz de Power, estaremos listos para empezar.

Accediendo al router por primera vez

De mano, solo está activado el servidor telnet, ya que no hay ninguna clave definida. Accedemos al router, establecemos la clave, y reiniciamos para que se arranque el servidor SSH:

$ telnet 192.168.1.1
$ passwd
Changing password for root
Enter the new password (minimum of 5 characters)
Please use a combination of upper and lower case letters and numbers.
Enter new password:
Re-enter new password:
Password changed.
$ reboot

Configurando el interfaz WAN

Con este firmware, algunos parámetros se almacenan en una memoria no volatil, la NVRAM. Aquí configuraremos el interfaz WAN.

$ nvram set wan_proto=static
$ nvram set wan_ipaddr=1.2.3.4
$ nvram set wan_netmask=255.255.255.0
$ nvram set wan_gateway=1.2.3.1
$ nvram set wan_dns=80.58.0.33
$ nvram set wan_hostname=MiRouter
$ nvram commit
$ reboot

Es importante hacer el “commit” ya que de otra manera, no se guardan los cambios. Si todo va bien, después de reiniciar el router, deberíamos poder acceder ya a internet desde los equipos de la red local.

Firewall y QoS

El siguiente paso será instalar un set de scripts para configurar tanto el firewall (con el port forwarding) como el QoS.

$ ipkg update
$ ipkg install qos-scripts

Editamos el fichero (con vi) /etc/config/firewall. Añadimos estas líneas para redirigir el tráfico SIP (5060), IAX (4569) y RTP (10000-20000) a nuestro Asterisk:

# SIP
forward:proto=udp dport=5060:192.168.1.250
# IAX
forward:proto=udp dport=4569:192.168.1.250
# RTP
forward:proto=udp dport=10000-20000:192.168.1.250

Para configurar el QoS, nos basaremos en el fichero /etc/config/qos, pero antes una breve explicación de cómo funciona.

En la primera parte, debemos indicar las velocidades de subida y bajada de nuestra conexión, en kbps, pero quitando un 10%. Este margen es necesario para mejorar la eficiencia del algoritmo de clasificación, y que un “burst” de paquetes no lleguen nunca a saturar la velocidad real de la línea.

Para una ADSL de 3Mb/300k, unos valores de 220 para upload y 2300 para download funcionan bien. Hay que tener encuenta la sobrecarga del protocolo ATM, yo lo calculo así:

  • 300 kbps en ATM
  • 300/10 kilobytes en ethernet (30KB/s)
  • 30 * 8 kilobits en ethernet (240kbps)
  • 240/1.10= 218kbps, después de quitarle el 10%. Redondeando, 220.

En la segunda parte (RULES), definimos las reglas de clasificación. Básicamente añadiremos esta regla justo después de las reglas referentes al edonkey y bittorrent:

config classify
option target "Priority"
option proto "udp"
option ports "5060,4569,10000-20000"

Hacemos otro reboot, y estamos listos

Paquetes adicionales

En mis instalaciones añado también el paquete snmpd, para monitorizar el tráfico entrante y saliente en tiempo real, y comprobar si el QoS está funcionando. Como cliente windows, el SNMP Traffic Grapher va muy bien.

Para activar la Wireless, necesitaréis el paquete “nas”, y configurar las variables wl0_*:

$ nvram set wl0_akm="psk psk2"
$ nvram set wl0_mode=ap
$ nvram set wl0_ssid=MiRedWireless
$ nvram set wl0_wpa_psk=MiClaveWPA
$ nvram set wl0_wep=disabled
$ nvram set wl0_channel=7
$ nvram set wl0_crypto=aes+tkip
$ nvram commit
$ reboot

Otro paquete interesante es el “tinc”, para crear VPNs entre sedes.

Conclusión

No hace falta un desembolso importante para tener un buen router, control de ancho de banda, firewall, estadísticas snmp, wireless, VPN, etc, etc…. Incluso puedes instalar el asterisk en el propio router, aunque esto ya es pasarse jeje

Julián J. M.

Escrito por julianjm el 28/04/2008. |
Tags: , , ,

17 Comments »

  1. qué cabeciza que te ha dao el señor!!!!

    muy ilustrativo, sí señor… :)

    Comment by paco SPAIN Windows XP Mozilla Firefox 2.0.0.14 — 28 April 2008 @ 22:05

  2. […] Sigue leyendo… (more…) […]

    Pingback by oriolrius lifestream » Configurar OpenWRT para QoS con Asterisk UNITED STATES WordPress 2.2 — 29 April 2008 @ 9:15

  3. alguna razón en especial para no usar kamizaze?? mala documentación?

    Comment by paco SPAIN Windows XP Mozilla Firefox 3.0b5 — 4 May 2008 @ 17:48

  4. Ninguna razón de peso. Simplemente que el manual es para Whiterussian, funciona bien, y una vez que haces la instalación te olvidas de él. Tengo equipos con uptime de varios meses, y siguen funcionando como el primer día:

    08:47:20 up 72 days, 21:42, load average: 0.15, 0.21, 0.17

    El Kamikaze, en lugar de NVRAM lo guarda todo en el sistema de ficheros. Además, soporta routers ADSL con chip AR7 (aunque aún en fase beta), con lo que te ahorras otro cacharro adicional (el modem adsl).

    Cuando se estabilice, comentaré experiencias ;)

    Comment by julianjm SPAIN Linux Mozilla Firefox 3.0b5 — 5 May 2008 @ 8:49

  5. Hay una distribución del WRT para los que somos mas torpes que puede servir para hacer lo mismo, se llama Tomato y la podéis encontrar y ver ejemplos de pantallas en http://www.polarcloud.com/tomato

    Comment by Antonio SPAIN Windows XP Mozilla Firefox 2.0.0.14 — 4 June 2008 @ 14:15

  6. Hola Julian
    esta muy interesante el tema.
    si es posible explicar la instalación de
    SNMP Traffic Grapher

    saludos

    Comment by Tallerws NICARAGUA Windows XP Mozilla Firefox 2.0.0.14 — 5 June 2008 @ 15:03

  7. Que paso Julian
    responde

    Comment by Tallerws NICARAGUA Windows XP Internet Explorer 6.0 — 11 July 2008 @ 15:43

  8. Jeje, qué has hecho todo este mes? no has tenido un momento para buscar en Google? :)

    Cada versión de WRT ordena los interfaces de manera distinta, asi que para averiguar el MIB correspondiente al interfaz vlan1 (WAN), tendrás que usar algo como esto:
    http://www.wtcs.org/snmp4tpc/getif.htm

    Comment by julianjm SPAIN Linux Mozilla Firefox 2.0.0.11 — 11 July 2008 @ 21:28

  9. Estoy usando dd-wrt y tiene la interfaz web para configurar QoS :)

    En algún momento que tengo otro cacharro probaré OpenWRT para probar.

    Comment by RazaMetaL ECUADOR Debian GNU/Linux Mozilla Firefox 3.0 — 4 August 2008 @ 0:53

  10. RazaMetal… Tiene interfaz web, pero es más flexible editando el fichero /etc/config/qos, porque además de configurar cada uno de los protocolos/puertos que quieras pririzar, puedes tocar la definición de cada “clase”.

    Además, y esto es válido para los dos sistemas, es MUY IMPORTANTE el orden en el que aparecen las reglas. Sobre todo si hay un asterisk por el medio, hay que empezar con los protocolos/puertos más restrictivos (bulk), ya que si empiezas priorizando, por ejemplo, los puertos 10000 al 20000 (Priority), si algún programa P2P los utiliza, se quedarán con esa prioridad aunque posteriormente tuvieses una regla que los pusiese a Bulk ;)

    Echale un vistazo a:

    iptables -t mangle -L -v

    Comprueba que lo que tienes configurado en el interfaz web, coincide con la configuración del iptables ;)

    Comment by julianjm SPAIN Linux Mozilla Firefox 3.0.1 — 4 August 2008 @ 7:44

  11. Gracias Julian por la aclaración.

    Comment by RazaMetaL ECUADOR Debian GNU/Linux Mozilla Firefox 3.0 — 4 August 2008 @ 15:07

  12. Hola y gracias Julián por tu sitio.

    ¿Podrías hacer otro artículo igual que este pero con el DDWRT?

    Llevo varias semanas haciendo pruebas y no consigo mucha calidad que digamos.

    Gracias de nuevo.

    Comment by josema SPAIN Windows XP Mozilla Firefox 2.0.0.18 — 2 December 2008 @ 22:40

  13. Josema, en dd-wrt solo tienes que indicar el ancho de banda y luego definir las reglas.. en lugar de a mano, mediante el interfaz web… Solo tienes que tener en cuenta que el orden importa.

    Si por ejemplo defines en primer lugar como prioritario el tráfico de los puertos 10000-20000, y a continuación filtras el contenido P2P como Bulk, tendrás problemas, porque ya que mucho tráfico Bulk se clasificará como Prioritario, al estar esa regla en primer lugar.

    De cualquier modo, mi recomendación es que pruebes openwrt ;)

    Comment by julianjm SPAIN Ubuntu Linux Mozilla Firefox 3.0.4 — 4 December 2008 @ 14:03

  14. Hola Julian, tengo un ddwrt, con qos, quiero configurar para que priorize el trafico por sip hacia un telefono SPA942 , lo he configurado pero no se si funciona..

    algun pequeño manualillo para los torpes..

    salu2

    Comment by aren SPAIN Mac OS X Mozilla Firefox 3.0.7 — 13 March 2009 @ 18:23

  15. Aren, añade una regla al principio. Ponle como filtro la IP interna del SPA y mándalo a la clase Priority.

    Para comprobar que funciona:
    1) Sin la regla de QoS…. haz una llamada, genera tráfico saliente (sube un archivo por FTP a algún sitio, o abre el emule y/o bittorrent)… Deberías tener problemas de audio (sobre todo con quién estés hablando)
    2) Repite pero esta vez activando la regla de QoS…

    Ahí deberías ver la diferencia.

    Julian.

    Comment by julianjm SPAIN Ubuntu Linux Mozilla Firefox 3.0.7 — 13 March 2009 @ 19:34

  16. Estoy haciendo pruebas con el firewall de Cisco ASA 5505 y lo de poner un módem en monopuesto ya no es tan sencillo. Ahora las ADSL de Timofónica son pseudoestáticas (dinámicas que mantiennen la IP, previo pago) y no tengo narices a poner ningún router en monopuesto.
    Espero que le sea útil a álguien.

    Domingo

    Comment by domingo SPAIN Windows XP Internet Explorer 6.0 — 15 March 2009 @ 9:02

  17. Hola a todos espero me puedan entender: NECESITO AYUDA URGENTE

    tengo un pequeño problema con la configuracion de mi router yo ya configuré el internet inalambrico el wan y todo lo demas pero mi problema esta cuando configuro para restringir el ancho de banda.

    Yo necesito poner la cantidad de ancho de banda en bajada en numeros (kbps) y no ponerlo bulk, exempt. standart,premium etc yo tengo la version dd-wtr v23 sp2/quiasame falta hacer algun cambio y necesito porfavor alguien que me ayude a realizar dicha confuiguracion ya que CUANDO CONFIGURO CON ESTOS PARAMETROS YA PREDEFINIDOS (bulk,standart,premium,exempt,…etc)nisiquiera con eso puedo lograr darle menos ancho de banda osea en pocas palabras no funciona tampoco con eso porque despues hago una medicion de velocidad o un pineo recursivo al dns y da lo mismo.

    Quisas este haciendo algo mal, eso es un hecho por ello quisieta que me orienten porfavor o si tubieran alguien algun msn que me pueda agregar para compartir experiencias seria genial mi correo es: seus.sagitario@hotmail.es ó sino silverrc@hotmail.com, si alguien desee ayudarme quisas lo pueda hacer via acceso remoto usando el teamviewer lo agradeceria mucho…gracias

    Comment by Marco Medina Lazaro Windows XP Mozilla Firefox 3.0.8 — 21 April 2009 @ 16:08

RSS feed for comments on this post. | TrackBack URI

XHTML ( Puedes usar estas etiquetas): <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong> .