GNU/Linux >> Tutoriales Linux >  >> Ubuntu

Instalar una VPN con Tinc en Ubuntu 16.04 LTS

Una red privada virtual (VPN) es una red privada segura que opera en una red pública más grande, como Internet. Las VPN se han vuelto cada vez más populares en los últimos años, en gran parte porque ofrecen mayor seguridad y privacidad sin necesidad de configurar un nuevo hardware costoso y complejo. También ofrecen varias otras ventajas, incluida la reducción de los costos de redes y soporte.

Las VPN funcionan creando un túnel encriptado a través de una red pública y usándolo para enviar datos de forma segura entre servidores y terminales. Estas conexiones se pueden encriptar de varias maneras, y hay muchos clientes VPN y demonios diferentes que se adaptan a su arquitectura, presupuesto y nivel de experiencia.

Tinc es una de esas soluciones (1). Un demonio VPN de código abierto, ahora está disponible para una amplia gama de plataformas y tiene varias ventajas sobre clientes VPN similares. Ofrece encriptación segura y confiable, compresión opcional y se puede expandir fácilmente a medida que crece su red. El enrutamiento automático de malla completa significa que el tráfico VPN siempre (siempre que sea posible) se envía directamente a la máquina de destino, sin sufrir transferencias intermedias, y esto mejora en gran medida la seguridad al limitar la posibilidad de robo de datos (3). Además, debido a que Tinc VPN aparece en el código de red de nivel de IP como un dispositivo de red normal, después de configurar Tinc VPN no es necesario adaptar el software existente. Esto hace que Tinc VPN sea inherentemente escalable.

El único problema menor con Tinc es que algunas personas lo han encontrado un poco complicado de configurar. Si eso suena como usted, no se preocupe:hoy lo guiaré a través de una forma (más o menos) sencilla de poner en funcionamiento una Tinc VPN en sus servidores.

Requisitos previos

Para seguir este tutorial por completo, necesitará al menos tres servidores Ubuntu 16.04 y acceso de root en cada máquina. Si no tiene esto o no está seguro de lo que esto significa, este tutorial no es para usted; primero debe ver cómo configurar un servidor usando Ubuntu (2).

Si está construyendo un sistema de servidor desde cero, primero debe pensar en cómo se comunicarán sus máquinas entre sí. En este tutorial, usaré los nombres de las variables que creo que la mayoría de la gente elegiría, pero tenga en cuenta que es posible que deba adaptar algunos de los nombres de las variables para adaptarlos a su propia configuración.

Si desea seguir este tutorial exactamente, primero deberá configurar dos VPS en el mismo centro de datos y luego crear un tercer VPS en un segundo centro de datos. Mis centros de datos se llaman NYC2, que tiene los dos VPS, y AMS2, que tiene el tercero. Estos VPS se denominan así:

externalnyc:todos nuestros nodos VPN se conectarán a este servidor, lo que significa que debe permanecer conectado y disponible para garantizar que la red funcione correctamente. Si finalmente desea agregar servidores adicionales a su configuración, deberá configurarlos de la misma manera que externalnyc.

internalnyc:este VPS se conecta al nodo VPN externalnyc mediante una interfaz de red privada.

ams1:esta es nuestra conexión VPN pública. Se conecta a externalnyc mediante la red pública de Internet.

Objetivo

Lo que queremos lograr es lo siguiente:

Nuestra red privada está representada por la línea verde y conecta los tres servidores. La naranja es nuestra red privada, que une los dos servidores NYC2. Los tres servidores pueden conectarse a través de la VPN, aunque AMS1 no puede acceder a la red privada.

Para hacer esto, siga estos pasos:

Instalar Tinc

Primero, necesitamos instalar Tinc. Como siempre, asegúrese de que todos sus repositorios apt estén actualizados ejecutando:

sudo apt-get update

Luego instale Tinc de la manera estándar a través de apt:

sudo apt-get install tinc

¡Y eso es! Su máquina ahora descargará Tinc, además de cualquier requisito previo que necesite. Ahora necesitamos echar un vistazo a la configuración.

Configuración

La configuración de Tinc puede ser un poco diferente de otras VPN a las que está acostumbrado. Utiliza un "nombre de red" para distinguir una VPN de otra. Esto se vuelve muy útil cuando tiene varias VPN ejecutándose a través de Tinc, pero al principio es un poco contradictorio. Dado que esta es nuestra primera red Tinc, hagámoslo simple y llamemos a nuestra VPN "nombre de red".

Ahora para cada uno de nuestros servidores. Cada uno necesitará tres componentes de configuración:

Los archivos de configuración:tinc.conf, tinc-up, tinc-down y una cantidad opcional de otros archivos.

Pares de claves pública y privada:estos son para encriptación y autenticación.

