Conexión OpenVPN con cliente Windows
En mi vida profesional uso VPNs como solución de conectividad para clientes, he intentado usar L2TP con StrongSwan pero me ha sido imposible por la ausencia de documentación adecuada, con OpenVPN hay que instalar software en el cliente pero el resultado es totalmente satisfactorio.
OpenVPN permite interconexión de redes con varios esquemas:
http://j0d3.blogspot.com/2007/06/instalar-y-configurar-openvpn.html
* Host a Host: Es el método más simple, nos permite encriptar la comunicación entre dos PC las cuales deberán solamente tener conexión; es decir: ambas PC deben poderse enviar paquetes directamente ya sea porque estén conectadas en la misma red local, o porque ambas estén conectadas a la internet y sean alcanzables entre sí.
* Road Warrior: Es una de las formas más utilizadas y solicitadas por los estudiantes. Es el permitir que una máquina de alguien que esté fuera de nuestra red (de forma temporal o permanente) pueda comunicarse con el servidor OpenVPN de nuestra red y una vez autenticado pueda entrar a ver y acceder los recursos de nuestra red local. En verdad es un caso especial de la conexión Red a Red que a continuación mencionamos:
* Red a Red: Uno de los métodos más usados. Mediante ésta forma dos redes separadas en el espacio pueden comunicarse como si estuvieran unidas por un cable virtual. La comunicación entre ambas redes viajará encriptada una vez salgan de los servidores de openvpn y hasta que lleguen a su otro extremo.
En este caso usaré la conexión road-warrior, que nos permitirá conectarnos a una red para realizar tareas como administración, acceso a cámaras IP, impresión remota, ...
Referencia: http://www.openvpn.net/index.php/open-source/documentation/howto.html
Instalar OpenVPN en el servidor
apt-get install openvpn openssl liblzo1Una primera opción, mucho más sencilla es, configurar la VPN mediante static key, pero no se recomienda porque se basa en clave pública y además permite un único cliente, para más información visitar:
http://www.openvpn.net/index.php/open-source/documentation/miscellaneous...
http://nekan.net/configurar-openvpn-con-key
Crear CA (Certificate Authority) y generar certificados y claves
cp -Rp /usr/share/doc/openvpn/examples/easy-rsa/ /etc/openvpn/
cd /etc/openvpn/easy-rsa/2.0configurar las variables del certificado según nuestras necesidades editando /etc/openvpn/easy-rsa/2.0/vars, por ejemplo:
export KEY_COUNTRY="ES"
export KEY_PROVINCE="MA"
export KEY_CITY="Madrid"
export KEY_ORG="MiEmpresa"
export KEY_EMAIL="me@myhost.mydomain"
Inicializar el PKI
. ./vars
./clean-all
./build-caCuando solicite el "Organizational Unit Name (eg, section) []:" puede dejarse en blanco o poner por ejemplo un nombre de departamento. Lo que es obligatorio completar es el "Common Name (eg, your name or your server's hostname) []", en mi caso he dejado el propuesto "MiEmpresa CA".
Generar el certificado y la clave privada del servidor
./build-key-server serverGenerar certificados y claves para clientes
Puede usarse un único certificado para todos los clientes con el problema de que si se revoca un certificado no conectará nadie:
./build-key clientSi quisiéramos un certificado por cada cliente procederíamos:
./build-key client1
./build-key client2
./build-key client3
...Generar parámetros Diffie Hellman
./build-dhCopiar de /etc/openvpn/easy-rsa/2.0/keys a /etc/openvpn:
ca.crt
dh1024.pem
server.crt
server.key
cd /etc/openvpn/easy-rsa/2.0/keys
cp ca.crt dh1024.pem server.crt server.key /etc/openvpnEn el cliente Windows, instalar el GUI:
http://openvpn.se
Es recomendable instalar este software sin el cliente GUI en inglés y descargar la versión en español, está todo descrito en la página de descarga.
Crear un directorio C:\Archivos de Programa\OpenVPN\config y copiar de /etc/openvpn/easy-rsa/2.0/keys:
ca.crt
client.crt
client.key
client.ovpn de C:\Archivos de Programa\OpenVPN\sample-config
Crear las configuraciones en el servidor y en el cliente
Servidor
cd /etc/openvpn
cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz .
gzip -d server.conf.gzeditar server.conf y revisar estas líneas:
# la red IP de la VPN, diferente a la de la red interna
server 10.8.0.0 255.255.255.0
# red IP de nuestra red interna
push "route 192.168.0.0 255.255.255.0"
# recomentable en sistemas Unix por seguridad
user nobody
group nogroup
Cliente
editar client.conf y revisar esta línea:
remote ip_externa_del_servidor_OpenVPN_o_nombre_DNS 1194
Configuración de elementos de red
Es recomendable habilitar el IP forwarding en el servidor para que desde el nodo remoto se acceda a toda la red, de lo contrario sólo podríamos hacer "ping" al servidor:
echo 1 > /proc/sys/net/ipv4/ip_forwardEdito: este cambio desaparece al reiniciar, hay que editar /etc/sysctl.conf y descomentar la línea net.ipv4.ip_forward=1
Si entramos a través de un router hay que redirigir el puerto UDP 1194 a la IP interna del servidor.
Éste es el punto no documentado donde todo el mundo se estrella cuando quiere acceder a todos los nodos de la red. Lo normal es disponer de un router como puerta de enlace de los nodos de la red, en dicho router hay que añadir la ruta 10.8.0.0/24 hacia el servidor OpenVPN para que los paquetes de vuelta se envíen a través del servidor y no a través del router, ya que el router desconoce el origen de dichos paquetes de la VPN.
Realizar la conexión desde Windows
Ahora que ya se tiene todo listo, arrancamos el OpenVPN GUI y pulsamos con el botón derecho en el icono de la barra de notificación y seleccionamos "Conectar". Si tuviéramos más de un fichero de configuración .ovpn aparecería una lista de conexiones y habría que seleccionar "Conectar" en la conexión que nos interesase.
Ahora ya podemos hacer un ping a cualquier IP interna de la red y así comprobar que tenemos acceso.