Cómo configurar un servidor OpenVPN en Ubuntu

Introducción

¿Deseas acceder a Internet de forma segura desde tu teléfono inteligente o computadora portátil cuando estás conectado a una red que no es de confianza, como el WiFi de un hotel o cafetería? Una red privada virtual (VPN) te permite usar redes no confiables de forma privada y segura, como si estuvieras en una red segura y privada. El tráfico fluye normalmente hacia su destino

Cuando se combina con conexiones HTTPS, esta configuración te permite asegurar tus conexiones y transacciones inalámbricas. Puedes eludir las restricciones geográficas y la censura, y proteger tu ubicación y el tráfico HTTP no cifrado de la red no confiable.

OpenVPN es una solución VPN Secure Socket Layer (SSL) de código abierto con todas las funciones que se adapta a 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.

Prerrequisitos

El único requisito previo es tener un Droplet Ubuntu 14.04 establecido y en ejecución. Necesitará acceso de root para completar esta guía.

  • Opcional: después de completar este tutorial, sería una buena idea crear una cuenta de usuario estándar con privilegios de sudo para realizar el mantenimiento general de tu servidor.

Paso 1 – Instalar y configurar el entorno de servidor de OpenVPN

Completa estos pasos para la configuración del lado del servidor.

Configuración de OpenVPN

Antes de instalar cualquier paquete, primero actualizaremos las listas de repositorios de Ubuntu.

Luego podemos instalar OpenVPN y Easy-RSA.

El archivo de configuración del servidor VPN de ejemplo debe extraerse en /etc/openvpn para poder incorporarlo en nuestra configuración. Esto se puede hacer con un comando:

Una vez extraído, debes abrir server.conf en un editor de texto. En este tutorial usaré Vim pero puedes usar el editor que prefieras.

Hay varios cambios que hacer en este archivo. Verás una sección parecida a esto:

Debes editar dh1024.pem y cambiarlo por:

Esto duplicará la longitud de la clave RSA utilizada al generar claves de servidor y cliente.

Ahora debes buscar en server.conf, la siguiente sección:

Descomenta push “redirect-gateway def1 bypass-dhcp” para que el servidor VPN pase el tráfico web de los clientes a su destino. Debe verse así cuando se hace:

La siguiente edición a realizar es en esta área:

Debes descomentar push “dhcp-option DNS 208.67.222.222” y push “dhcp-option DNS 208.67.220.220”. Debe verse así cuando se hace:

Esto le indica al servidor que envíe OpenDNS a los clientes conectados para la resolución de DNS cuando sea posible. Esto puede ayudar a evitar que las solicitudes de DNS se filtren fuera de la conexión VPN. Sin embargo, también es importante especificar las resoluciones de DNS deseadas en los dispositivos cliente. Aunque OpenDNS es el valor predeterminado utilizado por OpenVPN, puedes usar los servicios DNS que prefieras.

La última área para cambiar en server.conf está aquí:

Hay que descomentar tanto user nobodygroup nogroup. Debe verse así cuando lo hagas:

De forma predeterminada, OpenVPN se ejecuta como usuario root y, por lo tanto, tiene acceso de root completo al sistema. En su lugar, limitaremos OpenVPN al usuario nobody y al grupo nogroup. Este es un usuario sin privilegios y sin capacidades de inicio de sesión predeterminadas, a menudo reservado para ejecutar aplicaciones que no son de confianza, como servidores orientados a la web.

Ahora guarda tus cambios y cierra Vim.

Reenvío de paquetes

Esta es una configuración de sysctl que le indica al kernel del servidor que reenvíe el tráfico de los dispositivos cliente a Internet. De lo contrario, el tráfico se detendrá en el servidor. Tienes que habilitar el reenvío de paquetes durante el tiempo de ejecución al ingresar este comando:

Necesitamos hacer que esto sea permanente para que el servidor aún reenvíe el tráfico después de reiniciar.

