Cargando

Ir a contenido


 


Cómo instalar y configurar servidor OpenVPN en Ubuntu Linux

Manual detallado sobre cómo poder instalar y configurar un servidor OpenVPN en Ubuntu 16.04 de Linux.


Escrito por el mar 21 2017 15:50 ubuntu linux seguridad



OpenVPN es sin lugar a dudas es la mejor forma cómo podemos establecer una conexión de manera segura a una red a través de Internet.

 

OpenVPN es un recurso VPN de código abierto que permite que como usuarios enmascaremos nuestra navegación para evitar ser víctimas del robo de información en la red. Estos son aspectos muy importantes a nivel de seguridad que debemos tener en cuenta y en esta oportunidad vamos a analizar el proceso de configuración de OpenVPN en un entorno Ubuntu 16.04.

 

Usos de OpenVPN
Gracias a OpenVPN podemos realizar tareas como:
  • Proteger el tráfico durante el proceso de navegación en la red.
  • Funciona como un túnel sobre cualquier dirección IP usando un solo puerto TCP o UDP.
  • Configurar múltiples servidores VPN escalables.
  • Usar funciones de cifrado y autenticación para proteger el tráfico.
  • Intercambio de claves dinámico.
  • Crear puentes de Ethernet seguros.
  • Administración de VPN usando una interfaz gráfica desde entornos Windows y Mac OS.

 

Requisitos de OpenVPN
Antes de comenzar el proceso de instalación es importante cumplir con ciertos requisitos, éstos son:
  • Usuario root
  • Droplet Ubuntu 16.04

 

 

 


1. Cómo instalar Actualizar e instalar OpenVPN en Ubuntu 16.04

 

Paso 1

En primer lugar, actualizaremos Ubuntu 16.04 usando el siguiente comando:
sudo apt-get update
Paso 2

Una vez actualizado el sistema procedemos a instalar OpenVPN usando el siguiente comando. Aceptamos la descarga y respectiva instalación de los paquetes de OpenVPN.
sudo apt-get install openvpn easy-rsa

 

De este modo hemos instalado OpenVPN en Ubuntu 16 y ahora será necesario realizar el proceso de configuración.

 

 


2. Cómo establecer el directorio CA en Ubuntu 16.04


El directorio CA (Certificate Authority- Certificado de Autoridad) es el medio por el cual podemos emitir certificados de confianza ya que OpenVPN es una VPN que usa los protocolos TLS/SSL.

 

Paso 1

Para esto copiaremos las plantillas de easy-rsa en nuestro directorio home usando el comando make-cadir, ingresaremos lo siguiente en la terminal de Ubuntu 16.04:
make-cadir ~/openvpn-ca
Paso 2

Ahora accederemos a la ruta creada anteriormente:
cd ~/openvpn-ca

 

 


3. configurar las variables de los certificados de autoridad en Ubuntu 16.04


Es necesario que configuremos los valores que serán usados por los certificados de autoridad o CA y para ello debemos editar el archivo vars dentro del directorio.

 

Paso 1

Podemos abrir este archivo usando el editor preferido, en este caso será nano:
sudo nano vars

 

Paso 2

En este archivo encontramos las variables que podemos ajustar y configurar para determinar la forma en que serán creados los certificados de autoridad. Nos desplazaremos a la parte inferior del archivo hasta encontrar estas variables:
export KEY_COUNTRY="US"
export KEY_PROVINCE="CA"
export KEY_CITY="SanFrancisco"
export KEY_ORG="Fort-Funston"
export KEY_EMAIL="me@myhost.mydomain"
export KEY_OU="MyOrganizationalUnit"

 

Paso 3

Editamos estos valores en base a los parámetros que sean requeridos. Del mismo modo editaremos la línea export KEY_NAME asignado el nombre adecuado, en este caso la hemos llamado server.

 

 

Paso 4

Guardamos los cambios usando la combinación:

 

 

Ctrl + O

 

 

y salimos del editor usando

 

 

Ctrl + X

 

 

 


4. Cómo crear el certificado de autoridad en Ubuntu 16.04


Con estos valores definidos procedemos a la creación del certificado de autoridad.

 

Nota
Recordemos que debemos estar en el directorio ~/openvpn-ca.

 

