🔄Conectividad entre redes con ZeroTier e iptables: cómo enrutar una red virtual hacia a tu LAN local con una Raspberry Pi

🔄Conectividad entre redes con ZeroTier e iptables: cómo enrutar una red virtual hacia a tu LAN local con una Raspberry Pi

Este artículo surge simplemente de una necesidad (o no) que tenía para alcanzar unos equipos que están detrás de un nodo unido a Zerotier. Me pareció buena idea simplemente permitir el tráfico mediante unas reglas de iptables y Zerotier. Asi qué, ¡Vamos allá!

ZeroTier es una herramienta increíble para crear redes virtuales privadas entre dispositivos ubicados en distintas partes del mundo. Veremos cómo lograr que los dispositivos conectados a una red ZeroTier puedan acceder a los equipos de tu red local WiFi, y viceversa, usando en este caso una Raspberry Pi Zero como router intermedio.


🎯 Objetivo

Tienes una Raspberry Pi Zero conectada tanto a:

  • una red WiFi local 192.168.88.0/24, y
  • una red ZeroTier con direccionamiento 192.168.196.0/24.

Y quieres que:

  • Los dispositivos en ZeroTier accedan a los de tu red WiFi.
  • Los dispositivos en tu red WiFi puedan acceder a los de ZeroTier.
  • Todo funcione automáticamente al reiniciar.

🧰 Requisitos

  • Una Raspberry Pi (Zero o cualquier modelo).
  • Un sistema operativo basado en Debian (como Raspberry Pi OS).
  • ZeroTier instalado y unido a una red.
  • Acceso root o sudo.

1️⃣ Habilitar el reenvío de paquetes IP

Para que la Pi pueda actuar como router entre interfaces, debemos habilitar el reenvío IP.

Edita el archivo de configuración:

sudo nano /etc/sysctl.conf

Busca o añade esta línea:

net.ipv4.ip_forward=1

Guarda con Ctrl+S y Enter. Luego aplica los cambios:

sudo sysctl -p

2️⃣ Configurar iptables para permitir y enrutar el tráfico

Supongamos que:

  • wlan0 es la interfaz WiFi local (LAN).
  • zt+ representa cualquier interfaz ZeroTier (como ztabcd123).

NOTA: Es importante en el caso de usar una Pi Zero que no entre en modo ahorro de energía. Mirad este otro post para deshabilitarlo.

👉 Permitir tráfico desde ZeroTier hacia la LAN

sudo iptables -A FORWARD -i zt+ -o wlan0 -j ACCEPT
sudo iptables -A FORWARD -i wlan0 -o zt+ -m state --state RELATED,ESTABLISHED -j ACCEPT

👉 Hacer NAT para que los paquetes de ZeroTier lleguen a la red WiFi (Depende de tu escenario)

En mi caso estoy un viejo Mikrotik que es el default gateway de la 192.168.88.0/24. Lo que hago es enrutar la red 192.168.196.0/24 a la IP de la Pi Zero y no necesito natear el tráfico, pero por si lo necesitáis sería así:

sudo iptables -t nat -A POSTROUTING -s 192.168.196.0/24 -o wlan0 -j MASQUERADE

3️⃣ Permitir también tráfico inverso: de la LAN hacia ZeroTier

Si también quieres acceder desde dispositivos en la red local a los de ZeroTier:

sudo iptables -A FORWARD -i wlan0 -o zt+ -j ACCEPT
sudo iptables -A FORWARD -i zt+ -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT

No necesitas NAT en este sentido, ya que ZeroTier reconoce los paquetes si hay ruta de retorno.


4️⃣ Hacer persistentes las reglas de iptables

Instala iptables-persistent para que las reglas sobrevivan a reinicios:

sudo apt install iptables-persistent

Guarda las reglas:

sudo netfilter-persistent save

5️⃣ Añadir rutas gestionadas en ZeroTier

Para que los dispositivos en la red virtual sepan cómo llegar a la red WiFi:

  1. Ve a my.zerotier.com
  2. Entra en tu red.
  3. En la sección «Advanced» > «Managed Routes», añade:
192.168.88.0/24 via 192.168.196.X

Donde 192.168.196.76 en este escenario es la IP de la Raspberry Pi en la red ZeroTier.

✅ ¡Con esto, todos los dispositivos ZeroTier podrán enrutar tráfico hacia tu red WiFi local!


6️⃣ (Opcional) Acceso desde la LAN hacia ZeroTier

Los dispositivos locales (192.168.88.0/24) necesitan saber cómo llegar a 192.168.196.0/24. Tienes dos opciones:

🛣️ Opción A: Ruta estática en tu router WiFi

Esta la opción que cometaba antes, habría que entrar a la configuración del router y añade la ruta:

  • Destino: 192.168.196.0/24
  • Gateway: 192.168.88.254 (IP de la Pi Zero)

💻 Opción B: Ruta estática en cada dispositivo WiFi

sudo ip route add 192.168.196.0/24 via 192.168.88.X

🧪 Verificación

Desde un dispositivo remoto en ZeroTier:

ping 192.168.88.1

Desde un dispositivo en tu red WiFi:

ping 192.168.196.X  # cualquier equipo en la red virtual

Si ambas direcciones responden: ¡tienes un router dual ZeroTier-WiFi 100% funcional!


Conclusión

Con esta configuración, has creado un puente bidireccional entre una red virtual (ZeroTier) y una red física (tu WiFi local) utilizando una simple Raspberry Pi y reglas iptables. Esto abre la puerta a soluciones como administración remota, por ejemplo, ahora puedo administrar el Mikrotik sin ningún problema. Seguramente se os ocurra alguna utilidad o escenario dónde poder llevar esta configuración a cabo.