Cómo crear tu propia VLAN con Tailscale

Conectar tu LAN de casa con otra o un VPS nunca fue tan fácil gracias a Tailscale. Te cuento cómo lo he hecho yo por si te sirve de ayuda.

Cómo crear tu propia VLAN con Tailscale
Photo by Ricardo Gomez Angel / Unsplash

Al igual que muchos de vosotros, actualmente mantengo toda una nube privada en mi red local, así como en algunos VPS que me sirven servicios de acceso más público. Sin embargo, también los utilizo para alojar servicios que no están expuestos a Internet, y que requieren de una conexión VPN para poder acceder a ellos.

Hasta ahora, la solución que aplicaba en ellos era mantener un servidor VPN corriendo en ellos (concretamente, usaba WireGuard en un contenedor Docker), con su correspondiente puerto abierto en el firewall y la exposición que ello conlleva hacia el exterior. Cada vez que quería acceder a dichos servicios, en puertos bloqueados por el firewall, necesitaba conectarme a la VPN.

El problema que tuve con todo esto era que, evidentemente, necesitaba un cliente VPN en cada dispositivo desde el cual necesitara acceder a los servicios y, además, me limitaba usarlo en aquellos en los que no puedo instalar un cliente VPN alegremente (como el portátil del trabajo). Puesto que en su mayoría son servicios web, ¿cómo podría acceder a ellos de manera más sencilla? Esta pregunta me la respondió Tailscale

Qué es Tailscale

Tailscale es una plataforma de Red Privada Virtual (VPN por sus siglas en inglés) de configuración cero que permite conectar dispositivos y servicios de manera segura y escalable a través de Internet. Utiliza el protocolo WireGuard para establecer conexiones punto-a-punto entre dispositivos, lo que garantiza la confidencialidad, autenticación e integridad de los datos.

Se caracteriza por:

  1. Configuración cero: No es necesario abrir puertos, configurar servidores VPN ni realizar complejas configuraciones. El proceso de instalación y configuración es rápido y sencillo.
  2. Malla VPN: Crea una red privada virtual (VPN) en forma de malla, lo que significa que cada dispositivo se conecta directamente con los demás, en lugar de pasar por un servidor central. Esto reduce la latencia y mejora el rendimiento.
  3. Autenticación multifactor: Permite la autenticación multifactor, lo que garantiza la seguridad de la conexión.
  4. Rotación automática de claves: Las claves se rotan automáticamente cada hora y día para reducir el riesgo de robo de claves o credenciales obsoletas.
  5. Cifrado: Utiliza el protocolo Noise de WireGuard para cifrar el tráfico de red.
  6. Control de acceso: Permite definir controles de acceso basados en roles para restringir el acceso a servidores confidenciales o autorizar a los contratistas a ver solo lo que necesitan.
  7. Registro centralizado: Registra todas las conexiones desde ambos extremos, visible desde un tablero y una API de registro.

Dicho de otra forma, es un software que nos facilita la creación de una VPN sin la necesidad de tener un servidor central ni abrir o configurar ningún puerto al exterior (ideal para mantener más seguros los VPS o si, por ejemplo, estamos tras una CG-NAT en la conexión de nuestra casa).

Instalación

Para instalarlo, deberemos seguir ambos pasos en 2 sitios: un servicio en nuestra red local, y otro en el VPS. Para la red local, lo que he hecho ha sido levantar un LXC en Proxmox de Debian y, sobre él, realizar la instalación, al igual que he hecho directamente en el VPS.

Creación de cuenta en Tailscale

Lo primero, deberemos crearnos una cuenta en Tailscale. Para ello, accederemos a su web y nos registraremos (con nuestro correo, con nuestra cuenta de Google... lo que prefiramos).

Instalación en la red local vía Proxmox

Comencemos por la instalación en la red local. Como he comentado antes, lo he hecho a través de un contenedor LXC en Proxmox basado en Debian. Una vez creado y arrancado, desde la consola del nodo he ejecutado el script del gran TTeck (DEP). Lo podéis encontrar aquí, pero básicamente se puede resumir en abrir sesión en la terminal del nodo donde queremos instalarlo y ejecutar:

bash -c "$(wget -qLO - https://github.com/community-scripts/ProxmoxVE/raw/main/misc/add-tailscale-lxc.sh)"

Comando para instalar Tailscale como un LXC en Proxmox