Paso 1

Una vez estemos en el directorio ejecutaremos el siguiente comando:
source vars

 

Paso 2

Procedemos a ejecutar el comando indicado para tener un entorno limpio:
./clean-all
Paso 3

Ahora crearemos el certificado raíz CA usando el siguiente comando:
./build-ca
Paso 4

Podremos ver una serie de preguntas las cuales ya hemos configurado en el archivo vars por lo cual solo debemos pulsar Enter para que se completen de forma automática. De esta forma hemos creado el certificado que será útil para el resto del proceso.

 

 

 


5. Cómo crear certificado del servidor, clave y archivos encriptados en Ubuntu 16.04


En este punto vamos a crear el certificado del servidor y sus respectivas claves.

 

Paso 1

Para esto ejecutaremos el siguiente comando:
./build-key-server server
Debemos reemplazar el nombre servidor por el asignado en la línea export KEY_NAME del archivo vars). De forma automática se emitirán los valores ya definidos en el archivo vars por lo cual pulsamos Enter.

 

Paso 2

Podemos ver que el certificado se ha creado de forma correcta.

 

 

Paso 3

A continuación, crearemos otros parámetros como por ejemplo, el cifrado Diffie-Hellman el cual podrá ser usado durante el intercambio de claves, para eso usaremos la siguiente línea.
./build-dh

 

Paso 4

Este proceso toma algunos minutos en ser completado. También podemos generar una firma HMAC la cual nos permite mejorar los niveles de integridad TLS del servidor, para ello ingresamos lo siguiente.
openvpn --genkey --secret keys/ta.key

6. Cómo crear certificado del servidor, clave y archivos encriptados en Ubuntu 16.04


Este proceso puede realizarse en la maquina cliente y posteriormente firmarse usando el servidor CA pero esta vez lo ejecutaremos directamente para ahorrar tiempo.Accedemos nuevamente, si no lo estamos, al directorio ~/openvpn-ca y allí ejecutaremos el comando source vars.

 

Paso 1

Ahora ingresaremos la siguiente línea donde definimos el nombre del cliente:
./build-key solvetic1
Debemos pulsar Enter en las respectivas preguntas ya configuradas anteriormente

 

 

Paso 2

Este comando crea credenciales sin requerir contraseña, si por seguridad deseamos establecer una credencial con contraseña debemos ejecutar la siguiente línea:
./build-key-pass (nombre cliente)

7. Cómo configurar el servicio OpenVPN en Ubuntu 16.04


El siguiente paso consiste en configurar el servicio OpenVPN para que todo funcione de la forma deseada. En primer lugar copiaremos los archivos que hemos creado en la ruta ~/openvpn-ca hacia la ruta /etc/openvpn, recordemos que se han creado los certificados CA, las claves, el archivo Diffie-Hellman y el archivo HMAC.

 

Paso 1

Para esto accederemos al siguiente directorio:
cd ~/openvpn-ca/keys
Paso 2

Una vez allí ejecutaremos la siguiente línea para el proceso de copia:
sudo cp ca.crt ca.key server.crt server.key ta.key dh2048.pem /etc/openvpn
Paso 3

Ahora debemos copiar y descomprimir un archivo de configuración de OpenVPN en dicho directorio para usarlo como base. Para esto ingresaremos lo siguiente:
gunzip -c /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz | sudo tee /etc/openvpn/server.conf

 

 


8. Cómo Ajustar de la configuración de OpenVPN en Ubuntu 16.04

 

Paso 1

Una vez tengamos estos archivos en la ruta necesario procedemos a ajustar la configuración de OpenVPN accediendo al archivo server.conf:
sudo nano /etc/openvpn/server.conf

 

Paso 2

Allí realizaremos los siguientes ajustes. Vamos a la línea tls-auth ta.key 0 # This file is secret y debajo de ella añadiremos lo siguiente.
key-direction 0
Paso 3

En la línea cipher AES-128-CBC removemos el símbolo ; ubicado al inicio de la misma y debajo de esta línea ingresaremos lo siguiente.
auth SHA256
Paso 4

Esto es con el fin de crear una línea de autenticación para elegir el algoritmo de mensajes. En las líneas user y group removemos el símbolo de ; ubicado al inicio.

 

 

