Una VPN(Virtual Private
Network) se trata de una red virtual a la que sólo tienen acceso un
número limitado de personas escogidas por el creador de ésta. Esta
tecnología ha sido pensada para proteger la información de los
numerosos peligros que pueden hacer en la red, tales cómo los
hackers.
La red es un lugar
peligroso, donde la información circula libremente, estando a
disposición de usuarios maliciosos. La red que circula dentro de una
red privada es confidencial, pero imaginemos que tenemos un equipo
fuera de dicha red, que queramos que tenga acceso a la información
del servidor, o de un equipo de la red. Esto es posible hacerlo, pero
la información puede ser robada:
Con una VPN
garantizamos la integridad de nuestros datos, aseguramos una red
privada con IPs virtuales en la que simularíamos una transferencia
de datos por un cable físico, siendo imposible que nadie vea el
contenido de dicha transferencia. Es por
ello que se llama red virtual privada, porque simula las
características de una red privada física.

OpenVPN es una de
las soluciones existentes para realizar dicha tarea. Su principal
punto a favor, es que combina todas bondades de otras soluciones VPN,
tales cómo L2Sec e IPSec, aunque tiene la desventaja de que sólo
funciona al 100% en los servidores Linux. OpenVPN usa los standards
SSL/TLS para cifrar y combinar todas sus características, siendo una
buena opción para integrar tanto en entornos domésticos cómo para
profesionales. Primero, ante todo debemos pensar la arquitectura de
nuestra VPN: ¿Que ip tendrá nuestra VPN? ¿Cuántos clientes tendrá
nuestro servidor VPN? El router que esté conectado a nuestro
servidor DEBE tener NAT, ¿Tenemos un router que cumpla ese
requisito? ¿Son capaces de verse entre sí todos los routers que
actuarán en la VPN? Una vez tengamos claras nuestras ideas, lo mejor
es hacer un esquema que nos guíe, cómo el que muestro yo cómo
ejemplo, ejemplo que seguiré para la explicación de la VPN.

