28 marzo, 2024
Asterisk sobre OpenWRT, configurado detrás de NAT, sobre Chaos Calmer para Huawei HG-556a.

Después de que nuestro amigo JJ, propusiera la configuración de Asterisk sobre OpenWRT, con NAT, he estado probando configuraciones diferentes del sistema.

Utilizando nuestro Asterisk como PBX y Zoiper para Windows y Android, como softphone, rápidamente, pude establecer comunicaciones entre varios equipos, con un resultado bastante bueno, pero, solamente de forma interna, es decir, entre equipos en la misma LAN.

Aunque el objetivo es tal y como se muestra en el escenario:

Escenario propuesto Asterisk sobre OpenWRT

Para ello, hemos utilizado una nueva compilación con: Asterisk 11 y para quien lo requiera o le apetezca probar: STUN y RTSP Proxy

Aquí el nuevo firmware para Asterisk sobre OpenWRT:

Aunque hoy día, muchas de las compañías actuales de telefonía, proponen tarifas con llamadas ilimitadas, (por un precio, claro), es posible que nuestra economía, no nos permitan dichas tarifas, así que vamos a montar una pequeña centralita, que nos permita hacer llamadas de forma gratuita o al menos con lo que ya tenemos.

Ahora, con esta configuración propuesta, podemos llamar/recibir desde el exterior, tanto si llamamos/recibimos desde nuestro móvil con tarifa de datos, (ip pública), o desde nuestro móvil conectado a la Wifi del lugar donde estemos, (softphone detrás de NAT).

Os cuento por encima, mi odisea al configurar.

He estado más de una semana de pruebas, sin conseguir, que se registraran las llamadas externas en el Asterisk, he mirado con TCPdump, nmap, Netstats, y alguna herramienta más, dónde estaba el problema.

Aplicando el principio filosófico “lex parsimoniae” o mejor conocida como “Navaja de Ockham”, que reza así: “En igualdad de condiciones, la explicación más sencilla suele ser la más probable”, ya he resuelto el problema, que no era otro que el puerto de registro.

Desconozco la red, pero conozco los servicios que me provee mi ISP a través de la fibra, y uno de ellos es VoIP.

El problema es que Asterisk, utiliza como puerto estándar UDP/5060, que corresponde a SIP, según el RFC 3261,  pero como es lógico, MI ISP TAMBIÉN, y además, sé que aplica QoS, (Calidad de Servicios), y una VLAN diferente a cada canal, Internet, VoIP, y si tuviera, VoD, (Video bajo Demanda), lo sé, porque yo he aplicado estas configuraciones a proyectos de CATV, es lo habitual y óptimo.

Así, que simplemente, cambiando el puerto UDP/5060 por otro, como por ejemplo UDP/5080, y según pruebas, cambiar o no, los puertos UDP/RTP del 8000 al 20000, por otros, como 21000 al 40000, tenemos solucionado el tema, así como aplicando a asterisk, la configuración específica para NAT. 

La configuración de Asterisk sobre OpenWRT.

Creamos en no-ip.com  , un nombre de host, que será nuestro router de ISP, (actualmente la inmensa mayoría de routers disponen de un apartado donde podemos actualizar esta configuración llamada Dynamic DNS, cada vez que arranca nuestro router), y que llamaremos en el ejemplo, myhost.ddns.net.

Sabemos que nuestro Openwrt, está definido como 192.168.1.2/24 y nuestro router de ISP como 192.168.1.1.

Vamos a /etc/asterisk y copiamos el fichero original sip.conf y creamos uno nuevo.

# cd /etc/asterisk

/etc/asterisk# cp sip.conf sip.conf.ori

/etc/asterisk# rm sip.conf

/etc/asterisk# nano sip.conf

Ya sé que con el comando mv, abreviaría, pero es para que se vea claro.

He implementamos la siguiente configuración:

[general]
nat=force_rport,comedia ; Esta línea es para que funcione Asterisk detrás de NAT.
directmedia=no ; Esta también.
bindport = 5080 ;Aquí definimos el puerto con el que queremos registrarnos en Asterisk.
udpbindaddr=0.0.0.0
externhost=myhost.ddns.net ;Aquí tu nombre de host que tienes como DDNS.
externrefresh=600
localnet=192.168.0.0/255.255.255.0 ;Aquí la red, con la que trabajas en este caso, 192.168.1.0/24
qualify=yes
context=default
srvlookup=yes
allowguest=no
alwaysauthreject=yes
dtmfmode=rfc2833
canreinvite = no


[plant-ipv6labs](!) ;Aquí definimos el nombre y las características de la plantilla para los usuarios SIP.
type=friend
host=dynamic
context=ext-ipv6labs ;Aquí definimos el nombre del contexto de las extensiones.
canreinvite=no
qualify=yes
disallow=all
allow=gsm
allow=ulaw
allow=alaw
allow=g729
allow=h263

[2000](plant-ipv6labs)
username=2000 ;nombre del usuario
secret=2000a ;password del usuario
callerid="Didac" <2000> ;Identificador de llamada
;mailbox=2000@myhost.ddns.net

[2001](plant-ipv6labs)
username=2001
secret=2001a
callerid="EXT 2001" <2001>

[2002](plant-ipv6labs)
username=2002
secret=2002a
callerid="EXT 2002" <2002>

[2003](plant-ipv6labs)
username=2003
secret=2003a
callerid="EXT 2003" <2003>

[2004](plant-ipv6labs)
username=2004
secret=2004a
callerid="EXT 2004" <2004>

