Mostrando entradas con la etiqueta Linux. Mostrar todas las entradas
Mostrando entradas con la etiqueta Linux. Mostrar todas las entradas

sábado, 27 de septiembre de 2014

Cisco 7940G y Asterisk - Parte 1

Recientemente me toco reformar el sistema telefónico de la compañía para la que trabajo, en una de las sedes se tiene implementado un "todo-en-uno" de Cisco (UC-520), este aparato incluye central telefónica, router, switch y gateway vpn,

Si bien en esa sede todo funciona correctamente con el UC-520, para la nueva sede se requería de una infraestructura mas expandible y que pudiese albergar mas usuarios de los que el UC-520 permite, adicionalmente aquí había una limitante a nivel monetaria, adquirir alguna solución telefónica de Cisco implicaba un desembolso considerable de dinero, así que me fui por la opción libre, Asterisk,

Asterisk trabaja principalmente con el protocolo SIP, así que a parte del servidor donde se instalaría y las tarjetas de interconexion PSTN (para poder ofrecer conectividad a redes telefónicas  externas), se necesita también de teléfonos IP compatibles con este estándar. Resulta que cuando la empresa adquirió el UC-520, también compro una gran cantidad de teléfonos IP Cisco 7940G, muchos mas de los que eran utilizados para ese entonces.

Para los que no lo sepan, estos teléfonos de fabrica trabajan es con un protocolo propietario de Cisco llamado SCCP, así que no me servían para trabajar con Asterisk, sin embargo investigando un poco encontré que Cisco hace unos cuantos años libero imagenes del software del teléfono compatibles con el estándar SIP, esta entrada es principalmente para indicarles como transformar los 7940G con la imagen SCCP a teléfonos compatibles con SIP, en proximas entradas les mostrare como configurarlos y adicionalmente integrarlos en un directorio telefónico interno centralizado.

Proceso de cambio de firmware

Vamos a necesitar:

1.- Obviamente el teléfono Cisco 7940G
2.- El servicio DHCP y TFTP
3.- El pack de imágenes de software SIP, van a necesitar los archivos (pueden descargarlos desde aqui):

      P003-8-12-00.bin
      P003-8-12-00.sbn
      P0S3-8-12-00.loads
      P0S3-8-12-00.sb2
      OS79XX.TXT
      cmterm-7940-7960-8.2.00-sip.cop

4.- Un archivo que llamaran "XMLDefault.cnf.xml" (notese que tiene 2 extensiones) y donde copian y pegan lo siguiente:

 <Default>  
 <callManagerGroup>  
 <members>  
 <member priority="0">  
 <callManager>  
 <ports>  
 <ethernetPhonePort>2000</ethernetPhonePort>  
 <mgcpPorts>  
 <listen>2427</listen>  
 <keepAlive>2428</keepAlive>  
 </mgcpPorts>  
 </ports>  
 <processNodeName></processNodeName>  
 </callManager>  
 </member>  
 </members>  
 </callManagerGroup>  
 <loadInformation8 model="IP Phone 7940">P0S3-8-12-00</loadInformation8>  
 <loadInformation7 model="IP Phone 7960">P003-07-1-00</loadInformation7>  
 <authenticationURL></authenticationURL>  
 <directoryURL></directoryURL>  
 <idleURL></idleURL>  
 <informationURL></informationURL>  
 <messagesURL></messagesURL>  
 <servicesURL></servicesURL>  
 </Default>  

Configuración servicio TFTP

En mi caso, el servicio TFTP radica en un servidor Linux corriendo CentOS, si tienen esta distribución instalada para poder activar el servicio TFTP básicamente editamos el archivo tftp, ubicado en /etc/xinetd.d/ para que nos quede así:

 service tftp  
 {  
     disable = no  
     socket_type       = dgram  
     protocol        = udp  
     wait          = yes  
     user          = user  
     server         = /usr/sbin/in.tftpd  
     server_args       = -c -s /tftp-directory  
     per_source       = 11  
     cps           = 100 2  
     flags          = IPv4  
 }  

Donde "/tftp-directory" es la ruta del directorio que piensan utilizar para almacenar los archivos que serán descargados por el teléfono mediante tftp (guarden aqui los archivos que les especifique arriba) y "user" el usuario como quieren que se ejecute el servicio. Luego de esto sencillamente escribimos en la consola "service xinetd restart".

Configuración servicio DHCP

El servicio DHCP corre actualmente en un servidor con Windows Server 2012r2, así que también aproveche este para poder realizar este trabajo, deben es asegurarse de crear un scope (ambito) para los teléfonos IP (con un rango de IP validos, gateway, dns, etc) y dentro de este scope se necesita agregar adicionalmente la opción 150, la cual por defecto no se incluye en el servicio DHCP asi que se debe crear, para crear esta opción realizamos lo siguiente:

