Instalación de OPENVPN en LinuxMint Instalando el paquete del repositorio: apt-get install openvpn Añadimos las utilidades easy-rsa para crear los certificados, al directorio /etc/openvpn. Esto se hace instalando dichas utilidades desde esta dirección web: https://community.linuxmint.com/software/view/easy-rsa cd /usr/share/doc/openvpn/examples/ cp server.conf /etc/openvpn/easy-rsa cp client.conf /etc/openvpn/easy-rsa Extraemos los ficheros de configuración del servidor /cliente y los copiamos a /etc/openvpn/easy-rsa Antes de crear la clave de CA se debe modificar algunas variables de entorno: Iremos al directorio /etc/openvpn/easy-rsa: nano vars Se deben configurar correctamente los parámetros KEY_COUNTRY, KEY_PROVINCE, KEY_CITY, KEY_ORG, y KEY_EMAIL, etc. Después de configurar el archivo vars es posible generar el certificado y clave para la Autoridad Certificadora (CA):./vars./clean-all./build-ca Luego es posible generar el certificado y clave para el servidor de VPN:./build-key-server server 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 para el intercambio de claves compartidas mediante Diffie-Hellman:./build-dh Ya hemos construido nuestra PKI (Public Key Infrastructure), es decir nuestra infraestructura de autenticación y encriptación mediante clave pública. Configuración del servidor Editar el archivo de configuración del servidor: nano server.conf
Editar el archivo de configuración del servidor: nano server.conf Modificar las siguientes líneas: proto tcp ;proto udp ca /etc/openvpn/easy-rsa/keys/ca.crt cert /etc/openvpn/easy-rsa/keys/server.crt key /etc/openvpn/easy-rsa/keys/server.key dh /etc/openvpn/easy-rsa/keys/dh2048.pem server 10.8.0.0 255.255.255.0 De esta forma el servidor dará acceso a la red 10.8.0.0/24 y tomará la dirección IP 10.8.0.1 (los clientes tendrán una IP en el rango 10.8.0.2 a 10.8.0.254). Si es necesario enviar reglas de ruteo a los clientes se debe agregar (por ejemplo para poder llegar a la red interna 192.168.1.0/24 que se encuentra detrás de la VPN): push "route 192.168.1.0 255.255.255.0" Configuración de los clientes Editar el archivo de configuración de los clientes: nano client.conf Modificar las siguientes líneas: proto tcp ;proto udp remote 192.168.122.169 1194 En este ejemplo la dirección IP 192.168.122.169 es la dirección en la cual el servidor escucha pedidos de conexión a la VPN 10.8.0.0/24 en el puerto 1194 (puerto por defecto de OpenVPN). 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/client1.crt cp easy-rsa/keys/client1.key client1/client1.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 enrutamiento de paquetes. Habilitar IP forwarding: echo 1 > /proc/sys/net/ipv4/ip_forward Iniciar el servidor de VPN: cd /etc/openvpn/ openvpn server.conf CLIENTES WINDOWS 10 La instalación de OpenVPN para acceder a la VPN desde clientes Windows es extremadamente sencilla, se deben seguir los siguientes pasos: 1. Descargar el cliente OpenVPN desde el siguiente enlace: https://openvpn.net/index.php/open-source/downloads.html 2. Instalar el cliente con las opciones por defecto. 3. Copiar el paquete zip que contiene los certificados, la clave y el archivo de configuración al cliente Windows. 4. Descomprimir el contenido del zip dentro del directorio "C:\Program Files\OpenVPN\config": 5. Renombrar el archivo "client.conf" a "client.ovpn". 6. Iniciar el cliente desde el icono "OpenVPN GUI" que se encuentra en el escritorio de Windows. 7. Una vez que inicia, clic derecho sobre el icono en la barra de tareas y ejecutar "Connect":
8. En la barra de tareas notifica la conexión: Dirección IP asignada: 9. Ruta agregada: 10. Finalmente verificar la conexión con ping.
NAT O NO NAT? La pregunta si se desea realizar NAT (Network Address Translation) hacia la red privada, desde la red VPN, se debe a cuestiones de ruteo. En el ejemplo, si no se utiliza NAT, el gateway de la red privada (192.168.1.0/24) debe conocer la ruta hacia la red VPN (10.8.0.0/24) para que los clientes de la VPN puedan conectarse de forma exitosa a los hosts de la red privada. Si no es posible agregar la ruta a la red VPN en el gateway, o si directamente no hay gateway (por tratarse de una red aislada), todos los host de la red privada deben tener definida una ruta estática a la red VPN (10.8.0.0/24). Desde la red privada, el gateway para llegar a la red VPN es el servidor VPN. Una alternativa más simple, que permite prescindir de un Gateway y de rutas estáticas en los hosts, es utilizar NAT o IP masquerading. Con esta técnica, se enmascara todo el tráfico de la VPN como proveniente desde el servidor VPN. Como el servidor VPN tiene IP en la red privada, no es necesaria ninguna regla de ruteo. Si se usa NAT: En caso de utilizar NAT hacia redes detrás de la VPN (por ejemplo hacia la red 192.168.1.0/24), se debe habilitar IP forward y utilizar iptables en el servidor VPN: # cat /etc/openvpn/iptables.sh #!/bin/sh # Habilitar reenvío de paquetes echo 1 > /proc/sys/net/ipv4/ip_forward # Habilitar NAT hacia la red 192.168.1.0/24 /sbin/iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -d 192.168.1.0/24 -j MASQUERADE Editar el archivo /etc/rc.local para ejecutar el script al inicio del sistema. Agregar la linea: /etc/openvpn/iptables.sh
Escenario 1: Acceso remoto OpenVPN: Una solución VPN basada en SSL/TLS En este primer escenario vamos a establecer una VPN de acceso remoto. La autenticación será con TLS utilizando certificados X.509 y la asignación de direcciones dinámica. Direcciones del servidor OpenVPN: Eth0: IP Pública, 80.80.80.1/24 Eth1: Red Local interna, 192.168.1.1/24 Dirección virtual: 10.0.0.1/24 Direcciones del cliente remoto: IP Pública: 80.80.80.2/24 Dirección virtual: una de la red 10.0.0.0/24 que le asignará el servidor OpenVPN Fichero de configuración del servidor: /etc/openvpn/office.com #Dispositivo de túnel dev tun #Direcciones IP virtuales server 10.0.0.0 255.255.255.0 #subred local push route 192.168.1.0 255.255.255.0 # Rol de servidor tls-server #Parámetros Diffie-Hellman dh /etc/openvpn/dh2048.pem #Certificado de la CA ca /etc/openvpn/ca.crt #Certificado local cert /etc/openvpn/server.crt #Clave privada local key /etc/openvpn/server.key #Activar la compresión LZO comp-lzo #Detectar caídas de la conexión keepalive 10 60 #Archivo de log log /var/log/office.log #Nivel de información verb 3
OpenVPN: Una solución VPN basada en SSL/TLS En el servidor OpenVPN hay que activar el enrutamiento y copiar en el directorio /etc/openvpn los archivos dh1024.pem, ca.crt, server.crt y server.key En los clientes que quieran conectarse por acceso remoto a la VPN habrá que copiar el certificado digital y la clave privada del usuario, así como el certificado de la CA a su propio directorio /etc/openvpn. Configuración del cliente: /etc/openvpn/user1.conf #Dispositivo de túnel dev tun #Direcciones remota remote 80.80.80.1 #Aceptar directivas del extremo remoto pull # Rol de cliente tls-client #Certificado de la CA ca /etc/openvpn/ca.crt #Certificado local cert /etc/openvpn/client1.crt #Clave privada local key /etc/openvpn/client1.key #Activar la compresión LZO comp-lzo #Detectar caídas de la conexión keepalive 10 60 #Nivel de información verb 3
Escenario 2: Site-to-Site OpenVPN: Una solución VPN basada en SSL/TLS En este segundo escenario se va a establecer una VPN de sitio a sitio. La autenticación será basada en TLS utilizando certificados X.509.Las direcciones del servidor OpenVPN de la oficina central son: Eth0: IP Pública, 80.80.80.1/24 Eth1: Red Local interna, 192.168.1.1/24 Dirección virtual: 10.0.0.1/24 Las direcciones del servidor OpenVPN de la oficina remota son: Eth0: IP Pública, 80.80.80.2/24 Eth1: Red Local interna, 192.168.2.1/24 Dirección virtual: 10.0.0.2/24 Configuración del router de la oficina central, /etc/openvpn/office1.conf : #Dispositivo de túnel dev tun #Direcciones IP virtuales ifconfig 10.0.0.1 10.0.0.2 #subred remota route 192.168.2.0 255.255.255.0 # Rol de servidor tls-server #Parámetros Diffie-Hellman dh /etc/openvpn/2048.pem #Certificado de la CA ca /etc/openvpn/ca.crt #Certificado local cert /etc/openvpn/server.crt #Clave privada local key /etc/openvpn/server.key #Activar la compresión LZO comp-lzo #Detectar caídas de la conexión keepalive 10 60 #Archivo de log log /var/log/office1.log #Nivel de información verb 3
OpenVPN: Una solución VPN basada en SSL/TLS Configuración del router de la oficina remota, /etc/openvpn/office2.conf : #Dispositivo de túnel dev tun #Direcciones IP virtuales ifconfig 10.0.0.2 10.0.0.1 #Dirección IP remota remote 80.0.0.1 #Subred remota route 192.168.1.0 255.255.255.0 # Rol de cliente (iniciará la conexión) tls-client #Certificado de la CA ca /etc/openvpn/ca.crt #Certificado local cert /etc/openvpn/client1.crt #Clave privada local key /etc/openvpn/client1.key #Activar la compresión LZO comp-lzo #Detectar caídas de la conexión keepalive 10 60 #Archivo de log log /var/log/office2.log #Nivel de información verb 3 En este caso hay que activar el servicio de enrutamiento en ambos servidores y copiar el fichero de Diffie-Hellman, la clave privada y el certificado digital de cada servidor, así como el certificado de la CA, al directorio /etc/openvpn de cada equipo.