martes, 15 de diciembre de 2015

Raspberry Pi 2 como punto de acceso (AP) y central privada de conmutación (PBX)


Mini guía para la puesta en marcha de un sistema telefónico VoIP basado en una infraestructura WLAN


1. Presentación


Esta guía recoge los pasos necesarios para poner en marcha una central PBX basada en Asterisk capaz de dar servicio a un grupo reducido de terminales inalámbricos (softphones ejecutándose en un PC, smartphones y/o tablets) dentro del ámbito de cobertura de un adaptador WiFi - USB conectado directamente al equipo que ejecuta el SO con la distribución Linux que tiene el software que gestiona el tráfico telefónico.

Los componentes hardware y software utilizados en este sistema son:

  • Raspberry Pi 2 modelo B + Fuente de Alimentación
  • Memoria micro SD-CARD 4GB HC I Class 4
  • Adaptador WiFi - USB: WLAN 11g Zaapa (zd1211rw)
  • Driver propietario (non-free) para Debian 8 (jessie) del adaptador WiFi
  • Paquetes adicionales para la creación de un punto de acceso inalámbrico



Aprovecho para agradecer a aquellos que, desinteresadamente, han puesto a disposiciones de todos sus propias experiencias, en forma de blogs, páginas web o documentos en formato .PDF, con información relativa a los contenidos que aquí aparecen y que sin su ayuda nunca hubiese sido posible completar este proyecto. Aún sin disponer de su autorización expresa (pido perdón por adelantado) haré referencia a las siguientes fuentes de información que me fueron útiles:


2. Distribución RasPBX. Descarga y volcado en tarjeta micro SD


El sistema operativo elegido para este proyecto incluye el software encargado de hacer funcionar una PBX VoIP, basada en Asterisk, al encender el equipo (conectar la alimentación). Será la distribución Linux RasPBX, especialmente adaptada para funcionar dentro de un dispositivo Raspberry Pi.

Desde el sitio web http://www.raspberry-asterisk.org accedemos al área de descarga donde tomaremos la versión más reciente de este SO (en este momento está disponible la versión: raspbx-17-10-2015.zip) con la idea de tener compatibilidad con la variante más reciente de este ordenador (Raspberry Pi 2  -modelo B-).

Al tratarse de una distribución que viene de Raspbian (rama procedente, a su vez, del proyecto Debian 8 -Jessie-) contamos con la ventaja de tener a nuestra disposición un montón de paquetes compatibles con RasPBX. Por ejemplo los relacionados con los drivers del adaptador WiFi, el punto de acceso ó el servidor DHCP que utilizaremos más adelante.

En realidad lo que acabamos de bajarnos es la imagen (fichero .IMG) de una unidad de almacenamiento de 4GBytes con el contenido, en bruto (datos + completa estructura interna incluyendo el sector de arranque y particiones), de una unidad de memoria SD de esta capacidad con el sistema operativo y programas, asterisk y FreePBX entre otros, ya instalados.

Siguiendo las indicaciones de Mike, vuelco el contenido descomprimido del archivo en la unidad de memoria con la orden: # dd if=raspbx-17-10-2015.img of=/dev/disk1 bs=2m desde el directorio donde tengo el archivo. Aunque si trabajamos en linux, la llamada varía ligeramente: #dd if=raspbx-17-10-2015.img of=/dev/sdb bs=2M


Ambos comandos se ejecutarán con privilegios de administrador (root).

La ubicación destino (por ejemplo, /dev/sdb) representa, dentro del árbol de directorios del SO donde estoy trabajando, la unidad micro SD de almacenamiento. Para conocer su localización al conectarla a nuestro ordenador nos ayudaremos de la orden de consola:

# diskutil list (OSX). ¡Ojo! no hay que olvidar desmontar la unidad antes de proceder al traslado de la imagen a la memoria SD con #unmountdisk /dev/diskN.

y en linux: # fdisk -l (o #fdisk -l /dev/sdX). Desmontaremos con #umount /dev/sdXN.

Esperamos a que termine este proceso (suele tardar varios minutos) y pasamos la memoria micro SD a la raspberry pi. Por último, conectamos un cable ethernet desde nuestra LAN y enchufamos su alimentación para arrancar el ordenador con el “disco duro” actualizado.



3. Acceso remoto


Con el fin de completar la instalación del resto del software necesario para nuestro proyecto, ahora necesitamos acceder a la consola de RasPBX desde nuestro equipo utilizando el protocolo SSH. En el sistema operativo Windows ® es frecuente usar la herramienta PuTTY para este cometido aunque aquí se mostrará el proceso desde linux y OSX.

No es necesario conocer la dirección IP recibida por el dispositivo recién conectado ya que por defecto podemos referenciarlo como “raspbx” (linux) ó “raspbx.local” (OSX).

