08 noviembre 2011

Cómo llamar desde casa simulando que estás en la oficina




Cuántas veces hemos pensado eso de "Y pensar que el jefe hoy está de viaje y no va a ir a la oficina. Lo que daría por poder quedarme en casa y hacer mi trabajo desde allí". Con los recursos de conexión de los que disponemos en nuestros días, el teletrabajo es una opción excelente, pudiendo estar conectados por VPN a la oficina, sin importar si llueve o nieva ahí fuera.

Sin embargo, si queremos evitar sospechas por parte del jefe, y dejar constancia de que estamos en la oficina, una solución es hacerle una llamada, con cualquier excusa, desde el número de la oficina y así se quedará tranquilo.

Para esto, tenemos como opción utilizar alguno de los servicios que permiten falsificar el número llamante o CallerID. Sin embargo, imaginemos que al jefe, justo al colgarle, se acuerda que olvidó decirnos algo y nos llama al número de la oficina. Habiendo falsificado el origen de la llamada, desde el sofá de casa, o enrroscados en la cama, nunca oirías esa llamada y el jefe te pillaría.

Para evitar esto (y para otras miles de funcionalidades), podemos hacer lo que hoy os planteo. Montar un dispositivo ATA que reenvíe la señal analógica, que llega por el cable RJ-11 del teléfono, de la oficina a una centralita con Asterisk mediante VoIP.

La idea es utilizar Asterisk como centralita y un soft-phone instalado en nuestro PC, que nos permita conectarnos a dicho Asterisk "como si estuviésemos en la oficina".

En el dibujo de abajo podéis ver la idea:


Ciertamente, tenía la espinita clavada, desde hacía tiempo, de no haberme sentado nunca a trastear con centralitas de VoIP. Hablando, entre cervezas, con Domingo, uno de mis mejores amigos, que montó hace unos años la empresa Monema, que ofrece servicios de telefonía en la nube para PYMES, me animó a ello y me orientó a cómo hacerlo desde casa con un equipamiento bastante económico.

Todos los manuales, foros y documentación en general que me he encontrado por Internet, sobre este tipo de proyecto basados en Asterisk, es bastante "difusa" (por decirlo finamente). Y como lo que he visto no me ha resultado muy claro, he decidido, una vez que ya se de qué va el tema, contarlo con el mejor de los detalles desde aquí.

El dispositivo ATA a utilizar es un Cisco Linksys SPA3102. Este simpático cacharro cuenta con un conector FXO o POTS o, para que me entendáis, un conector de teléfono RJ-11 como el que enchufáis desde la roseta a un teléfono normal. Además cuenta con otro conector RJ-11 llamado FXS en el que se podría enchufar un teléfono convencional. Por otra parte, tiene dos conectores Ethernet RJ-45, que permiten separar dos redes, la que conecta a Internet de la que conecta a los dispositivos de telefonía IP. En mi caso, lo he configurado en modo bridge, de manera que ambos interfaces de red llevan a la misma red. Además he conectado el conector FXO a la roseta del teléfono. De esta manera, unimos el mundo del cable de teléfono con nuestra red, como si fuera un router ADSL, pero para hacer y contestar llamadas.




Lo siguiente que hemos de configurar es una centralita de telefonía IP con Asterisk. En el caso de poder engañar al jefe diciendo que estamos en la oficina, necesitaremos un acceso VPN ya establecido. Situaremos la centralita, o en la propia red de la oficina o en la de casa, pero el Linksys y el Asterisk tienen que tener conectividad. En este ejemplo vamos a suponer que tanto Linksys como Asterisk están en la misma red.

En el dispositivo Linksys SPA3102, configuramos lo siguiente:

En Voice -> PSTN Line:
  • En Proxy and Registration -> Proxy, indicamos la dirección IP de la centralita VoIP, donde enviaremos las llamadas que nos lleguen por la línea de teléfono convencional.
  • En Register decimos "YES", y en "Make Call without Reg" y "Ans call without reg" decimos "NO" -> Así hacemos que el Linksys tenga que registrarse en la centralita como dispositivo, antes de poder enviar o recibir llamadas.
  • En Subscriber Information, configuramos UserID con el valor "SPA", en Password asignamos "LaPassSPA"
  • En Dialplans, escribimos "(S0<:s>)" en el número 2.
  • En "VoIP-To-PSTN Gateway Enable" decimos "yes"
  • En "PSTN-To-VoIP Gateway Enable" y en "PSTN CID to VoIP CID" decimos "Yes". En "PSTN Caller Default DP" decimos el "2" -> Esto es el Dial Plan, que antes hemos personalizado para el número 2.
  • En "FXO timer values", en "VoIP Answer Delay" ponemos "1" y en "PSTN Answer Delay" ponemos 10. Esto es, cuántos segundos queremos esperar en cada sentido. En el caso de PSTN answer Delay es, desde que empieza a sonar el teléfono, cuánto rato tarda el Linsys en "contestar" y enviarle las llamadas a la centralita. El VoIP answer delay es el tiempo de espera en el otro sentido.