Cerca de la parte superior del archivo sysctl, verás:

Debes descomentar net.ipv4.ip_forward. Debe verse así cuando se hace:

Guarda los cambios y  cierra el editor.

Uncomplicated Firewall (ufw)

ufw es un front-end para iptables y la configuración de ufw no es difícil. Se incluye de forma predeterminada en Ubuntu 14.04, por lo que solo necesitamos hacer algunas reglas y modificaciones de configuración, luego encender el firewall.

Primero debes establecer ufw para permitir SSH. En el símbolo del sistema, ingresa:

Este tutorial utilizará OpenVPN sobre UDP, por lo que ufw también debe permitir el tráfico UDP a través del puerto 1194.

También debe establecerse la política de reenvío de ufw. Haremos esto en el archivo de configuración principal de ufw.

Busca DEFAULT_FORWARD_POLICY=”DROP”. Esto debe cambiarse de DROP a ACCEPT. Debe verse así cuando se hace:

A continuación, agregaremos reglas adicionales de ufw para la traducción de direcciones de red y el enmascaramiento de IP de los clientes conectados.

Haz que la parte superior de tu archivo before.rules se vea a como abajo. Se debe editar una parte para las REGLAS DE OPENVPN:

Con los cambios realizados en ufw, ahora podemos habilitarlo. Teclear en el símbolo del sistema:

La habilitación de ufw devolverá el siguiente mensaje:

Responde y. El resultado será esta salida:

Para verificar las reglas del firewall primario de ufw:

El comando de estado debe devolver estas entradas:

Paso 2: creación de una entidad emisora ​​de certificados y un certificado y clave del lado del servidor

OpenVPN utiliza certificados para cifrar el tráfico.

Configurar y construir la autoridad de certificación

Ahora es el momento de configurar nuestra propia autoridad de certificación (CA) y generar un certificado y una clave para el servidor OpenVPN. OpenVPN admite la autenticación bidireccional basada en certificados, lo que significa que el cliente debe autenticar el certificado del servidor y el servidor debe autenticar el certificado del cliente antes de establecer la confianza mutua. Usaremos los scripts de Easy RSA que copiamos anteriormente para hacer esto.

Primera copia los scripts de Easy-RSA.

Luego has el directorio de almacenamiento de claves.

Easy-RSA tiene un archivo de variables que podemos editar para crear certificados exclusivos para nuestra persona, empresa o cualquier entidad que elijamos. Esta información se copia a los certificados y claves, y ayudará a identificar las claves más adelante.

Las siguientes variables después del signo igual deben cambiarse de acuerdo con tus preferencias.

En el mismo archivo vars, edita también esta línea que se muestra a continuación. Por simplicidad, utilizaremos server como nombre de clave. Si deseas usar un nombre diferente, también deberás actualizar los archivos de configuración de OpenVPN que hacen referencia server.keyserver.crt.

Necesitamos generar los parámetros Diffie-Hellman; Esto puede tardar varios minutos.

Ahora, cambiemos los directorios para que trabajemos directamente desde donde movimos los scripts de Easy-RSA a los pasos anteriores.

Inicializa la PKI (Infraestructura de clave pública). Presta atención al punto (.) Y al espacio delante del comando ./vars. Eso significa el directorio de trabajo actual (fuente).

La salida del comando anterior se muestra a continuación. Como todavía no hemos generado nada en el directorio keys, la advertencia no es nada de qué preocuparse.

Ahora limpiaremos el directorio de trabajo de cualquier posible clave antigua o de ejemplo para dar paso a las nuevas.

Este comando final crea la autoridad de certificación (CA) invocando un comando interactivo de OpenSSL. La salida te pedirá que confirmes las variables de Nombre Distinguido que se ingresaron anteriormente en el archivo de variables de Easy-RSA (nombre del país, organización, etc.).

Simplemente presiona ENTER para pasar a través de cada mensaje. Si hay que cambiar algo, puedes hacerlo desde el indicador.