Ahora, hacemos lo mismo con el fichero extensions.conf:

# cd /etc/asterisk

/etc/asterisk# cp extensions.conf extensions.conf.ori

/etc/asterisk# rm extensions.conf 

/etc/asterisk# nano extensions.conf

Y aplicamos la siguiente configuración:

[general]
static=yes
writeprotect=yes
autofallthrough=yes
clearglobalvars=no
priorityjumping=no

[default]
; Recibe lo que no tiene un contexto propio definido. 
; Rechaza todo por seguridad.
exten => _X.,1,Hangup(21)
exten => s,1,Hangup(21)

[ext-ipv6labs]
; Extensiones internas SIP 
exten => _2XXX,1,Dial(SIP/${EXTEN}) 
same => n,Hangup(16)

Ahora solamente queda re-arrancar, Asterisk:

#/etc/init.d/asterisk restart
Privilege escalation protection disabled!
See https://wiki.asterisk.org/wiki/x/1gKfAQ for more details.

Si quieres, que desaparezca ese misterioso mensaje, (es una medida de seguridad que no nos afecta, edita el fichero asterisk.conf y cambia  el flag  live_dangerously=yes).

Deberías saber, que Asterisk, tiene un CLI, que es con el que funcionaremos sobre OpenWrt, ya que sobre Luci, parece ser que, no es manejable en las actuales versiones, os refiero algunos comandos para empezar.

Para entrar a CLI de Asterisk:

#asterisk –vvvvr

Para recargar toda la configuración de asterisk, utiliza el comando:

OpenWrt*CLI> core reload

Para recargar la configuración SIP:

OpenWrt*CLI> SIP reload

Para ver los teléfonos definidos y cuales están registrados:

OpenWrt*CLI> sip show peers 

Para salir:

OpenWrt*CLI>quit

En cuanto a los clientes SIP, ya sean hardware en forma de Teléfono IP, o ATA, o bien sea un Softphone en forma de APP, hay muchos y variados, pero para las pruebas, he utilizado Zoiper.

Está disponible en http://www.zoiper.com/ , para las plataformas Windows, Linux, iOS, y Android.

Es sencillo de utilizar, creas una nueva cuenta e introduces:

Nombre de la cuenta: 2000

Host: myhost.ddns.net:5080

Nombre de Usuario:2000

Clave: 2000a

Y salvar, tendrás en tu Asterisk CLI, casi inmediatamente el siguiente mensaje:

-- Registered SIP '2000' at xxx.143.xxx.190:44496

Compruébalo con “sip show peers”:

OpenWrt*CLI> sip show peers
Name/username             Host                                     Dyn Forcerport Comedia    ACL Port     Status      Description
2000/2000                 xxx.143.xxx.190                          D  Yes        Yes            44496    Unmonitored
2001/2001                 (Unspecified)                            D  Yes        Yes            0        Unmonitored
2002/2002                 (Unspecified)                            D  Yes        Yes            0        Unmonitored
2003/2003                 (Unspecified)                            D  Yes        Yes            0        Unmonitored
4 sip peers [Monitored: 0 online, 0 offline Unmonitored: 1 online, 3 offline]

Da de alta un segundo softphone y a probar.

No se han tenido en cuenta, ni los mensajes de voz, las locuciones automáticas, ni las video-llamadas, simplemente una aproximación a Asterisk sobre OpenWrt en un Huawei HG-556a.

Si encontráis problemas, es muy útil el comando de Asterisk CLI, debug, os mostrará todo el tráfico y señalizaciones que envía y recibe el server.

Para activar el debug:

OpenWrt*CLI> sip set debug on

Para deshabilitarlo:

OpenWrt*CLI> sip set debug off

Espero os sea de ayuda.

6 comentarios en «Asterisk sobre OpenWRT. Configuración detrás de NAT con Chaos Calmer 15.05.1 para Huawei HG-556a.»

    1. Hola Andrés:
      Por ahora ninguna novedad. No hay liberado en formato GPL, el Broadcom xDSL driver.
      Si bien es cierto que hubieron algunos, o no están ya disponibles por violación de derechos de copyright, o han cerrado los repositorios por algún otro motivo.
      Tampoco están disponibles en el proyecto L.E.D.E.
      Sin embargo, si tienes noticias de algo que funcione, no dudes en comentarlo.
      Espero te sea de ayuda.

  1. muy bueno, ya lo tengo instalado en un router tp link, lo volvi a configurar , desde hace años estaba allí sin uso,
    quisiera saber si con las ddns puedo llamar a cualquier lugar por internet

    saludos

    me gustaría un manual de ddns.

  2. Hola. Para los puertos FXS integrados el driver (https://github.com/pgid69/bcm63xx-phone) al menos parece que funciona perfectamente con el HG55VDFA VER.C (https://github.com/pgid69/bcm63xx-phone) en Barrier Breaker 14.07

    Los otros modelos como el HG56BZRB VER.A también usan el mismo chip VoIP Le88266DLC por lo que igual podría servir.

    El driver en sí funciona con LEDE 17 y Asterisk 1.8, 11 y 13 aunque hay que hacer algunos ajustes en la configuración del kernel.

    Lo que ya no he encontrado más información es si funcionan en Chaos Calmer 15.05.1 o posteriores con el H556a que sería lo interesante pero si al menos se tiene la opción de usarlos en Barrier Breaker 14.07 ya es mejor que nada.

    Saludos.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Uso de cookies

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.plugin cookies

ACEPTAR
Aviso de cookies