Cómo configurar OpenVPN Server-Client en Ubuntu 15.04
Red privada virtual (VPN) es un nombre común de varias tecnologías que permite establecer una conexión de red sobre otra red. Se llama virtual porque los nodos están conectados entre sí a través de líneas no físicas. Y es privado debido a la ausencia de acceso público a la red sin los derechos adecuados del propietario de la red.
OpenVPN el software transfiere datos utilizando protocolos TCP y UDP y con la ayuda de controladores TUN / TAP. El protocolo UDP y el controlador TUN permiten establecer una conexión con el servidor OpenVPN para los clientes detrás de NAT. Además, OpenVPN permite especificar un puerto personalizado. Proporciona flexibilidad adicional de configuración y puede ayudar a evitar las restricciones del firewall.
Seguridad y cifrado en OpenVPN proporcionado por la biblioteca OpenSSL y por Transport Layer Security (TLS). TLS es una versión mejorada del protocolo SSL.
OpenSSL proporciona dos tipos de cifrado: simétrico y asimétrico. A continuación, mostramos cómo configurar el lado del servidor de OpenVPN y cómo hacer todos los preparativos para usar la criptografía asimétrica y el protocolo TLS con Infraestructura de clave pública (PKI).
Configuración del lado del servidor
Primero que nada debemos instalar OpenVPN. En Ubuntu 15.04 y otros sistemas Unix con el administrador de paquetes ‘apt’, esto se puede hacer de la siguiente manera:
sudo apt-get install openvpn
Entonces debemos configurar unas claves. Esto se puede hacer usando las herramientas predeterminadas «openssl». Pero esta forma es bastante difícil. Es por eso que podemos usar «easy-rsa» para este propósito. El siguiente comando instala «easy-rsa» en nuestro sistema
sudo apt-get unstall easy-rsa
Observación: todos los comandos siguientes se ejecutan con derechos de superusuario, es decir, después del comando «sudo -i»; de lo contrario, puede usar «sudo -E» como prefijo para todos los comandos siguientes.
Para empezar, necesitamos copiar «easy-rsa» en la carpeta openvpn
mkdir /etc/openvpn/easy-rsa cp -r /usr/share/easy-rsa /etc/openvpn/easy-rsa mv /etc/openvpn/easy-rsa/easy-rsa /etc/openvpn/easy-rsa/2.0
y entra en ella
cd /etc/openvpn/easy-rsa/2.0
Aquí iniciamos un proceso de generación de claves.
En primer lugar, editamos un archivo «var». Para simplificar el proceso de generación, necesitamos especificar nuestros datos en él. Aquí hay un ejemplo de archivo «var»:
export KEY_COUNTRY="US" export KEY_PROVINCE="CA" export KEY_CITY="SanFrancisco" export KEY_ORG="Fort-Funston" export KEY_EMAIL="my@myhost.mydomain" export KEY_OU=server
Espero, los nombres de los campos son claros y no es necesaria una descripción adicional de ellos.
En segundo lugar, debemos copiar la configuración de openssl. Hay una configuración de una versión diferente. Si no tiene ningún requisito específico, utilice la última versión. Esta es una versión 1.0.0.
cp openssl-1.0.0.cnf openssl.cnf
En tercer lugar, necesitamos cargar variables de entorno, que editamos en el paso anterior.
source ./vars
El paso final de la preparación para la generación de claves es el vaciado de los certificados y claves antiguos y la generación de archivos de índice y serie para claves nuevas. Esto se puede hacer usando el comando
./clean-all
Ahora terminamos la preparación y estamos listos para iniciar el proceso de generación. Generemos el certificado primero
./build-ca
En el diálogo vemos variantes predeterminadas, que especificamos en el archivo «vars» antes. Podemos revisarlos, editarlos si es necesario y luego presionar ENTER un par de veces. El cuadro de diálogo tiene el siguiente aspecto
Generating a 2048 bit RSA private key .............................................+++ ...................................................................................................+++ writing new private key to 'ca.key' ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [US]: State or Province Name (full name) [CA]: Locality Name (eg, city) [SanFrancisco]: Organization Name (eg, company) [Fort-Funston]: Organizational Unit Name (eg, section) [MyOrganizationalUnit]: Common Name (eg, your name or your server's hostname) [Fort-Funston CA]: Name [EasyRSA]: Email Address [me@myhost.mydomain]:
A continuación, necesitamos generar una clave de servidor.
./build-key-server server
El cuadro de diálogo de este comando se muestra a continuación:
Generating a 2048 bit RSA private key ........................................................................+++ ............................+++ writing new private key to 'server.key' ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [US]: State or Province Name (full name) [CA]: Locality Name (eg, city) [SanFrancisco]: Organization Name (eg, company) [Fort-Funston]: Organizational Unit Name (eg, section) [MyOrganizationalUnit]: Common Name (eg, your name or your server's hostname) [server]: Name [EasyRSA]: Email Address [me@myhost.mydomain]: Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []: Using configuration from /etc/openvpn/easy-rsa/2.0/openssl-1.0.0.cnf Check that the request matches the signature Signature ok The Subject's Distinguished Name is as follows countryName :PRINTABLE:'US' stateOrProvinceName :PRINTABLE:'CA' localityName :PRINTABLE:'SanFrancisco' organizationName :PRINTABLE:'Fort-Funston' organizationalUnitName:PRINTABLE:'MyOrganizationalUnit' commonName :PRINTABLE:'server' name :PRINTABLE:'EasyRSA' emailAddress :IA5STRING:'me@myhost.mydomain' Certificate is to be certified until May 22 19:00:25 2025 GMT (3650 days) Sign the certificate? [y/n]:y 1 out of 1 certificate requests certified, commit? [y/n]y Write out database with 1 new entries Data Base Updated
Aquí debemos responder «sí» a las dos últimas preguntas sobre «firmar el certificado» y sobre «confirmar».
Ahora tenemos el certificado y la clave del servidor. El siguiente paso es generar la clave Diffie-Hellman. Ejecute el siguiente comando y tenga paciencia. Durante los próximos minutos veremos muchos puntos y símbolos positivos.
./build-dh
Ejemplo de la salida de este comando que puede encontrar a continuación
Generating DH parameters, 2048 bit long safe prime, generator 2 This is going to take a long time ................................+................<and many many dots>
Después de una larga espera, podemos pasar a la generación de la última clave. Esta es la clave para la autenticación TLS. Aquí hay un comando para ello:
openvpn --genkey --secret keys/ta.key
Ahora, la generación se completó y podemos mover todos los archivos generados a la ubicación final.
cp -r /etc/openvpn/easy-rsa/2.0/keys/ /etc/openvpn/
Finalmente creamos el archivo de configuración de OpenVPN. Copiemos del ejemplo:
cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/ cd /etc/openvpn gunzip -d /etc/openvpn/server.conf.gz
Entonces edítalo
vim /etc/openvpn/server.conf
Necesitamos especificar rutas personalizadas a las claves.
ca /etc/openvpn/keys/ca.crt cert /etc/openvpn/keys/server.crt key /etc/openvpn/keys/server.key # This file should be kept secret dh /etc/openvpn/keys/dh2048.pem
Eso es todo. Después de reiniciar la configuración de OpenVPN del lado del servidor se completa.
service openvpn restart
Configuración del lado del cliente para Unix
Supongamos que tenemos un dispositivo con un sistema operativo similar a Unix, por ejemplo Ubuntu 15.04, y con OpenVPN instalado. Queremos conectarnos al servidor OpenVPN de la sección anterior. En primer lugar, necesitamos una clave para el cliente. Para generar esta clave, vaya a la carpeta del servidor:
cd /etc/openvpn/easy-rsa/2.0
Cargar variables de entorno
source vars
y crea una clave de cliente
./build-key client
Veremos el mismo cuadro de diálogo que se describe en la sección anterior sobre la generación de claves del servidor. Complete la información real sobre el cliente en él.
Necesita ejecutar otro comando en caso de que se requiera una clave de protección con contraseña. Aquí lo tienes
./build-key-pass client
En este caso, se le pedirá que ingrese la contraseña al comienzo del establecimiento de la conexión VPN.
Ahora necesitamos copiar los siguientes archivos del servidor al cliente en / etc / openvpn / keys / carpeta.
Lista de archivos del servidor:
- ca.crt,
- dh2048.pem,
- client.crt,
- client.key,
- ta.key.
Después de eso, vamos al cliente y preparamos el archivo de configuración. La ubicación del archivo es /etc/openvpn/client.conf y su contenido se presenta a continuación.
dev tun proto udp # IP and Port of remote host with OpenVPN server remote 111.222.333.444 1194 resolv-retry infinite ca /etc/openvpn/keys/ca.crt cert /etc/openvpn/keys/client.crt key /etc/openvpn/keys/client.key tls-client tls-auth /etc/openvpn/keys/ta.key 1 auth SHA1 cipher BF-CBC remote-cert-tls server comp-lzo persist-key persist-tun status openvpn-status.log log /var/log/openvpn.log verb 3 mute 20
Después de eso, debemos reiniciar OpenVPN para aceptar una nueva configuración.
service openvpn restart
Eso es todo, se acabó la configuración del cliente.
Configuración del lado del cliente para Android
La configuración de OpenVPN en dispositivos Android es bastante similar a la configuración en el sistema Unix. Necesitamos un paquete con un archivo de configuración, con claves y con certificados. Aquí hay una lista de ellos:
- archivo de configuración (.ovpn),
- ca.crt,
- dh2048.pem,
- client.crt,
- cliente.key.
La clave de cliente se puede generar de la misma manera que se describe en la sección anterior.
El archivo de configuración tiene el siguiente contenido
client tls-client dev tun proto udp # IP and Port of remote host with OpenVPN server remote 111.222.333.444 1194 resolv-retry infinite nobind ca ca.crt cert client.crt key client.key dh dh2048.pem persist-tun persist-key verb 3 mute 20
Todos estos archivos debemos moverlos en la tarjeta SD de nuestro dispositivo.
Entonces necesitamos instalar Conexión OpenVPN.
El siguiente proceso de configuración es muy simple:
- abra la configuración de OpenVPN y seleccione Importar opciones
- Seleccione Importar perfil desde la tarjeta SD opción
- en la ventana abierta, vaya a la carpeta con los archivos preparados y seleccione el archivo .ovpn
- aplicación que nos ofreció para crear un nuevo perfil
- toque en el Conectar botón y espera un segundo
Y eso es todo. Ahora nuestro dispositivo Android tiene conexión a nuestra red privada mediante una conexión VPN segura.
Conclusión
Por lo tanto, la configuración inicial de OpenVPN lleva un tiempo, pero se compensa con la fácil configuración de los clientes y la capacidad de conectarse desde cualquier dispositivo. Además, OpenVPN proporcionó un alto nivel de seguridad y capacidad de conexión desde diferentes lugares, incluidos los clientes ubicados detrás de NAT. Por lo tanto, OpenVPN puede usarse igualmente tanto en el hogar como en la empresa.