OpenVPN y ten tu propia red

OpenVPN es una aplicación de software libre que nos va a permitir crear VPNs para poder conectarnos remotamente a otra red local de una manera segura utilizando SSL/TLS. Te mostramos aquí cómo puedes crear tu red VPN en tan solo cinco pasos

Javier Llorente

OpenVPN y ten tu propia red

8 septiembre 2009

Con OpenVPN nos podemos conectar a la red local de la universidad o el trabajo desde casa, o viceversa. La ventaja de esta herramienta recae en que se trata de software libre, multiplataforma (se puede instalar y usar en Windows, Linux, Mac OS X y FreeBSD) y también es muy completo. Veamos cómo trabaja.

Paso 1

La instalación

Para instalar OpenVPN en Linux te recomendamos que uses un gestor de software como YaST, Synaptic, RPMdrake o el correspondiente dependiendo de tu distribución. El nombre del paquete es Openvpn. Hay que instalarlo tanto en el servidor como en los clientes.

Paso 2

Crea certificados

En Linux y BSD, la administración del sistema se hace con el usuario root, que sería el equivalente al administrador en Windows. Para ello, abre un terminal como Konsole o GNOME Terminal, teclea su – y pon la contraseña de root.

Puede que la instalación de OpenVPN no copie los archivos de configuración en la ubicación estándar /etc. Para comprobarlo, lista los contenidos de /etc/openvpn con el comando ll /etc/openvpn. En caso de que el sistema diga que no encuentra el comando ll, teclea ls -l (ll es un alias que, dependiendo del sistema, está habilitado o no). Si, en el listado, no aparece easy-rsa, significa que tenemos que copiarlos manualmente de /usr/share/openvpn/ a /etc. Utilizaremos -R para copiar todos los subdirectorios y sus contenidos: cp -R /usr/share/openvpn /etc/.

Una vez que tengamos todos los archivos de configuración en /etc/openvpn, cambia tu directorio de trabajo a /etc/openvpn/easy-rsa/2.0/ y ejecuta los siguientes comandos para asegurarnos de que está limpio y evitar conflictos. Ten en cuenta que en el comando completo hay un punto, después un espacio y, a continuación, otro punto, una barra y el comando:

cd /etc/openvpn/easy-rsa/2.0/

. ./vars

. ./clean-all

Ahora, procederemos a crear el certificado maestro y la clave.

. ./build-ca

Aparecerán varios campos en los que puedes poner el nombre de la ciudad donde estás, tu dirección de correo electrónico y los demás datos personales. Éstos son los que serán incluidos como parte de los certificados. Puedes aceptar los valores por defecto pulsando intro o bien contestar a las preguntas de forma personal.

Ahora, crearemos la clave del servidor y firmaremos el certificado. Te volverá a hacer el mismo tipo de preguntas (cuando ejecutamos . ./build-ca) y también te preguntará si quieres firmarlo. Responde afirmativamente:

./build-key-server server

Después, tendremos que crear y firmar los certificados para los clientes. Por ejemplo, para tres clientes tendríamos que teclear lo siguiente:

./build-key client1

./build-key client2

./build-key client3

No te olvides de poner el Common Name adecuado cuando generes los certificados. Cada uno tiene que ser único. El valor por defecto, en nuestro caso, es client1, client2 y client3. Si quieres proteger las claves de tus clientes, sustituye el comando build-key por build-key-pass.

Ahora, tenemos que generar los parámetros Diffie Hellman para el servidor OpenVPN. Este protocolo de cifrado nos permite el intercambio secreto de claves entre dos máquinas que no han tenido contacto previo utilizando un canal inseguro, de manera anónima y no autenticada:

./build-dh

Todas nuestras claves están en /etc/openvpn/easy-rsa/2.0/keys/

Paso 3

Configura el servidor

Para hacerlo, copiaremos server así:

.conf a /etc/openvpn/ cp /usr/share/doc/packages/openvpn/sample-config-files/server.conf /etc/openvpn/

Una vez copiado, configuraremos el servidor a nuestro gusto (puedes usar tu editor de texto favorito, como vi, Emacs o uno gráfico, como KWrite o gedit). El archivo a editar es /etc/openvpn/server.conf.

Hay dos formas de montar una VPN: en modo encaminado (routed) o modo puente de red (bridge). Por defecto, el servidor OpenVPN se inicia en modo encaminado, tiene la IP 10.8.0.1 y responde a las peticiones en el puerto 1194 (UDP). Ahora bien, cada modo tiene ventajas e inconvenientes. Las del primero consisten en que es muy eficiente, escalable y más fácil de configurar. Sin embargo, los clientes tienen que usar un servidor WINS (como Samba) para que se pueda navegar y compartir carpetas en red en Windows o Linux. Tampoco se podrán utilizar servicios que dependan de paquetes de broadcast.

