TRUCO | ESTABLECER UN TÚNEL DE VPN ENTRE 2 SERVIDORES LINUX

¿Necesita que sus servidores se comuniquen de forma segura a través de la WAN o una LAN no segura? ¿Tiene algunos servicios que se comunican de manera insegura que desea encapsular en un túnel VPN? Veamos cómo podemos tener una configuración con 2 servidores.

Configuración general

Antes de comenzar, mencionemos esos 2 servidores Linux (aquí Ubuntu 14.04) que estarán interconectados a través de una VPN: Servidor1 desempeñará el papel del servidor VPN. Si tuviéramos una configuración con más de 2 servidores, todos se conectarían al Servidor1 para establecer el túnel VPN. Servidor2 = el servidor del Cliente (el servidor que se conectará al Servidor1) Primero debemos instalar en el Servidor1 el OpenVPN y una herramienta para facilitar la configuración de PKI (crearemos una Infraestructura de clave pública usando los scripts easy-rsa):

apt-get install openvpn easy-rsa

Creamos una configuración de servidor VPN de muestra:

gunzip -c /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz> /etc/openvpn/server.conf

Una vez extraído, abra server.conf en un editor de texto. Tenemos muchas cosas que cambiar por ahí. Al principio necesitamos cambiar los parámetros de Diffie hellman para obtener un mejor nivel de seguridad. Cambia esto:

dh dh1024.pem

a esto:

dh dh2048.pem

Esto duplicará la longitud de la clave RSA utilizada al generar claves de servidor y cliente. Luego, descomenta esas líneas:

usuario nadie
grupo nogroup

Por defecto, openVPN se ejecuta como root. No necesitamos eso. Es mejor limitar openVPN en un usuario sin privilegios. También es bueno evitar que las solicitudes de DNS se filtren fuera de la conexión VPN. Para esto, necesitamos declarar servidores DNS en nuestro archivo conf (generalmente los proporcionados por un proveedor de DNS seguro como opendns.com). Si va a utilizar la VPN para servicios internos, no necesita hacerlo. Confíe en lo que se declara en / etc / hosts. Las direcciones a continuación se refieren a los servidores DNS públicos proporcionados por opendns.com:

push “dhcp-option DNS 208.67.222.222”
push “dhcp-option DNS 208.67.220.220”

Este no es nuestro objetivo aquí, pero si estuviéramos a punto de crear una puerta de enlace VPN, necesitaríamos esos pasos adicionales:
configurar el servidor VPN para pasar el tráfico a través de
habilitar el reenvío de IP
configurar un firewall como ufw (firewall no complicado) para proteger el servidor VPN
Para pasar a través de la conexión VPN, descomente la línea a continuación. N.B .: no necesitamos eso para que nuestros 2 servidores se comuniquen.

push “redirect-gateway def1 bypass-dhcp”

Nuevamente, lo siguiente solo es necesario en caso de que configure una puerta de enlace VPN. En ese caso, necesita que el servidor VPN reenvíe las solicitudes de Internet de los clientes a Internet con el reenvío de paquetes habilitado a nivel del núcleo. Si no hacemos eso, el tráfico se detendrá en el servidor.

echo 1> / proc / sys / net / ipv4 / ip_forward

Lo acabamos de habilitar. Pero volverá al valor predeterminado (deshabilitado) después de reiniciar. Para hacerlo permanente, edite /etc/sysctl.conf y descomente la siguiente línea para habilitar el reenvío de paquetes para IPv4

net.ipv4.ip_forward = 1

La configuración del cortafuegos debe hacerla para permitir la comunicación y hasta aquí ha llegado con éxito la primera parte de la configuración.

Creación de una autoridad de certificación y certificado y clave del lado del servidor

Nuestra configuración de OpenVPN utilizará certificados para cifrar el tráfico. Más práctico y seguro que usar contraseñas.

Configurar y construir la autoridad de certificación

Primero necesitamos copiar los scripts de generación RSA:

cp -r / usr / share / easy-rsa / / etc / openvpn

Hacemos un lugar de almacenamiento de claves:

mkdir / etc / openvpn / easy-rsa / keys

Ahora edite / etc / openvpn / easy-rsa / vars y adáptelo a su negocio. Esto es lo que debes cambiar:

# Estos son los valores predeterminados para los campos
# que se colocará en el certificado.
# No deje ninguno de estos campos en blanco.
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”

Cambie también el nombre de la clave:

# X509 Campo de asunto
export KEY_NAME = “EasyRSA”

Después de eso, necesitamos generar los parámetros de Diffie-Hellman. Cuidado, esto puede tomar varios minutos …

openssl dhparam -out /etc/openvpn/dh2048.pem 2048

