OpenVPN y el codec g729

Para los que trabajamos con telefonía IP es bien conocido que el codec g729 es uno de los más populares debido principalmente a que comprime el audio a 8 kbps lo cual permite un uso eficiente del ancho de banda disponible.  Aunque existen otros que realizan la misma función y al mismo tiempo son gratis (ej. Speex), con mucha frecuencia la única opción es g729 ya que es el más soportado por los proveedores y es el que viene incluído en la gran mayoría de los equipos de hardware usados en voz sobre IP.

Pues bien, hace unos días le compré a Digium una licencia de g729 para Asterisk, la cual brinda un máximo de dos registros posibles.  La instalación fluyó perfectamente, hice las pruebas pertinentes y efectivamente pude usar el codec satisfactoriamente.  Luego dejé a un lado el asterisk y le apliqué una actualización al sistema CentOS y más adelante comencé a hacer pruebas de enrutamiento con OpenVPN instalado en el mismo servidor, lo cual condujo a varios reinicios del servicio OpenVPN y del propio servidor.  Finalmente, todas las rutas funcionaban como se esperaba, pero … las llamadas ya no funcionaban.

Al revisar las trazas noté un par de aspectos relevantes: primero, la interfaz de red eth0, aparecia renombrada como eth1; segundo, la traza de las llamadas mostraba error de codec y el comando “g729 show licenses” en el CLI de Asterisk informaba que no encontró licencias válidas en el sistema ya que la existente tenía “incorrect host-id”.  Me las agencié para resolver el primer problema de lograr que volviera a nombrar la interfaz como eth0, pero aún así continuó el error.  Luego de contactar al soporte técnico de Digium, me informaron que el host-id de la licencia se calcula basado en:

  • Las direcciones MAC y los nombres de todas las interfaces de red presentes en el sistema (incluídas las virtuales de OpenVPN).

Como ya tenía las interfaces con sus nombres originales, entonces solo quedaba por revisar las MAC, la interfaz física no podía cambiar la suya, asi que solo quedaba la tap0 correspondiente a la VPN.  Luego de repetir un par de veces “service openvpn restart”  e  “ifconfig”  me di cuenta que openvpn asigna una nueva dirección MAC aleatoria a la interfaz virtual cada vez que se levanta el servicio, así que la solución consistía en lograr que siempre asigne la misma MAC.

Revisando un poco la documentación encontré que existe una forma de lograr esto y consiste en incluir en server.conf, client.conf o como se haya nombrado el archivo de configuración la siguiente directiva:

lladdr 56:37:67:A0:47:BC

donde el parámetro es por supuesto la MAC que se desee asignar.  Lo mejor es copiarlo de la última configuración válida generada disponible a través de “ifconfig” (hwaddr).

Aquí se los dejo y creo que pudiera aplicarse en otros casos más generales de servicios dependientes de la dirección MAC donde al mismo tiempo esté involucrada OpenVPN. Importante: según la documentación, este parámetro solo funciona en Linux, pero supongo que en Windows existan otros métodos de fijar la MAC de una interfaz virtual.

Anuncios

7 Responses to OpenVPN y el codec g729

  1. agidi says:

    Hola
    Interesante post,

    Abusando de la confianza, como te fue con las pruebas de g729 bajo OpenVPN?

    Estamos apunto de sacar varios aparatos telefonicos que soportan openvpn y g279 como el snom 821, y nos interesa saber que tanto crece la demanda de ancho de banda en una llamada, son los 8k del coden mas…. cuando del VPN? Como se porta? que comentarios tienes en tu experiencia?
    gracias por el post y la info
    saludos y éxito.

  2. Juan Pedro Barquin says:

    No tengo resultados cuantitativos del consumo de ancho de banda a través de la VPN pero en la práctica, contrario a lo que indica la lógica, esta mejora la calidad de las llamadas, incluso a través de enlaces más lentos. Al parecer la VPN incorpora chequeos que reducen la pérdida de paquetes, eso si, usa siempre la VPN con UDP, pues los paquetes TCP son mucho mayores y si se nota evidente pérdida de calidad.

  3. Juan Andres says:

    Hola buenas noches, interesante articulo.
    estoy empezando con asterisk, y me encuentro con el problema del nat, y el famoso “one way audio”, vamos que yo escucho, pero no me escuchan. Mi router donde tengo el asterisk, hace nat simetrico, y por lo que he oido no es demasiado facil que funcione bien. ¿Conectandote con la VPN te ha desaparecido todos los problemas de NAT?
    ¿Para en nat simetrico tienes algun otra solucion?

    mucha gracias

    • Juan Pedro Barquin says:

      Saludos Juan, el NAT simétrico presenta problemas al usar STUN en los clientes debido a que el paquete de respuesta viene con una dirección diferente de a donde se envió inicialmente. En la parte del servidor en Asterisk usualmente se resuelve el one way audio colocando en sip.conf las lineas externip=x.y.w.z (donde x.y.w.z es la IP publica de tu servidor) y localnet=255.255.255.0 (o la mascara de tu red) de forma que en los mensajes que envie hacia direcciones externas se use esta IP como origen. Asi todo el tema del NAT y SIP es bien macabro.

      Con la VPN se evitan todos los problemas relacionados con NAT pues todos los clientes estan en la misma LAN pero precisamente requiere que todos esten conectados a la VPN, no puedes tener usuarios externos.

      • juan andres says:

        hola buenos dias.
        Te cuento mi caso por si te suena de algo.
        yo intento conectar desde un iphone en 3G, a un pc que esta en la misma que red que asterisk y que tienen un router con NAT simetrico. El iphone escucha lo que dice el pc, pero el pc no escucha lo que se dice en el iphone. Lo de externip i localnet, ya lo tengo en el fichero sip.conf. El iphone tiene cambiado el AP a movistar.es, que se supone que es el mismo que tienen lo usb 3G. ¿Se te ocurre quien es el culpable? ¿no envia bien el audio el iphone? ¿o no sabe recibir el pc por culpa del nat simetrico?
        muchas gracias por tu tiempo.

  4. michael says:

    Hola buena tu blog, te queria pedir un favor si tienes el manual de como configurar el open vpn, quiero configurar un server vpn para que en una interface este conectada una central ip avaya y desde sedes remotas se puedan registrar 6 telefonos ip,,, dime tienes alguna idea si funciona bien…..

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: