Cómo Crear una VPN Mesh P2P Ligera con Tinc

En el mundo de las redes privadas virtuales (VPN), Tinc destaca por ofrecer una solución de mesh P2P ligera y flexible que permite conectar múltiples equipos a través de diversos entornos de red, formando una red virtual LAN.

Al igual que OpenVPN o Wireguard, Tinc permite crear túneles cifrados y atravesar entornos NAT, pero su diseño orientado a redes en malla lo convierte en una opción resiliente y adaptable, ideal para conexiones inestables o de baja calidad.

En este artículo, exploraremos las ventajas de usar Tinc, cómo instalarlo en Linux y cómo configurar una red mesh básica.

¿Por Qué Elegir Tinc sobre Wireguard y OpenVPN?

Tinc posee características únicas que lo diferencian de otros daemon de VPN:

Diseño en Malla

A diferencia de Wireguard, Tinc está diseñado para formar redes en malla. Esto significa que puede adaptarse fácilmente a cambios en las condiciones de la red, estableciendo conexiones P2P de forma automática mediante descubrimiento de pares o coordinación con servidores públicos Tinc. Esto no solo hace a Tinc más resistente ante conexiones inestables, sino que también mejora la velocidad y la capacidad de respuesta de la red.

Funciones Tradicionales de VPN

Al igual que OpenVPN, Tinc permite atravesar entornos NAT, crear túneles cifrados y conectar aplicaciones que operan únicamente en redes locales.

En definitiva, Tinc combina lo mejor de ambos mundos: la flexibilidad y eficiencia de una red en malla junto con las características esenciales de seguridad y cifrado de una VPN tradicional.

Instalación de Tinc en Linux

Antes de comenzar, es importante actualizar tu sistema. En Ubuntu, puedes hacerlo con:

sudo apt update && sudo apt upgrade -y

Instalación en Ubuntu/Debian

Instala Tinc directamente desde los repositorios:

sudo apt install tinc

Instalación en Fedora

En Fedora, utiliza:

sudo dnf install tinc

Para confirmar que Tinc se ha instalado correctamente, ejecuta:

tincd --version

Creando una Red Mesh Básica con Tinc

Una vez instalado Tinc, el siguiente paso es configurar tu primer nodo en la red mesh. Supongamos que queremos crear una red llamada mynetwork.

Configuración del Nodo Principal

Debes seguir los siguientes pasos para conseguir configurar el nodo sin problemas.

1. Crear la estructura de directorios

Crea un nuevo directorio en /etc/tinc para almacenar la configuración de la red y los archivos de host:

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

2. Configurar el archivo principal

Crea el archivo de configuración tinc.conf para tu nodo:

sudo nano /etc/tinc/mynetwork/tinc.conf

Añade el siguiente contenido:

Name = mynode
Device = /dev/net/tun

Nota: Algunos sistemas pueden ubicar el dispositivo TUN en una ruta distinta. Para verificar su ubicación, ejecuta:

find /dev -name *tun* -type c

3. Configurar el archivo de host

Crea un archivo en la carpeta hosts con el nombre de tu nodo, por ejemplo, mynode:

sudo nano /etc/tinc/mynetwork/hosts/mynode

Añade la siguiente configuración:

Subnet = 192.168.11.1/32
Address = TU-IP-DE-MÁQUINA-AQUÍ
Port = 655

Reemplaza TU-IP-DE-MÁQUINA-AQUÍ por la dirección IP de tu máquina. Si deseas que la VPN sea accesible públicamente, utiliza la IP pública.

4. Crear los scripts de conexión

Crea los scripts tinc-up y tinc-down en el directorio /etc/tinc/mynetwork para configurar y desactivar la interfaz virtual.

sudo touch /etc/tinc/mynetwork/tinc-{up,down}
sudo chmod +x /etc/tinc/mynetwork/tinc-{up,down}

Edita el archivo tinc-up:

sudo nano /etc/tinc/mynetwork/tinc-up

Inserta el siguiente código:

#!/bin/sh
ip link set $INTERFACE up
ip addr add 192.168.11.1/32 dev $INTERFACE
ip route add 192.168.11.0/24 dev $INTERFACE

Ahora edita el archivo tinc-down:

sudo nano /etc/tinc/mynetwork/tinc-down

Y añade:

#!/bin/sh
ip route del 192.168.11.0/24 dev $INTERFACE
ip addr del 192.168.11.1/32 dev $INTERFACE
ip link set $INTERFACE down