Como alternativas opcionales podemos agregar lo siguiente.

 

Presionar el tráfico DNS a través de la VPN
Esta opción es practica cuando deseamos enrutar todo el tráfico a través de la VPN de forma exclusiva.
Para esto realizaremos los siguientes cambios en el archivo anterior: Descomentamos las líneas:
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 208.67.222.222"
push "dhcp-option DNS 208.67.220.220"

 

Modificar del puerto en OpenVPN
Por defecto OpenVPN usa el puerto 1194 y el protocolo de red UDP para las conexiones del cliente. Si deseamos modificar este puerto vamos a la línea port y asignamos el nuevo puerto según sea la necesidad actual.

 

 

Del mismo modo podremos ajustar el protocolo en la línea proto.

 

 

Ajuste de la configuración de red: Reenvío de IP
Este punto es importante ya que permite que todo el tráfico de OpenVPN sea enrutado de forma correcta.

 

En primer lugar habilitaremos el reenvío del direccionamiento IP, es decir, que el servidor reenvíe el tráfico, para ello debemos editar el archivo /etc/sysctl.conf:

sudo nano /etc/sysctl.conf
Dentro del archivo ubicaremos la línea net.ipv4.ip_forward=1 y la descomentamos removiendo el símbolo # ubicado al inicio de la misma.

 

 

Guardamos los cambios y salimos del archivo. Para que todos los cambios sean aplicados en la sesión actual ejecutaremos el siguiente comando.

sudo sysctl –p

 

Ajuste de las reglas en el firewall de Ubuntu 16.04
El uso del firewall es fundamental ya que nos protege de las conexiones entrantes al sistema, en este punto debemos editar el archivo de reglas para la configuración del trafico enmascarado. En primer lugar debemos conocer la interfaz de red pública del servidor, para ello ejecutamos el siguiente comando:
ip route | grep default

 

En este ejemplo la interfaz de red pública es enp0s3. Ahora accederemos al archivo de configuración de reglas para su ajuste, ingresamos lo siguiente:

sudo nano /etc/ufw/before.rules
Se desplegará la siguiente ventana.

 

 

En este archivo se administra la configuración que debe estar antepuesta antes de ser ejecutadas las reglas UFW típicas. En la parte superior ingresaremos las siguientes líneas las cuales establecerán la configuración POSTROUTING:

# START OPENVPN RULES
# NAT table rules
*nat
:POSTROUTING ACCEPT [0:0]
# Allow traffic from OpenVPN client to (interfaz)
-A POSTROUTING -s 10.8.0.0/8 -o (interfaz) -j MASQUERADE
COMMIT
# END OPENVPN RULES

 

Es importante que en el campo enp0s3 establezcamos el nombre correcto de la interfaz a usar. Guardamos los cambios usando la combinación:

 

 

Ctrl + O

 

 

y salimos del editor usando:

 

 

Ctrl + X

 

 

Ahora debemos permitir que el UFW acepte los paquetes de forma predeterminada, para ello ejecutaremos el siguiente comando:

sudo nano /etc/default/ufw
En la línea DEFAULT_FORWARD_POLICY modificamos el termino DROP por ACCEPT.

 

 

Guardamos los cambios.

 

 

Apertura de los puertos VPN y habilitar los cambios
El siguiente paso consiste en ajustar los valores del firewall para permitir todo el tráfico a OpenVPN. Para esto ejecutamos el siguiente comando.
sudo ufw allow 1194/udp
Nota
Si hemos editado el puerto y protocolo debemos cambiarlo en este comando, estos son los valores por defecto de OpenVPN.

 

También añadimos el puerto SSH:

sudo ufw allow OpenSSH

 

Para cargar los cambios usaremos los siguientes comandos.

sudo ufw disable
sudo ufw enable
Podemos comprobar que las reglas han sido añadidas usando el comando sudo ufw status:

 

 

 

 


9. Cómo iniciar y habilitar el servicio de OpenVPN en Ubuntu 16.04


Con estos valores ya definidos estamos en condición de arrancar el servicio de OpenVPN en Ubuntu y para ello será necesario especificar el nombre que hemos asignado.

 

