<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	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/"
	>

<channel>
	<title>openvpn &#8211; Rafael Bonifaz</title>
	<atom:link href="https://rafael.bonifaz.ec/blog/tag/openvpn/feed/" rel="self" type="application/rss+xml" />
	<link>https://rafael.bonifaz.ec/blog</link>
	<description>Software libre, criptografía, privacidad y algo más</description>
	<lastBuildDate>Mon, 11 Apr 2011 13:50:13 +0000</lastBuildDate>
	<language>es</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.1</generator>

<image>
	<url>https://rafael.bonifaz.ec/blog/wp-content/uploads/2019/01/cropped-I4GErw6b_400x400-1-32x32.jpg</url>
	<title>openvpn &#8211; Rafael Bonifaz</title>
	<link>https://rafael.bonifaz.ec/blog</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>OpenVPN how to 1</title>
		<link>https://rafael.bonifaz.ec/blog/2011/04/openvpn-how-to-1/</link>
					<comments>https://rafael.bonifaz.ec/blog/2011/04/openvpn-how-to-1/#comments</comments>
		
		<dc:creator><![CDATA[Rafael Bonifaz]]></dc:creator>
		<pubDate>Mon, 11 Apr 2011 13:50:13 +0000</pubDate>
				<category><![CDATA[ASLE]]></category>
		<category><![CDATA[Comos]]></category>
		<category><![CDATA[FLISOL]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[openvpn]]></category>
		<category><![CDATA[seguridades]]></category>
		<category><![CDATA[Software Libre]]></category>
		<guid isPermaLink="false">https://rafael.bonifaz.ec/blog/?p=480</guid>

					<description><![CDATA[Introducción Una Red Privada Virtual (VPN por sus siglas en inglés) sirve para crear una conexión encriptada entre 2 o más puntos a través de Internet. Un caso de uso típico puede ser permitir al acceso a servicios de una intranet de forma segura desde Internet.  Otro caso típico de uso es interconectar redes locales [&#8230;]]]></description>
										<content:encoded><![CDATA[<h2>Introducción</h2>
<p>Una<strong> Red Privada Virtual </strong>(VPN por sus siglas en inglés) sirve para crear una conexión encriptada entre 2 o más puntos a través de Internet. Un caso de uso típico puede ser permitir al acceso a servicios de una intranet de forma segura desde Internet.  Otro caso típico de uso es interconectar redes locales de 2 ó más sucrusales a través de Internet. En este artículo haremos la primera opción y en un futuro cercano publicaré cómo interconectar 2 redes.</p>
<p>Existen varias implementaciones de VPN y en el mundo de software libre una de las más populares es OpenVPN.  Una de sus grandes ventajas, es que se pueden tener clientes en distintos sistemas operativos com GNU/Linux, Windows, Mac y seguro que en todas las versiones BSD.</p>
<h2>Instalación</h2>
<p>OpenVPN viene por defecto en la mayoría de las distribuciones GNU/Linux. En mi caso suelo utilizar Debian o Ubuntu. La instalación la hice con aptitude:</p>
<p style="padding-left: 30px;"><code>aptitude install openvpn</code></p>
<p>En distros basadas en RPM la instalación se la hace con yum:</p>
<p style="padding-left: 30px;"><code>yum install openvpn</code></p>
<p>Listo , así de fácil y de sencillo.<span id="more-480"></span></p>
<h2>Crear los certificados digitales</h2>
<p>OpenVPN autentica sus clientes a través de llaves públicas y privadas. De esta manera cada cliente tiene su llave privada y debe enviar su llave pública al servidor. Estas llaves son creadas con un certificado conocido como «<em>Certificado de Autoridad</em>«. De esta forma cuando el servidor recibe una llave pública este revisa si esta firmado con el certificado de autoridad. Sino esta no aceptará la conexión.</p>
<p>La forma más fácil de crear estos certificados es utilizando la utilidad easy-rsa que viene en el paquete de OpenVPN. En el caso de debian esta aplicación se encuentra en: <em>/usr/share/doc/openvpn/examples/easy-rsa/2.0/ easy-rsa</em>. Otras distribuciones tendrán una ruta similar.</p>
<p>Copiamos la aplicación a una ruta más fácil de recordar. Personalmente opté por un subdirectorio dentro de /etc/openvpn. Para tener las cosas ordenadas:</p>
<p style="padding-left: 30px;"><code>cp -r /usr/share/doc/openvpn/examples/easy-rsa/2.0/ /etc/openvpn/easy-rsa<br />
</code></p>
<p>Ahora ingresamos al directorio para crear las claves:</p>
<p style="padding-left: 30px;"><code>cd /etc/openvpn/easy-rsa/ </code></p>
<p>Dentro de esta carpeta tenemos un archivo que almacena algunas variables importantes. Recomiendo revisar este archivo y de ser el caso modificar algunas variables.</p>
<p style="padding-left: 30px;"><code>vim vars</code></p>
<p>En mi caso personalice la siguiente parte para que cuando cree los certificados los valores por defecto tengan que ver con mi realidad:</p>
<p style="padding-left: 30px;"><code>export KEY_COUNTRY="EC"<br />
export KEY_PROVINCE="Pichicha"<br />
export KEY_CITY="Cayambe"<br />
export KEY_ORG="Mi empresa"<br />
export KEY_EMAIL="yo@midominio.com" </code></p>
<p>Guardamos y cerramos el archivo. Si no queremos no modificamos el archivo, es algo netamente opcional.</p>
<p>Cargamos las variables de este archivo al shell que estamos utilizando:</p>
<p style="padding-left: 30px;"><code>. vars</code></p>
<p>Borramos las claves previamete creados en caso de existir. Hacer esto solo si es la primera vez que vamos a crear los certificados y las claves.</p>
<p style="padding-left: 30px;"><code>./clean-all </code></p>
<p>Creamos el certificado de autoridad:</p>
<p style="padding-left: 30px;"><code>./build-ca</code></p>
<p>Si modificaron las variables, se darán cuenta que ahora las estaremos utilizando.</p>
<p>Certificado y clave privada para el servidor</p>
<p style="padding-left: 30px;"><code>/build-key-server servidor </code></p>
<p>Esto generara los archivos servidor.crt y servidor.key. donde el archivo .key es la llave privada y .crt es la pública.</p>
<p>Generamos los parámetros <a href="http://en.wikipedia.org/wiki/Diffie%E2%80%93Hellman_key_exchange"> Diffie Helman</a></p>
<p style="padding-left: 30px;"><a href="http://en.wikipedia.org/wiki/Diffie%E2%80%93Hellman_key_exchange"></a><span style="font-family: monospace;">./build-dh</span></p>
<p>Generamos las claves de los clientes.</p>
<p style="padding-left: 30px;"><code>./build-key cliente1<br />
./build-key cliente2<br />
./build-key cliente3<br />
</code></p>
<p>De manera similar al servidor se crearán las claves *.key y *.crt que serán las claves privadas y públicas respectivamente. Las 2 claves las deberemos copiar al cliente.</p>
<p>Listo, hemos creado todos los certificados necesarios y estamos listos para configurar los clientes y el servidor. Es importante sacar un respaldo del directorio /etc/openvpn/easy-rsa ya que ahí están todas las claves, incluido el certificado de autoridad que nos permitirá crear nuevas claves a futuro.</p>
<h3>Resumen de las claves y certificados creados:</h3>
<table border="1">
<tbody>
<tr>
<th>Archivo</th>
<th>Utilizado en</th>
<th>Descripción</th>
<th>Secreto</th>
</tr>
<tr>
<td>ca.ca</td>
<td>Servidor y todos los clientes</td>
<td>Certificado de Autoridad</td>
<td>no</td>
</tr>
<tr>
<td>ca.crt</td>
<td>Máquina donde se crean los certificados</td>
<td>Llave del certificado CA principal</td>
<td>sí</td>
</tr>
<tr>
<td>dh{n}.pem</td>
<td>Servidor</td>
<td>Parámetros Diffie Hellman</td>
<td>no</td>
</tr>
<tr>
<td>servidor.crt</td>
<td>Servidor</td>
<td>Certificado del servidor</td>
<td>no</td>
</tr>
<tr>
<td>servidor.key</td>
<td>Servidor</td>
<td>Llave privada del certificado del servidor</td>
<td>sí</td>
</tr>
<tr>
<td>clienteX.crt</td>
<td>Solo en el cliente X</td>
<td>Certificado del Cliente X</td>
<td>no</td>
</tr>
<tr>
<td>clienteX.key</td>
<td>Solo en el cliente X</td>
<td>Llave privado del certificado del cliente X</td>
<td>no</td>
</tr>
</tbody>
</table>
<p style="padding-left: 30px;"><strong>Nota:</strong> en clienteX, X quiere decir el número del cliente. En este ejemplo estamos trabajamos con 3 clientes para la VPN pr lo que deberíámos tener 3 pares de claves .crt y .key.</p>
<h2>Configurar el Servidor</h2>
<p>Copiamos los archivos que corresponden al servidor en una carpeta dentro del mismo. En mi caso copie la configuración en /etc/openvpn/claves. Si generamos las claves en una máquina que no es el servidor debemos usar <a href="https://rafael.bonifaz.ec/blog/2011/01/copiar-archivos-con-scp-ssh/">scp</a> u otra aplicación para subirlas a nuestro servidor.<br />
Copiamos un archivo de ejemplo de configuración del servidor y la adaptamos a nuestras necesidades.</p>
<p style="padding-left: 30px;"><code>cd /etc/openvpn<br />
cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz .<br />
gunzip server.conf.gz<br />
vim server.conf<br />
</code></p>
<p>Dentro del archivo modificamos algunas variables para que funcione. Aquí expico algunas:<br />
Protocolo a utilizar:</p>
<p style="padding-left: 30px;"><code># TCP or UDP server?<br />
proto udp<br />
</code></p>
<p>Vamos a configurar la vpn utilizando el protocolo UDP ya que esto nos dará un mejor rendimiento. No tiene sentido trabajar en TCP ya que dentro de nuestra vpn se correra el protocolo IP donde de ser necesario se volver a utilizar el protocolo TCP y no tiene sentido utilizar 2 veces este protocolo. En otras palabras, utilizar TCP solo cuando no lo puedan hacer con UDP.</p>
<p>Definimos las rutas a los certifiados. Recordar que en este ejemplo estamos utilizando /etc/openvpn/claves</p>
<p style="padding-left: 30px;"><code> ca claves/ca.crt<br />
cert claves/servidor.crt<br />
key claves/servidor.key<br />
dh dh1024.pem<br />
</code></p>
<p>Por último, en el mismo archivo, decimos a que redes queremos que los clientes vpn puedan acceder.</p>
<p style="padding-left: 30px;"><code>push "route 192.168.45.0 255.255.255.0" </code></p>
<p>Listo podremos iniciar el servidor:</p>
<p style="padding-left: 30px;"><code>/etc/init.d/openvpn start</code></p>
<p>En caso de necesitar corregir errores se puede iniciar el servicio así:</p>
<p style="padding-left: 30px;"><code>openvpn &lt;archivo de configuración&gt;</code></p>
<p><strong>Nota</strong>: El servidor VPN debería poder trabajar como ruteador por lo que debemos activar esto a nivel del kernel:</p>
<p style="padding-left: 30px;">echo 1 &gt; /proc/sys/net/ipv4/ip_forward</p>
<p>Para que la configuración quede grabada y no se pierda al reiniciar la máquina se debe editar el archivo /etc/sysctl.conf y poner el valor de 1 a la variable correspondiente:</p>
<p style="padding-left: 30px;"><code>net.ipv4.ip_forward=1</code></p>
<h2>Configuración de un Cliente</h2>
<p>Instalar OpenVPN en el cliente. En el caso de usar Linux, la instalación es igual a como se instala el servidor.<br />
Copiamos los archivos correspondientes al cliente dentro de la máquina del mismo (Ver la tabla de arriba). En mi caso los copie en /etc/openvpn/claves</p>
<p>Una vez que tenemos las claves, copiamos un archivo de configuración de ejemplo para cliente y lo configuramos para nuestras necesidades:</p>
<p style="padding-left: 30px;"><code>cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf /etc/openvpn/<br />
vim client.conf</code></p>
<p>Definimos el protocolo como UDP igual que en el servidor:</p>
<p style="padding-left: 30px;"><code>proto udp<br />
</code></p>
<p>De manera similar al servidor, editamos las varialbes <strong>ca, cr y key</strong>:</p>
<p style="padding-left: 30px;"><span style="font-family: monospace;">ca claves/ca.crt<br />
</span><span style="font-family: monospace;">cert claves/clienteX.crt<br />
</span><span style="font-family: monospace;">key claves/clientX.key</span></p>
<p>El cliente debe saber a que servidor se debe conectar. Para esto debemos utilizar un nombre de dominio o el IP público y el puerto a conectarse. Por defecto OpeVPN corre en el puerto 1194.</p>
<p style="padding-left: 30px;"><code> remote miservidor.com 1194</code></p>
<p>Iniciamos OpenVPN en el cliente</p>
<p style="padding-left: 30px;"><span style="font-family: monospace;">/etc/init.d/openvpn start</span></p>
<p>En caso de tener errores podemos probar con</p>
<p style="padding-left: 30px;"><code>openvpn &lt;archivo de configuracion&gt;</code></p>
<p>Para probar la conectividad podemos hacer ping al ip 10.8.0.1 que es el ip de nuestro servidor. Si lo hacemos ya estamos con la VPN arriba. en caso de haber puesto la sentencia push podríamos hacer ping a ips dentro de la red LAN donde se encuentra la VPN. Ojo que las máquinas de la red LAN deberían saber como llegar a la red 10.8.0.0/24, para esto deberíamos ver la configuración del servidor.</p>
<h2>Referencias Adicionales</h2>
<ul>
<li><a href="http://openvpn.net/index.php/open-source/documentation/howto.html">How to OpenVPN</a></li>
</ul>
]]></content:encoded>
					
					<wfw:commentRss>https://rafael.bonifaz.ec/blog/2011/04/openvpn-how-to-1/feed/</wfw:commentRss>
			<slash:comments>6</slash:comments>
		
		
			</item>
	</channel>
</rss>
