<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>mariofix</title>
	
	<link>http://mariofix.com</link>
	<description />
	<lastBuildDate>Thu, 30 Jun 2011 23:03:00 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/mariofix" /><feedburner:info uri="mariofix" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>Seguridad!… Seguridad?</title>
		<link>http://feedproxy.google.com/~r/mariofix/~3/evoFk63COCA/seguridad-seguridad.html</link>
		<comments>http://mariofix.com/2011/02/seguridad-seguridad.html#comments</comments>
		<pubDate>Tue, 22 Feb 2011 20:20:31 +0000</pubDate>
		<dc:creator>mariofix</dc:creator>
				<category><![CDATA[Bexmeta]]></category>

		<guid isPermaLink="false">http://mariofix.com/?p=189</guid>
		<description><![CDATA[“123456”, ¿reconoce esa secuencia? Probablemente es la contraseña de su correo electrónico, “1234” ¿y esta? estoy seguro que más de alguna vez fue la clave de su tarjeta del cajero. Lo cierto es que, a pesar de los constantes consejos de su personal de soporte o de algún conocido “experto” en la materia, sigue sin [...]]]></description>
			<content:encoded><![CDATA[<p>“123456”, ¿reconoce esa secuencia? Probablemente es la contraseña de su correo electrónico, “1234” ¿y esta? estoy seguro que más de alguna vez fue la clave de su tarjeta del cajero. Lo cierto es que, a pesar de los constantes consejos de su personal de soporte o de algún conocido “experto” en la materia, sigue sin importarnos que tan segura es nuestra contraseña -la primera línea de batalla para proteger nuestra preciada información- haciendo muy simple la tarea de entrar a la página de su banco o a su correo electrónico (¿Sabía Ud. que toma alrededor de 5 minutos “descubrir” una contraseña de 6 caracteres minúsculas?).</p>
<p>Por supuesto que la seguridad de la información es mucho más que una contraseña segura, implica también un esfuerzo importante por parte de programadores, administradores y usuarios el poner barreras cada vez más fuertes para prevenir el acceso a la información que no nos pertenece, barreas que van desde no publicar la información que no debe ser publica o <strong>encriptar las contraseñas de sus bases de datos</strong> hasta codificar las transmisiones de datos o el mismo sistema que está utilizando. Uno de los errores más grandes -y uno de los más simples de prevenir- cometidos por los programadores es<a href="http://www.computerworld.com/s/article/9142327/RockYou_hack_exposes_names_passwords_of_30M_accounts"> no encriptar las contraseñas</a> en los sistemas dando acceso a las credenciales a cualquier persona con acceso a la base de datos.</p>
<p>Algunos consejos:<br />
- Trate de mezclar minúsculas y mayúsculas.<br />
- No use secuencias.<br />
- Trate de usar caracteres no convencionales cuando se le permita (Por ejemplo: Signos de puntuación).<br />
- Siempre use más de 6 caracteres.</p>
<p>“da.1771.405” es una contraseña fuerte y son las iniciales de la calle donde vivo, el número y el departamento, separadas por un punto. Toda información simple y que siempre recordaré pero mostrada de forma que es muy difícil de reconocer y descubrir por gente externa. ¿Quiere saber qué tan segura es su contraseña? <a href="http://www.passwordmeter.com" target="_blank">http://www.passwordmeter.com</a><br />
“11111111-1” imagino que ha visto este rut más de una vez, pertenece al rut de ejemplo que se publica en muchos sitios. ¿Qué pensaría si le dijera que aparte de ser válido, es un rut verdadero? Pertenece a una persona llamada “Francisco”, al menos eso me dijeron en la farmacia cuando me preguntaron por el mío -que por supuesto no entregué. Se ha preguntado qué ocurriría si esta persona tuviese una contraseña simple?</p>
<p>Lamentablemente estamos en un país donde el rut se utiliza públicamente para identificar a una persona, estamos entregando el 50% de la batalla y lo hacemos libremente y -aparentemente- sin pensar en las consecuencias. <a href="http://search.twitter.com/search?q=%23TheChileanWay">#TheChileanWay</a> como dirían algunos.</p>
<p>Como dato: <a href="http://onemansblog.com/2007/03/26/how-id-hack-your-weak-passwords/">http://onemansblog.com/2007/03/26/how-id-hack-your-weak-passwords/</a></p>
<img src="http://feeds.feedburner.com/~r/mariofix/~4/evoFk63COCA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://mariofix.com/2011/02/seguridad-seguridad.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://mariofix.com/2011/02/seguridad-seguridad.html</feedburner:origLink></item>
		<item>
		<title>Guia VPN Parte 2 – OpenVPN RoadWarrior 2</title>
		<link>http://feedproxy.google.com/~r/mariofix/~3/-i-si2sGXEM/guia-vpn-parte-2-openvpn-roadwarrior-2.html</link>
		<comments>http://mariofix.com/2010/05/guia-vpn-parte-2-openvpn-roadwarrior-2.html#comments</comments>
		<pubDate>Sun, 30 May 2010 19:00:00 +0000</pubDate>
		<dc:creator>mariofix</dc:creator>
				<category><![CDATA[Guias y Manuales]]></category>
		<category><![CDATA[ccd]]></category>
		<category><![CDATA[guia]]></category>
		<category><![CDATA[openssl]]></category>
		<category><![CDATA[openvpn]]></category>
		<category><![CDATA[roadwarrior]]></category>
		<category><![CDATA[vpn]]></category>

		<guid isPermaLink="false">http://mariofix.com/2010/05/guia-vpn-parte-2-openvpn-roadwarrior-2.html</guid>
		<description><![CDATA[Siguiendo con la guía de VPN, ahora vamos a ver un anexo a la configuración RoadWarrior de OpenVPN. Es algo llamado &#8220;Client Config Dir&#8221; (ccd para los amigos de OpenVPN) y consiste en tener configuraciones diferentes por cada usuario que creemos en nuestro OpenVPN, en estas configuraciones podemos tener cosas como: el acceso a las [...]]]></description>
			<content:encoded><![CDATA[<p>Siguiendo con la guía de VPN, ahora vamos a ver un anexo a la configuración <a href="http://mariofix.com/2010/05/guia-vpn-openvpn-roadwarrior.html">RoadWarrior de OpenVPN</a>. Es algo llamado &#8220;Client Config Dir&#8221; (ccd para los amigos de OpenVPN) y consiste en tener configuraciones diferentes por cada usuario que creemos en nuestro OpenVPN, en estas configuraciones podemos tener cosas como: el acceso a las distintas redes, la dirección ip que va a tener, etc.</p>
<p><span class="fullpost"><br />
Esto es útil en caso de tener una VPN con múltiples redes y usuarios, de esta forma queremos que cada usuario en particular tenga acceso a partes especificas de nuestra red.</span></p>
<p>Tomaremos el siguiente diagrama como ejemplo para esta parte.</p>
<p><a href="http://mariofix.com/wp-content/uploads/2010/05/Red-VPN1.png"><img class="aligncenter size-full wp-image-99" title="Red-VPN" src="http://mariofix.com/wp-content/uploads/2010/05/Red-VPN1.png" alt="" width="484" height="485" /></a></p>
<p>Tenemos en este caso, un Firewall/Router el cual tiene conexiones (físicas o lógicas) hacia 3 redes, cada una con las direcciones IP indicadas. Si quisieramos que todos los usuarios de la VPN tuviesen acceso a todas las redes, sólo bastaria con agregar a nuestro archivo de configuración (/etc/openvpn/server.conf) lo siguiente bajo la línea &#8220;<strong>server 10.1.5.0 255.255.255.0</strong>&#8221;</p>
<p><strong><span style="font-size: small;"><span style="font-family: Arial, Helvetica, sans-serif;">push &#8220;route 192.168.0.0 255.255.255.0&#8243;</span></span></strong><br />
<strong><span style="font-size: small;"><span style="font-family: Arial, Helvetica, sans-serif;">push &#8220;route 10.10.1.0 255.255.255.0&#8243;</span></span></strong><br />
<strong><span style="font-size: small;"><span style="font-family: Arial, Helvetica, sans-serif;">push &#8220;route 172.16.2.0 255.255.255.0&#8243;</span></span></strong></p>
<p>Luego reiniciamos el servicio y todos los usuarios que se conecten tendrán acceso a esas redes (la tabla de ruteo se encargará de elegir el mejor camino para esa tarea).</p>
<p>Ahora, si queremos aplicar la siguiente configuración:</p>
<div style="margin: 0px;">Usuario 1: Acceso a todas las redes</div>
<div style="margin: 0px;">Usuario 2: Acceso solo a Red 1</div>
<div style="margin: 0px;">Usuario 3: Acceso solo a Red VPN</div>
<div style="margin: 0px;">Usuario 4: Acceso a Redes 1, 3</div>
<p>Debemos realizar las siguientes modificaciones:<br />
- Primero, si tenemos algún comando &#8220;push&#8221;, debemos eliminarlo o comentarlo<br />
- Comentar la linea &#8220;client-to-client&#8221;<br />
- Agregar lo siguiente al archivo de configuración del servidor:</p>
<div style="margin: 0px;"><strong><span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-size: small;"># Le decimos cual es el directorio que tiene los archivos de configuración por cliente.</span></span></strong></div>
<div style="margin: 0px;"><strong><span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-size: small;">client-config-dir /etc/openvpn/ccd/</span></span></strong></div>
<div style="margin: 0px;"><strong><span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-size: small;"># Le decimos que sólo debe trabajar con estos archivos (no toma configuraciones generales)</span></span></strong></div>
<div style="margin: 0px;"><strong><span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-size: small;">ccd-exclusive</span></span></strong></div>
<div style="margin: 0px;">Con esto ya tenemos lo necesario para comenzar a configurar los usuarios. Ojo que el directorio que configuremos debe existir.</div>
<div style="margin: 0px;">Luego, sólo debemos crear los usuarios respectivos</div>
<div style="margin: 0px;"><span style="font-family: 'Courier New', Courier, monospace;">$ cd /usr/share/doc/openvpn/examples/easy-rsa/2.0</span></div>
<div style="margin: 0px;"><span style="font-family: 'Courier New', Courier, monospace;">$ source .vars</span></div>
<div style="margin: 0px;">
<div style="margin: 0px;"><strong><em>Usuario 1</em></strong></div>
</div>
<div style="margin: 0px;">
<div style="margin: 0px;"><span style="font-family: 'Courier New', Courier, monospace;">$ ./build-key usuario1.spooky.cl</span></div>
</div>
<div style="margin: 0px;">
<div style="margin: 0px;">Copiamos ca.crt, usuario1.spooky.cl.crt y usuario1.spooky.cl.key al cliente.</div>
</div>
<div style="margin: 0px;">
<div style="margin: 0px;">Creamos el archivo de configuracion para el cliente</div>
</div>
<div style="margin: 0px;">
<div style="margin: 0px;"><span style="font-family: 'Courier New', Courier, monospace;">$ nano /etc/openvpn/ccd/usuario1.spooky.cl</span></div>
</div>
<div style="margin: 0px;">
<div style="margin: 0px;">con el siguiente contenido</div>
</div>
<div style="margin: 0px;">
<div style="margin: 0px;"><strong><span style="font-size: small;"><span style="font-family: Arial, Helvetica, sans-serif;"># Le decimos cuales son las direcciones que tiene que tomar (impar y luego par)</span></span></strong></div>
</div>
<div style="margin: 0px;">
<div style="margin: 0px;"><strong><span style="font-size: small;"><span style="font-family: Arial, Helvetica, sans-serif;"># De la red definida en el parametro server</span></span></strong></div>
</div>
<div style="margin: 0px;">
<div style="margin: 0px;"><strong><span style="font-size: small;"><span style="font-family: Arial, Helvetica, sans-serif;"># recuerden que .1 y .2 estan reservados para el servidor</span></span></strong></div>
<div style="margin: 0px;"><strong><span style="font-size: small;"><span style="font-family: Arial, Helvetica, sans-serif;"># Al final de esta guía se encuentra un anexo con los pares de direcciones permitidas</span></span></strong></div>
</div>
<div style="margin: 0px;">
<div style="margin: 0px;"><strong><span style="font-size: small;"><span style="font-family: Arial, Helvetica, sans-serif;">ifconfig-push 10.1.5.5 10.1.5.6</span></span></strong></div>
</div>
<div style="margin: 0px;">
<div style="margin: 0px;"><strong><span style="font-size: small;"><span style="font-family: Arial, Helvetica, sans-serif;"># Le damos acceso a la Red 1</span></span></strong></div>
</div>
<div style="margin: 0px;">
<div style="margin: 0px;"><strong><span style="font-size: small;"><span style="font-family: Arial, Helvetica, sans-serif;">push &#8220;route 192.168.0.0 255.255.255.0&#8243;</span></span></strong></div>
</div>
<div style="margin: 0px;">
<div style="margin: 0px;"><strong><span style="font-size: small;"><span style="font-family: Arial, Helvetica, sans-serif;"># Le damos acceso a la Red 2</span></span></strong></div>
</div>
<div style="margin: 0px;">
<div style="margin: 0px;"><strong><span style="font-size: small;"><span style="font-family: Arial, Helvetica, sans-serif;">push &#8220;route 10.10.1.0 255.255.255.0&#8243;</span></span></strong></div>
</div>
<div style="margin: 0px;">
<div style="margin: 0px;"><strong><span style="font-size: small;"><span style="font-family: Arial, Helvetica, sans-serif;"># Le damos acceso a la Red 3</span></span></strong></div>
</div>
<div style="margin: 0px;">
<div style="margin: 0px;"><strong><span style="font-size: small;"><span style="font-family: Arial, Helvetica, sans-serif;">push &#8220;route 172.16.2.0 255.255.255.0&#8243;</span></span></strong></div>
</div>
<div style="margin: 0px;">
<div style="margin: 0px;"><strong><span style="font-size: small;"><span style="font-family: Arial, Helvetica, sans-serif;"># Le damos acceso a la Red VPN</span></span></strong></div>
</div>
<div style="margin: 0px;">
<div style="margin: 0px;"><strong><span style="font-size: small;"><span style="font-family: Arial, Helvetica, sans-serif;">client-to-client</span></span></strong></div>
</div>
<div style="margin: 0px;">
<div style="margin: 0px;"><strong><em>Usuario 2</em></strong></div>
</div>
<div style="margin: 0px;">
<div style="margin: 0px;"><span style="font-family: 'Courier New', Courier, monospace;">$ ./build-key usuario2.spooky.cl</span></div>
</div>
<div style="margin: 0px;">
<div style="margin: 0px;">Copiamos ca.crt, usuario2.spooky.cl.crt y usuario2.spooky.cl.key al cliente.</div>
</div>
<div style="margin: 0px;">
<div style="margin: 0px;">Creamos el archivo de configuracion para el cliente</div>
</div>
<div style="margin: 0px;">
<div style="margin: 0px;"><span style="font-family: 'Courier New', Courier, monospace;">$ nano /etc/openvpn/ccd/usuario2.spooky.cl</span></div>
</div>
<div style="margin: 0px;">
<div style="margin: 0px;">con el siguiente contenido</div>
</div>
<div style="margin: 0px;">
<div style="margin: 0px;"><strong><span style="font-size: small;"><span style="font-family: Arial, Helvetica, sans-serif;"># Le decimos cuales son las direcciones que tiene que tomar (impar y luego par)</span></span></strong></div>
</div>
<div style="margin: 0px;">
<div style="margin: 0px;"><strong><span style="font-size: small;"><span style="font-family: Arial, Helvetica, sans-serif;"># De la red definida en el parametro server</span></span></strong></div>
</div>
<div style="margin: 0px;">
<div style="margin: 0px;"><strong><span style="font-size: small;"><span style="font-family: Arial, Helvetica, sans-serif;"># recuerden que .1 y .2 estan reservados para el servidor</span></span></strong></div>
</div>
<div style="margin: 0px;">
<div style="margin: 0px;"><strong><span style="font-size: small;"><span style="font-family: Arial, Helvetica, sans-serif;">ifconfig-push 10.1.5.9 10.1.5.10</span></span></strong></div>
</div>
<div style="margin: 0px;">
<div style="margin: 0px;"><strong><span style="font-size: small;"><span style="font-family: Arial, Helvetica, sans-serif;"># Le damos acceso a la Red 1</span></span></strong></div>
</div>
<div style="margin: 0px;">
<div style="margin: 0px;"><strong><span style="font-size: small;"><span style="font-family: Arial, Helvetica, sans-serif;">push &#8220;route 192.168.0.0 255.255.255.0&#8243;</span></span></strong></div>
</div>
<div style="margin: 0px;">
<div style="margin: 0px;"><strong><em>Usuario 3</em></strong></div>
</div>
<div style="margin: 0px;">
<div style="margin: 0px;"><span style="font-family: 'Courier New', Courier, monospace;">$ ./build-key usuario3.spooky.cl</span></div>
</div>
<div style="margin: 0px;">
<div style="margin: 0px;">Copiamos ca.crt, usuario3.spooky.cl.crt y usuario3.spooky.cl.key al cliente.</div>
</div>
<div style="margin: 0px;">
<div style="margin: 0px;">Creamos el archivo de configuracion para el cliente</div>
</div>
<div style="margin: 0px;">
<div style="margin: 0px;"><span style="font-family: 'Courier New', Courier, monospace;">$ nano /etc/openvpn/ccd/usuario3.spooky.cl</span></div>
</div>
<div style="margin: 0px;">
<div style="margin: 0px;">con el siguiente contenido</div>
</div>
<div style="margin: 0px;">
<div style="margin: 0px;"><strong><span style="font-size: small;"><span style="font-family: Arial, Helvetica, sans-serif;"># Le decimos cuales son las direcciones que tiene que tomar (impar y luego par)</span></span></strong></div>
</div>
<div style="margin: 0px;">
<div style="margin: 0px;"><strong><span style="font-size: small;"><span style="font-family: Arial, Helvetica, sans-serif;"># De la red definida en el parametro server</span></span></strong></div>
</div>
<div style="margin: 0px;">
<div style="margin: 0px;"><strong><span style="font-size: small;"><span style="font-family: Arial, Helvetica, sans-serif;"># recuerden que .1 y .2 estan reservados para el servidor</span></span></strong></div>
</div>
<div style="margin: 0px;">
<div style="margin: 0px;"><strong><span style="font-size: small;"><span style="font-family: Arial, Helvetica, sans-serif;">ifconfig-push 10.1.5.13 10.1.5.14</span></span></strong></div>
</div>
<div style="margin: 0px;">
<div style="margin: 0px;"><strong><span style="font-size: small;"><span style="font-family: Arial, Helvetica, sans-serif;"># Le damos acceso a la Red VPN</span></span></strong></div>
</div>
<div style="margin: 0px;">
<div style="margin: 0px;"><strong><span style="font-size: small;"><span style="font-family: Arial, Helvetica, sans-serif;">client-to-client</span></span></strong></div>
</div>
<div style="margin: 0px;">
<div style="margin: 0px;">Usuario 4</div>
</div>
<div style="margin: 0px;">
<div style="margin: 0px;"><span style="font-family: 'Courier New', Courier, monospace;">$ ./build-key usuario4.spooky.cl</span></div>
</div>
<div style="margin: 0px;">
<div style="margin: 0px;">Copiamos ca.crt, usuario4.spooky.cl.crt y usuario4.spooky.cl.key al cliente.</div>
</div>
<div style="margin: 0px;">
<div style="margin: 0px;">Creamos el archivo de configuracion para el cliente</div>
</div>
<div style="margin: 0px;">
<div style="margin: 0px;"><span style="font-family: 'Courier New', Courier, monospace;">$ nano /etc/openvpn/ccd/usuario4.spooky.cl</span></div>
</div>
<div style="margin: 0px;">
<div style="margin: 0px;">con el siguiente contenido</div>
</div>
<div style="margin: 0px;">
<div style="margin: 0px;"><strong><span style="font-size: small;"><span style="font-family: Arial, Helvetica, sans-serif;"># Le decimos cuales son las direcciones que tiene que tomar (impar y luego par)</span></span></strong></div>
</div>
<div style="margin: 0px;">
<div style="margin: 0px;"><strong><span style="font-size: small;"><span style="font-family: Arial, Helvetica, sans-serif;"># De la red definida en el parametro server</span></span></strong></div>
</div>
<div style="margin: 0px;">
<div style="margin: 0px;"><strong><span style="font-size: small;"><span style="font-family: Arial, Helvetica, sans-serif;"># recuerden que .1 y .2 estan reservados para el servidor</span></span></strong></div>
</div>
<div style="margin: 0px;">
<div style="margin: 0px;"><strong><span style="font-size: small;"><span style="font-family: Arial, Helvetica, sans-serif;">ifconfig-push 10.1.5.17 10.1.5.18</span></span></strong></div>
</div>
<div style="margin: 0px;">
<div style="margin: 0px;"><strong><span style="font-size: small;"><span style="font-family: Arial, Helvetica, sans-serif;"># Le damos acceso a la Red 1</span></span></strong></div>
</div>
<div style="margin: 0px;">
<div style="margin: 0px;"><strong><span style="font-size: small;"><span style="font-family: Arial, Helvetica, sans-serif;">push &#8220;route 192.168.0.0 255.255.255.0&#8243;</span></span></strong></div>
</div>
<div style="margin: 0px;">
<div style="margin: 0px;"><strong><span style="font-size: small;"><span style="font-family: Arial, Helvetica, sans-serif;"># Le damos acceso a la Red 3</span></span></strong></div>
</div>
<div style="margin: 0px;">
<div style="margin: 0px;"><strong><span style="font-size: small;"><span style="font-family: Arial, Helvetica, sans-serif;">push &#8220;route 172.16.2.0 255.255.255.0&#8243;</span></span></strong></div>
<div style="margin: 0px;">Luego de esto, reiniciamos nuestro servidor VPN y los clientes están listos para conectarse a las redes donde les es permitido. De todas formas esta no es la mejor medida de seguridad, ya que simplemente podemos agregar de forma manual las rutas en nuestros equipos clientes (usando route o ip route), se le puede agregar un nivel extra de seguridad configurando reglas con iptables.</div>
<div style="margin: 0px;"><strong><em>Anexo &#8211; Pares de Direcciones permitidas</em></strong></div>
<div style="margin: 0px;">Cada par de direcciones en ifconfig-push representan direcciones IP virtuales de cliente y servidor. Deben ser  sacadas de subredes /30 sucesivas para que puedan ser compatibles con los clientes en Windows y el driver TAP-Win32. Específicamente sólo se pueden tomar los de este set de terminaciones. (Recuerden que el primer par está reservado para nuestro servidor VPN)</div>
<div style="margin: 0px;">[  1,  2] [  5,  6] [  9, 10] [ 13, 14] [ 17, 18]</div>
<div style="margin: 0px;">[ 21, 22] [ 25, 26] [ 29, 30] [ 33, 34] [ 37, 38]</div>
<div style="margin: 0px;">[ 41, 42] [ 45, 46] [ 49, 50] [ 53, 54] [ 57, 58]</div>
<div style="margin: 0px;">[ 61, 62] [ 65, 66] [ 69, 70] [ 73, 74] [ 77, 78]</div>
<div style="margin: 0px;">[ 81, 82] [ 85, 86] [ 89, 90] [ 93, 94] [ 97, 98]</div>
<div style="margin: 0px;">[101,102] [105,106] [109,110] [113,114] [117,118]</div>
<div style="margin: 0px;">[121,122] [125,126] [129,130] [133,134] [137,138]</div>
<div style="margin: 0px;">[141,142] [145,146] [149,150] [153,154] [157,158]</div>
<div style="margin: 0px;">[161,162] [165,166] [169,170] [173,174] [177,178]</div>
<div style="margin: 0px;">[181,182] [185,186] [189,190] [193,194] [197,198]</div>
<div style="margin: 0px;">[201,202] [205,206] [209,210] [213,214] [217,218]</div>
<div style="margin: 0px;">[221,222] [225,226] [229,230] [233,234] [237,238]</div>
<div style="margin: 0px;">[241,242] [245,246] [249,250] [253,254]</div>
<div style="margin: 0px;">Agradecimientos sobran para <a href="http://twitter.com/gseriche">Gonzalo Seriche</a>, por las incontables horas tratando de encontrar esta solución para uno de nuestros clientes.</div>
</div>
<img src="http://feeds.feedburner.com/~r/mariofix/~4/-i-si2sGXEM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://mariofix.com/2010/05/guia-vpn-parte-2-openvpn-roadwarrior-2.html/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://mariofix.com/2010/05/guia-vpn-parte-2-openvpn-roadwarrior-2.html</feedburner:origLink></item>
		<item>
		<title>Guia VPN Parte 1 – OpenVPN RoadWarrior</title>
		<link>http://feedproxy.google.com/~r/mariofix/~3/CRpmCvJtGhs/guia-vpn-parte-1-openvpn-roadwarrior.html</link>
		<comments>http://mariofix.com/2010/05/guia-vpn-parte-1-openvpn-roadwarrior.html#comments</comments>
		<pubDate>Sun, 23 May 2010 19:09:00 +0000</pubDate>
		<dc:creator>mariofix</dc:creator>
				<category><![CDATA[Guias y Manuales]]></category>
		<category><![CDATA[guia]]></category>
		<category><![CDATA[openssl]]></category>
		<category><![CDATA[openvpn]]></category>
		<category><![CDATA[roadwarrior]]></category>
		<category><![CDATA[vpn]]></category>

		<guid isPermaLink="false">http://mariofix.com/2010/05/guia-vpn-parte-1-openvpn-roadwarrior.html</guid>
		<description><![CDATA[Hola amigos, hace mucho tiempo que no escribo por estos lados, espero que ahora pueda tener un poco más de tiempo para hacerlo, voy a volver con una serie de tutoriales sobre el servicio VPN, vamos a partir por lo más básico, RoadWarrior con OpenVPN, RoadWarrior con PPTP para poder usar el cliente nativo de [...]]]></description>
			<content:encoded><![CDATA[<div style="text-align: justify;">Hola amigos, hace mucho tiempo que no escribo por estos lados, espero que ahora pueda tener un poco más de tiempo para hacerlo, voy a volver con una serie de tutoriales sobre el servicio VPN, vamos a partir por lo más básico, RoadWarrior con OpenVPN, RoadWarrior con PPTP para poder usar el cliente nativo de Windows, luego tuneles red-red y finalmente un bridge transparente entre redes.</div>
<div style="text-align: justify;">Una VPN es una conexión de red virtual que se realiza entre dos puntos. Un equipo hacia una red remota, dos redes remotas o hacer un bridge entre dos redes. Es una forma segura de poder trabajar de forma remota, ya que los datos que pasan por este túnel están -por lo general- encriptados.</div>
<div style="text-align: justify;">Existen para esto una serie de programas que nos ayudarán a configurar este tipo de túneles: OpenVPN, PPTP, L2TP, VPN-1, SSH. En esta serie de guías vamos a utilizar OpenVPN y PPTP.</div>
<div style="text-align: justify;">Ahora instalaremos un servidor VPN Standalone, siguiendo el siguiente diagrama, esta modalidad es conocida como RoadWarrior y nos servirá para conectar una serie de clientes remotos y móviles hacia un único concentrado (Nuestro Servidor VPN), tengan en cuenta que este servidor puede ser el mismo firewall el cual nos unirá a nuestra red LAN -por ejemplo- estas funcionalidades las iremos agregando más adelante en la guía.</div>
<p><a href="http://mariofix.com/wp-content/uploads/2010/05/Red-VPN-1.png"><img class="aligncenter size-full wp-image-99" title="Red VPN Parte 1" src="http://mariofix.com/wp-content/uploads/2010/05/Red-VPN-1-300x250.png" alt="" width="300" height="250" /></a></p>
<div style="text-align: justify;">Manos a la obra. Lo primero que debemos hacer es instalar OpenVPN, para los efectos de esta guía utilizaré Debian Lenny y apt como administrador de paquetes pero puedes replicar este proceso para cualquier otro sistema.</div>
<div style="text-align: justify;"><span style="font-family: 'Courier New', Courier, monospace;">$ apt-get install openvpn</span></div>
<div style="text-align: justify;">Como vimos anteriormente OpenVPN es un servicio de tunel VPN encriptado, esta encriptación la realiza utilizando <em>openssl</em>, lo que debemos hacer ahora es generar los certificados de seguridad que nos permitirán realizar la encriptación de los datos.</div>
<div style="text-align: justify;">Tenemos la opcion de utilizar un certificado de seguridad que hayamos adquirido con algun vendedor (Cl Cert, Verisign, etc), si este es tu caso, no es necesario realizar el siguiente paso.</div>
<div style="text-align: justify;">Por defecto tenemos que podemos crear certificados de seguridad de 1024 bits, usando md5 y con una duración de 10 años. Podemos cambiar estos parámetros cambiándolos en el archivo <em>openssl.cnf</em> y <em>vars</em> del directorio <strong>/usr/share/doc/openvpn/examples/easy-rsa/2.0</strong></div>
<div style="text-align: justify;">Entramos al directorio</div>
<div style="text-align: justify;"><span style="font-family: 'Courier New', Courier, monospace;">$ cd /usr/share/doc/openvpn/examples/easy-rsa/2.0</span></div>
<div style="text-align: justify;">Configuramos los parametros generales</div>
<div style="text-align: justify;"><span style="font-family: 'Courier New', Courier, monospace;">$ source ./vars</span></div>
<div style="text-align: justify;"><span style="font-family: 'Courier New', Courier, monospace;">$ ./clean-all</span></div>
<div style="text-align: justify;">Creamos nuestro certificado raíz (CA), si ya poseen un certificado raíz válido, no es necesario crearlo y sólo deberán copiarlo (junto a su llave) al directorio keys bajo el nombre <em>ca.crt</em></div>
<div style="text-align: justify;"><span style="font-family: 'Courier New', Courier, monospace;">$ ./build-ca</span></div>
<div style="text-align: justify;">Al hacer esto nos pedirá algunos datos, los llenamos con los que consideremos necesarios</div>
<div style="text-align: justify;"><strong><span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-size: small;">Generating a 1024 bit RSA private key</span></span></strong></div>
<div style="text-align: justify;"><strong><span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-size: small;">&#8230;.++++++</span></span></strong></div>
<div style="text-align: justify;"><strong><span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-size: small;">&#8230;&#8230;++++++</span></span></strong></div>
<div style="text-align: justify;"><strong><span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-size: small;">writing new private key to &#8216;ca.key&#8217;</span></span></strong></div>
<div style="text-align: justify;"><strong><span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-size: small;">&#8212;&#8211;</span></span></strong></div>
<div style="text-align: justify;"><strong><span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-size: small;">You are about to be asked to enter information that will be incorporated</span></span></strong></div>
<div style="text-align: justify;"><strong><span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-size: small;">into your certificate request.</span></span></strong></div>
<div style="text-align: justify;"><strong><span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-size: small;">What you are about to enter is what is called a Distinguished Name or a DN.</span></span></strong></div>
<div style="text-align: justify;"><strong><span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-size: small;">There are quite a few fields but you can leave some blank</span></span></strong></div>
<div style="text-align: justify;"><strong><span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-size: small;">For some fields there will be a default value,</span></span></strong></div>
<div style="text-align: justify;"><strong><span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-size: small;">If you enter &#8216;.&#8217;, the field will be left blank.</span></span></strong></div>
<div style="text-align: justify;"><strong><span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-size: small;">&#8212;&#8211;</span></span></strong></div>
<div style="text-align: justify;"><strong><span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-size: small;">Country Name (2 letter code) [US]:CL</span></span></strong></div>
<div style="text-align: justify;"><strong><span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-size: small;">State or Province Name (full name) [CA]:RM</span></span></strong></div>
<div style="text-align: justify;"><strong><span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-size: small;">Locality Name (eg, city) [SanFrancisco]:Santiago</span></span></strong></div>
<div style="text-align: justify;"><strong><span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-size: small;">Organization Name (eg, company) [Fort-Funston]:Spooky</span></span></strong></div>
<div style="text-align: justify;"><strong><span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-size: small;">Organizational Unit Name (eg, section) []:Tutoriales</span></span></strong></div>
<div style="text-align: justify;"><strong><span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-size: small;">Common Name (eg, your name or your server&#8217;s hostname) [Fort-Funston CA]:ssl.spooky.cl</span></span></strong></div>
<div style="text-align: justify;"><strong><span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-size: small;">Email Address [me@myhost.mydomain]:vpn@spooky.cl</span></span></strong></div>
<div style="text-align: justify;">Ya tenemos nuestro certificado raíz creado. Este mismo certificado te servirá para firmar otros para ser instalados en distintos servicios (Apache, Correo, FTP, etc).</div>
<div style="text-align: justify;">Ahora tenemos que crear el certificado cliente del servidor (el parametro debe ser distinto al Common Name del certificado raíz).</div>
<div style="text-align: justify;"><span style="font-family: 'Courier New', Courier, monospace;">$ ./build-key-server guia-vpn.spooky.cl</span></div>
<div style="text-align: justify;">Cuando nos pida los datos debemos poner los mismos datos que pusimos al crear el certificado raiz (CL, RM, Santiago, etc), nos pedirá ademas una contraseña, debemos escribir la contraseña más complicada que se nos ocurra. Finalmente nos pedirá confirmar los datos y hacer commit al certificado que acabamos de crear. Si no terminamos con lo siguiente es por que algo nos faltó.</div>
<div style="text-align: justify;"><span style="font-family: Arial, Helvetica, sans-serif;"><strong><span style="font-size: small;">Certificate is to be certified until May 8 23:33:44 2020 GMT (3650 days)</span></strong></span></div>
<div style="text-align: justify;"><span style="font-family: Arial, Helvetica, sans-serif;"><strong><span style="font-size: small;">Sign the certificate? [y/n]:y</span></strong></span></div>
<div style="text-align: justify;"><span style="font-family: Arial, Helvetica, sans-serif;"><strong><span style="font-size: small;"><br />
</span> </strong></span></div>
<div style="text-align: justify;"><span style="font-family: Arial, Helvetica, sans-serif;"><strong><span style="font-size: small;">1 out of 1 certificate requests certified, commit? [y/n]y</span></strong></span></div>
<div style="text-align: justify;"><span style="font-family: Arial, Helvetica, sans-serif;"><strong><span style="font-size: small;">Write out database with 1 new entries</span></strong></span></div>
<div style="text-align: justify;"><span style="font-family: Arial, Helvetica, sans-serif;"><strong><span style="font-size: small;">Data Base Updated</span></strong></span></div>
<div style="text-align: justify;">Ahora tenemos que crear nuestra llave Diffie Hellman (esto es necesario para crear el canal SSL para nuestro túnel VPN) esto puede demorar un poco.</div>
<div style="text-align: justify;"><span style="font-family: 'Courier New', Courier, monospace;">$ ./build-dh</span></div>
<div style="text-align: justify;">Ahora tenemos todo lo necesario para comenzar la configuración de nuestro servidor. Debemos copiar los siguientes archivos al directorio /etc/openvpn</div>
<div style="text-align: justify;"><span style="font-family: 'Courier New', Courier, monospace;">$ cd keys</span></div>
<div style="text-align: justify;"><span style="font-family: 'Courier New', Courier, monospace;">$ cp dh1024.pem /etc/openvpn/</span></div>
<div style="text-align: justify;"><span style="font-family: 'Courier New', Courier, monospace;">$ cp ca.crt /etc/openvpn/</span></div>
<div style="text-align: justify;"><span style="font-family: 'Courier New', Courier, monospace;">$ cp guia-vpn.spooky.cl.crt /etc/openvpn/</span></div>
<div style="text-align: justify;"><span style="font-family: 'Courier New', Courier, monospace;">$ cp guia-vpn.spooky.cl.key /etc/openvpn/</span></div>
<div style="text-align: justify;">Ahora tenemos que crear el archivo <em>server.conf</em> en el directorio <strong>/etc/openvpn/</strong></div>
<div style="text-align: justify;"><strong><br />
</strong></div>
<div style="text-align: justify;"><span style="font-family: 'Courier New', Courier, monospace;">$ nano /etc/openvpn/server.conf</span></div>
<div style="text-align: justify;"><span style="font-family: 'Courier New', Courier, monospace;"><br />
</span></div>
<div style="text-align: justify;"><span style="font-family: Arial, Helvetica, sans-serif;"><strong><span style="font-size: small;"># Puerto por defecto</span></strong></span></div>
<div style="text-align: justify;"><span style="font-family: Arial, Helvetica, sans-serif;"><strong><span style="font-size: small;">port 1194</span></strong></span></div>
<div style="text-align: justify;"><span style="font-family: Arial, Helvetica, sans-serif;"><strong><span style="font-size: small;"># Protocolo por defecto</span></strong></span></div>
<div style="text-align: justify;"><span style="font-family: Arial, Helvetica, sans-serif;"><strong><span style="font-size: small;">proto udp</span></strong></span></div>
<div style="text-align: justify;"><span style="font-family: Arial, Helvetica, sans-serif;"><strong><span style="font-size: small;"># Tipo de dispositivo virtual a utilizar (roadwarrior usa tun)</span></strong></span></div>
<div style="text-align: justify;"><span style="font-family: Arial, Helvetica, sans-serif;"><strong><span style="font-size: small;">dev tun</span></strong></span></div>
<div style="text-align: justify;"><span style="font-family: Arial, Helvetica, sans-serif;"><strong><span style="font-size: small;"># Le dice que no reinicie la interfaz de red</span></strong></span></div>
<div style="text-align: justify;"><span style="font-family: Arial, Helvetica, sans-serif;"><strong><span style="font-size: small;">persist-tun</span></strong></span></div>
<div style="text-align: justify;"><span style="font-family: Arial, Helvetica, sans-serif;"><strong><span style="font-size: small;"># Le dice que no lea la llave ante un reinicio</span></strong></span></div>
<div style="text-align: justify;"><span style="font-family: Arial, Helvetica, sans-serif;"><strong><span style="font-size: small;">persist-key</span></strong></span></div>
<div style="text-align: justify;"><span style="font-family: Arial, Helvetica, sans-serif;"><strong><span style="font-size: small;"># Certificado Raiz</span></strong></span></div>
<div style="text-align: justify;"><span style="font-family: Arial, Helvetica, sans-serif;"><strong><span style="font-size: small;">ca ca.crt</span></strong></span></div>
<div style="text-align: justify;"><span style="font-family: Arial, Helvetica, sans-serif;"><strong><span style="font-size: small;"># Certificado de Servidor</span></strong></span></div>
<div style="text-align: justify;"><span style="font-family: Arial, Helvetica, sans-serif;"><strong><span style="font-size: small;">cert guia-vpn.spooky.cl.crt</span></strong></span></div>
<div style="text-align: justify;"><span style="font-family: Arial, Helvetica, sans-serif;"><strong><span style="font-size: small;"># Llave privada del servidor</span></strong></span></div>
<div style="text-align: justify;"><span style="font-family: Arial, Helvetica, sans-serif;"><strong><span style="font-size: small;">key guia-vpn.spooky.cl.key</span></strong></span></div>
<div style="text-align: justify;"><span style="font-family: Arial, Helvetica, sans-serif;"><strong><span style="font-size: small;"># Llave Algoritmo DH</span></strong></span></div>
<div style="text-align: justify;"><span style="font-family: Arial, Helvetica, sans-serif;"><strong><span style="font-size: small;">dh dh1024.pem</span></strong></span></div>
<div style="text-align: justify;"><span style="font-family: Arial, Helvetica, sans-serif;"><strong><span style="font-size: small;"><br />
</span> </strong></span></div>
<div style="text-align: justify;"><span style="font-family: Arial, Helvetica, sans-serif;"><strong><span style="font-size: small;"># Nombre de Red y máscara para la red VPN (El servidor por defecto es el .1)</span></strong></span></div>
<div style="text-align: justify;"><span style="font-family: Arial, Helvetica, sans-serif;"><strong><span style="font-size: small;">server 10.1.5.0 255.255.255.0</span></strong></span></div>
<div style="text-align: justify;"><span style="font-family: Arial, Helvetica, sans-serif;"><strong><span style="font-size: small;">#Archivo donde guardará un cache con las direcciones IP de clientes</span></strong></span></div>
<div style="text-align: justify;"><span style="font-family: Arial, Helvetica, sans-serif;"><strong><span style="font-size: small;">ifconfig-pool-persist ipp.txt</span></strong></span></div>
<div style="text-align: justify;"><span style="font-family: Arial, Helvetica, sans-serif;"><strong><span style="font-size: small;">#Le dice que los clientes se pueden comunicar entre si</span></strong></span></div>
<div style="text-align: justify;"><span style="font-family: Arial, Helvetica, sans-serif;"><strong><span style="font-size: small;">client-to-client</span></strong></span></div>
<div style="text-align: justify;"><span style="font-family: Arial, Helvetica, sans-serif;"><strong><span style="font-size: small;">#Mensajes para evitar cierre de conexion (Uno cada 10 segundos y cierre de conexion luego de 120 segundos de inactividad)</span></strong></span></div>
<div style="text-align: justify;"><span style="font-family: Arial, Helvetica, sans-serif;"><strong><span style="font-size: small;">keepalive 10 120</span></strong></span></div>
<div style="text-align: justify;"><span style="font-family: Arial, Helvetica, sans-serif;"><strong><span style="font-size: small;"># Modo de compresión</span></strong></span></div>
<div style="text-align: justify;"><span style="font-family: Arial, Helvetica, sans-serif;"><strong><span style="font-size: small;">comp-lzo</span></strong></span></div>
<div style="text-align: justify;"><span style="font-family: Arial, Helvetica, sans-serif;"><strong><span style="font-size: small;"># Usuario</span></strong></span></div>
<div style="text-align: justify;"><span style="font-family: Arial, Helvetica, sans-serif;"><strong><span style="font-size: small;">user nobody</span></strong></span></div>
<div style="text-align: justify;"><span style="font-family: Arial, Helvetica, sans-serif;"><strong><span style="font-size: small;"># Grupo</span></strong></span></div>
<div style="text-align: justify;"><span style="font-family: Arial, Helvetica, sans-serif;"><strong><span style="font-size: small;">group nogroup</span></strong></span></div>
<div style="text-align: justify;"><span style="font-family: Arial, Helvetica, sans-serif;"><strong><span style="font-size: small;"># archivo log</span></strong></span></div>
<div style="text-align: justify;"><span style="font-family: Arial, Helvetica, sans-serif;"><strong><span style="font-size: small;">status /var/log/vpn-status.log</span></strong></span></div>
<div style="text-align: justify;"><span style="font-family: Arial, Helvetica, sans-serif;"><strong><span style="font-size: small;">#Cantidad de informacion para guardar en el log (de 0 a 11)</span></strong></span></div>
<div style="text-align: justify;"><span style="font-family: Arial, Helvetica, sans-serif;"><strong><span style="font-size: small;">verb 4</span></strong></span></div>
<div style="text-align: justify;">Ahora que tenemos lista la configuración podemos iniciar el servicio vpn</div>
<div style="text-align: justify;"><span style="font-family: 'Courier New', Courier, monospace;">$ /etc/init.d/openvpn start</span></div>
<div style="text-align: justify;">Sólo nos queda crear los archivos de los clientes VPN. Volvemos al directorio easy-rsa/2.0 y creamos al cliente</div>
<div style="text-align: justify;"><span style="font-family: 'Courier New', Courier, monospace;">$ cd ..</span></div>
<div style="text-align: justify;"><span style="font-family: 'Courier New', Courier, monospace;">$ ./build-key mariofix.spooky.cl</span></div>
<div style="text-align: justify;">Recuerden que cuando les pidan los datos, estos deben ser los mismos que pusimos cuando creamos el certificado Raíz.</div>
<div style="text-align: justify;">En lo personal me gusta utilizar nombres de dominio para los clientes, pero esto es una decisión personal, puede ser perfectamente <span style="font-family: 'Courier New', Courier, monospace;">./build-key mariofix</span></div>
<div style="text-align: justify;">Si cerraron la sesión y desean crear otro cliente deben ejecutar primero <span style="font-family: 'Courier New', Courier, monospace;">source ./vars </span>y luego creen la llave.</div>
<div style="text-align: justify;"><span style="font-family: 'Courier New', Courier, monospace;">$ source ./vars</span></div>
<div style="text-align: justify;"><span style="font-family: 'Courier New', Courier, monospace;">$ ./build-key mariofix.spooky.cl</span></div>
<div style="text-align: justify;">Una vez ejecutado el comando, debemos copiar los siguientes archivos hacia el cliente (usando ftp, scp o algún protocolo de transferencia de archivos) <em>ca.crt, mariofix.spooky.cl.key, mariofix.spooky.cl.crt</em></div>
<div style="text-align: justify;"><em><br />
</em></div>
<div style="text-align: justify;">Al cliente tambien tenemos que instalarle OpenVPN pero como será un cliente, no es necesario pasar por la creacion de los certificados de seguridad, solo basta con instalarlo y crear el archivo <em>/etc/openvpn/guia-vpn.conf</em> con el siguiente contenido</div>
<div style="text-align: justify;"><span style="font-family: 'Courier New', Courier, monospace;">$ nano /etc/openvpn/guia-vpn.conf</span></div>
<div style="text-align: justify;"><span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-size: small;"><strong># Somos cliente</strong></span></span></div>
<div style="text-align: justify;"><span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-size: small;"><strong>client</strong></span></span></div>
<div style="text-align: justify;"><span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-size: small;"><strong># Protocolo por defecto</strong></span></span></div>
<div style="text-align: justify;"><span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-size: small;"><strong>proto udp</strong></span></span></div>
<div style="text-align: justify;"><span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-size: small;"><strong># Tipo de dispositivo virtual a utilizar (roadwarrior usa tun)</strong></span></span></div>
<div style="text-align: justify;"><span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-size: small;"><strong>dev tun</strong></span></span></div>
<div style="text-align: justify;"><span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-size: small;"><strong># Direccion y puerto del servidor vpn</strong></span></span></div>
<div style="text-align: justify;"><span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-size: small;"><strong>remote guia-vpn.spooky.cl 1194</strong></span></span></div>
<div style="text-align: justify;"><span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-size: small;"><strong># Si hay problemas de resolucion, intenta infinitamente</strong></span></span></div>
<div style="text-align: justify;"><span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-size: small;"><strong>resolv-retry infinite</strong></span></span></div>
<div style="text-align: justify;"><span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-size: small;"><strong># No hace binding de un puerto local en particular (no sabemos cual esta libre)</strong></span></span></div>
<div style="text-align: justify;"><span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-size: small;"><strong>nobind</strong></span></span></div>
<div style="text-align: justify;"><span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-size: small;"><strong># Le dice que no reinicie la interfaz de red</strong></span></span></div>
<div style="text-align: justify;"><span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-size: small;"><strong>persist-tun</strong></span></span></div>
<div style="text-align: justify;"><span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-size: small;"><strong># Le dice que no lea la llave ante un reinicio</strong></span></span></div>
<div style="text-align: justify;"><span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-size: small;"><strong>persist-key</strong></span></span></div>
<div style="text-align: justify;"><span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-size: small;"><strong># Certificado Raiz (el que copiamos)</strong></span></span></div>
<div style="text-align: justify;"><span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-size: small;"><strong>ca &#8220;ca.crt&#8221;</strong></span></span></div>
<div style="text-align: justify;"><span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-size: small;"><strong># Certificado cliente (el que copiamos)</strong></span></span></div>
<div style="text-align: justify;"><span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-size: small;"><strong>cert &#8220;mariofix.spooky.cl.crt&#8221;</strong></span></span></div>
<div style="text-align: justify;"><span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-size: small;"><strong># Llave cliente (el que copiamos)</strong></span></span></div>
<div style="text-align: justify;"><span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-size: small;"><strong>key &#8220;mariofix.spooky.cl.key&#8221;</strong></span></span></div>
<div style="text-align: justify;"><span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-size: small;"><strong># Modo de compresion</strong></span></span></div>
<div style="text-align: justify;"><span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-size: small;"><strong>comp-lzo</strong></span></span></div>
<div style="text-align: justify;"><span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-size: small;"><strong>#Cantidad de informacion para guardar en el log (de 0 a 11)</strong></span></span></div>
<div style="text-align: justify;"><span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-size: small;"><strong>verb 4</strong></span></span></div>
<div style="text-align: justify;"><span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-size: small;"><strong>#Archivo log</strong></span></span></div>
<div style="text-align: justify;"><span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-size: small;"><strong>status /var/log/guia-vpn.log</strong></span></span></div>
<div style="text-align: justify;"><span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-size: small;"><strong>#Mensajes para evitar cierre de conexion (Uno cada 10 segundos y cierre de conexion luego de 120 segundos de inactividad)</strong></span></span></div>
<div style="text-align: justify;"><span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-size: small;"><strong>keepalive 10 120</strong></span></span></div>
<div style="text-align: justify;">Luego iniciamos <strong>openvpn</strong> con una de las siguientes opciones</div>
<div style="text-align: justify;">Opción 1 (En sistemas SysV -Debian, RedHat, etc.)</div>
<div style="text-align: justify;"><span style="font-family: 'Courier New', Courier, monospace;">$ /etc/init.d/openvpn start</span></div>
<div style="text-align: justify;">Opción 2 (en Linux/Windows)</div>
<div style="text-align: justify;"><span style="font-family: 'Courier New', Courier, monospace;">$ openvpn &#8211;confg /etc/openvpn/guia-vpn.conf</span></div>
<div style="text-align: justify;">Opción 3 (en Windows)</div>
<div style="text-align: justify;">Descargar e instalar OpenVPN-GUI desde http://openvpn.se</div>
<div style="text-align: justify;">Opcion 4 (Ubuntu)</div>
<div style="text-align: justify;"><span style="font-family: 'Courier New', Courier, monospace;">$ sudo aptitude install network-manager-openvpn</span></div>
<div style="text-align: justify;">Clic derecho en el notificador de Red -&gt; Editar las conexiones -&gt; VPN -&gt; Añadir -&gt; OpenVPN</div>
<div style="text-align: justify;">Y configuramos lo que nos pidan ahí (Habiliten la compresión LZO).</div>
<img src="http://feeds.feedburner.com/~r/mariofix/~4/CRpmCvJtGhs" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://mariofix.com/2010/05/guia-vpn-parte-1-openvpn-roadwarrior.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://mariofix.com/2010/05/guia-vpn-parte-1-openvpn-roadwarrior.html</feedburner:origLink></item>
		<item>
		<title>reconocer la compañia a la que pertenece un numero</title>
		<link>http://feedproxy.google.com/~r/mariofix/~3/wfTTKkvLJSI/reconocer-la-compania-a-la-que-pertenece-un-numero.html</link>
		<comments>http://mariofix.com/2009/08/reconocer-la-compania-a-la-que-pertenece-un-numero.html#comments</comments>
		<pubDate>Mon, 03 Aug 2009 19:14:00 +0000</pubDate>
		<dc:creator>mariofix</dc:creator>
				<category><![CDATA[Guias y Manuales]]></category>
		<category><![CDATA[agi]]></category>
		<category><![CDATA[asterisk]]></category>
		<category><![CDATA[dialplan]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[telefonia]]></category>

		<guid isPermaLink="false">http://mariofix.com/2009/08/reconocer-la-compania-a-la-que-pertenece-un-numero.html</guid>
		<description><![CDATA[Buenas, hace un tiempo que no escribía algo por aquí, voy a tratar de escribir cosas un poco más seguido. Ahora les traigo una mini-aplicacion que reconoce la compañia del numero a la que se esta llamando, por ahora sólo funciona con números de teléfonos móviles chilenos, más adelante agregaré los teléfonos fijos y quizá [...]]]></description>
			<content:encoded><![CDATA[<p>Buenas, hace un tiempo que no escribía algo por aquí, voy a tratar de escribir cosas un poco más seguido.</p>
<p>Ahora les traigo una mini-aplicacion que reconoce la compañia del numero a la que se esta llamando, por ahora sólo funciona con números de teléfonos móviles chilenos, más adelante agregaré los teléfonos fijos y quizá los de otros países. Lo primero que haremos es descargar una base de datos en SQLite3 hecha por mi en base a la <a href="http://bleh.spooky.cl/2009/05/expresiones-regulares-para-numeros.html">numeración publica entregada por la Subtel</a></p>
<p><a href="http://spooky.cl/blog/numeracion.db">Descargar Base</a></p>
<p>Tienes que descargar el archivo anterior en el directorio /var/lib/asterisk/agi-bin o bien donde tengas los archivos AGI (ver /etc/asterisk/asterisk.conf), ahora veremos el programa que se encarga de realizar las consultas y determina cual es la compañía.</p>
<div class="geshi no php">
<ol>
<li class="li1">
<div class="de1"><span class="co2">#!/usr/bin/php -q</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">&lt;?php</span> </div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">/**</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp;* Determina la compania del celular ingresado</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp;* Uso:</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp;* ./cia.php digitos celular</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp;* digitos: cantidad de digitos a ignorar en celular, desde la izquierda.</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp;* celular: celular a chequear</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp;*</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp;* @author &nbsp; &nbsp; Mario Hernandez &lt;mario@spooky.cl&gt;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp;* @since &nbsp; &nbsp; &nbsp;03/08/2009</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp;* @copyright &nbsp;Creative Commons 2.0 Chile &#8211; Atribucion-Compartir Igual</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp;* </span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp;*/</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">// true para guardar la compania en el campo userfield del cdr</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re1">$userfield</span> <span class="sy0">=</span> <span class="kw2">true</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">// String donde se encuentra la base</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re1">$dbString</span> <span class="sy0">=</span> <span class="st0">&quot;sqlite:numeracion.db&quot;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">// ruta absoluta de la clase phpAGI</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re1">$phpAgi</span> <span class="sy0">=</span> <span class="st0">&quot;./phpagi.php&quot;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">if</span> <span class="br0">&#40;</span><span class="re1">$argc</span> <span class="sy0">!=</span> <span class="nu0">3</span> <span class="sy0">||</span> <span class="kw3">in_array</span><span class="br0">&#40;</span><span class="re1">$argv</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="sy0">,</span><span class="kw3">array</span><span class="br0">&#40;</span><span class="st0">&quot;-h&quot;</span><span class="sy0">,</span><span class="st0">&quot;&#8211;help&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw3">echo</span> <span class="st0">&quot;Uso: ./cia.php digitos celular<span class="es0">\n</span>&quot;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span> <span class="kw1">else</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">include_once</span><span class="br0">&#40;</span><span class="re1">$phpAgi</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="co1">//Creando objeto</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re1">$agi</span> <span class="sy0">=</span> <span class="kw2">new</span> AGI<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re1">$numero</span> <span class="sy0">=</span> <span class="kw3">substr</span><span class="br0">&#40;</span><span class="re1">$argv</span><span class="br0">&#91;</span><span class="nu0">2</span><span class="br0">&#93;</span><span class="sy0">,</span><span class="re1">$argv</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re1">$prefijo</span> <span class="sy0">=</span> <span class="kw3">substr</span><span class="br0">&#40;</span><span class="re1">$numero</span><span class="sy0">,</span><span class="nu0">0</span><span class="sy0">,</span><span class="nu0">4</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re1">$prefijo2</span> <span class="sy0">=</span> <span class="kw3">substr</span><span class="br0">&#40;</span><span class="re1">$numero</span><span class="sy0">,</span><span class="nu0">4</span><span class="sy0">,</span><span class="nu0">1</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="co1">//echo &quot;El numero es: $argv[2]\n&quot;;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="co1">//echo &quot;El prefijo es: $prefijo\n&quot;;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="co1">//echo &quot;El prefijo2 es: $prefijo2\n&quot;;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re1">$db</span> <span class="sy0">=</span> <span class="kw2">new</span> PDO<span class="br0">&#40;</span><span class="re1">$dbString</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re1">$query</span> <span class="sy0">=</span> <span class="st0">&quot;SELECT fkCompania,prefijo, prefijo2 FROM prefijos WHERE prefijo = &#39;{$prefijo}&#39;&quot;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re1">$resultado</span> <span class="sy0">=</span> <span class="re1">$db</span><span class="sy0">-&gt;</span><span class="me1">query</span><span class="br0">&#40;</span><span class="re1">$query</span><span class="sy0">,</span>PDO<span class="sy0">::</span><span class="me2">FETCH_ASSOC</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re1">$filas</span> <span class="sy0">=</span> <span class="re1">$resultado</span><span class="sy0">-&gt;</span><span class="me1">fetchAll</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re1">$totalRegistros</span> <span class="sy0">=</span> <span class="kw3">count</span><span class="br0">&#40;</span><span class="re1">$filas</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="re1">$totalRegistros</span> <span class="sy0">&lt;=</span> <span class="nu0">0</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// Menor o igual a 0, no hay registros</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//echo &quot;Ese prefijo no esta en la base\n&quot;;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$agi</span><span class="sy0">-&gt;</span><span class="me1">verbose</span><span class="br0">&#40;</span><span class="st0">&quot;No se encontro el prefijo&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">exit</span><span class="br0">&#40;</span><span class="nu0">1</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span> <span class="kw1">else</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="re1">$totalRegistros</span> <span class="sy0">&gt;</span> <span class="nu0">1</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// mayor que 1, hay mas de un resultado</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">foreach</span> <span class="br0">&#40;</span><span class="re1">$filas</span> <span class="kw1">as</span> <span class="re1">$fila</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="re1">$fila</span><span class="br0">&#91;</span><span class="st0">&#39;prefijo2&#39;</span><span class="br0">&#93;</span> <span class="sy0">==</span> <span class="re1">$prefijo2</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//echo &quot;Mas de 1 Cia: {$fila[&#39;fkCompania&#39;]}\n&quot;;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$q</span> <span class="sy0">=</span> <span class="st0">&quot;SELECT nombreCompania, tipoCompania FROM companias WHERE idCompanias = &#39;{$fila[&#39;fkCompania&#39;]}&#39;&quot;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span> <span class="kw1">else</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//solo una coincidencia</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//echo &quot;Solo 1 Cia: {$filas[0][&#39;fkCompania&#39;]}\n&quot;;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$q</span> <span class="sy0">=</span> <span class="st0">&quot;SELECT nombreCompania, tipoCompania FROM companias WHERE idCompanias = &#39;{$filas[0][&#39;fkCompania&#39;]}&#39;&quot;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="sy0">!</span><span class="kw3">isset</span><span class="br0">&#40;</span><span class="re1">$q</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$agi</span><span class="sy0">-&gt;</span><span class="me1">verbose</span><span class="br0">&#40;</span><span class="st0">&quot;No se encontro el prefijo&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">exit</span><span class="br0">&#40;</span><span class="nu0">1</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span> <span class="kw1">else</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$res</span> <span class="sy0">=</span> <span class="re1">$db</span><span class="sy0">-&gt;</span><span class="me1">query</span><span class="br0">&#40;</span><span class="re1">$q</span><span class="sy0">,</span>PDO<span class="sy0">::</span><span class="me2">FETCH_ASSOC</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$info</span> <span class="sy0">=</span> <span class="re1">$res</span><span class="sy0">-&gt;</span><span class="me1">fetchAll</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//echo &quot;Compania: {$info[0][&#39;nombreCompania&#39;]}\n&quot;;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//echo &quot;Tipo: {$info[0][&#39;tipoCompania&#39;]}\n&quot;;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$agi</span><span class="sy0">-&gt;</span><span class="me1">verbose</span><span class="br0">&#40;</span><span class="st0">&quot;Tipo: {$info[0][&#39;tipoCompania&#39;]} &#8211; Compania: {$info[0][&#39;nombreCompania&#39;]}&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="re1">$userfield</span> <span class="sy0">==</span> <span class="kw2">true</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$agi</span><span class="sy0">-&gt;</span><span class="me1">set_variable</span><span class="br0">&#40;</span><span class="st0">&quot;CDR(userfield)&quot;</span><span class="sy0">,</span><span class="re1">$info</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="st0">&#39;nombreCompania&#39;</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw3">exit</span><span class="br0">&#40;</span><span class="nu0">1</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">?&gt;</span></div>
</li>
</ol>
</div>
<p>o puedes <a href="http://spooky.cl/blog/cia.phps">descargarlo</a></p>
<p>recuerda dejarlo con permisos de ejecución (o asterisk no será capaz de ejecutarlo), puedes probarlo ejecutando ./cia.php 0 74567890</p>
<p>Ahora debemos integrarlo al dialplan de asterisk, esto se hace escribiendo algo como esto dentro del contexto de las llamadas (voy a poner el ejemplo de una llamada a celular)</p>
<div class="geshi no php">
<ol>
<li class="li1">
<div class="de1">exten <span class="sy0">=&gt;</span> <span class="nu0">09</span><span class="sy0">.,</span><span class="nu0">1</span><span class="sy0">,</span>AGI<span class="br0">&#40;</span>cia<span class="sy0">.</span>php<span class="sy0">,</span><span class="nu0">2</span><span class="sy0">,</span>$<span class="br0">&#123;</span>EXTEN<span class="br0">&#125;</span><span class="br0">&#41;</span></div>
</li>
</ol>
</div>
<p>dentro del contexto que tienes habilitado para llamar, dentro de la llamada AGI tenemos el primer parametro del AGI mismo, el segundo parametro es la cantidad de digitos a ignorar desde la izquierda, y el tercer parámetro es el numero de celular, en este caso con formato 09+Celular.</p>
<p>lo que hace el programa es toma el numero completo (0974567890) e ignora los 2 primeros digitos (09) y realiza las verificaciones con los restantes (74567890)</p>
<p>Requisitos:</p>
<ul>
<li>El programa usa PHP5 y <a href="http://sourceforge.net/projects/phpagi/">phpagi</a>, necesitas descargar e instalar la librería al directorio /var/lib/asterisk/agi-bin/</li>
<li>Necesitas la extension PDO de PHP5. php5-pdo en Debian php-pdo en CentOS, si usas elastix u otra versión empaquetada es probable que ya la tengas instalada.</li>
</ul>
<img src="http://feeds.feedburner.com/~r/mariofix/~4/wfTTKkvLJSI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://mariofix.com/2009/08/reconocer-la-compania-a-la-que-pertenece-un-numero.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://mariofix.com/2009/08/reconocer-la-compania-a-la-que-pertenece-un-numero.html</feedburner:origLink></item>
		<item>
		<title>Habilitacion de Servicio de Carrier</title>
		<link>http://feedproxy.google.com/~r/mariofix/~3/bWQRC87eHbk/habilitacion-de-servicio-de-carrier.html</link>
		<comments>http://mariofix.com/2009/06/habilitacion-de-servicio-de-carrier.html#comments</comments>
		<pubDate>Fri, 05 Jun 2009 22:18:00 +0000</pubDate>
		<dc:creator>mariofix</dc:creator>
				<category><![CDATA[Guias y Manuales]]></category>
		<category><![CDATA[agi]]></category>
		<category><![CDATA[asterisk]]></category>
		<category><![CDATA[carrier]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[telefonia]]></category>

		<guid isPermaLink="false">http://mariofix.com/2009/06/habilitacion-de-servicio-de-carrier.html</guid>
		<description><![CDATA[Habitualmente encontramos que necesitamos habilitar un servicio de carrier en nuestra central. Esto quiere decir que nosotros llamamos a un número y la central nos da tono para poder llamar. Esto es esencialmente útil en casos donde tenemos un muy buen plan de teléfono o las tarifas de nuestro proveedor IP son mucho mejores en [...]]]></description>
			<content:encoded><![CDATA[<p>Habitualmente encontramos que necesitamos habilitar un servicio de carrier en nuestra central. Esto quiere decir que nosotros llamamos a un número y la central nos da tono para poder llamar. Esto es esencialmente útil en casos donde tenemos un muy buen plan de teléfono o las tarifas de nuestro proveedor IP son mucho mejores en algunos tramos (celular, internacional, etc).</p>
<p>La idea de este tutorial es habilitar nuestra central para recibir una llamada, validar el numero entrante contra una lista y dar tono de llamada de nuestra central, tal cual fuese un anexo interno.</p>
<p>Lo primero es generar el dialplan necesario</span></p>
<div class="geshi no php">
<ol>
<li class="li1">
<div class="de1"><span class="br0">&#91;</span>carrier<span class="br0">&#93;</span></div>
</li>
<li class="li1">
<div class="de1">exten <span class="sy0">=&gt;</span> <span class="nu0">9000</span><span class="sy0">,</span><span class="nu0">1</span><span class="sy0">,</span>NoOp<span class="br0">&#40;</span>Entrando al Sistema Carrier<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">exten <span class="sy0">=&gt;</span> <span class="nu0">9000</span><span class="sy0">,</span>n<span class="sy0">,</span>AGI<span class="br0">&#40;</span>carrier<span class="sy0">.</span>php<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">exten <span class="sy0">=&gt;</span> <span class="nu0">1</span><span class="sy0">,</span><span class="nu0">1</span><span class="sy0">,</span>Answer</div>
</li>
<li class="li1">
<div class="de1">exten <span class="sy0">=&gt;</span> <span class="nu0">1</span><span class="sy0">,</span>n<span class="sy0">,</span>Set<span class="br0">&#40;</span>TIMEOUT<span class="br0">&#40;</span>digit<span class="br0">&#41;</span><span class="sy0">=</span><span class="nu0">5</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">exten <span class="sy0">=&gt;</span> <span class="nu0">1</span><span class="sy0">,</span>n<span class="sy0">,</span>Set<span class="br0">&#40;</span>TIMEOUT<span class="br0">&#40;</span>response<span class="br0">&#41;</span><span class="sy0">=</span><span class="nu0">15</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">exten <span class="sy0">=&gt;</span> <span class="nu0">1</span><span class="sy0">,</span>n<span class="sy0">,</span>DISA<span class="br0">&#40;</span>no<span class="sy0">-</span>password<span class="sy0">,</span>contexto_salida<span class="br0">&#41;</span></div>
</li>
</ol>
</div>
<p>la idea es que cada vez que llamemos al 9000 se ejecute un <a href="http://www.voip-info.org/wiki/view/Asterisk+AGI">AGI</a>, por preferencia personal voy a usar la implementacion de PHP para escribir los AGIs, pero pueden usar la que Uds. estimen conveniente</p>
<div class="geshi no php">
<div class="head">#!/usr/bin/php -q</div>
<ol>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">include</span><span class="br0">&#40;</span><span class="st0">&quot;phpagi.php&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re1">$agi</span> <span class="sy0">=</span> <span class="kw2">new</span> AGI<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re1">$numero</span> <span class="sy0">=</span> <span class="re1">$agi</span><span class="sy0">-&gt;</span><span class="me1">parse_callerid</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re1">$numero</span> <span class="sy0">=</span> <span class="re1">$numero</span><span class="br0">&#91;</span><span class="st0">&#39;username&#39;</span><span class="br0">&#93;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">function</span> numero_valido<span class="br0">&#40;</span><span class="re1">$numero</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re1">$numeros_permitidos</span> <span class="sy0">=</span> <span class="kw3">array</span><span class="br0">&#40;</span><span class="nu0">5623416289</span><span class="sy0">,</span><span class="nu0">56985351598</span><span class="sy0">,</span><span class="nu0">56983514203</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re1">$valido</span> <span class="sy0">=</span> <span class="kw2">false</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="kw3">in_array</span><span class="br0">&#40;</span><span class="re1">$numero</span><span class="sy0">,</span><span class="re1">$numeros_permitidos</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$valido</span> <span class="sy0">=</span> <span class="kw2">true</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">return</span> <span class="re1">$valido</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">if</span> <span class="br0">&#40;</span><span class="sy0">!</span>numero_valido<span class="br0">&#40;</span><span class="re1">$numero</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re1">$agi</span><span class="sy0">-&gt;</span><span class="me1">verbose</span><span class="br0">&#40;</span><span class="st0">&quot;El numero $numero no esta permitido&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re1">$agi</span><span class="sy0">-&gt;</span><span class="me1">Hangup</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span> <span class="kw1">else</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re1">$agi</span><span class="sy0">-&gt;</span><span class="me1">verbose</span><span class="br0">&#40;</span><span class="st0">&quot;Acceso permitido: $numero&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re1">$agi</span><span class="sy0">-&gt;</span><span class="me1">Goto</span><span class="br0">&#40;</span><span class="st0">&quot;carrier&quot;</span><span class="sy0">,</span><span class="st0">&quot;1&quot;</span><span class="sy0">,</span><span class="st0">&quot;1&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw3">exit</span><span class="br0">&#40;</span><span class="nu0">0</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
</ol>
</div>
<p>Cuando la llamada entra se ejecuta este script PHP el cual realiza una verificacion del numero que esta llamando, si este se encuentra dentro del arreglo de numeros permitidos, si no esta permitido simplemente corta la llamada y si esta permitido redirige la llamada al contexto carrier, prioridad 1 de la extension 1 y comienza su ejecución.</p>
<p>La aplicacion que hace la magia se llama <a href="http://www.voip-info.org/wiki/view/Asterisk+DISA">DISA</a> y es la que permite entregar tono de llamada a un número externo.</p>
<div class="geshi no php">
<ol>
<li class="li1">
<div class="de1">exten <span class="sy0">=&gt;</span> <span class="nu0">1</span><span class="sy0">,</span>n<span class="sy0">,</span>DISA<span class="br0">&#40;</span>no<span class="sy0">-</span>password<span class="sy0">,</span>contexto_salida<span class="br0">&#41;</span></div>
</li>
</ol>
</div>
<p>ahi le estamos diciendo que nos de tono de llamada, sin pedir una contraseña en el contexto &#8220;contexto_salida&#8221;, si estas usando freePBX este debiese ser &#8220;from-internal&#8221;, de esa forma podrás llamar como si fueses un anexo de la central.</p>
<p>Quiza te preguntaras, y para que me sirve?, en Chile hay algunas compañias de celular que ofrecen llamadas gratuitas a un número de red fija, y en tu casa/oficina tienes un muy buen proveedor telefonico que te entrega muy buenos precios. Bueno, ahi tienes un uso.</p>
<p>Bueno, eso es lo basico que puedes realizar, desde aqui puedes generar un sin fin de usos y formas de implementación para distintos casos.</p>
<p>Consideraciones finales:<br />
- Necesitas descargar e instalar <a href="http://sourceforge.net/projects/phpagi/">phpagi</a><br />
- El archivo tiene que tener permisos de ejecución.<br />
- El archivo debe estar en el directorio /var/lib/asterisk/agi-bin/</p>
<img src="http://feeds.feedburner.com/~r/mariofix/~4/bWQRC87eHbk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://mariofix.com/2009/06/habilitacion-de-servicio-de-carrier.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://mariofix.com/2009/06/habilitacion-de-servicio-de-carrier.html</feedburner:origLink></item>
		<item>
		<title>Expresiones regulares para numeros chilenos</title>
		<link>http://feedproxy.google.com/~r/mariofix/~3/0rmrkVVmSaQ/expresiones-regulares-para-numeros-chilenos.html</link>
		<comments>http://mariofix.com/2009/05/expresiones-regulares-para-numeros-chilenos.html#comments</comments>
		<pubDate>Sat, 23 May 2009 05:00:00 +0000</pubDate>
		<dc:creator>mariofix</dc:creator>
				<category><![CDATA[Guias y Manuales]]></category>
		<category><![CDATA[asterisk]]></category>
		<category><![CDATA[dialplan]]></category>
		<category><![CDATA[expresion]]></category>
		<category><![CDATA[numeros]]></category>
		<category><![CDATA[regular]]></category>
		<category><![CDATA[telefonia]]></category>

		<guid isPermaLink="false">http://mariofix.com/2009/05/expresiones-regulares-para-numeros-chilenos.html</guid>
		<description><![CDATA[En chile la numeración publica telefónica está regulada por la SUBTEL (Subsecretaria de Telecomunicaciones), esta publicó un archivo con todos los prefijos de llamado &#8220;Bases de numeración telefónica&#8221; y la compañía a la cual se le concesionaron dichos números. Nosotros estamos divididos por áreas primarias para los números fijos, son los conocidos prefijos o códigos [...]]]></description>
			<content:encoded><![CDATA[<p>En chile la numeración publica telefónica está regulada por la <a href="http://www.subtel.cl/">SUBTEL</a> (Subsecretaria de Telecomunicaciones), esta publicó un archivo con todos los prefijos de llamado &#8220;<a href="http://www.subtel.cl/prontus_subtel/site/artic/20061230/pags/20061230210846.html">Bases de numeración telefónica</a>&#8221; y la compañía a la cual se le concesionaron dichos números.</p>
<p>Nosotros estamos divididos por áreas primarias para los números fijos, son los conocidos prefijos o códigos de ciudad. (2 para santiago, 32 para Valparaiso, 41 Concepción, etc) y areas virtuales para los números celulares (6, 7, 8 y 9), escribí un par de expresiones regulares para indicar el tipo de númeración cuando se le pasa por parametro un numero de telefono.</p>
<p><span style="font-weight: bold;">Números Cortos</span>: Carabineros, bomberos, carriers, etc<br />
Expresion Regular: ^(1[0-3]{2})$<br />
Patrón Asterisk: 1[0-3][0-3]</p>
<p><span style="font-weight: bold;">Números Fijos</span>: Santiago<br />
Expresión Regular: ^[2-9][0-9]{6}$<br />
Patrón Asterisk: NXXXXXX</p>
<p><span style="font-weight: bold;">Números Fijos</span>: Regiones<br />
Expresión Regular: ^(0[3-7][1-9][2-9][0-9]{5,6})$<br />
Patrón Asterisk: 0[3-7]Z[2-9]XXXXX y 0[3-7]Z[2-9]XXXXXX</p>
<p><span style="font-weight: bold;">Números Celulares</span>: Todas las compañias<br />
Expresión Regular: ^(09[6-9][0-9]{7})$<br />
Patrón Asterisk: 09[6-9]XXXXXXX</p>
<p><span style="font-weight: bold;">Servicios</span>: 600 y 700<br />
Expresión Regular: ^([6-7]00[1-9]{7})$<br />
Patrón Asterisk: [6-7]00ZZZZZZZ</p>
<p><span style="font-weight: bold;">Servicios</span>: Números Gratuitos 800<br />
Expresión Regular: ^(800[1-9]{6})$<br />
Patrón Asterisk: 800ZZZZZZ</p>
<img src="http://feeds.feedburner.com/~r/mariofix/~4/0rmrkVVmSaQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://mariofix.com/2009/05/expresiones-regulares-para-numeros-chilenos.html/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		<feedburner:origLink>http://mariofix.com/2009/05/expresiones-regulares-para-numeros-chilenos.html</feedburner:origLink></item>
		<item>
		<title>Distincion de Cortes en freePBX</title>
		<link>http://feedproxy.google.com/~r/mariofix/~3/i9PWVFke8kk/distincion-de-cortes-en-freepbx.html</link>
		<comments>http://mariofix.com/2009/05/distincion-de-cortes-en-freepbx.html#comments</comments>
		<pubDate>Tue, 12 May 2009 20:07:00 +0000</pubDate>
		<dc:creator>mariofix</dc:creator>
				<category><![CDATA[Guias y Manuales]]></category>
		<category><![CDATA[asterisk freepbx]]></category>
		<category><![CDATA[cortes]]></category>
		<category><![CDATA[hangupcause]]></category>

		<guid isPermaLink="false">http://mariofix.com/2009/05/distincion-de-cortes-en-freepbx-2.html</guid>
		<description><![CDATA[Soy usuario de freePBX desde hace ya unos años, y lo conocí cuando hice las primeras implementaciones con trixbox 1.2.2 (A.K.A. Asterisk@Home), siempre me ha molestado el hecho de que en freePBX cuando una llamada no puede ser cursada aparece un mensaje &#8220;No hay Lineas Disponibles&#8221; o algun otro mensaje que nada tiene que ver [...]]]></description>
			<content:encoded><![CDATA[<div style="text-align: justify;">Soy usuario de freePBX desde hace ya unos años, y lo conocí cuando hice las primeras implementaciones con trixbox 1.2.2 (A.K.A. Asterisk@Home), siempre me ha molestado el hecho de que en freePBX cuando una llamada no puede ser cursada aparece un mensaje &#8220;No hay Lineas Disponibles&#8221; o algun otro mensaje que nada tiene que ver con la real causa de la no comunicación, esto puede ser exponencialmente mas molesto cuando esta implementación se encuentra en un callcenter. Es por eso que hice una pequela modificacion a la macro de marcado de freePBX para que no me envíe a la grabación por defecto cada vez que no me puedo comunicar si no que me entregue grabaciones  predefinidas para cada tipo de error.</div>
<div style="text-align: justify;">Probablemente haga de esto un modulo para freePBX quizá no, el procedimiento que aqui entrego es relativamente peligroso, si eres principiante <span style="font-weight: bold;">respalda</span> todos los archivos que vayas a modificar, si no eres tan principiante me imagino que no es necesario recordartelo <img src='http://mariofix.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </div>
<div style="text-align: justify;">La teoría dice que cada vez que tu llamada no puede ser cursada, esta emite un codigo de error (similar a los números en HTTP, recuerdan 404?), este codigo corresponde a un codigo <a href="http://www.voip-info.org/wiki/view/ISDN">isdn</a> y está muy documentado (<a href="http://www.voip-info.org/wiki/index.php?page_id=569">Voip-Info</a>, <a href="http://networking.ringofsaturn.com/RemoteAccess/isdncausecodes.php">ISDN Cause Codes</a>, <a href="http://www.cisco.com/en/US/docs/ios/11_3/debug/command/reference/disdn.html">Cisco</a>).</div>
<div style="text-align: justify;">Si estan en chile Telefonica reemplaza el tono de ocupado por un mensaje &#8220;El número que está llamando no tiene teléfono&#8221;, este es un claro ejemplo de una implementacion de &#8220;Cause Codes&#8221;.</div>
<div style="text-align: justify;">Lo que me pidieron en un CallCenter fue cambiar el odioso mensaje de freePBX &#8220;No hay lineas disponibles&#8221; a su respectiva razón de no comunicación, ya que esta información era parte de su operación diaria. Lo primero que hice fue agrupar codigos de causa en algunos grupos que parezcan lógicos entre sí, de esta forma me quedó lo siguiente</div>
<p>No Existe: 1<br />
No Disponible: 2, 3, 6, 31, 38, 41, 42, 43, 21<br />
Ocupado: 17, 34, 44<br />
No Contesta: 18, 19<br />
Cambiado: 22<br />
Ya no Existe: 27<br />
Incorrecto: 28, 88, 95<br />
Error en La red: 102, 111, 127</p>
<div style="text-align: justify;">Esta agrupación se hizo en conjunto con las personas del CallCenter y la agrupación se realizó en la base de lo que era lógico para ellos y su operación. Estos grupos pueden cambiar y no significa que se use de esta forma.</div>
<div style="text-align: justify;">Luego de tener los grupos, se le pidió a una operadora del callcenter que hiciera una serie de grabaciones indicando el error para cada uno de los grupos, de esta forma logramos reducir 23 de los 127 errores más frecuentes a tan sólo 8 grabaciones.</div>
<div style="text-align: justify;">A partir de freePBX 2.3 existe el archivo <span style="font-style: italic;">extensions_override_freepbx.conf</span>, en este archivo copié la macro que realiza el discado (la que efectivamente ejecuta el comando Dial) y la pegué en este archivo (para versiones anteriores a la 2.3, esta macro se encuentra en <span style="font-style: italic;">extensions.conf</span> y este archivo no es sobreescrito en cada reload)</div>
<pre name="code" class="Xml">
[macro-dialout-trunk]
include => macro-dialout-trunk-custom
exten => s,1,Set(DIAL_TRUNK=${ARG1})
exten => s,n,ExecIf($[$["${ARG3}" != ""] &amp; $["${DB(AMPUSER/${AMPUSER}/pinless)}" != "NOPASSWD"]],Authenticate,${ARG3})
exten => s,n,GotoIf($["x${OUTDISABLE_${DIAL_TRUNK}}" = "xon"]?disabletrunk,1)
exten => s,n,Set(DIAL_NUMBER=${ARG2})
exten => s,n,Set(DIAL_TRUNK_OPTIONS=${DIAL_OPTIONS})
exten => s,n,Set(GROUP()=OUT_${DIAL_TRUNK})
exten => s,n,GotoIf($["${OUTMAXCHANS_${DIAL_TRUNK}}foo" = "foo"]?nomax)
exten => s,n,GotoIf($[ ${GROUP_COUNT(OUT_${DIAL_TRUNK})} > ${OUTMAXCHANS_${DIAL_TRUNK}} ]?chanfull)
exten => s,n(nomax),GotoIf($["${INTRACOMPANYROUTE}" = "YES"]?skipoutcid)
exten => s,n,Set(DIAL_TRUNK_OPTIONS=${TRUNK_OPTIONS})
exten => s,n,Macro(outbound-callerid,${DIAL_TRUNK})
exten => s,n(skipoutcid),AGI(fixlocalprefix)
exten => s,n,Set(OUTNUM=${OUTPREFIX_${DIAL_TRUNK}}${DIAL_NUMBER})
exten => s,n,Set(custom=${CUT(OUT_${DIAL_TRUNK},:,1)})
exten => s,n,GotoIf($[$["${MOHCLASS}" = "default"] | $["foo${MOHCLASS}" = "foo"]]?gocall)
exten => s,n,Set(DIAL_TRUNK_OPTIONS=M(setmusic^${MOHCLASS})${DIAL_TRUNK_OPTIONS})
exten => s,n(gocall),Macro(dialout-trunk-predial-hook,)
exten => s,n,GotoIf($["${PREDIAL_HOOK_RET}" = "BYPASS"]?bypass,1)
exten => s,n,GotoIf($["${custom}" = "AMP"]?customtrunk)
exten => s,n,Dial(${OUT_${DIAL_TRUNK}}/${OUTNUM},300,${DIAL_TRUNK_OPTIONS})
exten => s,n,Goto(s-${HANGUPCAUSE},1) ; Modificacion de Mario
;exten => s,n,Goto(s-${DIALSTATUS},1) ; Linea Original freePBX
exten => s,n(customtrunk),Set(pre_num=${CUT(OUT_${DIAL_TRUNK},$,1)})
exten => s,n,Set(the_num=${CUT(OUT_${DIAL_TRUNK},$,2)})
exten => s,n,Set(post_num=${CUT(OUT_${DIAL_TRUNK},$,3)})
exten => s,n,GotoIf($["${the_num}" = "OUTNUM"]?outnum:skipoutnum)
exten => s,n(outnum),Set(the_num=${OUTNUM})
exten => s,n(skipoutnum),Dial(${pre_num:4}${the_num}${post_num},300,${DIAL_TRUNK_OPTIONS})
exten => s,n,Goto(s-${DIALSTATUS},1)
exten => s,n(chanfull),Noop(max channels used up)
; INICIO MODIFICACIONES MARIO

; NUMERO NO EXISTE
exten => s-1,1,NoOp(Mario Dice: Numero No Existe)
exten => s-1,n,Playback(custom/numero-no-existe,noanswer)
exten => s-1,n,Busy(20)

;NUMERO NO ESTA DISPONIBLE
exten => s-2,1,NoOp(Mario Dice: Numero No Esta Disponible)
exten => s-2,n,Playback(custom/numero-no-disponible,noanswer)
exten => s-2,n,Busy(20)

exten => s-3,1,NoOp(Mario Dice: Numero No Esta Disponible)
exten => s-3,n,Playback(custom/numero-no-disponible,noanswer)
exten => s-3,n,Busy(20)

exten => s-6,1,NoOp(Mario Dice: Numero No Esta Disponible)
exten => s-6,n,Playback(custom/numero-no-disponible,noanswer)
exten => s-6,n,Busy(20)

exten => s-31,1,NoOp(Mario Dice: Numero No Esta Disponible)
exten => s-31,n,Playback(custom/numero-no-disponible,noanswer)
exten => s-31,n,Busy(20)

exten => s-38,1,NoOp(Mario Dice: Numero No Esta Disponible)
exten => s-38,n,Playback(custom/numero-no-disponible,noanswer)
exten => s-38,n,Busy(20)

exten => s-41,1,NoOp(Mario Dice: Numero No Esta Disponible)
exten => s-41,n,Playback(custom/numero-no-disponible,noanswer)
exten => s-41,n,Busy(20)

exten => s-42,1,NoOp(Mario Dice: Numero No Esta Disponible)
exten => s-42,n,Playback(custom/numero-no-disponible,noanswer)
exten => s-42,n,Busy(20)

exten => s-43,1,NoOp(Mario Dice: Numero No Esta Disponible)
exten => s-43,n,Playback(custom/numero-no-disponible,noanswer)
exten => s-43,n,Busy(20)

exten => s-21,1,NoOp(Mario Dice: Numero No Esta Disponible)
exten => s-21,n,Playback(custom/numero-no-disponible,noanswer)
exten => s-21,n,Busy(20)

; NUMERO OCUPADO
exten => s-17,1,NoOp(Mario Dice: Numero Ocupado)
exten => s-17,n,Playback(custom/numero-ocupado,noanswer)
exten => s-17,n,Busy(20)

exten => s-34,1,NoOp(Mario Dice: Numero Ocupado)
exten => s-34,n,Playback(custom/numero-ocupado,noanswer)
exten => s-34,n,Busy(20)

exten => s-44,1,NoOp(Mario Dice: Numero Ocupado)
exten => s-44,n,Playback(custom/numero-ocupado,noanswer)
exten => s-44,n,Busy(20)

; NUMERO NO CONTESTA
exten => s-18,1,NoOp(Mario Dice: Numero No Contesta)
exten => s-18,n,Playback(custom/numero-no-contesta,noanswer)
exten => s-18,n,Playback(pls-try-call-later,noanswer)
exten => s-18,n,Busy(20)

exten => s-19,1,NoOp(Mario Dice: Numero No Contesta)
exten => s-19,n,Playback(custom/numero-no-contesta,noanswer)
exten => s-19,n,Busy(20)

;NUMERO CAMBIADO
exten => s-22,1,NoOp(Mario Dice: Numero Cambiado)
exten => s-22,n,Playback(custom/numero-cambiado,noanswer)
exten => s-22,n,Busy(20)

; NUMERO YA NO EXISTE
exten => s-27,1,NoOp(Mario Dice: Numero Ya no existe)
exten => s-27,n,Playback(custom/numero-ya-no-existe,noanswer)
exten => s-27,n,Busy(20)

; NUMERO INCORRECTO
exten => s-28,1,NoOp(Mario Dice: Numero Incorrecto)
exten => s-28,n,Playback(custom/numero-incorrecto,noanswer)
exten => s-28,n,Busy(20)

exten => s-88,1,NoOp(Mario Dice: Numero Incorrecto)
exten => s-88,n,Playback(custom/numero-incorrecto,noanswer)
exten => s-88,n,Busy(20)

exten => s-95,1,NoOp(Mario Dice: Numero Incorrecto)
exten => s-95,n,Playback(custom/numero-incorrecto,noanswer)
exten => s-95,n,Busy(20)

; ERROR EN LA RED
exten => s-102,1,NoOp(Mario Dice: Error en la red)
exten => s-102,n,Playback(custom/error-red,noanswer)
exten => s-102,n,Busy(20)

exten => s-111,1,NoOp(Mario Dice: Error en la red)
exten => s-111,n,Playback(custom/error-red,noanswer)
exten => s-111,n,Busy(20)

exten => s-127,1,NoOp(Mario Dice: Error en la red)
exten => s-127,n,Playback(custom/error-red,noanswer)
exten => s-127,n,Busy(20)

; FIN MODIFICACIONES MARIO
exten => s-BUSY,1,Noop(Dial failed due to trunk reporting BUSY - giving up)
exten => s-BUSY,n,Playtones(busy)
exten => s-BUSY,n,Busy(20)
exten => s-NOANSWER,1,Noop(Dial failed due to trunk reporting NOANSWER - giving up)
exten => s-NOANSWER,n,Playtones(congestion)
exten => s-NOANSWER,n,Congestion(20)
exten => s-CANCEL,1,Noop(Dial failed due to trunk reporting CANCEL - giving up)
exten => s-CANCEL,n,Playtones(congestion)
exten => _s-.,1,GotoIf($["x${OUTFAIL_${ARG1}}" = "x"]?noreport)
exten => _s-.,n,AGI(${OUTFAIL_${ARG1}})
exten => _s-.,n(noreport),Noop(TRUNK Dial failed due to ${DIALSTATUS} - failing through to other trunks)
exten => disabletrunk,1,Noop(TRUNK: ${OUT_${DIAL_TRUNK}} DISABLED - falling through to next trunk)
exten => bypass,1,Noop(TRUNK: ${OUT_${DIAL_TRUNK}} BYPASSING because dialout-trunk-predial-hook)
exten => h,1,Macro(hangupcall,)
</pre>
<div style="text-align: justify;">Cabe destacar que esta modificación no es muy aplicable si utilizas más de un trunk para una Ruta de Salida (Outbound Route), el comando Playblack tiene como primer parametro la grabación y como segundo parametro el disposition, para que nuestro CDR no tome estas llamadas al momento de hacer sus reportes.</div>
<img src="http://feeds.feedburner.com/~r/mariofix/~4/i9PWVFke8kk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://mariofix.com/2009/05/distincion-de-cortes-en-freepbx.html/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://mariofix.com/2009/05/distincion-de-cortes-en-freepbx.html</feedburner:origLink></item>
		<item>
		<title>Discadores Automaticos con GNUDialer</title>
		<link>http://feedproxy.google.com/~r/mariofix/~3/xyRQ_zHkNbw/discadores-automaticos-con-gnudialer.html</link>
		<comments>http://mariofix.com/2009/05/discadores-automaticos-con-gnudialer.html#comments</comments>
		<pubDate>Mon, 04 May 2009 15:14:00 +0000</pubDate>
		<dc:creator>mariofix</dc:creator>
				<category><![CDATA[Guias y Manuales]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[asterisk discador]]></category>
		<category><![CDATA[gnudialer]]></category>
		<category><![CDATA[ivr]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[predictivo]]></category>
		<category><![CDATA[progresivo]]></category>

		<guid isPermaLink="false">http://mariofix.com/2009/05/discadores-automaticos-con-gnudialer-2.html</guid>
		<description><![CDATA[Este es el primer manual tipo HowTo que escribo, cualquier comentario sobre la estructura o el contenido, por favor, es bienvenido. Hace poco más de un año me encomendaron generar una solución de discador automático, conocido como Robodialer o Autodialer, la idea era poder hacer cobranza preventiva a ciertos clientes de una casa comercial. Lo [...]]]></description>
			<content:encoded><![CDATA[<p>Este es el primer manual tipo HowTo que escribo, cualquier comentario sobre la estructura o el contenido, por favor, es bienvenido.</p>
<p>Hace poco más de un año me encomendaron generar una solución de discador automático, conocido como Robodialer o Autodialer, la idea era poder hacer cobranza preventiva a ciertos clientes de una casa comercial. Lo se, es bastante molesto pero sin embargo era parte de mi trabajo y un buen desafío en ese minuto.</p>
<p>Pasé por muchas empresas que ofrecían este servicio, todas con soluciones propietarias y con costos altísimos, así que decidí hacer una solución propia utilizando únicamente software libre -no necesariamente gratuito.</p>
<p><span class="fullpost"><br />
Llegue a dos soluciones <a href="http://astguiclient.sourceforge.net/vicidial.html">VICIDIAL</a> y <a href="http://www.gnudialer.org/">GNUDialer</a> instalé y probé ambas soluciones y según lo que recuerdo GNUDialer servía más a mi propósito ya que la configuración es mucho más simple que la de vicidial, si bien la documentación no es tan completa, no era tan necesaria que las opciones de configuración se explicaban solas (algo que creo que es muy importante en cualquier sistema), otro factor muy importante es la escalabilidad, la diferencia entre vicidial y gnudialer es que el primero utiliza salones de conferencia para hacer el bridge de las llamadas, esto quiere decir que si quisiéramos tener 10 llamadas simultaneas, debiésemos crear 10 salones de conferencia, a diferencia de gnudialer que usa AgentLogIn para las llamadas, estoy seguro que hay más diferencias y &#8220;pros&#8221; como &#8220;cons&#8221; para cada uno de los sistemas, pero no es parte de este post&#8230; por ahora.</span></p>
<p>Finalmente la decisión fue para GNUDialer y debo decir que estoy muy conforme ya que probó ser un excelente sistema.</p>
<p>Aquí explico los pasos para su instalación, si deseas saber más sobre como usar las funciones del discador puedes ver la página oficial del proyecto o bien escribirme a mario[ARROBA]spooky.cl</p>
<p><a href="http://spooky.cl/documentos/GNUDialer_Inst.pdf">Descargar Documento</a></p>
<p>UPDATE 11/05/2009: Hice unas modificaciones a errores en el manual.</p>
<p><span class="fullpost"> </span></p>
<img src="http://feeds.feedburner.com/~r/mariofix/~4/xyRQ_zHkNbw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://mariofix.com/2009/05/discadores-automaticos-con-gnudialer.html/feed</wfw:commentRss>
		<slash:comments>49</slash:comments>
		<feedburner:origLink>http://mariofix.com/2009/05/discadores-automaticos-con-gnudialer.html</feedburner:origLink></item>
		<item>
		<title>Se reabre</title>
		<link>http://feedproxy.google.com/~r/mariofix/~3/9bLGefGMNKo/se-reabre.html</link>
		<comments>http://mariofix.com/2009/04/se-reabre.html#comments</comments>
		<pubDate>Wed, 22 Apr 2009 01:35:00 +0000</pubDate>
		<dc:creator>mariofix</dc:creator>
				<category><![CDATA[Personal]]></category>
		<category><![CDATA[asterisk]]></category>
		<category><![CDATA[blog]]></category>
		<category><![CDATA[nuevo]]></category>
		<category><![CDATA[telefonia]]></category>

		<guid isPermaLink="false">http://mariofix.com/2009/04/se-reabre-2.html</guid>
		<description><![CDATA[Decidí hacer un cambio en este blog y aqui publicaré algunas partes de mi trabajo en el area de Redes, Telefonia IP, Asterisk, AGI, Desarrollo, etc. Algunas de las cosas que estoy viendo en mi tesis &#8220;Implementación de servicios de Telefonia IP para proveedores de servicio&#8221;, asi como algunas otras cosas que vayan saliendo por [...]]]></description>
			<content:encoded><![CDATA[<p>Decidí hacer un cambio en este blog y aqui publicaré algunas partes de mi trabajo en el area de Redes, Telefonia IP, Asterisk, AGI, Desarrollo, etc.</p>
<p>Algunas de las cosas que estoy viendo en mi tesis &#8220;Implementación de servicios de Telefonia IP para proveedores de servicio&#8221;, asi como algunas otras cosas que vayan saliendo por el camino.</p>
<p>Lo primero será una aplicacion que permite la generación de numeros de tarjetas prepago asi como la validación contra un Asterisk para proveer el servicio de carrier, probablemente la licencia no sea GNU pero si será de libre distribución <img src='http://mariofix.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />  y porsupuesto&#8230; gratis.</p>
<img src="http://feeds.feedburner.com/~r/mariofix/~4/9bLGefGMNKo" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://mariofix.com/2009/04/se-reabre.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://mariofix.com/2009/04/se-reabre.html</feedburner:origLink></item>
	</channel>
</rss>