Archivos de configuración del host:contienen claves públicas y otros elementos de configuración de VPN.

Ahora configuremos cada uno de nuestros servidores a la vez. Primero, externalnyc.

Configurar externalnyc

OK, ahora a las tuercas y tornillos. En externalnyc, comience creando la estructura del directorio de configuración para el nombre de red VPN. Ejecutar:

sudo mkdir -p /etc/tinc/netname/hosts

Ahora abra tinc.conf en su editor de texto elegido:

sudo vi /etc/tinc/netname/tinc.conf

Una vez que tenga el archivo frente a usted, agregue lo siguiente al final del archivo:

Name = externalnyc
AddressFamily = ipv4
Interface = tun0

Todo lo que está haciendo aquí es configurar un nodo llamado externalnyc y decirle al servidor que su interfaz de red usará ipv4 y se llamará "tun0". Guarde el archivo y ciérrelo.

A continuación, necesitamos crear un archivo de configuración de host para externalnyc. Para ello, abra el archivo de configuración de hosts en un editor de texto:

 sudo vi /etc/tinc/netname/hosts/externalnyc

Nuevamente, agregue algunas líneas al final de este archivo, sustituyendo la dirección IP pública de su VPS en la primera línea:

Address = externalnyc_public_IP
Subnet = 10.0.0.1/32

Este es el archivo que otros servidores usarán para conectarse a externalnyc. La dirección le dice a otros nodos cómo y dónde conectarse a este servidor, y la dirección de subred es la subred en la que operará este demonio. Nuevamente, guarde sus cambios en este archivo y ciérrelo.

Ahora necesitamos generar el par de claves pública/privada para este host. Esto es bastante fácil, solo ejecuta:

 sudo tincd -n netname -K4096

Esto crea una clave RSA privada y agrega un par de claves públicas al final del archivo de configuración que acabamos de crear. Si lo desea, puede volver a abrirlo para ver que se ha hecho.

Ahora, necesitamos hacer tinc-up, un pequeño script que se ejecutará cuando se inicie nuestra VPN. Abra el siguiente archivo para editarlo:

 sudo vi /etc/tinc/netname/tinc-up

Y añade:

#!/bin/sh
ifconfig $INTERFACE 10.0.0.1 netmask 255.255.255.0

Siempre que se inicie el nombre de red VPN, se ejecutará este script. Hará una interfaz de red para ser utilizada por nuestra VPN, y en esta VPN externalnyc tendrá una IP de 10.0.0.1.

Pero cuando se detiene la VPN, queremos que esta interfaz de red desaparezca, por lo que necesitamos un script más. Esto debe agregarse al tinc-down. Abrir:

 sudo vi /etc/tinc/netname/tinc-down

Y luego agrega:

#!/bin/sh
ifconfig $INTERFACE down

Y de nuevo guardar y salir. Ahora tenemos nuestros scripts, pero para que funcionen deben estar marcados como ejecutables. Esto es bastante fácil, usando la línea de comando:

sudo chmod 755 /etc/tinc/netname/tinc-*

Guarde y salga, y habrá terminado de configurar este servidor. A continuación, internalnyc y ams1.

Configurar internalnyc y ams1

Para configurar los dos servidores restantes, debe ejecutar los mismos comandos en cada máquina. Hay algunas variaciones menores, que señalaré, pero el proceso es básicamente el mismo.

Como hicimos con externalnyc arriba, primero debemos crear la estructura de directorios para nuestros archivos de configuración. En cada servidor, ejecute lo siguiente y luego abra el archivo de configuración de Tinc para editarlo:

 sudo mkdir -p /etc/tinc/netname/hosts
sudo vi /etc/tinc/netname/tinc.conf

Luego agregue algunas líneas al final de este archivo, sustituyendo "node_name" con el nombre de cada nodo:

Name = node_name
AddressFamily = ipv4
Interface = tun0
ConnectTo = externalnyc

Puede ver que nuestros dos servidores ahora están configurados para intentar conectarse a externalnyc. Guarde este archivo y ciérrelo.

Ahora necesitamos hacer el archivo de configuración de hosts. Ejecutar:

 sudo vi /etc/tinc/netname/hosts/node_name

Luego, para internalnyc, agregue esta línea:

Subnet = 10.0.0.2/32

Y para ams1, agregue esta línea:

Subnet = 10.0.0.3/32

La única diferencia aquí es que las direcciones difieren, por lo que podemos distinguir nuestros servidores. Guarde este archivo y ciérrelo.

Ahora, al igual que antes, necesitamos generar nuestros pares de claves pública/privada y crear el script de inicio de la interfaz de red. En cada servidor, ejecute:

 sudo tincd -n netname -K4096

Y luego:

 sudo vi /etc/tinc/netname/tinc-up