Paso 1

Para esto ejecutaremos la siguiente línea:
sudo systemctl start openvpn@server
Paso 2

Posteriormente validamos el estado de OpenVPN usando la línea:
sudo systemctl status openvpn@server

 

Paso 3

Podemos observar que su estado es correcto y se ha iniciado de forma satisfactoria. Pulsamos la letra q para retornar a la línea de comandos. Del mismo modo podemos verificar la interfaz tun0 de OpenVPN ingresando lo siguiente:
ip addr show tun0

 

Paso 4

Para que el servicio de OpenVPN se ejecute de forma automática en cada inicio de sesión debemos ingresar el siguiente parámetro:
sudo systemctl enable openvpn@server

 

 


10. Cómo crear la estructura del cliente de OpenVPN en Ubuntu 16.04

 

Paso 1

El siguiente paso consiste en crear los archivos de configuración del cliente, para ello crearemos esta estructura dentro del directorio personal ejecutando lo siguiente:
mkdir -p ~/client-configs/files
Paso 2

Bloquearemos los permisos en dicha ruta ya que allí se encuentran las claves creadas, usaremos la siguiente línea:
chmod 700 ~/client-configs/files

11. Cómo crear una base de configuración de OpenVPN en Ubuntu 16.04

 

Paso 1

En este punto copiaremos una base de configuración de cliente en el directorio para tenerla como base, ejecutamos lo siguiente:
cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf ~/client-configs/base.conf
Paso 2

Este archivo lo abrimos con nuestro editor preferido:
sudo nano ~/client-configs/base.conf

 

Paso 3

Allí localizamos la línea remote e ingresaremos la dirección IP del servidor la cual esta seguida del puerto UDP 1194:

 

 

Paso 4

En este mismo archivo realizaremos los siguientes cambios:
  • Descomentamos las líneas user y group removiendo el signo ;
  • Comentamos, añadiendo el símbolo #, a las líneas ca, cert y key
  • Agregamos las líneas cipher AES-128-CBC y auth SHA256
  • Debajo de la línea anterior escribimos key-direction 1
  • Al final del archivo agregamos las siguientes líneas:
script-security 2 / # up /etc/openvpn/update-resolv-conf / # down
/etc/openvpn/update-resolv-conf

Si no os funciona, probar esta otra forma de comando script-security:

script-security 2 /up /etc/openvpn/update-resolv-conf  /down /etc/openvpn/update-resolv-conf

 

 

Paso 5

Guardamos los cambios usando la combinación:

 

 

Ctrl + O

 

 

y salimos del editor usando:

 

 

Ctrl + X

 

 

 


12. Cómo crear un script para la configuración de OpenVPN en Ubuntu 16.04

 

Paso 1

Este script se encargará de compilar los eventos más importantes de los archivos de certificado, clave y cifrado en la ruta ~ / client-configs / files. Crearemos un archivo llamado make_config.sh usando la siguiente sintaxis:
sudo nano ~/client-configs/make_config.sh
Paso 2

Se abrirá un archivo en blanco donde agregaremos las siguientes líneas:
#!/bin/bash

# First argument: Client identifier

KEY_DIR=~/openvpn-ca/keys
OUTPUT_DIR=~/client-configs/files
BASE_CONFIG=~/client-configs/base.conf

cat ${BASE_CONFIG} \
<(echo -e '<ca>') \
${KEY_DIR}/ca.crt \
<(echo -e '</ca>\n<cert>') \
${KEY_DIR}/${1}.crt \
<(echo -e '</cert>\n<key>') \
${KEY_DIR}/${1}.key \
<(echo -e '</key>\n<tls-auth>') \
${KEY_DIR}/ta.key \
<(echo -e '</tls-auth>') \
> ${OUTPUT_DIR}/${1}.ovpn

 

Paso 3

Guardamos los cambios y salimos del editor. Este archivo lo haremos ejecutable ingresando lo siguiente:
sudo chmod 700 ~/client-configs/make_config.sh

13. Cómo los archivos de configuración del cliente de OpenVPN en Ubuntu 16.04


El siguiente paso consiste en crear los archivos que serán de configuración para el cliente, el cual hemos creado como Solvetic1.

 