El modo puente de red, por su parte, permite que los paquetes de broadcast viajen a través de la VPN. Esto significa que funcionarían los servicios que los usan, como las carpetas compartidas de Windows/Samba o el servicio de impresión CUPS. Por otra parte, este modo es menos eficiente que el encaminado y tampoco es muy escalable (capacidad de crecer sin perder sustancialmente calidad en los servicios que provee). Para más detalles sobre las opciones de configuración, visita la dirección web http://openvpn.net/index.php/documentation/howto.html.

Antes de iniciar el servidor hay que cambiar la ruta de los certificados y claves por las correspondientes. Ten en cuenta que todas las líneas que empiecen por # o ; serán ignoradas. En nuestro caso, tenemos que cambiar las rutas a las siguientes en el archivo server.conf:

ca /etc/openvpn/easy-rsa/2.0/keys/ca.crt

cert /etc/openvpn/easy-rsa/2.0/keys/server.crt

key /etc/openvpn/easy-rsa/2.0/keys/server.key

dh /etc/openvpn/easy-rsa/2.0/keys/dh1024.pem

Paso 4

Inicia el servidor y prepara el cliente

Una vez configurado el servidor, procederemos a iniciarlo. Para lograrlo, teclea

openvpn /etc/openvpn/server.conf.

En el cliente también necesitas tener OpenVPN. Una vez instalado, tenemos que copiar el archivo client.conf para configurar el cliente de la siguiente forma:

cp /usr/share/doc/packages/openvpn/sample-config-files/client.conf /etc/openvpn/

En el caso del cliente, debemos crear el directorio donde copiaremos los certificados y las claves que hemos generado en el servidor. En nuestro caso, sería mkdir -p /etc/openvpn/easy-rsa/2.0/keys.

El argumento -p se utiliza para crear todos los subdirectorios de forma recursiva, es decir, easy-rsa, 2.0 y, finalmente, keys. En Linux y BSD la estructura de los directorios es un árbol. La raíz es / (root) y el resto son las diferentes ramas, como etc, home, bin, etc.

Cada cliente ha de tener sus propios certificados y claves. En el caso del número 1, tendremos que copiar los ficheros ca.crt, client1.crt y client1.key del servidor al cliente número 1. Para ello, podríamos copiarlo del servidor a un pendrive. En nuestro caso, su ubicación es /media/disk-1 (cámbiala por la correspondiente):

cp /etc/openvpn/easy-rsa/2.0/keys/ca.crt /media/disk-1

cp /etc/openvpn/easy-rsa/2.0/keys/client1.crt /media/disk-1

cp /etc/openvpn/easy-rsa/2.0/keys/client1.key /media/disk-1

Y, después, tendríamos que copiarlo del pendrive al cliente:

cp /media/disk-1/ca.crt /etc/openvpn/easy-rsa/2.0/keys/

cp /media/disk-1/client1.crt /etc/openvpn/easy-rsa/2.0/keys/

cp /media/disk-1/client1.key /etc/openvpn/easy-rsa/2.0/keys/

Una vez copiado, podemos editar el archivo de configuración client.conf. Para lograrlo, lo primero que tenemos que hacer es cambiar la ruta de los certificados y claves. En nuestro caso, sería:

ca /etc/openvpn/easy-rsa/2.0/keys/ca.crt

cert /etc/openvpn/easy-rsa/2.0/keys/client1.crt

key /etc/openvpn/easy-rsa/2.0/keys/client1.key

Después, tenemos que poner la IP, el hostname del servidor y el puerto del servidor OpenVPN. Si tu servidor está detrás de un cortafuegos/router, abre el puerto correspondiente para que pueda responder a las peticiones. En caso de usar NAT, pon la IP pública del router. Asegúrate de que los parámetros de configuración del servidor son los mismos que los de la configuración del cliente, principalmente dev (tun o tap) y proto (udp o tcp).

Paso 5

Inicia el cliente y pruébalo

Una vez configurado, ya podemos iniciar el cliente. Para llevarlo a buen puerto abre un terminal, como Konsole o GNOME Terminal, en el cliente y teclea el siguiente comando:

openvpn /etc/openvpn/client.conf.

Para comprobar si funciona la VPN, haz un ping al servidor desde el cliente. Para ello, abre un terminal y teclea la siguiente orden (no hace falta que utilices el usuario root): ping 10.8.0.1.