Para empezar hay que
instalar openVPN en un servidor Linux, siendo tan fácil cómo
instalar apt-get install openvpn.
Con esto ya tendríamos la aplicación instalada pero, evidentemente,
carece de configuración alguna. Para ello lo primero y más
importante es crear los certificados que tendrán tanto nuestro
servidor, cómo los clientes; sin esto no se podrá construir VPN
alguna. Yo en este caso utilizaré certificados ssl, que no sólo se
crean con facilidad, sino que además son muy seguros. Para ello,
primero hay que instalar openssl con apt-get
install openssl. Una vez instalado el
software escribimos cd
/usr/lib/ssl/misc, accediendo a la
carpeta donde se almacenan los scripts de openssl que serán las
herramientas que usaremos para la creación de las licencias. Lo
primero y más importante es conceder los permisos necesarios para
poder ejecutar dichos scripts. Lo ideal es que sólo nosotros los
administradores root, tengamos la posibilidad de ejecutar estos, con
lo que escribiremos: chmod 755 –R *.
Ya teniendo los permisos, es el momento de crear un nuevo certificado
CA, que es indispensable en todos los equipos que usen openVPN, ya
sea cliente o servidor. Para ello escribimos ./Ca.sh
–newca , con el cual haremos nuestro
nuevo certificado. El nombre dejadlo por defecto y la contraseña
usad la que os convenga, pero SIEMPRE usad la misma para todos los
certificados o claves que generemos a partir de ahora. Con esto ya
tendríamos el certificado almacenado en la carpeta demoCA,
pero no necesitamos firmarlo para que
sea valido, con lo que vamos a la carpeta demora y renombramos el
archivo con el nombre “newca.pem” para luego firmarlo mediante
esta sentencia:
openssl
–x506 –in newca.pem –days 10000 –out cacert.pem –signkey
private/cakey.pem
Gracias a esto ya
tenemos un certificado CA con una validez de 10000 días; ahora es el
turno de hacer los certificados personales para cada equipo, ya sea
cliente o servidor. Comenzaremos con el de servidor, para el cual
debemos escribir lo siguiente manteniendo el orden:
./CA.sh –newreq
Aquí os irá pidiendo algunos datos relativos al equipo. La mayoría
de ellos no tienen demasiada importancia pero el Common Name poner un
nombre conciso, pues es el nombre que mostrará en cualquier informe
de la VPN.
./CA.sh –sign
Firmamos el certificado
mv
newcert.pem Server-cert.pem
Renombramos
los certificados creados
mv
newkey.pem Server-priv.pem
Renombramos los certificados creados
Ahora cómo está. Cada
vez que arranquemos el servicio vpn nos pedirá la clave del
certificado. Lo cual es engorroso, así que con el siguiente comando
haremos que no nos pidan nada:
openssl rsa –in
Server-priv.pem –out Server-private.pem
Es recomendable
crear una carpeta donde almacenar todo lo referente a claves,
certificados, etc… relacionados con vpn. Por ello yo por ejemplo
he creado la carpeta “keys” en el directorio de openvpn con el
comando mkdir /etc/openvpn/keys y
después copiado los ficheros creados ahora ha dicho directorio:
cp Server-cert.pem
Server-private.pem /etc/openvpn/keys
cp demoCA/cacert.pem
/etc/openvpn/keys
Ya tenemos las
claves del servidor creadas y almacenadas adecuadamente para su
posible futura gestión. Aún así todavía
faltan por incluir dos cosas:
Uno es un tipo de
certificado que sólo va en el servidor llamado Diffie Hellman. Para
generarlo solo habría que ir a la carpeta keys
y escribir: openssl
dhparam-out dh1024.pem 1024,
generando un archivo llamado dh1024.dh; Lo otro se trata de generar
la clave secreta que sólo los miembros de la vpn tendrán mediante
el comando:
openvpn –genkey
–secret ta.key
Ahora sólo faltarían
crear los certificados de los clientes, cuyo proceso no cambia, con
lo que yo he hecho el siguiente script para automatizar el proceso:
#!/bin/bash
#Introducir el codigo nombre del cliente
echo 'Introduzca el nombre del cliente'
read cliente
#Se mueve al directorio donde se ejecutan los scripts openssl
cd /usr/lib/ssl/misc
#Se crea el nuevo cliente con su nombre clave, etc...
#Common name debe ser IGUAL al nombre del cliente que hemos introducido
./CA.sh -newreq
./CA.sh -sign
#Se renombran los certificados con el nombre del cliente
mv newcert.pem ${cliente}-cert.pem
mv newkey.pem ${cliente}-priv.pem
openssl rsa -in ${cliente}-priv.pem -out ${cliente}-private.pem
#Se copian los certificados a la carpeta adecuada
cp ${cliente}-cert.pem /etc/openvpn/keys/
cp ${cliente}-private.pem /etc/openvpn/keys/
#Mensaje Final
echo 'Cliente introducido correctamente'
Creadas todas las
licencias lo primero que hay que hacer siempre también(no importa
que sea servidor o cliente), es coger el fichero de configuración de
ejemplo y copiarlo en la carpeta openvpn con el comando:
cat
/usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz >
/etc/openvpn/openvpn.conf
Ya con la plantilla,
la configuración se volvería mucho más fácil. Esta configuración
en concreto la haré a partir de mi esquema, pero explicaré los
puntos importantes para que podáis
configurarlo con la misma facilidad, No escribiré de cabo a rabo
todo lo que aparece en el fichero aunque si lo importante:
local 172.24.100.50 #ip en la que escuchará el servidor
port 443 #Puerto de escucha. Por defecto pone 1194 pero este es más eficiente
proto tcp #Protocolo. Por defecto udp, recomendado tcp.
dev tun #Tipo de dispositivo. Ni tocar
ca /etc/openvpn/keys/cacert.pem #Certificado de la CA
cert /etc/openvpn/keys/Server-cert.pem #Certificado del servidor
key /etc/openvpn/keys/Server-key.pem #Clave privada del servidor
dh /etc/openvpn/keys/dh1024.dh #parametros Diffie-Hellman
server 10.0.1.0 255.255.255.0 #Subred de la VPN, poner rango diferente a la red fisica
tls-auth ta.key 0 #Clave de autentificacion
ifconfig-pool-persist /etc/openvpn/keys/ipp.txt #Registro del pool de direcciones
cipher AES-256-CBC #Cifrado AES 256(por defecto Blowfish)
auth SHA1 #Ni tocar
verb 3 #Nivel de log
Esta es la
configuración importante y necesaria del servidor VPN. Teniendo todo
bien, escribiendo /etc/init.d/openvpn
restart debería reiniciarse el
servicio a la perfección. La prueba de fuego es escribir ifconfig:
Si aparece una nueva interfaz de red
llamada tun0 con una ip perteneciente al rango de ip asignado por
openVPN, es que tenemos el servidor configurado correctamente.
El servidor está
configurado a la perfección. Sólo nos falta que la gente que esté
fuera de la red pueda acceder a él, pues sino será imposible crear
VPN alguna. Para ello debemos configurar el router y en el apartado
NAT, tenemos que hacer que todo lo que vaya al router por tcp, por el
puerto 443, se redirija al servidor VPN por el mismo puerto. Aquí es
imposible explicar explícitamente cómo hacerlo ya que depende del
modelo y fabricante de cada uno, pero las interfaces de configuración
son muy intuitivas con lo que sabiendo el concepto de lo que hay que
hacer, sólo tenéis que adaptarlo a vuestro dispositivo.
Cómo ya se tiene el
entorno servidor preparado, sólo hace falta que los clientes se
conecten a dicho server. Para ello sólo hay que instalar openvpn y
copiar la plantilla ejemplo cómo se ha hecho en el servidor, pero en
la configuración hay unas pequeñas pero significativas variaciones.
Al igual que en el apartado servidor, escribiré aquello importante
que se debe escribir en el servidor. A cada cliente se le tiene que
proporcionar cuatro ficheros que por ejemplo los puede guardar
/etc/openvpn/keys: cacert.pem, el certificado del usuario, la clave
privada del usuario y el ta.key (autentificación de cliente y
servidor).
client #Escribiendo esto especificamos que es un cliente
dev tun #Tipo de dispositivo de rutado. Dejarlo cómo está.
proto tcp #Protocolo tcp. Tiene que ser el mismo que el del servidor
remote 192.168.1.1 443 #IMPORTANTE Hay que poner la dirección publica del ROUTER conectado al servidor. Luego con NAT el router te redirige automáticamente al servidor.
ca /etc/openvpn/keys/cacert.pem #certificado de la CA
cert /etc/openvpn/keys/cliente-cert.pem #Certificado del usuario inventado
key /etc/openvpn/keys/cliente-key.pem #Clave privada del usuario inventado
tls-auth /etc/openvpn/keys/ta.key 1 #Autenticacion
cipher AES-256-CBC #Mismo que el servidor
auth SHA1 #Mismo que el servidor
Para acabar hacemos
openvpn /etc/openvpn/client.conf. En
caso de lograr conectarse al servidor empezará a lanzar y recibir
paquetes en la consola. Sólo hay que pulsar ctrl. + C para parar
todos los mensajes que aparecen por pantalla y listo. Ahora
escribiendo ifconfig, veréis una nueva interfaz en vuestro cliente
llamada tun0 con una de las ips del rango asignado en el servidor
VPN, teniendo así nuestro primer cliente conectado a ella. Si
tenemos algún problema lo primero es revisar que la red está
configurada correctamente, en caso de ir todo bien revisar el NAT del
router, y sino revisar la configuración de iptables del servidor.
Y así, hemos logrado una
VPN gratuita, potente y segura. Cómo podéis observar, el proceso de
creación de una VPN no implica demasiada complejidad. Al principio
puede resultar lioso pero es cuestión de dedicarle algo de tiempo y
ganas. Cierto que puede resultar a ser laboriosa toda la elaboración
de la red, pero es algo que merece la pena.
Saludos.