Al entrar con el perfil de “root” (administrador) añadiremos su contraseña (por defecto es “raspberry”).

4. Puesta al día del SO y ajustes para trabajar sin acceso a internet


Primero, actualizaremos el sistema operativo con la orden: #raspbx-upgrade

A continuación, con el propósito de evitar inestabilidades del sistema durante su funcionamiento, llevaremos a cabo algunos ajustes recomendados en la documentación mostrada en el sitio web de RasPBX (ver apartado: 3. Running RasPBX without Internet connection):

  • #apt-get install fake-hwclock Instala el paquete fake-hwclock
  • #apt-get install dnsmasq Instala el paquete dnsmasq
  • #mv /etc/resolv.conf /etc/resolv.conf.dnsmasq Renombra resolv.conf
  • #nano /etc/dnsmasq.conf Edita el archivo dnsmasq.conf
    • Cambia la referencia al fichero resolv-file: resolv-file=/etc/resolv.conf.dnsmasq
  • #nano /etc/resolv.conf Crea el archivo resolv.conf
    • Incluye el contenido: nameserver 127.0.0.1
  • #/etc/init.d/dnsmasq restart Reinicia el servicio dnsmasq

5. Añadir el driver del adaptador WiFi


Como es fácil suponer, este apartado está muy ligado dispositivo físico con el que contemos. Obtendremos los datos que necesitamos para localizar el manejador de este elementos consultando la información suministrada por el comando #lsusb que necesitaremos tener en nuestro sistema:

Con esta información, y un poco de paciencia en la búsqueda de más detalles sobre este hardware en internet, encontramos el driver para la distribución Debian 8 “Jessie”, válido también para nuestra distribución, aunque se suministra dentro de un repositorio de paquetes que no viene instalado por defecto. Por tanto, primero hay que hacerle saber al SO dónde encontrar la aplicación y, a continuación, proceder a su instalación.

En el fichero /etc/sources.list añadimos la línea:

deb http://http.debian.net/debian/ jessie main contrib non-free

con el editor nano: #nano /etc/apt/sources.list
Actualizamos la lista de paquetes:

Y pasamos a ejecutar: #apt-get install firmware-zd1211. Reiniciamos el SO con #reboot y verificamos el buen funcionamiento del tándem driver-adaptador.

6. Prueba de comunicación WiFi. Conexión a un punto de acceso


En este punto del proceso vamos a comprobar que es posible comunicar inalámbricamente nuestra Raspberry Pi con un punto de acceso conocido (y los datos de acceso disponibles) confirmando, de este modo, que ya se encuentra completamente operativo el stick wireless. Antes de nada añadimos aplicaciones para gestionar las comunicaciones inalámbricas en el ordenador con #apt-get install wireless-tools

Y ejecutamos la herramienta que nos informa del estado actual del adaptador inalámbrico recién instalado, #iwconfig:

Establecemos ahora la configuración lógica de wlan0 para después conectar el equipo automáticamente a la red a través de este medio no guiado. Para ello es necesario editar el fichero /etc/network/interfaces y añadir los datos requeridos para enlazar con el AP, por ejemplo:

  • Identificador SSID: Orange-fb6c
  • Contraseña: A61D1E_My_PASSWORD__9AF31E3C

Con los siguientes datos de configuración:


Y hacemos saber al sistema que deseamos cargar esta configuración manualmente escribiendo: #ifup wlan0 (recuerda que #ifdown wlan0 realiza la función contraria).