Ahora, vamos a inicializar el PKI (cuidado con el doble. Frente a / VAR). Este último comando construye la autoridad de certificación (CA) mediante la invocación de un comando interactivo OpenSSL. La salida le pedirá que confirme las variables DN (nombre distinguido) que se ingresaron anteriormente en el archivo de la variable de Easy-RSA (nombre del país, organización, etc.). Al construir la CA, simplemente presione ENTER para pasar por cada solicitud: cd / etc / openvpn / easy-rsa. ./vars ./clean-all ./build-ca

Generar un certificado y clave para el servidor
Pulse ENTER todo el camino. A menos que pida y / n. Responda y.

./build-key-server server

En pantalla debemos ver:

1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated

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

/etc/openvpn/easy-rsa/keys/{server.crt,server.key,ca.crt cp} / etc / openvpn

Y ya nuestro servidor OpenVPN está listo para trabajar. Iniciamos y comprobamos estado:

service openvpn start
service openvpn status

El comando de estado debe devolver: “VPN‘servidor’se está ejecutando”.

Generar certificados y claves de servidor de cliente

Como se indicó anteriormente, el nombre de nuestro servidor cliente es servidor2 (tendremos que repetir este procedimiento para cada servidor cliente):

./build-key server2

Nuevamente presione ENTER todo el tiempo. A menos que pida y/n. Responda y. El archivo de configuración de ejemplo cliente debe copiarse en el directorio de claves RSA-Fácil. Vamos a utilizar como una plantilla que será descargado en servidores del cliente para la edición. Tenemos que cambiar el nombre del archivo de ejemplo de client.conf a client.ovpn debido a la extensión del archivo .ovpn es lo que los clientes esperan tener.

cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf /etc/openvpn/easy-rsa/keys/client.ovpn

Crear el perfil unificado

Nuestro servidor cliente necesitará esos archivos transferidos a él: /etc/openvpn/easy-rsa/keys/server2.crt /etc/openvpn/easy-rsa/keys/server2.key / etc / openvpn / easy-rsa / keys / client.ovpn (el mismo para todos los clientes) /etc/openvpn/ca.crt (el mismo para todos los clientes) algunos archivos son específicos de cada cliente, algunos otros son los mismos para todos. La forma más fácil de transferir todo lo que necesita el cliente de servidor, es la creación de un perfil unificado. Es un archivo (lo llamaremos client.ovpn) que contiene toda la información disponible en todos los archivos mencionados anteriormente. En primer lugar, vamos a editar este archivo: /etc/openvpn/easy-rsa/keys/client.ovpn. Cambie aquí la IP y el nombre para que coincida con el servidor VPN (server1):

# The hostname/IP and port of the server.
# You can have multiple remote entries
# to load balance between the servers.
remote server1 1194
;remote my-server-2 1194

En cuanto al servidor, descomenta esto:

# Downgrade privileges after initialization (non-Windows only)
user nobody
group nogroup

Como vamos a incluir todos los archivos del cliente en el archivo client.ovpn, tenemos que comentar estas líneas:

# 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

Para incluir los archivos del cliente en éste unificado perfil, el contenido de los ca.crt, server2.crt y archivos server2.key se pegan directamente en ella utilizando un XML básico similar a la sintaxis. En primer lugar crear esta estructura al final del archivo client.ovpn e insertar los archivos mencionados en entre las etiquetas:

<ca>
(insert ca.crt here)
</ca>
<cert>
(insert client1.crt here)
</cert>
<key>
(insert client1.key here)
</key>

On the client server side

First, you need to SCP the client.ovpn file from server1 to the client server server2. Then on server2 we install OpenVPN:

apt-get install openvpn

Ahora, mueva el archivo client.ovpn a / etc / openvpn y cámbiele el nombre a .conf:

cp client.ovpn /etc/openvpn/client.conf

Cambiar el nombre a .conf hará que la conexión VPN al servidor1 se inicie automáticamente en el momento del arranque. Puede iniciarlo manualmente:

openvpn –config /etc/openvpn/client.conf

GENIAL! Ahora debería ver en el servidor2 una nueva interfaz utilizada para la VPN:

un0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:10.8.0.6 P-t-P:10.8.0.5 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
RX packets:3 errors:0 dropped:0 overruns:0 frame:0
TX packets:3 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:252 (252.0 B) TX bytes:252 (252.0 B)

Lo mismo en el servidor1:

tun0 Link encap:UNSPEC HWaddr 00000000000000000000000000000000
inet addr:10.8.0.1 PtP:10.8.0.2 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
RX packets:3 errors:0 dropped:0 overruns:0 frame:0
TX packets:3 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:252 (252.0 B) TX bytes:252 (252.0 B)
Reinicie el servidor 2. La conexión debería volver a subir sin su intervención. ¡Felicidades! Ahora tiene 2 servidores conectados entre sí a través de un túnel VPN en Linux.
Editado por: Roberto Mickel