Qué es OpenVPN?
OpenVPN es un software que nos permite conectarse a Internet de forma privada mediante la tecnología de redes VPN o RPV (Red Privada Virtual). Es una técnica de conectividad VPN del software libre y publicada bajo la licencia de GNU GPL. OpenVPN fue desarrollado por James Yonan en OpenVPN Technologies, Inc en 2002
Lo que debemos saber también es que OpenVPN no se basa únicamente sobre la conectividad VPN, sino que también se basa sobre la técnica SSL (Secure Sockets Layer, Capa de Puertos Seguros en español) y actualmente llamada TLS (Transport Layer Security, Seguridad de la Capa de Transporte en español) que son protocolos criptográficos que permiten comunicaciones y conexiones seguras por una Internet.
Definición de una red VPN?
VPN: Virtual Private Network o una Red Privada Virtual (en español), es una técnica de redes que se usa para conectar dispositivos informáticos como computadoras y smartphones de forma segura desde el nivel de un área local sobre una red publica como Internet. Esta técnica se usa para enviar y recibir paquetes de datos a través de una red compartida de forma privada y segura. De esta forma el usuario disfrutará de todas las funcionalidades de una red privada y sus políticas de gestión pero de forma virtual.
También nos ofrece una seguridad de conexión a Internet sólida mediante el cifrado de datos.
Cómo instalar y configurar OpenVPN
El objetivo de instalar un software VPN, OpenVPN en nuestro caso, es la de hacer que un cliente ubicado fuera de una red local LAN (posiblemente en otro continente) parezca conectado de forma local.Después de saber lo que es OpenVPN y VPN en detalle, ahora nos vamos a detallar el método de instalación de OpenVPN sobre un sistema operativos Linux, basados particularmente sobre las distribuciones Debian y su sucesor Ubuntu.
Instalación de OpenVPN en Ubuntu y Debian
- Instalar OpenVPN de los repositorios oficiales:
apt-get install openvpn
cd /usr/share/doc/openvpn/examples/easy-rsa cp -a 2.0/ /etc/openvpn/easy-rsa cd /etc/openvpn/easy-rsa
- Configurar algunas variables de entorno antes de comenzar a crear una autoridad certificante CA. Editar el archivo vars
nano vars
nano whichopensslcnf
- Eliminar todas las apariciones de [[:alnum:]]
- Luego de configurar el archivo vars es posible generar el certificado y clave para la Autoridad Certificante (CA):
. ./vars ./clean-all ./build-ca
- El script build-ca crea el certificado de la CA utilizando los parámetros configurados en vars. Verificar que los parámetros entre corchetes estén correctos, modificar en caso contrario. Luego es posible generar el certificado y clave para el servidor de VPN:
./build-key-server server
El CN (Common Name) debe ser "server", responder 'y' dos veces para firmar y commit del certificado.
Generar los certificados para los clientes (es importante que los certificados de los clientes y del servidor estén firmados por la misma CA):
./build-key client1 ./build-key client2 ./build-key client3
Nota: cada vez que se reinicia la sesión, se debe ejecutar ". ./var" para configurar las variables de entorno nuevamente.
Responder 'y' dos veces para firmar y commit del certificado.
Finalmente se deben generar los parámetros Diffie-Hellman:
./build-dh
- Archivos de configuración para el servidor y clientes
Luego de construir nuestra PKI (Public Key Infrastructure), es decir nuestra infraestructura de autenticación y encriptación mediante clave pública, se deben copiar los archivos de configuración de ejemplo al directorio /etc/openvpn:
cp -a /usr/share/doc/openvpn/examples/sample-config-files/ /etc/openvpn/
Configuración del servidor
Descomprimir el archivo de configuración del servidor:
cd /etc/openvpn/sample-config-files/
gunzip server.conf.gz
nano server.conf
proto tcp
;proto udp
ca easy-rsa/keys/ca.crt
cert easy-rsa/keys/server.crt
key easy-rsa/keys/server.key # This file should be kept secret
dh easy-rsa/keys/dh1024.pem
server 10.8.0.0 255.255.255.0
Si es necesario enviar reglas de ruteo a los clientes se debe agregar (por ejemplo para poder llegar a la red 10.9.0.0/24 que se encuentra detrás de la VPN):
push "route 10.9.0.0 255.255.255.0"
cp server.conf ../
cd /etc/openvpn
Editar el archivo de configuración de los clientes:
cd /etc/openvpn/sample-config-files nano client.conf
Modificar las siguientes líneas:
proto tcp
;proto udp
remote 192.168.122.169 1194
Empaquetar el archivo de configuración junto con los certificados y clave:
cd /etc/openvpn
mkdir client1
cp sample-config-files/client.conf client1/
cp easy-rsa/keys/ca.crt client1/
cp easy-rsa/keys/client1.crt client1/client.crt
cp easy-rsa/keys/client1.key client1/client.key
zip -Z deflate -r client1.zip client1/*
Repetir el procedimiento para el resto de los clientes.
Iniciar el servidor para verificar la conectividad
Nota: antes de iniciar el servidor debe habilitarse IP forwarding para que funcione el ruteo de paquetes.
Habilitar IP forwarding:
echo 1 > /proc/sys/net/ipv4/ip_forward
cd /etc/openvpn/
openvpn server.conf
root@ubuntu:/etc/openvpn# openvpn server.conf Wed Nov 14 18:07:28 2012 OpenVPN 2.2.1 x86_64-linux-gnu [SSL] [LZO2] [EPOLL] [PKCS11] [eurephia] [MH] [PF_INET6] [IPv6 payload 20110424-2 (2.2RC2)] built on Mar 30 2012 Wed Nov 14 18:07:28 2012 NOTE: OpenVPN 2.1 requires '--script-security 2' or higher to call user-defined scripts or executables Wed Nov 14 18:07:28 2012 Diffie-Hellman initialized with 1024 bit key Wed Nov 14 18:07:28 2012 TLS-Auth MTU parms [ L:1544 D:140 EF:40 EB:0 ET:0 EL:0 ] Wed Nov 14 18:07:28 2012 Socket Buffers: R=[87380->131072] S=[16384->131072] Wed Nov 14 18:07:28 2012 ROUTE default_gateway=192.168.122.1 Wed Nov 14 18:07:28 2012 TUN/TAP device tun0 opened Wed Nov 14 18:07:28 2012 TUN/TAP TX queue length set to 100 Wed Nov 14 18:07:28 2012 do_ifconfig, tt->ipv6=0, tt->did_ifconfig_ipv6_setup=0 Wed Nov 14 18:07:28 2012 /sbin/ifconfig tun0 10.8.0.1 pointopoint 10.8.0.2 mtu 1500 Wed Nov 14 18:07:28 2012 /sbin/route add -net 10.8.0.0 netmask 255.255.255.0 gw 10.8.0.2 Wed Nov 14 18:07:28 2012 Data Channel MTU parms [ L:1544 D:1450 EF:44 EB:135 ET:0 EL:0 AF:3/1 ] Wed Nov 14 18:07:28 2012 Listening for incoming TCP connection on [undef] Wed Nov 14 18:07:28 2012 TCPv4_SERVER link local (bound): [undef] Wed Nov 14 18:07:28 2012 TCPv4_SERVER link remote: [undef] Wed Nov 14 18:07:28 2012 MULTI: multi_init called, r=256 v=256 Wed Nov 14 18:07:28 2012 IFCONFIG POOL: base=10.8.0.4 size=62, ipv6=0 Wed Nov 14 18:07:28 2012 IFCONFIG POOL LIST Wed Nov 14 18:07:28 2012 MULTI: TCP INIT maxclients=1024 maxevents=1028 Wed Nov 14 18:07:28 2012 Initialization Sequence Completed
Luego de asegurarse que inicia correctamente es posible iniciar el servicio utilizando la herramienta service o desde /etc/init.d.