Si responde al ping, ¡enhorabuena! Acabas de montar tu propia VPN. Ya puedes acceder a la red local de forma remota.

Conoce el modo puente de red

La creación de certificados y claves se hace de la misma manera que en el modo encaminado. Lo único que tienes que hacer es seguir algunos pasos extra, como crear un puente de red, y editar server.conf y client.conf para poner los parámetros de la configuración del modo puente de red.

Lo primero que tienes que hacer es asegurarte de que tienes el paquete bridge-utils instalado. Si usas una distribución que usa rpm, como openSUSE, Mandriva o Fedora, ejecuta rpm -qa |grep bridge-utils; si tu distribución usa dpkg, como Debian o Ubuntu, ejecuta dpkg -l |grep bridge-utils. Si no te aparece algo como bridge-utils-1.4-23.37, significa que no lo tienes instalado. Para emplazarlo, utiliza el gestor de software de tu distribución (como YaST, RPMdrake o Synaptic).

OpenVPN viene con scripts que nos facilitarán la creación y destrucción del puente. Los copiaremos a /etc/openvpn para así tener todos los archivos relacionados con OpenVPN bajo un mismo directorio:

cp /usr/share/doc/packages/openvpn/sample-scripts/bridge-start /etc/openvpn

cp /usr/share/doc/packages/openvpn/sample-scripts/bridge-stop /etc/openvpn

Ahora, tenemos que editar el script /etc/openvpn/bridge-start y modificar los datos correspondientes a nuestra red. Para conocer la IP de tu equipo, teclea su - para ser administrador y, a continuación, ifconfig.

Tienes que poner una IP que esté en el mismo rango que la de tu equipo y que no esté en uso. Por ejemplo, en nuestro caso, hemos puesto:

eth_ip="192.168.1.10"

eth_netmask="255.255.255.0"

eth_broadcast="192.168.1.255"

Una vez modificado bridge-start con los datos adecuados, podemos crear el puente ejecutando sh /etc/openvpn/bridge-start.

Después, hay que editar /etc/openvpn/server.conf y cambiar dev tun por dev tap, comentar la línea donde pone server, es decir, poner ; (punto y coma) delante de Server y, finalmente, descomentar la línea de server-bridge (borrando el ; del comienzo) y cambiar los datos de configuración. En nuestro caso sería server-bridge 192.168.1.10 255.255.255.0 192.168.1.128 192.168.1.254. Poniendo las IPs que terminan en 128 y 254 estamos reservando ese rango para los clientes que se conecten. Si vamos a conectarnos al servidor remotamente desde Internet, tenemos que asegurarnos de que tenemos acceso a la Red haciendo un ping, por ejemplo, a rediris.es: ping rediris.es.

Si contesta al ping, toda va bien. En caso contrario, tenemos que asegurarnos de que la configuración de red es correcta. Por ejemplo, hay que tener la ruta 192.168.1.1 por defecto. Para comprobar qué rutas tenemos, ejecuta route como root.

Debería aparecer una línea que empiece por default y que dijera lo siguiente si nuestra IP es 192.168.1.x: default 192.168.1.1 0.0.0.0 UG 0 0 0 br0

Si no es así, la podemos añadir ejecutando route add default gw 192.168.1.1.

Comprueba también que tienes servidores DNS en el archivo /etc/resolv.conf. Deberías tener al menos una línea en la que ponga nameserver y, a continuación, la IP del servidor de DNS.

Ahora ya puedes iniciar el puente y el servidor OpenVPN. Hazlo en el siguiente orden:

• sh /etc/openvpn/bridge-start

• openvpn /etc/openvpn/server.conf

Para destruir el puente, ejecuta sh /etc/openvpn/bridge-stop y, para evitar problemas en la configuración de red después de destruirlo, reinicia tu conexión de red. Si usas openSUSE, Mandriva o Fedora, ejecuta (como root/superusuario) service network restart. En caso de que uses una distribución basada en Debian, ejecuta (como root/superusuario) /etc/init.d/networking restart.

Después de estos pasos, ya podríamos iniciar el servidor ejecutando openvpn /etc/openvpn/server.conf como root.

Eso sí, si tienes un cortafuegos, abre el puerto 1194/udp.

En lo que se refiere al cliente, edita /etc/openvpn/client.conf, cambia la línea dev tun a dev tap y asegúrate de que copiaste los certificados y claves del cliente, y también de que has puesto la IP y puerto del servidor correspondiente en la línea que empieza por remote.

Después, ya puedes iniciarlo ejecutando openvpn /etc/openvpn/client.conf.

Para comprobar si funciona la VPN, haz un ping al servidor desde el cliente.

Temas Relacionados