1.- Nos vamos al administrador del servicio y presionamos sobre "IPv4" con el botón derecho del mouse,
2.- En el menu desplegable presionamos sobre "Configurar Opciones Predeterminadas..."
3.- En el cuadro que nos aparece presionamos "Agregar".
4.- Nos aparece otro cuadro donde debemos llenar los parámetros de la opción, aquí lo importante es que el tipo de dato sea "Dirección IP" y el código "150".


Asegúrense de que cuando configuren la opción en el ambito, apunte directamente al servidor donde funciona el servicio TFTP (en mi caso en el server que corre CentOS). 

Nota:

Estos pasos son como yo termine realizado el trabajo, sin embargo si no quieren hacerlo tal cual,, lo único que necesitan es tener el servicio TFTP y DHCP funcionando, el servicio TFTP debe tener acceso a los archivos que arriba describo y el servicio DHCP debe estar configurado para adicional a los parámetros básicos (ip, mascara, gateway, etc.) incluya la opcion 150 que apunte al servidor donde corre el servicio TFTP, hay una aplicacion para windows que incluye ambos servicios se llama TFTPD32. En mi caso lo realice de esta forma porque asi puedo sencillamente conectar un telefono a la red y ya se que todo esta preparado para que se actualice a SIP y descargue la configuracion de la linea a utilizar (mas adelante hablo sobre esto). 

Lógicamente deben asegurarse que el teléfono descargue su configuración del server DHCP, ya sea colocando el teléfono dentro del mismo segmento L2 que el servidor o utilizando un DHCP Relay. Recuerden que estos telefonos al ser Cisco, se pueden comunicar con equipos Cisco mediante CDP y obviamente son compatibles con la asignación de VLAN de voz mediante el comando "switchport voice vlan XXX".

Si han hecho todo bien, cuando conecten el teléfono a la red y lo enciendan, este comenzara a descargar los archivos del servidor TFTP luego de configurar su IP, si funciono, al final verán que el teléfono en la esquina superior derecha dice "UNPROVISIONED SIP", si no dice esto, algo hicieron mal, verifiquen todo y comiencen de nuevo.

Actualización: si por alguna razón, el teléfono se niega a descargar las imágenes del software para trabajar con SIP y en pantalla les coloca "SEP.xml.cnf file not found", lo que tienen que hacer es crear ese archivo y colocarlo en la raiz del servidor tftp, el contenido de este archivo debe ser el mismo que coloco arriba para el XMLDefault.xml.cnf.

Continua en: Parte - 2




domingo, 2 de diciembre de 2012

Algunas cosas a considerar si se esta utilizando Linux como sistema operativo

   De hace algún tiempo para acá he decidido centrarme única y exclusivamente en trabajar dentro de un ambiente Linux (en mi caso particular utilizo la distribución Ubuntu 12.10), las razones de esto son variadas:

  1. Me gusta lo rápido y robusto que es.
  2. Me gusta el parque de aplicaciones libres que se pueden encontrar.
  3. La fácil y amplia personalización que posee.
  4. La clase de juegos de video que me gustan normalmente no los consigo aquí, ergo menos distracciones, mas trabajo.
  5. Quiero sentirme cómodo en un ambiente que permite ser totalmente controlado por linea de texto en preparación para mi trabajo con servidores. 
  6. No quiero sentirme amarrado a solo un sistema operativo y sus consecuentes problemas y limitaciones, me gusta la variedad. 
  7. Si bien existen virus, exploits, adware, troyanos, etc, para Linux, la sensación de confianza que este me transmite es mayor que la de Windows.

   Windows ha quedado para mi relegado a segundo plazo, y a un primer plazo si lo que deseo es jugar videojuegos.

   Dicho esto, vamos a lo que nos compete, Linux es un sistema basado en UNIX, es por ello que básicamente todo se puede controlar por medio de linea de comandos (o shell). Si bien no soy aun un experto en la materia daré algunos consejos respecto a esto (obviamente todo basado en la distribución que utilizo, reitero, Ubuntu 12.10).

Primeramente pueden abrir un terminal (o shell) desde la ventana de aplicaciones, la que aparece al darle al botón de inicio windows en sus teclados y escribir terminal:




   O sencillamente utilizando el atajo de teclado CTRL+ALT+T. Existen varias versiones de la terminal, todas trabajan exactamente igual pero añaden funcionalidades extras, en mi caso trabajo con la que viene por defecto (y es la que utilizare a lo largo de esta miniguia).
 

 Al abrir una terminal se encontraran con algo como esto:
 

   Notese que la primera linea que aparece es básicamente nuestro nombre de usuario, recordar que Linux esta ampliamente orientado a la gestión multiusuario, así que es importante conocer en todo momento con que usuario estamos trabajando lo cual nos lleva a nuestro primer comando:

who am i  (si tecleamos esto nos dará información sobre el usuario actualmente utilizado)   