Paso 1

Para esto ingresaremos las siguientes líneas:
cd ~/client-configs
./make_config.sh client1
[plain]Paso 2[/plain]
Podemos ver el contenido de dicha carpeta usando el comando ls:
ls ~/client-configs/files

 

Vemos que allí está el cliente Solvetic1 creado de forma correcta.

 

 


14. Cómo transferir la configuración OpenVPN a los equipos cliente OpenVPN en Ubuntu 16.04


Una vez tengamos todo el proceso de configuración realizado en Ubuntu 16 es hora de transferir el archivo Solvetic1.ovpn a los respectivos dispositivos como equipos o dispositivos móviles.

 

Paso 1

Podemos usar el cliente de transferencia que deseemos en base al sistema que usemos, un ejemplo de transferencia puede ser el siguiente en un entorno Fedora 25:
sftp solvetic@192.168.0.10:client-configs/files/Solvetic1.ovpn ~/
Paso 2

En este ejemplo usaremos Windows y el cliente Filezilla:

 

 

 

 

 


15. Cómo instalar y ejecutar OpenVPN en Ubuntu 16.04


Paso 1

OpenVPN está disponible para Windows, Linux, Mac OS, Android, FreeBSD, etc. En el siguiente enlace podemos descargar la versión adecuada de OpenVPN:

 

 

Paso 2

A continuación, veremos cómo ejecutar OpenVPN en los diversos sistemas operativos.

 

Ejecutar OpenVPN en Windows
En Windows, el cual es el sistema de ejemplo, debemos copiar el archivo .ovpn en la ruta:
C:\Program Files\OpenVPN\config
Paso 3

Desde allí podremos dar clic derecho sobre el archivo y seleccionar la opción Start OpenVPN on this config file

 

 

De esta forma nos conectaremos con el servidor OpenVPN.

 

Nota
OpenVPN debe ejecutarse con privilegios administrativos.

 

 

Ejecutar OpenVPN en Linux
El proceso en sistemas Linux debe ser el siguiente:

 

En primer lugar actualizamos el sistema e instalamos OpenVPN usando los siguientes comandos:

sudo apt-get update
sudo apt-get install openvpn
Si usamos CentOS usaremos los siguientes comandos:
sudo yum install epel-release
sudo yum install openvpn
Una vez instalado OpenVPN ejecutaremos el siguiente comando:
ls /etc/openvpn
El siguiente paso consiste en editar el archivo .ovpn transferido con el editor deseado.
sudo nano archivo.ovpn
En el archivo abierto debemos descomentar las siguientes líneas:
script-security 2
up /etc/openvpn/update-resolv-conf
down /etc/openvpn/update-resolv-con
Ahora podremos conectarnos a la VPN usando la siguiente sintaxis:
sudo openvpn --config Archivo.ovpn

 

Ejecutar OpenVPN en Mac OS
Si usamos Mac OS, aplica para macOS Sierra, podemos usar la utilidad tunnelblick la cual podemos descargar de forma gratuita en el siguiente enlace:

 

 

Al ejecutar la aplicación en la barra de títulos veremos el icono correspondiente, pulsamos allí y seleccionamos Connect y elegimos el cliente que tengamos configurado, por ejemplo, Solvetic1.

 

 

Ejecutar OpenVPN en Android
En el caso de los usuarios de Android que desean conectarse por VPN a Linux, podemos descargar la aplicación OpenVPN Connect en el siguiente enlace:

 

 

El archivo .ovpn debemos transferirlo mediante USB al teléfono para su uso.
Al ejecutar la aplicación vamos al menú y seleccionamos la ubicación donde tenemos el archivo .ovpn y desde allí lo importamos. Para conectarnos pulsamos en el botón Connect.

 

De cualquiera de las formas indicadas el objetivo es acceder vía VPN a Ubuntu 16.04 disfrutando de las ventajas ofrecidas por OpenVPN.

 

 


Como ves configurar un servidor OpenVPN en Ubuntu es algo complejo, pero con este completo manual tienes paso a paso todo lo que debes hacer para ponerlo apunto en este sistema. Si además de Ubuntu usas otras distros, aquí te dejamos cómo configurar e instalar un servidor OpenVPN en Debian.

 