Generar un certificado y clave para el servidor

Aun trabajando desde /etc/openvpn/easy-rsa, ahora ingresa el comando para construir la clave del servidor. Donde se ve marcado server es la variable export KEY_NAME que configuramos en el archivo vars de Easy-RSA anteriormente en el Paso 2.

Se generó una salida similar a la de cuando ejecutamos ./build-ca, y puedes presionar nuevamente ENTER para confirmar cada línea del Distinguished Name. Sin embargo, esta vez hay dos indicaciones adicionales:

Ambos deben dejarse en blanco, así que solo presiona ENTER para pasar a través de cada uno.

Dos consultas adicionales al final requieren una respuesta positiva (y):

El último aviso anterior debe completarse con:

Mover los certificados y claves del servidor

OpenVPN espera ver la CA, el certificado y la clave del servidor en /etc/openvpn. Vamos a copiarlos en la ubicación adecuada.

Puedes verificar que la copia fue exitosa con:

Deberías ver el certificado y los archivos key para el servidor.

En este punto, el servidor OpenVPN está listo para funcionar. Ponlo en marcha y comprueba el estado.

El comando de estado debería devolver:

¡Felicidades! tu servidor OpenVPN está operativo. Si el mensaje de estado indica que la VPN no se está ejecutando, revisa el archivo /var/log/syslog en busca de errores como:

Ese error indica que server.key no se ha copiado correctamente en /etc/openvpn. Vuelve a copiar el archivo e inténtalo de nuevo.

Paso 3 – Generar Certificados y Claves para Clientes

Hasta ahora hemos instalado y configurado el servidor OpenVPN, hemos creado una Autoridad de certificación y hemos creado el certificado y la clave del servidor. En este paso, utilizamos la CA del servidor para generar certificados y claves para cada dispositivo cliente que se conectará a la VPN. Estos archivos se instalarán posteriormente en los dispositivos cliente, como una computadora portátil o un teléfono inteligente.

Construcción de claves y certificados

Es ideal para cada cliente que se conecta a la VPN tener su propio certificado y clave única. Esto es preferible a generar un certificado general y una clave para usar entre todos los dispositivos cliente.

Nota: De forma predeterminada, OpenVPN no permite conexiones simultáneas al servidor desde clientes que utilizan el mismo certificado y clave. (Ver duplicate-cn en /etc/openvpn/server.conf.)

Para crear credenciales de autenticación separadas para cada dispositivo que pretenda conectarse a la VPN, debes completar este paso para cada dispositivo, pero cambia el nombre de cliente1 continuación a algo diferente, como cliente2 o iphone2. Con credenciales separadas por dispositivo, se pueden desactivar posteriormente en el servidor individualmente, si es necesario. Los ejemplos restantes de este tutorial utilizarán client1 como el nombre de nuestro dispositivo de ejemplo de cliente.

Como hicimos con la clave del servidor, ahora construimos una para nuestro ejemplo de cliente1. Todavía deberías estar trabajando fuera de /etc/openvpn/easy-rsa.

Una vez más, se te pedirá que cambies o confirme las variables de Distinguished Name y estas dos indicaciones deben dejarse en blanco. Presiona ENTER para aceptar los valores predeterminados.

Como antes, estas dos confirmaciones al final del proceso de construcción requieren una respuesta (y):

Si la construcción de la clave fue exitosa, la salida será nuevamente:

El archivo de configuración del cliente de ejemplo también debe copiarse en el directorio de claves de Easy-RSA. Lo utilizaremos como una plantilla que se descargará a los dispositivos cliente para su edición. En el proceso de copia, estamos cambiando el nombre del archivo de ejemplo de client.confclient.ovpn porque la extensión .ovpn del archivo es lo que los clientes esperan usar.

Puedes repetir esta sección nuevamente para cada cliente, reemplazando cliente1 con el nombre de cliente apropiado en todo momento.