En Voice -> Line1:   
  • En Proxy and Registration -> Proxy, indicamos la dirección IP de la centralita IP, donde enviaremos las llamadas que nos lleguen por la línea de teléfono convencional.
  • En Register decimos "YES", y en Make Call without Reg y Ans call without reg decimos "NO" -> Así hacemos que el Linksys tenga que registrarse en la centralita como dispositivo antes de poder enviar o recibir llamadas.
  • En Subscriber Information, configuramos UserID con el valor "SPA", en Password asignamos "LaPassSPA"

Con estos pasos tendremos el Linksys listo para enrrutar las llamadas entrantes y salientes entre Asterisk y la línea telefónica.

Para la instalación de Asterisk, he utilizado AsteriskNOW, una distribución creada por Digium (los creadores de Asterisk) basada en CentOS Linux 5, que instala el software de la centralita, así como FreePBX, una GUI web para su configuración, con aquello que necesitamos. La distribución es francamente sencilla de instalar, aunque si no conoces Asterisk, no es tan fácil de parametrizar. Así que os quiero contar los pasos que hay que hacer para que lo veáis más claro:
  • En FreePBX, lo primero es crear una extensión para el usuario a conectarse (nosotros desde el sofá de casa). En Setup -> Basic -> Extension -> Generic SIP Device, y creamos una nueva extensión de tipo SIP. Importante indicar una contraseña con letras y números, en Host indicamos que es dynamic (que se puede conectar desde cualquier IP), y ponemos que es de tipo "peer" o "friend".
  • En Setup -> Basic -> Trunks (o Líneas si lo tenemos en español) añadimos un nuevo Trunk. Seleccionamos que es de tipo SIP también. En reglas de marcación añadimos "XXXXXXXXX" -> 9 Xs seguidas que indican 9 dígitos del 0 al 9, para que acepte todas las llamadas con ese formato. En el campo nombre del Trunk indicamos "SPA"  (que es lo mismo que pusimos en el Linksys para el valor UserID) y en detalles del Peer (o del par, en español) indicamos lo siguiente:

disallow=all
allow=ulaw
canreinvite=no
context=from-trunk
dtmfmode=rfc2833
host=dynamic
incominglimit=1
nat=never
port=5061
qualify=yes
secret=LaPassSPA
permit=0.0.0.0/0.0.0.0
type=friend
username=SPA
faxdetect=yes

Ahora, añadimos la ruta saliente por defecto. Para ello en Setup-> Basic-> Outbound Routes, yo he editado la ruta que viene como 9_Outside y la he dejado como se puede ver en la imagen siguiente:


Así indicamos a Asterisk que cuando detecte un patrón "XXXXXXXXX" o "0|XXXXXXXXX" (es decir 9 dígitos del 0 al 9 o 0 + 9 dígitos del 0 al 9), quita el 0 del principio y le pasa la llamada al Trunk SPA que hemos definido. Es decir, le dice: Marca este número por tu interfaz RJ-11 telefónico.

Lo siguiente a crear es la ruta entrante por defecto. Si queremos que según entra la llamada, nos suene en nuestra extensión, "estemos donde estemos" ;) tendremos que ir a Setup -> Basic -> Inbound Routes y crear una ruta nueva. Hay que indicar en Set Destination la extensión que hemos creado inicialmente.


IMPORTANTE: Esto son cambios hechos en los ficheros, pero no aplicados aún, por lo que hay que pinchar arriba en "Apply Configuration Changes" y podremos probar si funciona o no lo que hemos configurado.

Una vez configurada la centralita para recibir el tráfico entrante y permitir el saliente a través del Linksys, tendremos que comprobar si la SPA se "registra" correctamente en Asterisk. Pensad en que la SPA3102 es un dispositivo SIP más, que se conecta como si fuera una extensión, aunque sea un Trunk. Para ello, lo más cómodo y potente es hacerlo en modo UNIX-like, es decir, mediante una conexión SSH a AsteriskNOW. Ejecutamos "asterisk -vr" para obtener una conexión al servidor y, una vez dentro, con lo siguiente:


LawAsterisk*CLI> sip show peers
Name/username              Host            Dyn Nat ACL Port     Status   
SPA/SPA                    192.168.52.26    D       A  5061     OK (10 ms) 
3 sip peers [Monitored: 2 online, 1 offline Unmonitored: 0 online, 0 offline]
LawAsterisk*CLI> 

Aquí vemos que el Trunk SPA se ha conectado correctamente.