Ahora. Para cada servidor, necesitamos usar las direcciones que especificamos anteriormente. Si me estás siguiendo precisamente, para internalnyc necesitas agregar:

ifconfig $INTERFACE 10.0.0.2 netmask 255.255.255.0

Y para ams1:

ifconfig $INTERFACE 10.0.0.3 netmask 255.255.255.0

Pero, si especificó direcciones diferentes arriba, cámbielas aquí también. Guarde estos archivos y salga. Ya casi llegamos.

Solo necesitamos hacer que la interfaz de red detenga el script, como antes:

 sudo vi /etc/tinc/netname/tinc-down

Y luego agregue esta línea en ambos servidores:

ifconfig $INTERFACE down

Y la última parte de la configuración es hacer que nuestros nuevos scripts sean ejecutables:

 sudo chmod 755 /etc/tinc/netname/tinc-*

Guardar y Salir. Uf. Si todo salió bien, los tres servidores ahora están configurados. Ahora para implementar la criptografía.

Llaves de distribución

Si ya está utilizando un sistema de gestión de configuración, está de suerte. En un mundo ideal, cada nodo que hemos creado ahora debe poder comunicarse directamente con otro nodo mediante una interfaz de clave pública/privada. Las claves, como vimos anteriormente, ahora están en los archivos de configuración de hosts para cada servidor. En la red simple que estamos creando aquí, en realidad solo externalnyc necesita intercambiar claves con los otros nodos.

Entonces, la forma más fácil de hacer esto es simplemente copiar cada clave pública a todos los miembros de los distintos nodos. En realidad, esto es bastante fácil, solo tenga cuidado de cambiar el valor de "dirección" en el archivo de configuración de externalnyc a su propia dirección IP privada cuando lo copie. De esa forma, la conexión se establecerá a través de la red privada.

Si me seguiste y llamaste a tu VPN "netname", los archivos de configuración de hosts están aquí:/etc/tinc/netname/hosts

Intercambiar claves entre externalnyc e internalnyc

Esto es sencillo. En internalnyc, busque el archivo de configuración de hosts y cópielo en externalnyc:

 scp /etc/tinc/netname/hosts/internalnyc [email protected]_private_IP:/tmp

Luego, en externalnyc, copie el mismo archivo en la ubicación adecuada:

 cd /etc/tinc/netname/hosts; sudo cp /tmp/internalnyc .

Ahora hacemos el procedimiento contrario. En externalnyc, copie el archivo de configuración de hosts en internalnyc:

 scp /etc/tinc/netname/hosts/externalnyc [email protected]_private_IP:/tmp

Y luego, en internalnyc, copie el archivo para que esté en el lugar correcto:

 cd /etc/tinc/netname/hosts; sudo cp /tmp/externalnyc .

Ahora necesitamos editar el archivo de configuración de hosts de externalnyc en internalnyc para que la dirección sea correcta. Esto es para que los nodos se conecten a la VPN a través de la red privada. Entonces, en internalnyc, abra el archivo de configuración de hosts para externalnyc:

 sudo vi /etc/tinc/netname/hosts/externalnyc

Y cambie el valor de la dirección a la dirección IP privada de externalnyc, así:

Address = externalnyc_private_IP

Guarde el archivo y salga. Esas son estas dos llaves hechas. Ahora solo necesitamos intercambiar claves con nuestro único nodo restante.

Intercambiar claves entre externalnyc y ams1

El proceso aquí es bastante similar. Usando ams1, copie el archivo de configuración de hosts a externalnyc:

 scp /etc/tinc/netname/hosts/ams1 [email protected]_public_IP:/tmp

Y luego cópielo nuevamente en el lugar correcto, usando externalnyc:

 cd /etc/tinc/netname/hosts; sudo cp /tmp/ams1 .

Permaneciendo en externalnyc, copie el archivo en el otro sentido, a través de ams1:

 scp /etc/tinc/netname/hosts/externalnyc [email protected]_public_IP:/tmp

Y una vez más, en ams1, copie este archivo para que esté en el lugar correcto:

 cd /etc/tinc/netname/hosts; sudo cp /tmp/externalnyc .

Y has terminado con el intercambio de claves. En teoría, ahora tiene una VPN encriptada y en funcionamiento a través de Tinc. Si ha seguido este tutorial al pie de la letra, puede pasar a probar su configuración. Sin embargo, si también ha aprovechado la oportunidad para agregar nodos adicionales, ahora es un buen momento para intercambiar todas las claves que necesitará.

Recuerde que si está utilizando un nodo central, como lo estoy haciendo aquí, no necesita copiar todas las claves en todos los servidores. Sin embargo, si desea que los nodos puedan comunicarse entre sí directamente, deberán intercambiar claves. El proceso para hacer esto es el mismo que he descrito anteriormente:solo haga tantas iteraciones como necesite para lograr la conectividad deseada.