Transferencia de certificados y claves a dispositivos cliente

Recuerda de los pasos anteriores que creamos los certificados y claves del cliente, y que están almacenados en el servidor OpenVPN en el directorio /etc/openvpn/easy-rsa/keys.

Para cada cliente, necesitamos transferir el certificado de cliente, la clave y los archivos de plantilla de perfil a una carpeta en nuestra computadora local u otro dispositivo cliente.

En este ejemplo, nuestro dispositivo cliente1 requiere su certificado y clave, ubicados en el servidor en:

  • /etc/openvpn/easy-rsa/keys/cliente1.crt
  • /etc/openvpn/easy-rsa/keys/cliente1.key

Los archivos ca.crtclient.ovpn son los mismos para todos los clientes. Descarga estos dos archivos también; ten en cuenta que el archivo ca.crt está en un directorio diferente a los otros.

  • /etc/openvpn/easy-rsa/keys/client.ovpn
  • /etc/openvpn/ca.crt

Si bien las aplicaciones exactas utilizadas para realizar esta transferencia dependerán de tu elección y del sistema operativo del dispositivo, deseas que la aplicación utilice SFTP (protocolo de transferencia de archivos SSH) o SCP (Copia segura) en el servidor. Esto transportará los archivos de autenticación VPN de tu cliente a través de una conexión cifrada.

Aquí hay un ejemplo de comando SCP usando nuestro ejemplo de cliente1 . Coloca el archivo cliente1.key en el directorio de descargas en la computadora local.

Una herramientas para transferir archivos de forma segura desde el servidor a una computadora local es la siguiente:

Al final de esta sección, asegúrate de tener estos cuatro archivos en tu dispositivo cliente:

  • cliente1.crt
  • cliente1.key
  • client.ovpn
  • ca.crt

Paso 4: creación de un perfil OpenVPN unificado para dispositivos cliente

Existen varios métodos para administrar los archivos del cliente, pero el más fácil usa un perfil unificado. Esto se crea modificando el archivo client.ovpn de plantilla para incluir la Autoridad de certificación del servidor, y el certificado del cliente y su clave. Una vez fusionado, solo el único perfil client.ovpn debe importarse a la aplicación OpenVPN del cliente.

Crearemos un solo perfil para nuestro dispositivo cliente1 en la computadora local donde descargamos todos los archivos del cliente. Esta computadora local podría ser un cliente previsto o simplemente un área de trabajo temporal para combinar los archivos de autenticación. El archivo client.ovpn de la plantilla original debe ser duplicado y renombrado. La forma de hacerlo dependerá del sistema operativo de tu computadora local.

Nota: El nombre de su duplicado client.ovpn no necesita estar relacionado con el dispositivo cliente. La aplicación OpenVPN del lado del cliente utilizará el nombre del archivo como un identificador para la conexión VPN en sí. En su lugar, deberías duplicar client.ovpn como quieras para que la etiqueta con el nombre de la VPN esté en tu sistema operativo. Por ejemplo: work.ovpn se identificará como work , school.ovpn como school, etc.

En este tutorial, nombraremos la conexión VPN como Binaria, por Binaria.ovpn lo que será el nombre del archivo al que se hace referencia a partir de este momento. Una vez nombrado, entonces debemos abrir Binaria.ovpn en un editor de texto; Puedes usar el editor que prefieras.

La primera área de atención será para la dirección IP de tu Droplet. Cerca de la parte superior del archivo, cambia my-server-1 para reflejar la IP de tu VPN.

A continuación, encuentra el área que se muestra a continuación y elimina el comentario user nobodygroup nogroup, al igual que hicimos en server.conf en el Paso 1. Nota: Esto no se aplica a Windows, por lo que puedes omitirlo. Debe verse así cuando se hace:

El área que se proporciona a continuación necesita las tres líneas que se muestran para ser comentadas, por lo que podemos incluir el certificado y la clave directamente en el archivo Binaria.ovpn. Debe verse así cuando se hace:

Para combinar los archivos individuales en el perfil unificado, el contenido de los archivos ca.crtcliente1.crt y cliente1.key se pegan directamente en el perfil .ovpn utilizando una sintaxis básica similar a XML. El XML al final del archivo debe tomar esta forma:

Cuando termines, el final del archivo debe ser similar a este ejemplo abreviado:

El archivo cliente1.crt tiene alguna información extra en él; Está bien simplemente incluir todo el archivo.

Guarda los cambios y sal del editor. Ahora tenemos un perfil de cliente OpenVPN unificado para configurar nuestro cliente1.

Paso 5 – Instalando el perfil del cliente

Ahora analizaremos la instalación de un perfil VPN de cliente en Windows, OS X, iOS y Android. Ninguna de estas instrucciones del cliente depende una de la otra, por lo que puedes omitir lo que sea aplicable para ti.

Recuerda que la conexión se llamará como se llame al archivo .ovpn. En nuestro ejemplo, desde que se nombró el archivo Binaria.ovpn, la conexión se llamará Binaria.

Windows

Instalación

La aplicación cliente OpenVPN para Windows se puede encontrar en la página de descargas de OpenVPN. Elije la versión de instalación adecuada para tu versión de Windows.

Nota: OpenVPN necesita privilegios administrativos para instalarse.

Después de instalar OpenVPN, copia el perfil unificado  Binaria.ovpn a:

Cuando inicies OpenVPN, verás automáticamente el perfil y lo pondrá a disposición.

OpenVPN debe ejecutarse como administrador cada vez que se usa, incluso por cuentas administrativas. Para hacer esto sin tener que hacer clic derecho y seleccionar Ejecutar como administrador cada vez que uses la VPN, puedes preseleccionar esto pero debe hacerse desde una cuenta administrativa. Esto también significa que los usuarios estándar deberán ingresar la contraseña del administrador para usar OpenVPN. Por otro lado, los usuarios estándar no pueden conectarse correctamente al servidor a menos que OpenVPN en el cliente tenga derechos de administrador, por lo que los privilegios elevados son necesarios.

Para configurar la aplicación OpenVPN para que siempre se ejecute como administrador, hasclic con el botón derecho en el icono de acceso directo y ve a Propiedades. En la parte inferior de la pestaña Compatibilidad, has clic en el botón Cambiar la configuración para todos los usuarios. En la nueva ventana, selecciona Ejecutar este programa como administrador.

Conectando

Cada vez que inicies la Interfaz Gráfica de Usuario de OpenVPN, Windows te preguntará si deseas permitir que el programa realice cambios en tu computadora. Has clic en  . Al iniciar la aplicación cliente OpenVPN solo se coloca el applet en la bandeja del sistema para que la VPN se pueda conectar y desconectar según sea necesario; en realidad no hace la conexión VPN.

Una vez que se inicia OpenVPN, inicia una conexión entrando en el applet de la bandeja del sistema y haciendo clic con el botón derecho en el icono del applet de OpenVPN. Esto abre el menú contextual. Selecciona Binaria en la parte superior del menú (ese es nuestro perfil Binaria.ovpn) y elije Conectar .

Se abrirá una ventana de estado que muestra la salida del registro mientras se establece la conexión, y se mostrará un mensaje una vez que el cliente esté conectado.

Desconectate de la VPN de la misma manera: ingresa al applet de la bandeja del sistema, has clic con el botón derecho en el icono del applet OpenVPN, selecciona el perfil del cliente y has clic en Desconectar.

OSX

Instalación

Tunnelblick es un cliente de código abierto OpenVPN para Mac OS X. Puedes descargar la última imagen de disco desde la página de descargas de Tunnelblick. Has doble clic en el archivo .dmg descargado y sigue las instrucciones para instalar.