El próximo paso es conectar el cliente soft-phone que queramos a la centralita Asterisk, para poder probar si todo va como corresponde. Sin embargo, recordad que tanto el Linksys como Asterisk están en la red de la oficina y nosotros en casa, por lo que tendremos dos opciones: La MUY insegura, consistente en hacer NAT entrante de la red de la IP del router de la oficina de los puertos UDP 5060 y UDP 5061 hacia la IP interna de la centralita (OJO, que podéis provocar un punto de entrada enorme para un desfalco en la factura telefónica de vuestra empresa. Imaginad por ejemplo una fuerza bruta de extensiones/contraseñas registrándose en la centralita para hacer llamadas gratis desde vuestra línea!); La forma segura, es no publicar hacia Internet este servicio, conectandónos inicialmente a la empresa vía VPN. Una vez "dentro" de la red interna de la oficina, ya podemos configurar el soft-phone con la IP de la centralita, el usuario SIP creado con su contraseña correspondiente y vemos que éste se registra correctamente en la centralita. Como soft-phone, he probado Zoiper para Mac OSX en su versión libre.

Desde la propia consola de Asterisk, veremos que efectivamente ambos dispositivos están conectados a la centralita:

LawAsterisk*CLI> sip show peers
Name/username              Host            Dyn Nat ACL Port     Status     
101/101                    192.168.52.215   D   N   A  5060     OK (102 ms)     
SPA/SPA                    192.168.52.26    D       A  5061     OK (4 ms)  
3 sip peers [Monitored: 2 online, 1 offline Unmonitored: 0 online, 0 offline]

A partir de ahora, a llamar a los clientes desde casa con el número de la oficina, y si el jefe llama al número fijo para saber si has ido a trabajar, podrás salvar el tipo! 


Conclusiones
  • El coste de mejorar nuestro bienestar, no yendo a trabajar a la oficina cuando el jefe no está, es de unos 60 dólares envío incluido a través de Ebay y unos 70 euros en tiendas online especializadas... En mi caso, gracias a que mi amigo Domingo disponía de un Linksys SPA3102, he podido configurarlo para trastear convenientemente. 
  • Evidentemente, que nadie se piense que esto es infalible para engañar al jefe. Es más la broma que he querido hacer en el post que otra cosa. Tened en cuenta que cuando Asterisk descuelga la llamada, el transferir a la extensión definida, genera un tono completamente diferente al habitual y, a no ser que el jefe sea muy despistado, os pillará ;D
  • En mi caso, he montado este sistema para poder hablar desde casa a través de telefonía IP (de la que aún no tengo dispositivos), y para poder configurar un FAX por software con IAXMODEM, así como con el mejor servidor de FAX para mi gusto: Hylafax. De momento, los Faxes que yo envío llegan  correctamente a su destino. Sin embargo, los fax entrantes, aunque la comunicación se establece correctamente, llega vacío. Tenía entendido que la VoIP y los FAXES no se llevan bien, aunque prometo pegarme con ello.
  • En el ejemplo puesto en el post, no es necesario añadir ningún módulo más que lo que AsteriskNOW ya incorpora. Sin embargo, para un uso más profesional y con una mayor utilidad, os volveréis locos buscando opciones de configuración en FreePBX, si no instaláis los módulos opcionales correspondientes. Interesantes son: IVR, Ring groups, Time Conditions o Announcements, entre otras.   
  • A la hora de configurar Asterisk, de una forma más profesional, hay que cumplir una serie de "buenas prácticas" (que yo no he cumplido al 100%) para evitar, por ejemplo enumeración de usuarios, ataques de fuerza bruta o de diccionario, que puedan derivar, como decíamos anteriormente, en un problema serio en la factura del teléfono, o la suplantación de extensiones, entre otros posibles ataques. Pero eso, lectores, será en otro post!

16 comments :

Carlos Ortega dijo...

Realmente, ¿podría un "currante" medio podría poner todos esos dispositivos en su puesto de trabajo sin levantar sospechas, saltándose los firewalls de la compañía 

Jorge dijo...

Y sería posible llamar des del móvil?

Lorenzo_Martinez dijo...

Hola Carlos, la respuesta a esto es como en otros muchos casos: depende. En twitter decía @karlozkordova que esto no funciona "en oficinas que el jefe está cerca" :) En realidad, depende de las políticas de seguridad de las empresas. Si las rosetas de teléfono están controladas o no, si para acceder a la línea hay que pasar por otra centralita, si conectando un teléfono normal ya tienes línea,... Luego por otro lado, depende de qué permite la política de seguridad cuando te conectas por VPN a la empresa, si se permite o no el VoIP, etc, etc,...
El ejemplo es un poco idílico, en el que la oficina es una pyme...
Lo del ancho de banda, muchas veces depende del nivel de prioridad asignado a VoIP y de cuantas cosas estés descargando en casa, P2P, etc,...