Si todo salió bien (en ocasiones es necesario reiniciar el sistema con #reboot), ahora tendremos una segunda vía de acceso a Raspberry Pi; por cable y de manera inalámbrica.

7 Raspberry Pi 2 como punto de acceso


La última etapa de este viaje consiste en convertir el equipo en una central privada de conmutación que además se comporte como un punto de acceso WiFi al cual se van a conectar los teléfonos software que correrán, principalmente, en dispositivos portátiles como tablets o smartphones con aplicación de teléfono SIP (ó IAX).

Instalaremos los programas que ampliarán las posibilidades de la Raspberry Pi 2 con la incorporación de un servidor DHCP y la capacidad para trabajar como AP en una red WLAN usando la orden  #apt-get install hostapd isc-dhcp-server. Reajustaremos los ficheros de configuración que dictan el funcionamiento del dispositivo WiFI adaptándolo a las nuevas funcionalidades.

7.1. Configurar el servidor DHCP


Entramos con el editor en /etc/dhcp/dhcpd.conf y dejamos comentadas las líneas:

# option domain-name "example.org";
# option domain-name-servers ns1.example.org, ns2.example.org;

Añadiendo al final:

 subnet 192.168.88.0 netmask 255.255.255.0 {
      range 192.168.88.10 192.168.88.50;
      option broadcast-address 192.168.88.255;
      option routers 192.168.88.1;
      default-lease-time 600;
      max-lease-time 7200;
      option domain-name "local";
      option domain-name-servers 8.8.8.8, 8.8.4.4;
}

Donde establecemos la futura dirección de red, máscara de subred y rango de direcciones IP a asignar además de otros parámetros.

Dentro del fichero /etc/default/isc-dhcp-server sustituimos INTERFACES=”” por INTERFACES=”wlan0”.

7.2. Configurar el adaptador WiFi con una IP estática


Tras desactivar el adaptador con #ifdown wlan0, editamos de nuevo el archivo de configuración de las interfaces de red con #nano /etc/network/interfaces y dejamos su contenido así:

Recuerda que si ya tuvieras el dispositivo conectado, puedes cambiar su IP manualmente con #ifconfig wlan0 192.168.88.1

7.3. Configurar el punto de acceso


Terminado el servidor DHCP, nos ponemos manos a la obra con el ajuste de lo que será nuestro punto de acceso. Aquí incluiremos los datos relativos al SSID, contraseña, canal, modo y encriptación de datos. Todo esto quedará recogido en el archivo /etc/hostapd/hostapd.conf, por ejemplo:

Y a continuación habilitamos este archivo descomentando la línea #DAEMON_CONF=”/etc/hostapd/hostapd.conf” del archivo /etc/default/hostapd como se ve en la imagen:

7.4. Configuración NAT



Si la comunicación telefónica gestionada por la PBX queremos que alcance algún terminal telefónico ubicado en internet (más allá de nuestro router. Por ejemplo, desde una cuenta de un proveedor SIP presente en una red WAN) hay que establecer un vínculo entre el medio guiado eth0 y el inalámbrico wlan0 que posibilite a los paquetes del tráfico telefónico el tránsito hacia su destino a través del adaptador adecuado.




Para ello primero añadimos la línea net.ipv4.ip_forward=1 al final del fichero /etc/sysctl.conf:


Después escribimos, como root, las órdenes:

  • #sh -c "echo 1 > /proc/sys/net/ipv4/ip_forward"
  • #iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
  • #iptables -A FORWARD -i eth0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT
  • #iptables -A FORWARD -i wlan0 -o eth0 -j ACCEPT
  • #sh -c "iptables-save > /etc/iptables.ipv4.nat"

Y añadimos la línea up iptables-restore < /etc/iptables.ipv4.nat al final del archivo /etc/network/interfaces:

Comprobamos si el punto de acceso arranca sin errores con:

#hostapd /etc/hostapd/hostapd.conf

Y corregimos aquellos errores que impidan su correcto funcionamiento.

Para terminar, establecemos en el sistema dos nuevos servicios (el punto de acceso y servidor DHCP configurados anteriormente) para que sean arrancados cada vez que el SO se ponga en marcha:

Los iniciamos:

#service hostapd start
#service isc-dhcp-server start
Comprobamos su estado:

#service hostapd status
#service isc-dhcp-server status

Y activamos la carga al arrancar el equipo:

#update-rc.d hostapd enable
#update-rc.d isc-dhcp-server enable

8. Configuración de la PBX. Extensiones y enlace


Tras dejar preparado nuestro punto de acceso y servidor DHCP, pasamos ahora a establecer una configuración muy básica de nuestra centralita privada para comprobar que los terminales telefónicos registrados en ella pueden comunicar entre sí.

Escribimos en nuestro navegador la localización de la PBX http://raspbx.local (http://raspbx -en linux y Windows ®) y procedemos a dar de alta las extensiones y/o troncal para el acceso al exterior:


martes, 10 de junio de 2014

Gestión de backups de una PBX desde entorno gráfico

Gestión de copias de seguridad de una PBX Xorcom Rapid live CD desde un entorno gráfico


WinSCP + Putty


0.png

Introducción



La tarea de mantenimiento de la configuración de un sistema telefónico privado suele ser una labor rutinaria que se realiza con cierta periodicidad. El técnico accede a la central, generalmente de manera remota, y actualiza el estado del equipo añadiendo nuevos elementos, modificando reglas de funcionamiento según las necesidades o crea/restaura una instantánea de su estado.


Trabajar con una aplicación gráfica como WinSCP agiliza estas acciones y ayuda a aumentar la productividad reduciendo el trabajo a unos pocos clicks de ratón.


Aquí se muestra un pequeño ejemplo de cómo salvar la configuración de una distribución live CD con asterisk para que en el siguiente inicio podamos volver cargar el último estado de la PBX (u otro guardado con anterioridad).


Campo de operaciones



En el desarrollo de esta experiencia necesitaremos por un lado la distribución en vivo con el sistema telefónico Asterisk que incluya el módulo de creación y carga de backups, en este caso Xorcom Rapid LiveCD, y por otro las herramientas software encargadas de leer y escribir los archivos con las copias de seguridad alojadas en la ubicación adecuada dentro del árbol de directorios manejado por Asterisk. En concreto WinSCP cuya función principal es la de ofrecer la interfaz gráfica en la gestión de archivos entre dos ubicaciones distintas (local y remota) y Putty para la modificación de los permisos asociados al directorio y archivos de copia de seguridad.


Crear y salvar el fichero de backup



Primero iniciaremos el sistema telefónico Asterisk dentro de un PC de nuestra red de área local. Con su dirección IP (192.168.1.14) dispondremos de la información necesaria para acceder desde cualquier otra máquina a la centralita.


2.png
Ahora usamos en WinSCP este dato y lo acompañamos de la credencial del usuario para entrar en el servidor seguro FTP:


  • Puerto: 22
  • Nombre de usuario: user
  • Contraseña: live
1.png
Existe la posibilidad de almacenar estos valores de sesión bajo una etiqueta identificativa (user@IP_xorcom) con el fin de entrar directamente la próxima vez.


En la ventana de la izquierda vemos la carpeta local con nuestras copias anteriores y en la derecha el directorio personal del usuario con el que no hemos registrado en el equipo que ejecuta el liveCD.


Por desgracia, si en una sesión anterior hubiésemos guardado ya el directorio remoto donde se generan las copias (/live/cow/var/lib/asterisk/gui_backups) WinSCP no lo encontrará porque en cada nuevo inicio de la distribución el directorio gui_backups no aparece porque se crea cuando el administrador entra por primera vez en el módulo “backups”.


5.png
6.png
En este momento, tras el primer acceso a la zona de gestión de ficheros de respaldo, ya es posible sustituir el directorio remoto /home/user por la referencia al lugar donde Asterisk alojará aquellas copias de seguridad que se vayan generando por el propio sistema o subidas por el administrador desde otro ordenador.




El último obstáculo que resta por superar consiste en modificar los permisos asociados a esta carpeta puesto que por defecto el propietario y grupo al que pertenece son “asterisk”. Esto impedirá la escritura por parte de cualquier otro perfil en dicho espacio.


Aquí es donde entrará en acción el programa Putty, gracias al cual modificaremos las propiedades del directorio ejecutando el comando: # chmod [permisos] [ruta+directorio]. Teniendo instalados WinSCP y PuTTy en la misma localización, podremos ejecutar al segundo desde la propia interfaz del primero.
Donde se nos pedirá nuevamente las credenciales de acceso (usuario: user y contraseña: live).
Dentro de la consola de Xorcom Rapid Live CD nos convertiremos en superusuario root con # sudo su para ejecutar la orden de cambio de propiedades del directorio # chmod 777 /live/cow/var/lib/asterisk/gui_backups.
Y cuando pulsemos sobre el botón ‘recarga del directorio remoto’ comprobaremos el cambio en sus propiedades.
Por último creamos la copia de seguridad desde la ventana ‘backup’ del entorno gráfico de Asterisk y la descargamos en nuestra carpeta local tras modificar sus permisos.




Actualizar el estado de la centralita con una copia de respaldo



Si lo que deseamos es realizar el proceso inverso, es decir, subir a la PBX una copia anterior de su estado y cargarla en el sistema, la secuencia a seguir está dividida en tres acciones:


  1. Escribir en el directorio /live/cow/var/lib/asterisk/gui_backups un fichero de respaldo previo
  2. Actualizar el estado del módulo “backup”
  3. Cargar la copia en el sistema telefónico


Ilustraremos esta tarea recargando el fichero con la configuración salvada el día 6 de abril de 2014:


1Trunk5usersRinggMOHv2__2014apr06.tar


En este estado, la centralita tenía definida una troncal, 5 usuarios, grupos de llamada y música en espera personalizada.


El estado de la PBX antes de la actualización corresponde a la configuración por defecto del sistema:
Siguiendo las indicaciones del punto anterior, entramos en el apartado “backup” con el fin de obtener el directorio donde subiremos el archivo y nos aseguraremos de otorgarle los permisos necesarios para ejecutar las acciones posteriores.


A continuación actualizamos el área de copias de seguridad de Asterisk para hacer visible en la interfaz gráfica el fichero subido.


Solo resta pedir al sistema que restaure los datos de configuración del fichero de respaldo


Y desde este momento nuestra central privada de conmutación trabaja tal y como lo hacía el 6 de abril de 2014.