Asterisk y el NSLU2

Hace tiempo que tenía intención de publicar algo a este respecto, ya que llevo bastante tiempo utilizando Asterisk con el NSLU2, y ha sido una experiencia perfecta, sin errores.

Primero voy a comentar el escenario: Tengo que comunicarme con mi novia que se pira al extranjero, pero no quiero dejarme la pasta en las llamadas… A demás quiero que le salga barato (o gratis 🙂 ) llamar desde donde este. Y necesito varias extensiones.

Teniendo en cuenta el escenario anterior, yo monté una solución con lo siguiente:

  • 1 x Linksys NSLU2
  • 1 x Pendrive de 1GB
  • 1 x SPA3000 o SPA3102
  • 1 x PAP2-T

Si no tienes estodemasiado a mano, o lo tienes que comprar todo, no es que sea rentable, pero como yo ya tenía casi todo, decidí montarlo 😉

Lo primero es preparar el NSLU2 para funcionar con Asterisk: para ello instalé el firmware UnSlung, y podéis seguir mi tutorial.Una vez UnSlung esta instalado, podemos instalar Asterisk con ipkg, además los paquetes disponibles son bastante completos (tenemos rama 1.2 y rama 1.4, el GUI, etc.):

[root@saghul-nslu2 ~]$ ipkg list | grep asterisk
asterisk – 1.2.18-1 – Open Source VoIP PBX System
asterisk – 1.2.17-1 –
asterisk-sounds – 1.2.1-1 – Supplementary asterisk-sounds.
asterisk14 – 1.4.7.1-1 – Asterisk is an Open Source PBX and telephony toolkit.
asterisk14-chan-capi – 1.0.1-1 – capi module for asterisk
asterisk14-core-sounds-en-gsm – 1.4.7-1 – asterisk-core-sounds-en-gsm
asterisk14-core-sounds-en-ulaw – 1.4.7-1 – asterisk-core-sounds-en-ulaw
asterisk14-extra-sounds-en-gsm – 1.4.6-1 – asterisk-extra-sounds-en-gsm
asterisk14-extra-sounds-en-ulaw – 1.4.6-1 – asterisk-extra-sounds-en-ulaw
asterisk14-gui – 0.0.0svn-r395-3 – Asterisk-GUI is a framework for the creation of graphical interfaces for configuring Asterisk.
asterisk14-moh-freeplay-gsm – 0.0.0-1 – asterisk-moh-freeplay-gsm
asterisk14-moh-freeplay-ulaw – 0.0.0-1 – asterisk-moh-freeplay-ulaw

Yo personalmente solo he utilizado la rama 1.2 (el sistema lo monté antes de la 1.4), y me ha ido de maravilla… Para instalarlo ejecutamos:

ipkg install asterisk (para la rama 1.2)
ipkg install asterisk14 (para la rama 1.4)

Una vez Asterisk esta instalado solo tenemos que modificar un poco es fichero asteris.conf, que esta en /opt/etc/asterisk/ para indicar el directorio correcto de los ficheros de configuración:

astetcdir => /opt/etc/asterisk

En este punto ya tenemos Asterisk funcionando de la manera más básica, pero como tenemos los recursos muy limitados, solo cargaremos los módulos estrictamente necesarios. Por ejemplo, yo tengo estos:

Connected to Asterisk 1.2.17 currently running on saghul-nslu2 (pid = 1179)
saghul-nslu2*CLI> show modules
Module Description Use Count
res_features.so Call Features Resource 1
res_indications.so Indications Configuration 0
pbx_config.so Text Extension Configuration 0
pbx_functions.so Builtin dialplan functions 0
func_callerid.so Caller ID related dialplan function 0
func_uri.so URI encode/decode functions 0
chan_features.so Feature Proxy Channel 0
chan_iax2.so Inter Asterisk eXchange (Ver 2) 0
chan_sip.so Session Initiation Protocol (SIP) 0
format_g729.so Raw G729 data 0
app_dial.so Dialing Application 0
app_playback.so Sound File Playback Application 0
app_setcallerid.so Set CallerID Application 0
app_verbose.so Send verbose output 0
14 modules loaded
saghul-nslu2*CLI>

