Documentos de Académico
Documentos de Profesional
Documentos de Cultura
https://www.digitalocean.com/community/tutori
als/como-configurar-un-servidor-openvpn-en-
ubuntu-16-04-es
Introducción
¿Quiere acceder a Internet de forma segura desde tu teléfono inteligente o portátil cuando está
conectado a una red no confiable como la WiFi de un hotel o cafetería? Una Red Privada Virtual (VPN)
le permite atravesar redes no confiables de forma privada y segura como si estuviera en una red
privada. El tráfico emerge del servidor VPN y continúa su viaje hasta el destino.
Cuando se combina con conexiones HTTPS, esta configuración le permite proteger sus inicios de
sesión y transacciones inalámbricas. Puede evitar las restricciones geográficas y la censura, y proteger
su ubicación y cualquier tráfico HTTP no cifrado de la red no confiable.
OpenVPN es una solución VPN de Secure Socket Layer (SSL) de código abierto que ofrece una amplia
gama de configuraciones. En este tutorial, configuraremos un servidor OpenVPN en un Droplet y luego
configuraremos el acceso a él desde Windows, OS X, iOS y Android. Este tutorial mantendrá los pasos
de instalación y configuración tan simples como sea posible para estas configuraciones.
Requisitos Previos
Para completar este tutorial, necesitará tener acceso a un servidor Ubuntu 16.04.
Deberá configurar un usuario que no sea root, con privilegios de sudo antes de iniciar esta guía. Puede
seguir nuestra Guía de Configuración Inicial del Servidor Ubuntu 16.04 para configurar un usuario con
los permisos adecuados. El tutorial enlazado también configurará un firewall, que asumiremos está en
su lugar durante esta guía.
Cuando esté listo para comenzar, inicie sesión en su servidor Ubuntu como usuario sudo y continúe a
continuación.
Paso 1 — Instalar OpenVPN
Para empezar, instalaremos OpenVPN en nuestro servidor. OpenVPN está disponible en los
repositorios predeterminados de Ubuntu, por lo que podemos usar apt para la instalación. También
instalaremos el paquete easy-rsa, que nos ayudará a configurar una CA interna (autoridad de
certificación) para usarla con nuestra VPN.
Para actualizar el índice del paquete del servidor e instalar los paquetes necesarios, escriba:
sudo apt-get update
sudo apt-get install openvpn easy-rsa
Dentro, encontrará algunas variables que se pueden ajustar para determinar cómo se crearán sus
certificados. Sólo tenemos que preocuparnos por algunos de estos.
Hacia la parte inferior del archivo, busque la configuración que establece los valores predeterminados
de campo para los nuevos certificados. Debe ser algo como esto:
~/openvpn-ca/vars
. . .
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"
. . .
export KEY_COUNTRY="US"
export KEY_PROVINCE="NY"
export KEY_CITY="New York City"
export KEY_ORG="DigitalOcean"
export KEY_EMAIL="admin@example.com"
export KEY_OU="Community"
. . .
Mientras estamos aquí, también editaremos el valor KEY_NAME justo debajo de esta sección, que
rellena el campo de asunto. Para mantener esto simple, lo llamaremos server en esta guía:
~/openvpn-ca/vars
export KEY_NAME="server"
Ahora tenemos una CA que se puede utilizar para crear el resto de los archivos que necesitamos.
Una vez más, los avisos tendrán valores predeterminados basados en el argumento que acabamos de
pasar (servidor) y el contenido de nuestro archivo vars que hemos obtenido.
Puede aceptar los valores predeterminados presionando Enter. No introduzca una contraseña de
desafío para esta configuración. Al final, tendrá que ingresar y a las dos preguntas para firmar y
confirmar el certificado:
Output
. . .
A continuación, generaremos algunos otros elementos. Podemos generar una llave fuerte Diffie-
Hellman para utilizar durante el intercambio de llaves escribiendo:
./build-dh
Para generar credenciales sin contraseña, para ayudar en las conexiones automatizadas, utilice el
mandato build-key de esta manera:
cd ~/openvpn-ca
source vars
./build-key client1
Si en su lugar, desea crear un conjunto de credenciales protegido por contraseña, utilice el comando
build-key-pass:
cd ~/openvpn-ca
source vars
./build-key-pass client1
Una vez más, los valores por defecto deben estar poblados, por lo que sólo puede pulsar Enter para
continuar. Deje la contraseña de desafío en blanco y asegúrese de escribir y para las solicitudes que le
pregunten si firmar y confirmar el certificado.
Podemos comenzar con todos los archivos que acabamos de generar. Estos se colocaron dentro del
directorio ~/openvpn-ca/keys a medida que se creaban. Necesitamos mover nuestro cert y llave
de CA, nuestro cert y llave de servidor, la firma de HMAC, y el archivo de Diffie-Hellman:
cd ~/openvpn-ca/keys
sudo cp ca.crt ca.key server.crt server.key ta.key dh2048.pem /etc/openvpn
Configuracion Básica
En primer lugar, encuentre la sección HMAC buscando la directiva tls-auth. Eliminar el ";" Para
descomentar la línea tls-auth. Debajo de esto, agregue el parámetro de key-direction
ajustandolo a "0":
/etc/openvpn/server.conf
tls-auth ta.key 0 # This file is secret
key-direction 0
A continuación, encuentre la sección sobre cifrado criptográfico buscando las líneas comentadas de
cipher. El cifrado AES-128-CBC ofrece un buen nivel de cifrado y está bien soportado. Eliminar el
";" Para descomentar la línea cipher AES-128-CBC:
/etc/openvpn/server.conf
cipher AES-128-CBC
Debajo de esto, agregue una línea de auth para seleccionar el algoritmo de resumen de mensajes
HMAC. Para esto, SHA256 es una buena opción:
/etc/openvpn/server.conf
auth SHA256
Finalmente, busque la configuración de user y group y quite el ";" Al principio de la línea para
descomentar:
user nobody
group nogroup
(Opcional) Subir Cambios DNS para Redirigir Todo el Tráfico a Través de la VPN
La configuración anterior creará la conexión VPN entre las dos máquinas, pero no forzará ninguna
conexión a utilizar el túnel. Si desea utilizar la VPN para enrutar todo su tráfico, es probable que desee
subir la configuración de DNS a los equipos cliente.
Usted puede hacer esto, descomentando algunas directivas que configurarán máquinas cliente para
redirigir todo el tráfico web a través de la VPN. Busque la sección de redirect-gateway y quite el
punto y coma ";" Desde el principio de la línea de redirect-gateway para descomentarlo:
/etc/openvpn/server.conf
push "redirect-gateway def1 bypass-dhcp"
Justo debajo de esto, encuentre la sección dhcp-option. De nuevo, quite el ";" Desde delante de
ambas líneas para descomentarlas:
/etc/openvpn/server.conf
push "dhcp-option DNS 208.67.222.222"
push "dhcp-option DNS 208.67.220.220"
Esto debería ayudar a los clientes a reconfigurar su configuración DNS para usar el túnel VPN como
gateway predeterminada.
A menudo, el protocolo puede restringir ese puerto también. Si es así, cambie proto de UDP a TCP:
/etc/openvpn/server.conf
# Optional!
proto tcp
Si no tiene necesidad de utilizar un puerto diferente, es mejor dejar estas dos configuraciones como su
valor predeterminado.
Permitir reenvío IP
Primero, necesitamos permitir que el servidor redirija tráfico. Esto es bastante esencial para la
funcionalidad que queremos que nuestro servidor VPN proporcione.
Podemos ajustar esta configuración modificando el archivo /etc/sysctl.conf
sudo nano /etc/sysctl.conf
En el archivo, busque la línea que establece net.ipv4.ip_forward. Quite el carácter "#" desde el
principio de la línea para descomentar esa configuración:
/etc/sysctl.conf
net.ipv4.ip_forward=1
Su interfaz pública debe seguir la palabra "dev". Por ejemplo, este resultado muestra la interfaz
denominada wlp11s0, que se resalta a continuación:
Output
default via 203.0.113.1 dev wlp11s0 proto static metric 600
Este archivo controla la configuración que se debe poner en el lugar, antes de que se carguen las reglas
UFW convencionales. Hacia la parte superior del archivo, agregue las líneas resaltadas a continuación.
Esto establecerá la directiva predeterminada para la cadena POSTROUTING en la tabla nat y
enmascarará cualquier tráfico procedente de la VPN:
Nota: Recuerde reemplazar eth0 en la línea -A POSTROUTING con la interfaz que encontró en el
comando anterior.
/etc/ufw/before.rules
#
# rules.before
#
# Rules that should be run before the ufw command line added rules. Custom
# rules should be added to one of these chains:
# ufw-before-input
# ufw-before-output
# ufw-before-forward
#
/etc/ufw/before.rules
DEFAULT_FORWARD_POLICY="ACCEPT"
Ahora, podemos deshabilitar y volver a habilitar UFW para cargar los cambios de todos los archivos
que hemos modificado:
sudo ufw disable
sudo ufw enable
May 03 15:30:05 openvpn2 ovpn-server[5856]: /sbin/ip addr add dev tun0 local
10.8.0.1 peer 10.8.0.2
May 03 15:30:05 openvpn2 ovpn-server[5856]: /sbin/ip route add 10.8.0.0/24 via
10.8.0.2
May 03 15:30:05 openvpn2 ovpn-server[5856]: GID set to nogroup
May 03 15:30:05 openvpn2 ovpn-server[5856]: UID set to nobody
May 03 15:30:05 openvpn2 ovpn-server[5856]: UDPv4 link local (bound): [undef]
May 03 15:30:05 openvpn2 ovpn-server[5856]: UDPv4 link remote: [undef]
May 03 15:30:05 openvpn2 ovpn-server[5856]: MULTI: multi_init called, r=256 v=256
May 03 15:30:05 openvpn2 ovpn-server[5856]: IFCONFIG POOL: base=10.8.0.4 size=62,
ipv6=0
May 03 15:30:05 openvpn2 ovpn-server[5856]: IFCONFIG POOL LIST
May 03 15:30:05 openvpn2 ovpn-server[5856]: Initialization Sequence Completed
También puede comprobar que la interfaz de OpenVPN tun0 está disponible escribiendo:
ip addr show tun0
Debería ver una interfaz configurada:
Output
4: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc noqueue state
UNKNOWN group default qlen 100
link/none
inet 10.8.0.1 peer 10.8.0.2/32 scope global tun0
valid_lft forever preferred_lft foreve
Si todo ha ido bien, habilite el servicio para que se inicie automáticamente al arrancar:
sudo systemctl enable openvpn@server
Dado que nuestros archivos de configuración del cliente tendrán las llaves del cliente incrustadas,
debemos bloquear los permisos en nuestro directorio interno:
chmod 700 ~/client-configs/files
Asegúrese de que el protocolo coincide con el valor que está utilizando en la configuración del
servidor:
~/client-configs/base.conf
proto udp
~/client-configs/base.conf
# Downgrade privileges after initialization (non-Windows only)
user nobody
group nogroup
Encuentre las directivas que establecen ca, cert y key. Comente estas directivas ya que agregaremos
los certs y las llaves dentro del propio archivo:
~/client-configs/base.conf
# SSL/TLS parms.
# See the server config file for more
# description. It's best to use
# a separate .crt/.key file pair
# for each client. A single ca
# file can be used for all clients.
#ca ca.crt
#cert client.crt
#key client.key
~/client-configs/base.conf
cipher AES-128-CBC
auth SHA256
A continuación, agregue la directiva key-direction en algún lugar del archivo. Esto debe
establecerse en "1" para trabajar con el servidor:
~/client-configs/base.conf
key-direction 1
Finalmente, agregue algunas líneas comentadas. Queremos incluirlos con cada configuración, pero
solo debemos habilitarlos para clientes Linux que se envían con un archivo
/etc/openvpn/update-resolv-conf. Este script usa la utilidad resolvconf para actualizar
la información de DNS para clientes Linux.
~/client-configs/base.conf
# script-security 2
# up /etc/openvpn/update-resolv-conf
# down /etc/openvpn/update-resolv-conf
#!/bin/bash
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
Si todo salió bien, deberíamos tener un archivo client1.ovpn en nuestro directorio ~/client-
configs/files:
ls ~/client-configs/files
Output
client1.ovpn
Aquí hay varias herramientas y tutoriales para transferir archivos de forma segura del servidor a un
equipo local:
• WinSCP
• Cómo Utilizar SFTP para Transferir Archivos de Forma Segura con un Servidor Remoto
• Cómo Utilizar Filezilla para Transferir y Gestionar Archivos de Forma Segura en su VPS
Paso 12 — Instalar la Configuración del Cliente
Ahora, vamos a discutir cómo instalar un perfil VPN de cliente en Windows, OS X, iOS y Android.
Ninguna de estas instrucciones del cliente dependen una de la otra, así que siéntete libre de saltar a lo
que sea aplicable a tu necesidad.
La conexión OpenVPN llamará el archivo .ovpn de cualquier forma que lo haya nombrado. En
nuestro ejemplo, esto significa que la conexión se llamará client1.ovpn para el primer archivo de
cliente que generamos.
Windows
Instalación
La aplicación de cliente de OpenVPN para Windows se puede encontrar en la página de Descargas de
OpenVPN. Elija la versión de instalación adecuada para su versión de Windows.
Nota: OpenVPN necesita privilegios administrativos para instalar.
Después de instalar OpenVPN, copie el archivo .ovpn en:
C:\Program Files\OpenVPN\config
OS X
Instalación
Tunnelblick es un cliente OpenVPN de código abierto gratuito para Mac OS X. Puede descargar la
última imagen de disco desde la página de Descargas de Tunnelblick. Haga doble clic en el archivo
.dmg descarguelo y siga las instrucciones para instalar.
Hacia el final del proceso de instalación, Tunnelblick le preguntará si tiene algún archivo de
configuración. Puede ser más fácil contestar No y dejar que Tunnelblick termine. Abra una ventana del
Finder y haga doble clic en client1.ovpn. Tunnelblick instalará el perfil del cliente. Se requieren
privilegios administrativos.
Conectando
Inicie Tunnelblick haciendo doble clic en Tunnelblick en la carpeta Aplicaciones. Una vez que
Tunnelblick ha sido lanzado, habrá un icono Tunnelblick en la barra de menú en la parte superior
derecha de la pantalla para controlar las conexiones. Haga clic en el icono y, a continuación, en el
elemento de menú Conectar para iniciar la conexión VPN. Seleccione la conexión client1.
Linux
Instalación
Si está usando Linux, hay una variedad de herramientas que puede usar dependiendo de su distribución.
El entorno de escritorio o el administrador de ventanas también pueden incluir utilidades de conexión.
Sin embargo, la forma más universal de conectar es usar el software OpenVPN.
En Ubuntu o Debian, puede instalarlo tal como lo hizo en el servidor escribiendo:
sudo apt-get update
sudo apt-get install openvpn
Configurando
Compruebe si su distribución incluye el script /etc/openvpn/update-resolv-conf:
ls /etc/openvpn
Output
update-resolve-conf
Descomente las tres líneas que colocamos para ajustar la configuración de DNS si pudimos encontrar
un archivo update-resolv-conf:
client1.ovpn
script-security 2
up /etc/openvpn/update-resolv-conf
down /etc/openvpn/update-resolv-conf
Si está utilizando CentOS, cambie el grupo de nogroup a nobody para que coincida con los grupos
disponibles de la distribución:
client1.ovpn
group nobody
IOS
Instalación
Desde iTunes App Store, busque e instale OpenVPN Connect, la aplicación oficial de iOS OpenVPN.
Para transferir su configuración de cliente de iOS al dispositivo, conéctelo directamente a una
computadora.
Completar la transferencia con iTunes se describirá aquí. Abre iTunes en la computadora y haz clic en
iPhone> apps. Desplácese hacia abajo hasta la parte inferior de la sección Compartir archivos y haga
clic en la aplicación OpenVPN. La ventana en blanco a la derecha, Documentos OpenVPN, es para
compartir archivos. Arrastre el archivo .ovpn a la ventana OpenVPN Documents.
Ahora inicie la aplicación OpenVPN en el iPhone. Habrá una notificación de que un nuevo perfil está
listo para importar. Toque el signo más de color verde para importarlo.
Conectando
OpenVPN ahora está listo para usar con el nuevo perfil. Inicie la conexión deslizando el botón
Conectar a la posición Encendido. Desconecte deslizando el mismo botón a Off.
Nota: El conmutador VPN en Configuración no se puede utilizar para conectarse a la VPN. Si lo
intentas, recibirás un aviso para conectarte solo con la aplicación OpenVPN.
Android
Instalación
Abra Google Play Store. Busque e instale Android OpenVPN Connect, la aplicación oficial del lado del
cliente de Android OpenVPN.
El perfil .ovpn se puede transferir conectando el dispositivo Android a su computadora por USB y
copiando el archivo. Como alternativa, si tiene un lector de tarjetas SD, puede retirar la tarjeta SD del
dispositivo, copiar el perfil en ella e insertarla en el dispositivo Android.
Inicie la aplicación OpenVPN y toque el menú para importar el perfil.
A continuación, navegue hasta la ubicación del perfil guardado (la captura de pantalla utiliza
/sdcard/Download/) y seleccione el archivo. La aplicación hará una nota de que el perfil se ha
importado.
Conectando
Para conectarse, simplemente pulse el botón Conectar. Se le preguntará si confía en la aplicación
OpenVPN. Seleccione Aceptar* para iniciar la conexión. Para desconectarse de la VPN, vuelva a la
aplicación OpenVPN y seleccione Desconectar.
A continuación, llame al comando revoke-full usando el nombre del cliente que desea revocar:
./revoke-full client3
Esto mostrará algo de salida, terminando en error 23. Esto es normal y el proceso debería haber
generado con éxito la información de revocación necesaria, que se almacena en un archivo llamado
crl.pem dentro del subdirectorio keys.
En la parte inferior del archivo, agregue la opción crl-verify para que el servidor OpenVPN
compruebe la lista de revocación de certificados que hemos creado cada vez que se realiza un intento
de conexión:
/etc/openvpn/server.conf
crl-verify crl.pem
El cliente ahora debería ser capaz de conectar con éxito al servidor utilizando la credencial antigua.
Para revocar clientes adicionales, siga este proceso:
1. Genere una nueva lista de revocación de certificados mediante la búsqueda del archivo vars en
el directorio ~/openvpn-ca y luego llamando al script de revoke-full en el nombre del
cliente.
2. Copie la nueva lista de revocación de certificados en el directorio /etc/openvpn para
sobrescribir la lista antigua.
3. Reinicie el servicio OpenVPN.
Este proceso se puede utilizar para revocar cualquier certificado que haya emitido anteriormente para
su servidor.
Conclusión
¡Felicitaciones! Ahora está atravesando la Internet de manera segura protegiendo su identidad,
ubicación y tráfico de los snoopers y censors.
Para configurar más clientes, sólo tiene que seguir los pasos 6 y 11-13 para cada dispositivo adicional.
Para revocar el acceso a los clientes, siga el paso 14.