5. Generar el par de claves:

Finalmente, genera un par de claves (privada y pública) para tu nodo:

sudo tincd -n mynetwork --generate-keys=4096

Presiona Enter dos veces para aceptar la ubicación predeterminada de guardado.

Agregar el Primer Cliente Tinc

Para ampliar la red, debes agregar al menos un cliente adicional.

Configuración en la Segunda Máquina (Cliente)

1. Instala Tinc y crea la estructura de directorios:

sudo apt install tinc
sudo mkdir -p /etc/tinc/mynetwork/hosts

2. Configura el archivo tinc.conf:

sudo nano /etc/tinc/mynetwork/tinc.conf

Inserta:

Name = myclient
Device = /dev/net/tun
ConnectTo = mynode

3. Configura el archivo de host para el cliente:

Crea un archivo en /etc/tinc/mynetwork/hosts llamado myclient:

sudo nano /etc/tinc/mynetwork/hosts/myclient

Añade:

Subnet = 192.168.11.2/32
Port = 655

4. Crea los scripts tinc-up y tinc-down:

sudo touch /etc/tinc/mynetwork/tinc-{up,down}
sudo chmod +x /etc/tinc/mynetwork/tinc-{up,down}

Edita tinc-up:

sudo nano /etc/tinc/mynetwork/tinc-up

Con el siguiente contenido:

#!/bin/sh
ip link set $INTERFACE up
ip addr add 192.168.11.2/32 dev $INTERFACE
ip route add 192.168.11.0/24 dev $INTERFACE

Y luego edita tinc-down:

sudo nano /etc/tinc/mynetwork/tinc-down

Inserta:

#!/bin/sh
ip route del 192.168.11.0/24 dev $INTERFACE
ip addr del 192.168.11.2/32 dev $INTERFACE
ip link set $INTERFACE down

5. Genera el par de claves en el cliente:

sudo tincd -n mynetwork --generate-keys=4096

Conectando los Nodos de la Red Mesh

Con ambos nodos configurados (el nodo principal y el cliente), es necesario intercambiar sus archivos de configuración de hosts para que se reconozcan mutuamente.

1. Transferencia desde el Nodo Principal al Cliente:

En el nodo principal, navega al directorio de hosts:

cd /etc/tinc/mynetwork/hosts

Copia el archivo del nodo (mynode) y transfiérelo al cliente mediante SCP:

scp ./mynode TU-IP-DEL-CLIENTE:~

2. Instala el archivo en el Cliente:

En la máquina cliente, copia el archivo transferido a la carpeta de hosts:

sudo cp ~/mynode /etc/tinc/mynetwork/hosts/

3. Transferencia desde el Cliente al Nodo Principal:

Del lado del cliente, transfiere su archivo de configuración (myclient) al nodo principal:

scp /etc/tinc/mynetwork/hosts/myclient TU-IP-DEL-NODO:~

4. Instala el archivo en el Nodo Principal:

En el nodo principal, copia el archivo recibido en la carpeta de hosts:

sudo cp ~/myclient /etc/tinc/mynetwork/hosts/

Ejecutando la Red Mesh Tinc

Una vez que ambos nodos han intercambiado la información de hosts, es momento de iniciar la red VPN.

1. Iniciar Tinc en ambos nodos:

Ejecuta el siguiente comando en cada máquina:

sudo tincd -n mynetwork

2. Verificar la Conectividad:

Para comprobar que ambos nodos están conectados, realiza un ping desde uno de ellos a la dirección asignada al otro, por ejemplo, desde el nodo principal:

ping -c 5 192.168.11.2

3. Habilitar Tinc en el Inicio del Sistema

Para que la VPN se inicie automáticamente en el arranque, habilita el servicio de Tinc:

sudo systemctl enable --now tinc@mynetwork.service

Conclusión

Crear una VPN mesh P2P con Tinc en Linux es una excelente forma de establecer una red privada, segura y altamente adaptable, perfecta para conectar equipos a través de diversos entornos de red.

Siguiendo estos pasos, podrás configurar tu propia red VPN que se autoajuste a las condiciones de la red, ofreciendo conexiones rápidas y resilientes.

Explorar y experimentar con Tinc es solo el comienzo de un apasionante mundo en el campo de la seguridad y la administración de redes. ¡Atrévete a crear tu propia VPN y lleva tu experiencia en redes al siguiente nivel!