¿Te ha gustado y ayudado este Tutorial?
Puedes premiar al autor pulsando este botón para darle un punto positivo
  • -
  • 0
10
VOTA
5
100%
4
0%
3
0%
2
0%
1
0%

  Información

  •   Publicado mar 21 2017 15:50
  •   Actualizado abr 07 2017 08:28
  •   Visitas 6.1K
  •   Nivel
    Profesional



Tutoriales Relacionados


9 Comentarios


Celio Santos
mar 21 2017 17:44

Se hizo la luz, el dios Solvetic! :)

Hola,

Estoy siguiendo el tutorial y cuando desde win abro el cliente  el log me dice lo siguiente:

 

 

Wed Apr 05 12:23:11 2017 NOTE: --user option is not implemented on Windows
Wed Apr 05 12:23:11 2017 NOTE: --group option is not implemented on Windows
Options error: Unrecognized option or missing parameter(s) in solvetic1.ovpn:129: /etc/openvpn/update-resolv-conf (2.3.13)
Use --help for more information.
 
quito las lineas que dice y me da otros problemas de conexión,
 
ademas el firewall de ubuntu me bloquea el samba y demas cosas en red ¿necesito ayudaa?

Valerio Cabanillas
abr 05 2017 13:13

 

Hola,

Estoy siguiendo el tutorial y cuando desde win abro el cliente  el log me dice lo siguiente:

 

 

Wed Apr 05 12:23:11 2017 NOTE: --user option is not implemented on Windows
Wed Apr 05 12:23:11 2017 NOTE: --group option is not implemented on Windows
Options error: Unrecognized option or missing parameter(s) in solvetic1.ovpn:129: /etc/openvpn/update-resolv-conf (2.3.13)
Use --help for more information.
 
quito las lineas que dice y me da otros problemas de conexión,
 
ademas el firewall de ubuntu me bloquea el samba y demas cosas en red ¿necesito ayudaa?

 

 

Si necesitas liberar vía firewall en Linux mira este tutorial te ayudará:

 

https://www.solvetic...w-ubuntu-linux/

 

y este:

 

https://www.solvetic...r-crear-reglas/

 

Saludos y suerte compañero.

Ya lo consegui!!!

no sabia que al activar el firewall de ubuntu todos los puertos se cierran,

lo del archivo era una cuestion de poner bien los datos.

 

Soy novato en Ubuntu, pero me esta gustando.

 

Muchas gracias por la pronta respuesta.

en la lineas a agregar del archivo conf.base, hay q agregar esta linea asii;

 

  1. script-security 2 /up /etc/openvpn/update-resolv-conf  /down /etc/openvpn/update-resolv-con

 

En el capitulo 11 del tutorial.


Solvetic Sistemas
abr 07 2017 08:23

Ya lo consegui!!!

no sabia que al activar el firewall de ubuntu todos los puertos se cierran,

lo del archivo era una cuestion de poner bien los datos.

 

Soy novato en Ubuntu, pero me esta gustando.

 

Muchas gracias por la pronta respuesta.

 

Nos alegra que ya lo tengas montado! Saludos Israel. (Añadiremos ese detalle ;) )

 

Y nos alegra que os gusten estos tutoriales!


Marcos Riera
abr 07 2017 08:32

Nos alegra que ya lo tengas montado! Saludos Israel. (Añadiremos ese detalle ;) )

 

Y nos alegra que os gusten estos tutoriales!

 

Siempre haceis cosas útiles, para mi de las mejores paginas.


Elmer García Allccahuamán
jun 21 2017 21:52

Hola. Felicitaciones por el tutorial me parece interesante, pero tengo una duda

¿Cómo hago para obtener el segundo requisito de "Droplet Ubuntu 16.04"?, ya tengo descargado el Ubuntu server 16.04.

GRACIAS POR SU AYUDA!!! Saludos.

Es posible que funcione dentro de tor? es decir, "remote xxxxxxxxxxxxxxxx.onion 1194"

No esperes más y entra en Solvetic
Deja tus comentarios y aprovecha las ventajas de la cuenta de usuario ¡Únete!
Demuestra que eres experto!
  ESCRIBIR TUTORIAL
Suscribirse