——-Inicio/Home——-Posts-Guias-Por-Fecha-Publicación——-Posts-Guias-Por-Categorias——-Links——-
openvpn-server-on-centos7-behind-router
Se ha escogido para realizar la tarea Openvpn ya que ofrece la posibilidad de ajustarse a un montón de configuraciones y escenarios que requiera la red y los servidores o máquinas que requieran conexión. La documentación es muy extensa y la comunidad es muy proactiva por tanto es un punto a favor. Otro punto a favor es la documentación y ejemplos que ya trae con comentarios que explica cómo funcionan los ficheros. El uso de easy rsa al principio puede ser un poco lioso ya que la documentación de openvpn en la web oficial está realizada tanto para linux como windows. En cuanto a easy-rsa, el script y versión es mayor a la especificada en la documentación openvpn pero mediante la ayuda que trae el comando es fácil acabar de comprender su uso. Por último me gustaría destacar que openvpn es muy potente pero requiere de un estudio de implementación mediante iptables para manejar las rutas de los host mediante el firewall de las máquinas donde esté instalado openvpn, en este caso solo en el servidor, pero en otro aspecto podría ser en un router de enlace punto a punto.
Implementación:
Instalar paquete openvpn y easy-rsa.
Copiamos directorio easy-rsa en el directorio de configuración de openvpn.
Copiamos el fichero vars.example en el directorio easy-rsa ubicado en configuración de openvpn.
Renombrar el fichero vars.example a “vars”.
Editamos el fichero vars descomentar y editar en las líneas 95 a 100 dando los valores específicos para el certificado.
Descomentar y línea 108.
Descomentar líneas 125 y 129.
Si ejecutamos en el directorio easy-rsa “./easyrsa help” nos muestra la ayuda del script.
Creamos la request para construir la CA mediante init-pki con script easyrsa. (tomará los valores de vars, mismo directorio /etc/openvpn/easy-rsa/3/“”)
Construimos la CA mediante script easyrsa y mediante build-ca construimos la ca. Añadimos nopass para en este caso ,no ponerle contraseña a la CA que vamos a construir.
Generamos el certificado y llave del servidor mediante el script easyrsa y con la opción gen-req generamos el certificado y llave.
Mediante server indicamos que va a ser certificado y clave de servidor y mediante nopass no se añade contraseña al certificado del servidor.
Con el script easyrsa , utilizamos sign-req para firmar el certificado que hemos generado e indicamos server para firmar el tipo de certificado y el nombre del certificado. Se creará el certificado firmado.
Podemos verificar con herramienta openssl , mediante la CA que hemos creado si está correcto el certificado del servidor. En este caso es OK.
Mediante script easyrsa también podemos generar clave diffie hellman.
Por último generamos el certificado del cliente 1 , en este caso sin firmar también. Podríamos poner contraseña al certificado para autenticarse pero este caso el cliente podrá autenticarse teniendo los ficheros del cliente sin contraseña.
Firmamos el certificado del cliente y tendremos el certificado firmado mediante script rsa.
Copiamos ficheros generados para configuración servidor. CA , dh.pem , certificado servidor y clave servidor.
Creamos un directorio llamado ficheros_clientes para alojar ficheros que deben de tener los clientes.
Copiamos la CA del servidor para los clientes.
Copiamos la clave y certificado generado para el cliente en el directorio de los ficheros de los clientes.
Copiamos el ejemplo de fichero de configuración de openvpn server en el directorio de configuración de openvpn.
Editamos el fichero de configuración server.conf.
línea 25 añadimos ip donde queremos que el servicio openvpn escuche.
línea 32 añadimos el puerto utilizado en el servidor para el servicio openvpn , puerto 4444.
línea 36 editamos y utilizamos protocolo udp.
línea 53 editamos y utilizamos interfaz de red tun
línea 78–80 editamos y apuntamos donde se encuentran ubicados la CA del servidor , el certificado del servidor , y la llave.
línea 85 editamos y apuntamos donde se encuentra ubicado la llave diffie hellman.
linea 92 editamos y utilizamos subnet.
línea 101 editamos la red virtual y la máscara.
línea 108 editamos para guardar ips asignadas a clientes.
linea 141 editamos para poder ir a otros host de la red del servidor.
línea 231 descomentamos activamos keepalive para mantener conexiones clientes(ping timeout).
linea 244 Comentamos para no utilizar en este caso autenticado tls. Para más seguridad utilizarlo.
linea 252 utilizamos cifrado aes256.
linea 281–282 ya viene descomentada para utilizar llave y conexión reabiertas con el túnel.
línea 287 editamos y ubicamos log de openvpn
linea 296–297 editamos y ubicamos log de openvpn
activamos el servicio openvpn@server y añadimos el servicio al arranque del sistema con systemd.
Configuramos y activamos ip forwarding.
Añadimos la siguiente línea con valor activado en 1.
Comprobamos si está activado.
Editamos reglas del firewall para openvpn(en caso de manejar fichero script con reglas iptables)
Añadimos reglas de forwarding , entrada tunel y salida interfaz de red física del servidor y añadimos otra regla de forwarding con related y established de una red cualquier a otra para que los paquetes que se enrutan de una red por una interfaz de vuelta vuelvan a enrutar.
También añadimos regla nat de modo que enmascara todo el tráfico que sale de la red virtual por la interfaz de red física del servidor.
Añadimos reglas de entrada y salida puerta 4444 que utilizara el servicio con la interfaz de red física del servidor y protocolos udp. También añadimos regla entrada al servidor para en la interfaz virtual, de modo que mediante established editado en el fichero firewall podrá volver a salir por la interfaz virtual todo el tráfico.
Copiamos a la maquina del cliente los ficheros del cliente generados en el servidor.
Copiamos y utilizamos el ejemplo de configuración de cliente en windows.
Añadimos ficheros del cliente y editamos el fichero ejemplo ovpn del cliente copiado.
Línea 16 utilizamos client.
Línea 24 utilizamos interfaz de red tun
Línea 37 utilizamos protocolo udp
Línea 42 editamos y añadimos dirección ip servidor y puerto.
Línea 53 utilizamos para resolver indefinidamente con el servidor.
Linea 57 utilizamos nobind.
Línea 64 y 65 utilizamos para reconectar con clave y túnel en el servidor
Linea 87 a 89 editamos la ubicación de los ficheros del cliente. CA , certificado y llave.
Utilizamos cifrado aes 256 línea 116
Linea 124 nivel verbosidad fichero log cliente5.
Después de instalar los ficheros en el cliente. Conectamos con otra máquina en otra red para simular estar en internet.
Copiamos los ficheros en la siguiente ubicación del cliente
Una vez copiados podremos comenzar a conectar.
Para conectar en el agente de openvpn escogemos el cliente que queremos y clicamos en connect.
Cabe destacar que habría que abrir los puertos en el router para simular que el servidor esté en internet mediante puerto 4444. Router compañía realizará port mirroring hacia el servidor.
Y podremos conectarnos mediante nuestro cliente.
Podemos comprobar que ip tenemos tanto local en la red que nos encontramos conectados, como la ip que tenemos en el túnel de la conexión virtual mediante openvpn
Nos haría falta copiar a un cliente la clave del cliente ssh para probar el túnel openvpn.
Realizamos la primera conexión, comprobamos que podemos conectar desde la red 192.168.53.0/24 mediante el tunel openvpn a la red 192.168.1.0/24 donde se encuentra el servidor.
Cerraremos la conexión y volveremos a abrir y podremos fijarnos que ssh nos comenta el último log de sesión con la ip del túnel.
Fuentes:
- crear-una-vpn-en-debian
- server-world openvpn
- BridgingAndRouting
- arashmilani
- creating-configuration-files-for-server-and-clients
- how-to/#vpntype
- how-to-install-openvpn-on-centos-7
ZipyintheNet¡ 2020!®