Una vez completado y reiniciado el LXC, ya tendremos nuestro nodo de Tailscale instalado. Pero aún deberemos pulir un par de cosas. Para ello, accedemos a él vía terminal y ejecutar lo siguiente como root para configurar el enrutado:

echo 'net.ipv4.ip_forward = 1' | tee -a /etc/sysctl.d/99-tailscale.conf
echo 'net.ipv6.conf.all.forwarding = 1' | tee -a /etc/sysctl.d/99-tailscale.conf

sysctl -p /etc/sysctl.d/99-tailscale.conf

Comandos para configurar el enrutado entre redes

Una vez hecho eso, deberemos ejecutar tailscale down para detener el servicio y, a continuación tailscale up --advertise-exit-node --advertise-routes=192.168.1.0/24 --accept-routes=true, cambiando la red 192.168.1.0/24 por la que aplique en nuestro caso concreto. Veremos que se nos pide acceder desde un navegador a una URL del tipo https://login.tailscale.com/a/xxxxxx, cosa que haremos desde un navegador.

Una vez ahí, en el apartado de machines, veremos que nos aparece el nodo que acabamos de registrar en nuestra red de Tailscale, y deberemos seleccionar en los 3 puntos de la derecha la opción Edit route settings y marcar las 2 casillas que nos aparecen en la ventana emergente: subnet routes y Use as exit node. También os recomiendo que desmarquéis la expiración de la clave.

Con esto, nuestro nodo de la red LAN debería aparecer como Connected, y habremos terminado con la primera parte.

Instalación de Tailscale en el VPS

A continuación, nos iremos al VPS y, desde allí, ejecutaremos el siguiente comando para instalarlo:

curl -fsSL https://tailscale.com/install.sh | sh

Comando para instalar Tailscale en el VPS

Tras instalarlo, deberemos repetir los pasos anteriores para enrutar el tráfico, por ello ejecutaremos de nuevo:

echo 'net.ipv4.ip_forward = 1' | sudo tee -a /etc/sysctl.d/99-tailscale.conf
echo 'net.ipv6.conf.all.forwarding = 1' | sudo tee -a /etc/sysctl.d/99-tailscale.conf

sudo sysctl -p /etc/sysctl.d/99-tailscale.conf

Comandos para configurar el enrutado entre redes

Además, deberemos habilitar nuestro firewall para que enrute las peticiones por la red creada por Tailscale sin problemas, por lo que necesitamos hacer:

sudo ufw allow from tailscale0
sudo ufw allow tailscale0
sudo ufw allow in tailscale0
sudo ufw allow in on tailscale0
sudo ufw status
sudo ufw reload

Comandos para permitir el tráfico en el firewall a través de la red de Tailscale

Con esto hecho, nos bastará un simple sudo tailscale down seguido de sudo tailscale up --accept-routes --advertise-exit-node para que nos vuelva a salir la URL que deberemos copiar y pegar en el navegador.

De nuevo, en la lista de machines que nos sale en el panel de administración de Tailscale, deberemos habilitar el nuevo nodo como exit node.

Uso

Con esto, ya tenemos integradas nuestras 2 redes, la local de casa y la del VPS. Ahora, bastará con estar conectados a nuestra LAN para poder acceder directamente a los servicios del VPS, sin necesidad de usar clientes VPN mientras estemos en ella.

Y con Tailscale, bastará con conectarnos cuando estemos fuera y seleccionar como nodo de salida el nodo instalado en nuestra LAN para seguir teniendo dicho acceso, además de hacerlo por VPN de forma segura y sin necesidad de mantener puertos abiertos ni en el VPS ni en nuestro router.

Conclusiones

Para mí esto está siendo muy útil, ya que algunos servicios que no quiero tener expuestos al exterior sí los puedo mantener accesibles desde mi propia red local, y sin necesidad de estar conectando y desconectando la VPN, además de poder acceder a ellos desde otros dispositivos (como la TV, por ejemplo) sin necesidad de clientes VPN.

Y cuando estoy fuera, un sólo clic en la app de Tailscale me da acceso a toda mi nube personal, sin necesidad de estar cambiando entre una red y otra como me pasaba antes. ¡Espero que esto os sirva de ayuda y os facilite las cosas!

Si te ha gustado la entrada, o te ha sido útil y quieres ayudarme a pagar los gastos que conlleva el servidor y mantener así el blog libre completamente de anuncios, puedes hacer una donación pulsando sobre el siguiente botón: