Antes de empezar vamos a necesitar un Servidor Ubuntu, yo aconsejo la version 12.0.4 ya que es la que estoy utilizando, pero posiblemente funcione en versiones anteriores y superiores.
Vamos a instalar el OpenVPN de la siguiente manera, adaptador TUN, y que permita a los usuarios conectados salgan por la red del servidor (enrutamiento) y puedan acceder a la red del servidor, pero no podrán realizar peticiones de broadcast ya que estarán en un rango de IP distinto.
Todos los pasos los realizamos mediante consola, y con el usuario root ya que se deben tocar muchos archivos con super usuario.
Instalamos el OpenVPN
apt-get update apt-get install openvpn
Procedemos a crear los certificados necesarios y archivos de configuración.
mkdir /etc/openvpn/easy-rsa rsync -avP /usr/share/doc/openvpn/examples/easy-rsa/2.0/* /etc/openvpn/easy-rsa/
A continuación editamos el fichero vars, para personalizar los parámetros que deseemos:
nano /etc/openvpn/easy-rsa/vars
export KEY_COUNTRY="AU" export KEY_PROVINCE=VIC export KEY_CITY=MELBOURNE export KEY_ORG="OpenVPN-EXAMPLECOMPANY" export KEY_EMAIL="admin@example.org"
Y ahora para generar los certificados, desde el directorio easy-rsa, ejecutamos los comandos:
cd /etc/openvpn/easy-rsa source ./vars sh ./clean-all ./build-ca ./build-dh
Te solicitara los datos que hemos introducido ya en vars por defecto, cambia common name por el nombre que tendra la VPN.
Primero generamos el certificado para el servidor:
./build-key-server server
Ahora creamos los certificados y llaves para los clientes
./build-key client1 ./build-key client2
Todos los certificados creados los tienes en /etc/openvpn/easy-rsa/keys solo el root puede acceder
Copiamos los siguientes 4 archivos en /etc/openvpn/ son los necesarios para el servidor.
ca.crt server.crt server.key dh1024.pem
A cada cliente debemos hacerle llegar de forma segura los ficheros más el archivo de configuración para la conexion VPN (client1.ovpn que mas adelante crearemos)
ca.crt client1.crt client1.key client1.ovpn
Vamos a crear los ficheros de configuración, podemos encontrar ficheros de ejemplo en /usr/share/doc/openvpn/examples/sample_config_files los cuales podemos copiar a /etc/openvpn y modificar, o crear uno nuevo directamente. El fichero de ejemplo está bastante bien documentado con comentarios.
Te pongo un fichero de configuración a «pelo» básico apra arrancar:
mkdir /etc/openvpn/logs nano /etc/openvpn/server.conf
#Aconsejo utilizar este puerto y protocolo (TCP) ya que casi siempre estará abierto para realizar las conexiones port 443 proto tcp #Tipo de conexión del adaptador dev tun #Ubicación de los certificados. ca /etc/openvpn/ca.crt cert /etc/openvpn/server.crt key /etc/openvpn/server.key dh /etc/openvpn/dh1024.pem #Rango de direcciones que se asignará a los clientes, el server es .1 server 10.0.0.0 255.255.255.0 #Le indicamos al cliente que el Getway es el servidor y las DNS que utilizará. #Si queremos que no se conecte a trabes del servidor comentamos o eliminamos la linea siguiente push "redirect-gateway def1 bypass-dhcp" push "dhcp-option DNS 8.8.8.8" push "dhcp-option DNS 8.8.4.4" #Esto indica que puede haber MAS de 1 cliente utilizando el mismo certificado al mismo tiempo duplicate-cn #ruta para que los clientes alcancen la LAN del server (enrutamiento) push "route 192.168.1.0 255.255.255.0" #Para que los clientes se puedan ver entre ellos client-to-client #Mantener la conexión activa keepalive 10 120 #Compresión de los paquetes. comp-lzo persist-key persist-tun #Logs generados verb 5 mute 20 log /etc/openvpn/logs/log-vpn.log status /etc/openvpn/logs/status-vpn.log
Y reiniciamos el servicio para que los cambios tomen efecto:
/etc/init.d/openvpn restart
Recuerda abrir el puerto 443 apuntando a tu servidor.
Preparamos el archivo de configuración para el usuario, lo mismo el archivo de configuración que os dejo esta a «pelo»:
nano /etc/openvpn/easy-rsa/keys/client1.ovpn
#Indicamos que es conexión de cliente, tipo de dispositovp (TUN) y protocolo (TCP) client dev tun proto tcp #IP y Puerto del servidor Openvpn remote IP_PUBLICA_SERVIDOR_VPN 443 #Intentar conectar continuamente resolv-retry infinite nobind persist-key persist-tun #Ubicación de los certificados ca ca.crt cert client1.crt key client1.key #Compresión de los paquetes comp-lzo #Logs verb 4
Ahora con esto ya esta todo listo para realizar SOLO la conexión.
Los siguientes pasos debemos de realizar para que el cliente pueda acceder a internet y a la red del servidor:
En el fichero:
nano /etc/sysctl.conf
Debemos añadir o modificar la línea:
net.ipv4.ip_forward=1
Con esto permitirá que puedan traspasar los paquetes de una red a la otra (red VPN a red física del servidor)
Ahora debemos crear una regla para que enmascare los paquetes de la red VPN a las demás redes:
iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -o eth0 -j MASQUERADE
Para que esta regla se conserve y no se pierda al reiniciar debemos de hacer lo siguiente:
mkdir /var/lib/iptables/ iptables-save > /var/lib/iptables/iptablesReglas echo '#!/bin/sh' > /etc/network/if-up.d/inicioIptables echo '/sbin/iptables-restore < /var/lib/iptables/iptablesReglas' >> /etc/network/if-up.d/inicioIptables chmod a+x /etc/network/if-up.d/inicioIptables
Ya tenemos listo nuestro servidor, copiamos los 4 archivos que comentemos anteriormente para el usuario:
ca.crt client1.crt client1.key client1.ovpn
Instalamos el cliente OpenVPN (Windows) de la pagian oficial http://openvpn.net/ segun tú versión de Windows o Ubuntu.
No tiene complicacion la instalación despues copiamos los 4 archivos en C:\Program Files\Openvpn\conf\*creamos carpeta\*aqui
Ejecutamos y conectar y listo ya podreis acceder a internet con la red del servidor acceder a el.
El servidor enruta todas las peticiones de los clientes de su VPN
Nota: Puedes hacer ping por IP a toda la red del servidor (EJ: ping 192.168.1.30) Pero NO podrás llegar a ver los paquetes de broadcast, esto quiere decir que si haces ping al hostname (EJ: ping PC-Generico) NO te devolverá el pong.
Para ello se utilizara el adaptador TAP que explicare mas adelante.
Así queda la foto:
Cualquier duda preguntad!
Salu2!