sudo (o el señor que da acceso a todo)

   Linux es un sistema bastante seguro respecto a los privilegios de usuario, cuando lo instalan y crean el primer usuario tienen que introducir una contraseña, esta contraseña da privilegios de root o superusuario a la cuenta (en windows vendría siendo lo análogo a una cuenta de tipo administrador). Normalmente si se quiere ejecutar un comando con privilegios root basta con agregar la palabra sudo antes del comando, y luego de que le den a enter este les solicitara la contraseña de superusuario de la cuenta en la que están metidos.

¿Por que es esto importante?
    Sencillo, al igual que en windows, sin privilegios de superusuario hay ciertas cosas que no se pueden hacer, como por ejemplo instalar o desinstalar programar, correr scripts que modifiquen cosas importantes del sistema, ver, modificar, borrar, contenido sensible del sistema, etc.

   Por ejemplo si queremos instalar un programa (siempre y cuando conozcamos su nombre y se encuentre dentro de los repositorios almacenados) desde el gestor de paquetes Aptitude (Synaptic viene siendo la versión de interfaz gráfica del mismo) basta con teclear lo siguiente:

sudo apt-get install "nombre del programa" Sin las comillas obviamente

   Tras lo cual nos pedirá nuestra contraseña y luego de introducirla nos pedirá si queremos instalar el programa elegido, al darle a si, el mismo descargara, desempaquetara e instalara el software. Todo esto se puede apreciar en las capturas siguientes:

No se preocupen si no ven asteriscos al introducir su contraseña, es normal
Si tecleamos S o Si y luego damos enter, nos descargara e instalara el programa, luego de instalado desde cualquier terminal con solo escribir el nombre podremos ejecutarlo, o también buscarlo dentro de los programas instalados (dandole al boton de inicio windows del teclado)

Nota: si cierran la terminal desde el cual ejecutan un programa, también se cierra el programa

  Adicionalmente, si desean desinstalar el programa basta con escribir lo siguiente:

sudo apt-get remove "nombre del programa" Nuevamente sin las comillas

  Si han llegado a este punto asumo que ya se dan una idea de como manejarse dentro de la terminal, asi que ahora pasare a listar algunos comandos utiles.

CD "Directorio destino": al igual que en windows nos permite cambiar de directorio.Mas adelante en otra entrada, hablare sobre el sistema de archivos de Linux.
PWD: Nos indica en que ruta del sistema de archivos nos encontramos. 
LS: Lista todo el contenido (carpetas y archivos) que se encuentran dentro de la ruta en que nos encontramos.
GEDIT "Nombre del archivo": Nos permite editar archivos en modo texto utilizando como editor el programa gedit, si no estamos dentro de la ruta (observar la ruta al lado del nombre de usuario o utilizar PWD) del archivo, debemos colocarla también.
BASH "Nombre del Script": Permite ejecutar un Script de shell, como alternativa pueden escribir SH en lugar de BASH. Recordar que deben estar dentro de la ruta del archivo (o especificarlo en su nombre). 

Nota 2: Concerniente a las rutas con los nombres de archivos, las rutas se describen al igual que en windows, ejemplo tenemos un archivo llamado "Hola" dentro de una carpeta que se llama "Programas" que a su vez esta dentro de una carpeta llamada "Rafael", la ruta del archivo seria /Rafael/Programas/Hola. Deben colocar las mayúsculas que contenga el nombre. Ejemplo: bash /Rafael/Programas/Hola

Nota 3: Si el nombre del archivo o programa contiene espacios, deben englobarlo todo entre comillas, tomando como base el ejemplo anterior si el archivo se llamase Hola Como Estas, la ruta seria /Rafael/Programas/"Hola Como Estas"

Nota 4: recuerden que todos los comandos aquí descritos pueden ejecutarse en modo root utilizando el prefijo sudo, útil por ejemplo si pretenden editar un archivo del sistema con gedit. 

Nota 5: en cualquier momento pueden detener la ejecución de un comando tecleando CTRL+C. 

Instalación de programas por medio de sus archivos fuentes

  Muchos programas disponibles para Linux vienen sin compilar y se requiere entonces compilarlos para luego instalarlos, para hacer esto seguiremos estos pasos:
  1. Nos ubicamos en la carpeta raíz donde se encuentra el archivo de configuración (para saber esto deben leer la documentación del programa, aunque normalmente se encuentra dentro de la carpeta raíz donde están todos los componentes.
  2. Ejecutamos el comando ./configure
  3. Se creara un archivo make, ejecutamos el comando make.
  4. Procedemos a instalar con make install.
Ejemplo, tengo un programa para instalar de esta forma ubicado en mi carpeta de descargas y la carpeta del programa se llama Hola, el archivo de configuración se encuentro dentro de Hola.

cd /Descargas/Hola
   Luego seguimos los pasos 2, 3 y 4 de la lista anterior en orden tal cual están y listo, nuestro programa esta instalado.

   Esto es todo por esta vez, luego publicare mas comandos útiles para moverse dentro de la terminal de Linux.