Lorenzo_Martinez dijo...

Sería posible si instalas alguna aplicación para conectividad VoIP en el móvil (y previamente has hecho una conexión VPN desde el mismo a la oficina, claro está :))

Rodrigo Moreno dijo...

Para configurar un modem con Asterisk te recomiendo esta lectura: http://www.lastdragon.net/?p=396 , yo no lo he probado pero es el blog de un huyen conocido muy profesional con el Asterisk ;).

Aun le tengo miedo a usar Asterisk, pero quiero empezar a manejarlo, por cierto Lorenzo esas "buenas practicas" donde las podría encontrarlas para quitarme el miedo :p.

Invitado dijo...

Aunque esta muy bien el tutorial, hay una forma infinitamente mas sencilla de simular desde fuera, que estás en la linea de la oficina:

http://www.voip-info.org/wiki/view/Asterisk+cmd+DISA

La funsión DISA en el extensions.conf. Llamas desde fuera, marcas una clave, y ya estás dentro de la linea de la ofi.

Lorenzo_Martinez dijo...

Hola,... tienes razón en que la extensión DISA permite que llames tú e introduciendo una contraseña te da tono para llamar... El problema en el caso del ejemplo de broma de recibir la llamada del jefe, tendrías que hacer que te redirigiera llamando al móvil (para eso tendrías que contar con más de una línea, porque la principal está ocupada por la llamada entrante)... Como dices, es más sencilla, aunque las llamadas tienen un coste.
Gracias por el aporte!

Carletos dijo...

Hola, hace unos años estuve trasteando con uno de estos spa3102 y el tono también era configurable para que suene como en España. Por esta web se ve algo de esto: http://www.freeswitch.es/node/98

Jose Luis - Pepelux dijo...

También puedes montar en el Asterisk una pasarela y llamar desde tu móvil al Asterisk, redirigiendo luego la llamada a donde quieras y con el callerid de tu asterisk

Hugo dijo...

Genio! una consulta, en mi trabajo uso un login telefónico marcando una clave en el teléfono, entonces con eso habilito las llamadas entrantes, aclaro que atiendo un servico tipo Help Desk. Yo pedí la posibilidad de poder trabajar por VPN pero me comentaron que no es posible desviar las llamadas entrantes del IVR hacia un número telefónico externo. Sera verdad?

Pepelux dijo...

No sé que infraestructura tendrán montada pero es posible crear una conexión externa y conectar con un teléfono ip desde tu casa. Pero aquí también entra la política de la empresa de permitir conexiones externas, que por otro lado, puede ir a través de la misma vpn. En resumen, es posible, pero igual tienen que tocar configuraciones. Otra opción es desviar a un número no VoIP, pero puede llevar un coste por llamada

Hugo dijo...

La empresa en la misma oficina tiene internos VoIP pero son los menos. Una consulta, a que llamarías conexión externa?

Pepelux dijo...

Conexión externa me refiero a conectar una extensión a la PBX pero desde fuera de la oficina

mikemtgn dijo...

Hola Carlos, después de dos años del último post me gustaría si sería posible con el Cisco Linksys SPA3102 realizar lo siguiente:

Tengo un videportero IP (Helios 2N) en el exterior de mi vivienda y un videoteléfono IP (Grandstream) en el interior. Son los dos totalmente compatibles, se pueden hacer llamadas directas ya que los dos se comunican con los siguientes códecs:

Códecs de audio
G.711 PCM
G.729

Códecs de vídeo
H.264
H.263
H.263+

Estoy buscando un aparato tipo Cisco Linksys SPA3102, que sea capaz de desviar la llamada que realiza el videoportero IP al videoteléfono IP a un teléfono convencional o móvil a través de la línea fija (es decir a través del puerto FXO) en el caso de llamada no respondida. (es decir, cuando pase un tiempo o un nº de tonos predeterminado)



A ver si alguien puede aclararme un poco este tema,


Muchas gracias


Miguel

Eduardo Julián Barrios Ruiz dijo...

Hola. Soy un novato en estos de Voip y herede un SPA3000. Dado que trabajo independiente (en Colombia) permanezco casi siempre en la calle, ¿podría con este equipo, lograr que cuando marquen a mi numero fijo de la casa y que esa llamada entrante sea direccionada a mi celular por una cuenta voip que pueda configurar en el SPA3000? Disculpen mi ignorancia en el tema ya que he buscado y hay mucha información pero no logro entender muy bien todas las explicaciones que he encontrado.

Asnet Soluciones informáticas dijo...

Buena solución depende de la empresa donde trabajes, je je je. Si está relacionada con la telefonía, lo tienes dificil.
http://www.3atel.es