
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:
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:
- openwrt-brcm63xx-generic-HG556a_A-jffs2-64k-cfe
- openwrt-brcm63xx-generic-HG556a_A-squashfs-cfe
- openwrt-brcm63xx-generic-HG556a_B-jffs2-64k-cfe
- openwrt-brcm63xx-generic-HG556a_B-squashfs-cfe
- openwrt-brcm63xx-generic-HG556a_C-jffs2-64k-cfe
- openwrt-brcm63xx-generic-HG556a_C-squashfs-cfe
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.
ok … vamos a probar el invento…
algún progreso para utilizar los puertos fxs del Huawei para no tener que hacer uso del ata? gracias
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.
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.
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.
Gracias PaKoP6 por la información.