Prueba

Ahora debería estar listo para la prueba. Para hacer esto, es una buena idea iniciar Tinc en modo de depuración, para que podamos detectar cualquier error y obtener más información si algo sale mal. Recuerde que una VPN mal configurada en realidad puede ser un riesgo para la seguridad, así que asegúrese de que todo funcione correctamente antes de comenzar a usar su VPN para algo importante.

Para iniciar Tinc en modo de depuración, en cada nodo, comenzando con externalnyc, ejecute:

 sudo tincd -n netname -D -d3

Si ha llamado a su VPN algo diferente, por supuesto, cambie la variable "netname" al nombre apropiado.

Después de que el daemon se inicia en cada nodo, debe devolver una salida que le proporcione el nombre de cada nodo a medida que se conectan. Si esto no sucede, ha cometido un error en alguna parte.

Ahora, podemos probar la VPN. En una nueva ventana en ams1, haga ping a internalnyc usando su dirección IP. Asignamos esto a 10.0.0.2 anteriormente, así que escriba:

 ping 10.0.0.2

Con suerte, su ping funcionará. También debería ver algunos resultados de depuración en las otras ventanas, que describen las conexiones que acaba de realizar. Ams1 ahora está conectado, a través de su nueva VPN, a externalnyc y puede conectarse a internalnyc a través de él. Presiona CTRL-C y el ping se detendrá.

Ahora que tiene una conexión VPN segura, puede usarla para cualquier otro tipo de comunicación de red:conexiones de aplicaciones, copia de archivos, SSH o cualquier otra cosa que desee.

Si su ping no funcionó, pero cree que hizo todo bien, es posible que un firewall se interpusiera en el camino. Compruebe la configuración de su cortafuegos e inténtelo de nuevo.

Tinc en arranque

Sólo una última cosa. Si ahora va a usar su Tinc VPN para todas sus redes, es posible que desee configurarlo para que se inicie en el arranque. Deberá hacer esto en cada nodo, editando el archivo de configuración nets.boot. Abra el archivo usando:

 sudo vi /etc/tinc/nets.boot

Y luego agregue el nombre de su nueva VPN a este archivo. Si eligió "netname" como yo, se verá así:

# This file contains all names of the networks to be started on system 	startup.
netname

Guardar y salir, y ya está. Tinc ahora está funcionando y se iniciará en el arranque. Bien hecho.

Si necesita controlar Tinc, ahora puede ejecutar el comando "servicio" para hacerlo. En cada nodo, simplemente ejecute:

 sudo service tinc start

Y tener un juego. La mayoría del control básico se puede lograr a través de este comando.

Conclusión

Ahora debería tener una conexión VPN segura ejecutándose a través de Tinc en todas sus máquinas. Esta VPN se puede utilizar como base para desarrollar más funciones de red.

Si desea agregar más nodos en el futuro o combinar Tinc con otras VPN, Tinc le permitirá hacerlo. El proceso para cada nodo adicional es el mismo que describí anteriormente, y debería poder ver fácilmente qué variables y direcciones deben cambiarse. Solo recuerde que si desea que los nodos puedan conectarse entre sí directamente, deberá intercambiar claves entre ellos directamente. Así, Tinc funciona como una VPN en malla, que es un poco más segura que mi enfoque. De lo contrario, puede configurar su red como lo he hecho yo y hacer que todo pase por un nodo central.

De cualquier manera, ahora eres libre de jugar. ¡Buena suerte!

Recursos

(1) https://www.tinc-vpn.org/

(2) https://www.howtoforge.com/tutorial/ubuntu-lts-minimal-server/


Ubuntu
  1. Instalación de mod_pagespeed con Apache en Ubuntu/CentOS

  2. Cosas que hacer después de instalar Ubuntu 16.04 LTS

  3. Implemente Modsecurity con Nginx en Ubuntu 20.04 LTS

  4. ¿Instalando Ms Office 2013 en Ubuntu 12.04 Lts?

  5. ¿No puedo encontrar los paquetes Sstp Vpn con Ubuntu 16.04 Lts?

Cómo instalar GitLab con Docker en Ubuntu 20.04 LTS

Instalación de Nginx con PHP5 (y PHP-FPM) y compatibilidad con MySQL (LEMP) en Ubuntu 12.04 LTS

Monitoreo de Postfix con Mailgraph en Ubuntu 14.04 LTS

Instalación de Ubuntu 18.04 LTS [Escritorio y servidor]

Comando wc:Explicado con 5 ejemplos en Ubuntu 20.04 LTS

Cómo instalar FortiClient VPN en Ubuntu 20.04 LTS