Ahora toca interactuar con la línea. La idea es que se pueda usar la PSTN remotamente (a través de Asterisk), porque las llamadas nacionales son gratuitas (se puede usar un proveedor VoIP para las demás por ejemplo). Para esto, configuraremos el SPA-3102 (igual en el 3000), para que las llamadas de la FXO entren en el Asterisk:

  • Seleccionamos la pestaña «PSTN Line».
  • Marcamos «Line Enable» a «yes».
  • En la sección «Proxy and Registration», en el campo «Proxy» ponemos la dirección IP de nuestro Asterisk.
  • En la sección «Subscriber Information», en el campo «User ID» ponemos el nombre de la cuenta SIP que hemos creado en Asterisk y en el campo «Password» la contraseña.
  • En la sección de «Dialplans» ponemos lo siguiente en el DialPlan 2: (S0<:la_extension_que_tu_quieras>). Donde dice «la extensión que tu quieras» hay que poner la extensión a la que se mandarán las llamadas. Puedes poner la extensión «s» para hacer un IVR en Asterisk, etc…
  • En la sección «PSTN-To-VoIP-Gateway Setup » ponemos:
    PSTN-To-VoIP Gateway Enable: Yes
    PSTN Caller Auth Method: None
    PSTN Ring Thru Line 1: no
    PSTN CID For VoIP CID: yes
    PSTN Caller Default DP: 2
  • En la sección «FXO timer values», ponemos «PSTN Answer Delay: 2», o el número que queramos, esto es el tiempo que se esperará antes de descolgar.

Llegado este punto, solo faltaría configurar el PAP2 y Asterisk, pero eso no es el objetivo de este post. Con este post pretendo comentar mi experiencia con este «juguete» y lo bien que me ha ido para este tipo de cosas… En una pequeña prueba que realicé soportaba 4 llamadas simultáneas en g729 (nada de transcoding, ya que no tiene FPU…) 🙂

8 thoughts on “Asterisk y el NSLU2

  1. Hola

    Hace tiempo que tengo un asterisk en un NSLU2 y la verdad es que funciona bastante bien… para rutar llamadas de un lado para otro, registrar los terminales, etc, etc.

    Pero me encuentro con algún problema con los codecs. Por supuesto, no pretendo que el sistema haga transcoding de G729, pero no he conseguido poner en marcha el buzón de voz con g729 (vamos, activar el buzón de voz para las llamadas que me entren por peoplecall). Tengo el pack de voces en g729 y cuando me llamo a mi nº de peoplecall, el NSLU2 responde y me pide que grabe el mensaje, pero en cuanto debería empezar a grabar, se corta la llamada al intentar hacer transcoding no se para qué. En el voicemail.conf tengo puesto que me grabe los mensajes como g729, pero nada.

    En fin. ¿se te ocurre algo?

    Tengo más problemas de negociación de codecs, pero los he resuelto de forma chapucera (creando distintos peers para un mismo terminal, y cambiando el orden de los codecs en cada peer, y enviando la llamada a uno o a otro según de qué proveedor viniera).

  2. Hoola!

    Pues la verdad es que no he probado el voicemail, lo uso solo para llamadas ocasionales… De todas formas, que versión usas? Se me ocurre que puedes probar a no cargar ningún modulo de codecs ni de formatos salvo g729 y probar… Si funciona es algo de la negociación…

  3. Yo lo tenía antes configurado en un WRT54G, pero se me quedaba corto de disco 😉

    Ahora, como en el NSLU2 tengo un disco duro montado (para samba, torrent, etc) pensé aprovechar para tener voicemail.

    Probaré a dejar solamente el g729, a ver qué pasa. También probaré a meter asterisk14, a ver. Ya te contaré.

  4. Bueno, pues lo conseguí, pero no me termina de convencer.

    Poniendo:

    format=g729
    maxsilence=0

    en la configuración, consigo que el mensaje se grabe en formato G729 correctamente.

    Pero claro: ahora sólo soporta voicemail en formato G729. En principio tampoco me preocupa mucho, ya que las llamadas que recibo «de la calle» vienen con G729, y son esos los que me podrían dejar algo en el buzón.

  5. Bueno, teniendo en cuenta que no puedes hacer transcoding, habrá que usarlo todo en g729… Gracias por la info!! 🙂

  6. El artículo chapeau, pero pasa el corrector ortogáfico, anda… ¡¡¡ extranJJJJJJJero, juer 😀 !!!

  7. Aaaaaaaaaaaaa vaya gazapoooo!!!! Ya esta arreglado! 🙂

    PD: No te escondas Iván… 🙂

Deja un comentario

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