Hacia el final del proceso de instalación, Tunnelblick te preguntará si tienes algún archivo de configuración. Puede ser más fácil responder No y dejar que Tunnelblick termine. Abre una ventana y has doble clic en Binaria.ovpn. Tunnelblick instalará el perfil del cliente. Se requieren privilegios administrativos.

Conectando

Inicia Tunnelblick haciendo doble clic en Tunnelblick en la carpeta Aplicaciones. Una vez que se haya iniciado Tunnelblick, habrá un icono de Tunnelblick en la barra de menú en la parte superior derecha de la pantalla para controlar las conexiones. Has clic en el icono y luego en el elemento del menú Conectar para iniciar la conexión VPN. Selecciona la conexión de Binaria.

iOS

Instalación

Desde la tienda de aplicaciones de iTunes, busca e instala OpenVPN Connect, la aplicación oficial de iOS para OpenVPN. Para transferir tu perfil de cliente iOS al dispositivo, conéctalo directamente a una computadora.

Para completar la transferencia con iTunes se detalla aquí. Abre iTunes en la computadora y has clic en iPhone > aplicaciones. Desplázate hacia abajo hasta la sección Compartir archivos y has clic en la aplicación OpenVPN. La ventana en blanco a la derecha, Documentos OpenVPN, es para compartir archivos. Arrastra el archivo .ovpn a la ventana Documentos OpenVPN.

Ahora inicia la aplicación OpenVPN en el iPhone. Habrá una notificación de que un nuevo perfil está listo para importarse. Toca el signo más verde para importarlo.

Conectando

OpenVPN ya está listo para usarse con el nuevo perfil. Inicia la conexión deslizando el botón Conectar a la posición Encendido. Desconecta deslizando el mismo botón a Apagado .

Nota: el interruptor VPN en Configuración no se puede utilizar para conectarse a la VPN. Si lo intentas, recibirás un aviso para que solo te conectes utilizando la aplicación OpenVPN.

Android

Tienes que abrir Google Play Store. Busca e instala Android OpenVPN Connect, la aplicación de cliente oficial de OpenVPN para Android.

El perfil .ovpn se puede transferir conectando el dispositivo Android a tu computadora mediante USB y copiando el archivo. Alternativamente, si tienes un lector de memorias SD, puedes quitar la memoria SD del dispositivo, copiar el perfil en él y luego insertar la memoria nuevamente en el dispositivo Android.

Inicia la aplicación OpenVPN y toca el menú para importar el perfil.

Luego navega a la ubicación del perfil guardado (en la captura de pantalla es /sdcard/Download/) y selecciona el archivo. La aplicación hará una nota de que el perfil fue importado.

Conectando

Para conectarse, simplemente toca el botón Conectar. Se te preguntará si confías en la aplicación OpenVPN. Elige OK para iniciar la conexión. Para desconectarse de la VPN, vuelve a la aplicación OpenVPN y selecciona Desconectar.

Paso 6 – Probando tu conexión VPN

Una vez que todo está instalado, una simple comprobación confirma que todo funciona correctamente. Sin tener una conexión VPN habilitada, abre un navegador y dirígete a DNSLeakTest.

El sitio devolverá la dirección IP asignada por tu proveedor de servicios de Internet y como aparece ante el resto del mundo. Para verificar la configuración de tu DNS a través del mismo sitio web, has clic en Prueba extendida y te indicará qué servidores DNS estás utilizando.

Ahora conecta el cliente OpenVPN a la VPN de tu Droplet y actualiza el navegador. Ahora debería aparecer la una dirección IP completamente diferente de tu servidor VPN. Así es como te muestras al mundo. Nuevamente has clic en Prueba Extendida de DNSLeakTest, este verificará la configuración de tu DNS y confirmará que ahora estás utilizando los resolutores de DNS que tu VPN ha colocado.

¡Felicidades! Ahora está navegando de forma segura en Internet, protegiendo tu identidad, ubicación y tráfico de los curiosos y husmeadores.