Asterisk en la fonera

Hace algo más de tres meses moví mi servidor asterisk 1.4 de mi caja negra a una fonera que tenía dando vueltas en casa proveniente de una donación de un amable lector del blog. Menos mal, la niñera que le pusimos al gato (como suena eso) durante un fin de semana que pasamos fuera se volvió loca con el freevo del servidor y terminó (quien sabe como) quemando la placa madre. Si no hubiera movido asterisk a la fonera ahora estaría en cierto modo incomunicado.
La ventaja de tener asterisk alejado del servidor es más que nada estética, sin tener cables de la caja negra al teléfono IP, aunque ha habido veces que he tenido que conectar la fonera a la wifi de mi amable vecino, en esos raros casos en los que comcast me deja en la estacada (pese a que los hijosdeputas me medio bloquean el torrent, aún no han tocado ningún paquete sip, que yo me haya coscado al menos). Linux por otro lado se ha conversido en esa lingua franca de los dispositivos, permitiendo que pase de manejar clusteres enormes de servidores en el trabajo a portatiles, PDAs o routers caseros usando el mismo lenguaje y migrando los mismos ficheros de configuración. Lo que aprendes en linux sabes que es conocimiento adquirido y hace 10 años ya que uso vim casi a diario, sabiendo que sin problemas podré seguir usandolo 50 años más con el mismo soporte y uso que ahora. Hace pocos días por ejemplo, limipiando mi procmail me di cuenta que arrastro el mismo fichero de configuración desde hace algo así como 12 años ya que tenía reglas que se aplicaban a una antigua cuenta de correo de arrakis…. me encanta sentarme y pensar en la cantidad de tiempo que he ganado no intentando configurar los mismos filtros de correo cada vez que instalo un programa de email nuevo….
De todos modos, es curioso tener una central telefónica parásita en esa cosa tan pequeña y casi te entra ganas de sacarla a la calle e ir conectandola por ahí. La imaginación vuela pensando que no es muy diicil poner un panelcillo solar, usar alguna wifi amiga y montarse una cabina telefónica gratuita en medio del parque, con la salvedad de que las llamadas son gratis y los números entrantes estan repartidos por medio mundo. Ya se (de sobra) que el coro de animadoras de Varsavsky empezará a tocar los tambores de guerra y llenarme el correo de amenazas de muerte para mi y para mi gato (haciendo que uno se ponga a hacerle ojillos al procmail como metodo de salvación) pero una vez más decir que la cosa no va con el ni con su proyecto. Uno, que lleva adorando a ciertos héroes de la informática desde que no levantaba dos palmos del suelo encuentra que Martín es todo lo contrario y aunque a veces parezca un anarquista hijoputa capaz de prenderle fuego a cualquiera que intente forrarse limitándonos cualquiera de nuestras libertades, uno se enternece con ciertos personajes que sin tener ni la más putísima idea de por donde se enciende un ordenador es capaz de forrarse a base de vendernos humo. Este pavo (que por otro lado es judío como mi querida novia y varios de mis mejores amigos), pese a que esta forrado su nombre no sale cuando uno busca facha en del.icio.us, su blog es cándido como él solo (uno se lo lee por las mañanas mientras se come los crispis, casi como si leyera el hola) y escribe uno de esos blogs que (como escolar) entretienen más por los comentarios que por la chorrada en sí: la mitad de los que contestan son soplapollas pelotas con comentarios a lo “chica tu vales mucho”, la mitad anarcohijoputas como yo que gastan su tiempo intentando que Martín caiga del guindo de una puta vez y lo que resta usuarios más cándidos que él intentando ser como ese chico de fon de la plaza de los cubos que gana 9 euros mensuales. Un retrato de familia perfecto de la realidad española.
Es casi de esas personas con las que uno encontraría agradable sentarse y charlar de más de una cosa, de visiones de la industria, de información y de la vida, de que es el control de un flujo de información y de como hacer las cosas y colaborar con comunides que se han pasado una década haciendo lo que él hace, constuyendo redes libres de verdad y que casi por lo que él hace estan muriendo. Le encantaría sacarle palabras sobre como el dinero de skype y google hará imposible una realidad de un servidor de telefonía libre en el dispositivo y hablarle de qué ha enseñado fon a las comunidades (el valor de una herramienta sencilla de usar sobre el de la organización pre-diseñada entre otras cosas) y de como engañar a la gente para hacerle creer que una empresa (que acabará como un puto bebedero de patos) es un movimiento con banderitas en el logo. Aunque parezca malo malo y encantador de serpientes, estoy seguro que tiene la mínima curiosidad intelectual (más allá del sacar pasta) para pensar y meditar sobre el valor y las posibilidades de la creación y casi imposición de una plataforma común y omnipresente totalmente wifi basada en linux….
Que me pierdo y no voy al grano. En mi caja negra usaba asterisk 1.2 y he aprovechado para meter 1.4 a la fonera , una de las opciones más interesantes que tiene esta versión es la conectividad con jabber y el protocolo jingle que es el que utiliza gtalk (y que es libre), permitiendo a los amigos que tengo viviendo fuera de las zonas donde tengo DID´s (números virtuales) y que no se han querido instalar un cliente SIP contactar conmigo via este protocolo o que un agente jabber me comunique quien me esta llamando a mi numero de tlf de Madrid en tiempo real (por las noches el sistema desconecta el telefono IP que tengo en el salon para evitar a los que se equivocan de numero al marcar o a los que no se acuerdan de que vivo en la otra parte del Mundo). El servidor estuvo inestable en las primeras versiones, necesitando de reseteos cada pocos días y a veces escuchaba un retraso y un eco enorme en las comunicaciones (coincidiendo con una subida del uso del procesador por asterisk de casi el 100%), pero desde que actualicé a la version 1.4.5 los problemas han desaparecido (gracias en mucha parte al mantenedor del mismo)
Pese a que en el anterior articulo hablaba de como instalar dd-wrt, esa distribución no deja suficiente espacio en la memoria flash del cacharrillo para correr la fonera por lo que tenemos que bajarnos un poco del burro de la configuración gráfica y usar openwrt (kamizake concretamente) que para los amigos es “lo mismo” pero con un kernel de la serie 2.6, nada de configuración por web y bastantes más programas para usar, desde mi queridísimo GNU/screen sin el cual mi vida no tendría sentido hasta servidores tftp, necesarios para la configuración de varios sistemas de teléfonos IP.
La buena noticia es que desde que publiqué mi antiguo artículo la cosa ha cambiado bastante y ahora mismo la instalación es un pelín más sencilla. Voy a comentar todos los pasos más o menos rápido. Como siempre, teneis el cajetín de búsqueda y además de para ciscarse en mis muertos, podeis usar el correo (que suelo ayudar cuando no estoy hasta arriba).
Paso 1. Pillar SSH en la fonera.
Presionar fuerte fuerte el pinganillo de detrás de la fonera durante 30 segundos. Deberemos volver a la versión del firmware 0.7.1.r1 que es la hackeable por este método. Encendemos la fonera, nos situamos en la red que nos abre (MyPlace), bajamos los dos siguientes ficheros como fishero1.html y fishero2.html y los abrimos uno detrás de otro en nuestra máquina local (en el firefox /home/miUsuario/fishero1.html etc)
Fichero1, fichero2.
Podremos entrar por SSH como debería ser desde el principio (login root password admin), ejecutamos el siguiente comando:
mv /etc/init.d/dropbear /etc/init.d/S50dropbear
y procedemos a comentar las dos últimas líneas de /etc/firewall.user (con el vi) para dejar el puerto 22 siempre abierto.
Podemos apagar y encender la fonera cuantas veces queramos y reentrar por ssh de nuevo. Teoricamente ahora PODRIAMOS instalar asterisk modificando los sources del instalados, ya que la fonera de varsavsky es un openwrt ya de por sí hackeado (auque Martín, que esta por encima de la ley menos cuando le mandan el iphone, se pase la GPL por sus cojones y no distribuya el código modificado) y como tal debería aceptar asterisk sin ningún problema. Pero igual, no lo he probado (no tengo ninguna fonera “entera”) y no puedo dar consejos por si salen problemas.
2. Instalamos un kernel modificado y una configuración de Redboot:
En la máquina donde estamos trabajando instalamos un servidor web (yo lo he probado con lighttpd , pero un apache serviría) y colocamos en algún directorio accesible desde fuera un nuevo kernel y una nueva configuración de Redboot. Probamos que los permisos estan bien y que podemos bajarlo por http (usando wget o firefox). Entramos por ssh a la fonera y lo bajamos a la máquina usando wget. Opcionalmente y si uno no quiere complicarse la vida puede subir los ficheros usando scp… pero para gustos…
root@OpenWrt:~# wget http://192.168.1.146/out.hex
Connecting to 192.168.1.146[192.168.1.146]:80
out.hex 100% |*******************************************************| 4096 00:00 ETA
root@OpenWrt:~# wget http://192.168.1.146/openwrt-ar531x-2.4-vmlinux-CAMICIA.lzma
Connecting to 192.168.1.146[192.168.1.146]:80
openwrt-ar531x-2.4-v 100% |*******************************************************| 512 KB 00:00 ETA
Una vez bajados usamos mtd para reflashear el cacharro y lo reiniciamos:
root@OpenWrt:~# mtd -e vmlinux.bin.l7 write openwrt-ar531x-2.4-vmlinux-CAMICIA.lzma vmlinux.bin.l7
Unlocking vmlinux.bin.l7 ...
Erasing vmlinux.bin.l7 ...
Writing from openwrt-ar531x-2.4-vmlinux-CAMICIA.lzma to vmlinux.bin.l7 ... [w]
root@OpenWrt:~# reboot
Cuando termine el reinicio, entramos de nuevo y cargamos la configuración nueva:
root@OpenWrt:~# mtd -e "RedBoot config" write out.hex "RedBoot config"
Unlocking RedBoot config ...
Erasing RedBoot config ...
Writing from out.hex to RedBoot config ... [w]
Rebooteamos de nuevo (alerta palabro) y veremos que la fonera NO arranca. No pasa nada, es normal (si alguien instaló dd-wrt sabrá que todos estos pasos son comúnes) , simplemente tenemos a Redboot escuchando durante unos segundos en el puerto 9000 de la ip 192.168.1.254 de la ethernet. Cambiamos la configuración de la ethernet de forma acorde (ifconfig eth0 192.168.1.5 por ejemplo) y ejecutamos el siguiente script redboot.pl en la maquina local (ponerle permisos de ejecución y tal)
ews@coquina: ./redboot.pl 192.168.1.254
192.168.1.254 is unreachable
(mogollon de mensajes unreachable)
.
.
192.168.1.254 is alive
-> == Executing boot script in 7.080 seconds - enter ^C to abort
< - ^C
Trying 192.168.1.254...
Connected to 192.168.1.254.
Escape character is '^]'.
RedBoot>
Vamos al sitio de openwrt / kamikaze y bajamos “openwrt-atheros-2.6-vmlinux.lzma” y “openwrt-atheros-2.6-root.jffs2-64k”. Lo colocamos en el directorio raiz de nuestro servidor web y de nuevo probamos que los podemos bajar.
En la fonera ejecutamos los siguientes comandos (ojo, cambiar 192.168.1.5 por nuestra ip real)
RedBoot> ip_address -l 192.168.1.254/24 -h 192.168.1.5
IP: 192.168.1.254/255.255.255.0, Gateway: 0.0.0.0
Default server: 192.168.1.5
RedBoot> fis init
About to initialize [format] FLASH image system - continue (y/n)? y
*** Initialize FLASH Image System
... Erase from 0xa87e0000-0xa87f0000: .
... Program from 0x80ff0000-0x81000000 at 0xa87e0000: .
RedBoot> load -r -v -b 0x80040450 /openwrt-atheros-2.6-root.jffs2-64k -m HTTP
-
Raw file loaded 0x80040450-0x801e044f, assumed entry at 0x80040450
RedBoot> fis create -b 0x80040450 -f 0xA8030000 -l 0x00700000 -e 0x00000000 rootfs
... Erase from 0xa8030000-0xa8730000: ................................................................................................................
... Program from 0x80040450-0x80740450 at 0xa8030000: ................................................................................................................
... Erase from 0xa87e0000-0xa87f0000: .
... Program from 0x80ff0000-0x81000000 at 0xa87e0000: .
RedBoot> load -r -v -b %{FREEMEMLO} /openwrt-atheros-2.6-vmlinux.lzma -m HTTP
-
Raw file loaded 0x80040800-0x800f07ff, assumed entry at 0x80040800
RedBoot> fis create -r 0x80041000 -e 0x80041000 vmlinux.bin.l7
... Erase from 0xa8730000-0xa87e0000: ...........
... Program from 0x80040800-0x800f0800 at 0xa8730000: ...........
... Erase from 0xa87e0000-0xa87f0000: .
... Program from 0x80ff0000-0x81000000 at 0xa87e0000: .
RedBoot> fis load -l vmlinux.bin.l7
Image loaded from 0x80041000-0x80289086
RedBoot> exec
Ojo en una cosa que es importante, la version de kamikaze en mi bicho que tengo es la anterior y por lo que veo en varios blogs, puede ser necesario usar “-l 0×006F0000″ en lugar de “-l 00700000″, en la linea “fis create -b 0×80040450 -f 0xA8030000 -l 0×00700000 -e 0×00000000 rootfs” por un cambio de tamaño en el kernel de kamikaze. De nuevo, usad los comentarios si alguien tiene problemas (flasheare una nueva en los próximos días, por lo que ya diré)
Los comandos se toman su tiempo, así que haceos un cafelito y no desespereis porque puede llevar casi media hora. Al final, tendremos una flamante fonera liberada con openwrt!
3. Instalamos Asterisk !
Aquí le tengo que dar las gracias a Hans Zaedbelt, mantenedor de versiones mini de asterisk 1.4 para varios routers, (además de muchos otros paquetes) , creador de una guia de compilación para asterisk para dichos dispositivos y que tuvo a bien agregar la versión para atheros 2.6 (la fonera) a su repositorio cuando se lo pedí y mantener las actualizaciones (pese a que tiene foneras y no suele usarlas para asterisk, por lo que me dijo). El equipo de OpenWRT, con Hans, esta trabajado para meter asterisk 1.4.11 de forma oficial en el repositorio (esta aún en beta y muy inestable), pero se sigue manteniendo la versión 1.4.9 con muchas mejoras que aún no han sido incorporadas a la versión oficial.
Entrar por ssh, cambiar la password si hace falta y editar /etc/ipkg.conf añadiendo la siguiente línea:
src asterisk14 http://members.home.nl/hans.zandbelt/openwrt/kamikaze/packages/asterisk-1.4/atheros/
grabamos y refrescamos la base de datos de ipkg (ipkg update). Si hacemos un listado (ipkg list), veremos que hay mogollón de versiones de asterisk y modulos disponibles. La que yo tengo es asterisk-mini, que funciona a las mil maravillas (incluso dentro de una sesion screen que nunca muere) pero también he podido correr asterisk normal con varios módulos (solo que en este caso he tenido que bajarme el paquete a mano e instalarlo yo mismo) e instalar asterisk-gtalk sin problemas llevando varios conversaciones con usuarios de gtalk desde sus ordenadores a mi teléfono ip.
Para instalar asterisk-mini :
ipkg install asterisk14-mini
y al terminar moveremos los ficheros /etc/asterisk a /etc/asterisk.old y meteremos (a saco) nuestra vieja configuración. Arrancamos el programa con asterisk y a partir de ahí procederemos a usarlo y manejar la configuración de la manera que más nos convenga.
4. Conectando la fonera a nuestra red via wifi
Si entramos a nuestra flamante fonera, veremos que iwconfig muestra nuestro dispositivo wifi sin problemas, pero aún tenemos un paso extra para conectarnos via cliente a la red casera (o a la del vecino) y disfrutar de un servidor asterisk wifi. Antiguamente las instrucciones estaban en la zona correcta del wiki de openwrt pero por lo que leo (y aviso que no lo he probado porque instalé todo esto hace meses y escribo casi de memoria) existe un script que gestiona todo el tema de la conexión de manera autónoma. Con script o sin él la instalación es muy sencilla, simplemente editar dos ficheros (/etc/config/network y /etc/config/wireless) y meterle la configuración adecuada. Como muestra los que yo uso (no creo que hagan falta más explicaciones)
root@OpenWrt:~# cat /etc/config/wireless
config wifi-iface
option device wifi0
option mode sta
option ssid ews
option hidden 0
root@OpenWrt:~# cat /etc/config/network
# Copyright (C) 2006 OpenWrt.org
config interface loopback
option ifname lo
option proto static
option ipaddr 127.0.0.1
option netmask 255.0.0.0
config interface lan
option ifname eth0
option proto static
option ipaddr 10.0.1.1
option netmask 255.255.255.0
# option gateway 192.168.1.1
# option dns 192.168.1.1
config interface wlan
option ifname ath0
option proto dhcp
# option proto static
# option ipaddr 192.168.1.160
#option netmask 255.255.255.0
5. Miscelanea, configuración.
Nada más, podemos echarle un vistazo a la configuración de kamikaze en el wiki de openwrt , navegar por la extensa cantidad de software que tiene ipkg (ipkg list) y probar a hacer cosas como instalar un servidor tftp para dar la configuración a nuestros teléfonos ip (en el caso de tener un cisco) que conectaremos por ethernet. Tenemos un pequeño servidor de telefonía, que podremos llevar a cualquier parte de nuestra casa sin necesidad de tirar cables y que responde perfectamente a las necesidades de comunicación que podamos tener. Asterisk es un software increíble, uno de esos programas que puede cambiarte la vida y el modo en que te relacionas con las personas de tu entorno. Cuando viajo puedo seguir contestando mis números de teléfono europeos (aunque a veces creo reglas para que se desconecten de noche, para evitar equivocos) y hace años jugué con tarjetas FXO de poco más de 9 euros que permitían conectar asterisk a los sistemas tradicionales de telefonía (permitiendo por ejemplo que pudiera contestar el teléfono de mis padres desde aquí cuando ellos estaban fuera de casa), aunque esta posibilidad por razones obvias no la tenemos en la fonera. De todos modos podemos toquetear el servidor para tener un pequeño buzón de voz (necesitaremos conectarlo a algún sistema de ficheros via sshfs o samba) que nos envíe los mensajes por mp3 al correo, crear salas de conferencia y usar una de las muchísimas redes y servicios que se han creado sobre asterisk y los protocolos libres SIP y IAX2 para lo que recomiendo una visita al estupendo wiki voip-info.org. Aunque decidamos no hacer uso de asterisk, las foneras son muy agradecidas y a poco que uno busque y se interese encontrará hacks maravillosos para este dispositivo (un ejemplo) uno de lo más interesantes es usarlo como repetidor de señales par multiplexar el ancho de banda que podamos pillar de los vecinos,pero eso es materia de otro post que estoy bastante cansado ya por hoy :)
Que aproveche!
Hay información muy similar en esta entrada (que usé de referencia cuando hice mi instalación y que he usado al escribir estos pasos)
este es de lo que no puedo comentar..
pero encantada estoy con que se promueva ‘cisco’ :) todo sea por el negocio de mi partenaire…
bueno has conseguido que tenga de desinstalar el dd-wrt y liarme con esto, lo malo es ver como logro agenciarme con un teléfono sip que tengo ganas de ver que puedo hacer con él, aunque siempre podre utilizar para las pruebas la ds, muchas gracias por el tutorial.
p.d. tienes el enlace hacia “anterior articulo” mal puesto
¿qué modelo de teléfono es?
Cada vez que intentado hacer funcionar el jingle con asterisk me he dado contra un muro. Me funcionan la mitad de las cosas, y no he podido mantener una conversación jamás…. hasta que desistí.
Viendo que ahora te funciona, incluso en la fonera (yo lo intentaba en un “PC de verdad”), tendré que intentarlo de nuevo.
Buenas, sólo comentar que yo tuve problemas a la hora de flashear la fonera con openWrt debido a que anteriormente tenía instalado dd-wrt, cuando tienes otro firmware instalado previamente todo parece un poco más lioso. Pero nada, con un poco de paciencia y leyendo la documentación disponible en internet todo sale al final.
Lo que me ocurría al principio de flashear es que parecía que la fonera no guardaba la configuración de openwrt al reiniciarla, con lo que tenía que volver a empezar todo el proceso, al final se resolvió siguiendo todos los pasos al pie de la letra, donde dice conectar por ssh conectar por ssh y no por telnet. Además un fallo mío fue no sobreescribir out.hex correctamente y no esperar los tiempos que toca.
Consejos: 1.- si te pones con esto respeta que los comandos acaben, algunos tardan bastante y hay que dejarlos terminar.
2.- Cuando termines de instalar kamikaze con el comando exec, pon pings tanto a 192.168.1.1 y a 192.168.1.254 y espera a que empiece a reponder 192.168.1.1 en ese momento sabrás que has terminado de instalarlo bien, luego reinicia y mantén los pings para comprobar que no se pierde la configuración flasheada.
El párrafo número tres y cuatro es… incalificable. ¡Qué bien te lo pasas! :P
“la mitad anarcohijoputas como yo que gastan su tiempo intentando que Martín caiga del guindo de una puta vez y lo que resta usuarios más cándidos que él intentando ser como ese chico de fon de la plaza de los cubos que gana 9 euros mensuales. Un retrato de familia perfecto de la realidad española.”
Es tarea imposible que se caiga del guindo. A menos claro que el caerse le reporte algún que otro $$. Pero ojo, porque el personaje se presentó al “famoso” Steve Jobs con un iphone “liberado” así que… lo que tu has hecho con la fonera tampoco está tan mal. xD
Saludos. :)
Hola otra vez!!, ya vengo a dar el coñazo…
es que estoy liado con el openwrt de nuevo, después de conseguir instalarlo, estoy intentando ponerlo como repetidor, mi idea va orientada a poder liberar redes protegidas creando una nueva interfaz wifi virtual desprotegida :-)
Pero bueno antes de todo eso, estaba probando el modo cliente que explicas en el artículo, y bien, con mi fonera me conecto a mi AP primario que me da Internet mediante wpa psk en modo cliente y todo funciona, la fonera tiene internet porque consigo hacer pings a google desde ella. Pero cuando intento conecetar el laptop por el puerto ethernet de la fonera ya no tengo internet en el portátil, si que me resuelve las dns hacia internet pero no llego haciendo ping ni al router primario ni por supuesto a google(sí llego a la dir ip de la interfaz lan de la fonera). Como entiendo que en tu caso los telefonos IP pueden hacer llamadas hacia Internet con el modo cliente en la fonera y conectados por ethernet a ella…
A ver si alguien me puede orientar de que camino seguir, si es que me falta añadir alguna ruta o el iptables de la fonera me está jodiendo y tengo que añadir alguna regla o bien mejor probar a crear un bridge entre los interfaces ath0 y eth0. Thanks!!
oopsss se me olvidó adjuntar la configuración que tengo en el openwrt de la fonera, a continuación la pego:
root@OpenWrt:/etc/config# vi network
config interface loopback
option ifname lo
option proto static
option ipaddr 127.0.0.1
option netmask 255.0.0.0
config interface lan
option ifname eth0
option proto static
option ipaddr 10.0.0.1
option netmask 255.255.255.0
config interface wlan
option ifname at0
option proto dhcp
config interface vlan1
option ifname at0
option proto dhcp
root@OpenWrt:/etc/config# vi wireless
config wifi-device wifi0
option type atheros
option disabled 0
config wifi-iface
option device wifi0
option network vlan1
option mode sta
option ssid Daisy
option encryption psk
option key ***************
root@OpenWrt:/etc# vi wpa_supplicant.conf
ap_scan=1
fast_reauth=1
network={
ssid=”Daisy”
scan_ssid=0
proto=WPA
psk=”**************”
priority=5
root@OpenWrt:/etc# vi conecta_wpa_casita
#este script sirve para conectar en modo cliente a la red wpa-psk de casa
haciendo uso
#de el archivo de configuracion wpa_supplicant.conf
echo “nameserver 192.168.1.1″ >> /etc/resolv.conf
wpa_supplicant -dd -D wext -c /etc/wpa_supplicant.conf -i ath0
Me acabo de pillar una Fonera por 10€, a ver si le meto el ddwrt que he leído por ahí que rula bien en el cacharro.
IMPOSIBLE REALIZAR ESTOS PASOS:
- Cuando termine el reinicio, entramos de nuevo y cargamos la configuración nueva:
- root@OpenWrt:~# mtd -e “RedBoot config” write out.hex “RedBoot config”
Cuando acaba el reinicio no podemos conectar a la Fonera de ninguan forma, la luz WLAN no se enciende….
¿Que hago? Ayuda por favor!!!!