Configuración de Red Virtual ZeroTier

ZeroTier es una plataforma de redes definidas por software (SDN) que crea redes virtuales peer-to-peer sobre internet, permitiendo conectar dispositivos como si estuvieran en la misma LAN. Con soporte para bridging, routing avanzado y controladores auto-hospedados, ZeroTier es ideal para infraestructuras distribuidas en VPS y servidores baremetal. En esta guía aprenderás a instalar y configurar ZeroTier en Linux de forma completa.

Requisitos Previos

  • Ubuntu 20.04+, Debian 11+, CentOS 8+ o Rocky Linux 8+
  • Acceso root o sudo
  • Cuenta en my.zerotier.com (plan gratuito soporta hasta 25 dispositivos)
  • Puertos UDP 9993 abiertos en el firewall

Instalación de ZeroTier

ZeroTier proporciona un script de instalación que funciona en todas las distribuciones principales:

# Instalar ZeroTier usando el script oficial
curl -s https://install.zerotier.com | sudo bash

Para instalación manual en Ubuntu/Debian:

# Agregar la clave GPG
curl -fsSL https://raw.githubusercontent.com/zerotier/ZeroTierOne/main/doc/contact%40zerotier.com.gpg | gpg --dearmor | sudo tee /usr/share/keyrings/zerotierone-archive-keyring.gpg > /dev/null

# Agregar el repositorio
echo "deb [signed-by=/usr/share/keyrings/zerotierone-archive-keyring.gpg] https://download.zerotier.com/debian/focal focal main" | sudo tee /etc/apt/sources.list.d/zerotier.list

# Instalar
sudo apt update && sudo apt install zerotier-one -y

Para CentOS/Rocky Linux:

# Instalar desde el repositorio RPM
sudo dnf install -y https://download.zerotier.com/RELEASES/latest/dist/rpm/zerotier_rpm_latest.rpm

Iniciar el servicio:

# Habilitar y arrancar ZeroTier
sudo systemctl enable --now zerotier-one

# Verificar el estado
sudo systemctl status zerotier-one

# Comprobar la versión instalada
zerotier-cli info

Creación y Unión a una Red

Crear una red desde el panel web de ZeroTier (my.zerotier.com > Networks > Create Network) o usar la API:

# Unirse a una red ZeroTier existente (usar el ID de red de 16 caracteres)
sudo zerotier-cli join a09acf0233cxxxxx

# Ver redes a las que pertenece este nodo
sudo zerotier-cli listnetworks

# Ver información del nodo local
sudo zerotier-cli info
# Salida: ID-del-nodo versión estado

Ver los detalles de la interfaz de red creada:

# Listar interfaces de red (la interfaz ZeroTier empieza con "zt")
ip link show | grep zt

# Ver la IP asignada por ZeroTier
ip addr show ztxxxxxxxx

# Ver rutas gestionadas por ZeroTier
ip route | grep zt

Autorización de Miembros

Por defecto, los miembros nuevos requieren autorización manual. En el panel web, navegar a la red y activar el checkbox en la columna "Auth" para cada miembro.

Para autorizar usando la API de ZeroTier:

# Obtener el token de API desde my.zerotier.com > Account
API_TOKEN="tu-token-aqui"
NETWORK_ID="a09acf0233cxxxxx"
NODE_ID="ID-del-nodo"

# Autorizar un miembro via API
curl -s -X POST \
  -H "Authorization: token $API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"config": {"authorized": true}}' \
  "https://api.zerotier.com/api/v1/network/$NETWORK_ID/member/$NODE_ID"

# Listar todos los miembros de una red
curl -s \
  -H "Authorization: token $API_TOKEN" \
  "https://api.zerotier.com/api/v1/network/$NETWORK_ID/member"

Asignar IPs estáticas a miembros específicos desde el panel o via API:

# Asignar una IP estática a un miembro
curl -s -X POST \
  -H "Authorization: token $API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"config": {"authorized": true, "ipAssignments": ["10.144.0.10"]}}' \
  "https://api.zerotier.com/api/v1/network/$NETWORK_ID/member/$NODE_ID"

Configuración de Routing

Para enrutar tráfico entre la red ZeroTier y subredes locales, configurar este nodo como router:

# Habilitar IP forwarding
sudo sysctl -w net.ipv4.ip_forward=1
sudo sysctl -w net.ipv6.conf.all.forwarding=1

# Hacer los cambios permanentes
echo "net.ipv4.ip_forward = 1" | sudo tee -a /etc/sysctl.d/99-zerotier.conf
echo "net.ipv6.conf.all.forwarding = 1" | sudo tee -a /etc/sysctl.d/99-zerotier.conf
sudo sysctl -p /etc/sysctl.d/99-zerotier.conf

Configurar NAT para que los clientes ZeroTier puedan acceder a la red local:

# Obtener el nombre de la interfaz ZeroTier
ZT_IFACE=$(ip link | grep zt | awk '{print $2}' | tr -d ':')
LOCAL_IFACE="eth0"  # Ajustar según la interfaz local

# Configurar NAT con iptables
sudo iptables -t nat -A POSTROUTING -o $LOCAL_IFACE -j MASQUERADE
sudo iptables -A FORWARD -i $ZT_IFACE -o $LOCAL_IFACE -j ACCEPT
sudo iptables -A FORWARD -i $LOCAL_IFACE -o $ZT_IFACE -m state --state RELATED,ESTABLISHED -j ACCEPT

# Guardar reglas de iptables (Ubuntu/Debian)
sudo apt install iptables-persistent -y
sudo netfilter-persistent save

En el panel de ZeroTier, agregar la ruta administrada:

  • Ir a la red > "Managed Routes"
  • Agregar: Destino 192.168.1.0/24 (subred local), Via: IP ZeroTier del router

Bridging con Red Local

Para un bridging completo (Layer 2) entre ZeroTier y la red local:

# Instalar herramientas de bridge
sudo apt install bridge-utils -y  # Ubuntu/Debian
# sudo dnf install bridge-utils -y  # CentOS/Rocky

# Obtener el nombre de la interfaz ZeroTier
ZT_IFACE=$(zerotier-cli listnetworks | awk 'NR>1 {print $8}')

# Crear el bridge
sudo brctl addbr ztbr0
sudo brctl addif ztbr0 eth0
sudo brctl addif ztbr0 $ZT_IFACE

# Habilitar el bridge
sudo ip link set ztbr0 up

# Configurar el comportamiento de ZeroTier para bridging
sudo zerotier-cli set NETWORK_ID allowManaged=1
sudo zerotier-cli set NETWORK_ID allowGlobal=1
sudo zerotier-cli set NETWORK_ID allowDefault=0

Controlador Auto-Hospedado

Para mayor control y privacidad, desplegar un controlador ZeroTier propio con ZeroTierOne en modo controlador o usando Ztnet:

# ZeroTier incluye un controlador integrado
# El archivo de configuración de redes locales está en:
ls /var/lib/zerotier-one/controller.d/network/

# Crear una nueva red mediante la API local del controlador
curl -s -X POST \
  -H "X-ZT1-AUTH: $(sudo cat /var/lib/zerotier-one/authtoken.secret)" \
  http://localhost:9993/controller/network/$(sudo cat /var/lib/zerotier-one/identity.public | cut -d: -f1)______

# Listar redes del controlador local
curl -s \
  -H "X-ZT1-AUTH: $(sudo cat /var/lib/zerotier-one/authtoken.secret)" \
  http://localhost:9993/controller/network/

Reglas de Firewall

Abrir el puerto necesario para ZeroTier:

# UFW (Ubuntu/Debian)
sudo ufw allow 9993/udp comment "ZeroTier"
sudo ufw reload

# firewalld (CentOS/Rocky)
sudo firewall-cmd --permanent --add-port=9993/udp
sudo firewall-cmd --reload

# Verificar que el puerto está escuchando
sudo ss -ulnp | grep 9993

Para filtrar tráfico dentro de la red ZeroTier, usar las reglas de flujo en el panel:

# Ejemplo de reglas de flujo ZeroTier (formato propietario)
# Bloquear todo por defecto
drop;

# Permitir tráfico entre miembros del mismo grupo
match ethertype ipv4;
accept;

Solución de Problemas

El nodo no se conecta a la red:

# Verificar el estado del servicio
sudo systemctl status zerotier-one
sudo journalctl -u zerotier-one -f

# Ver el estado de las redes
sudo zerotier-cli listnetworks
# Estado debe ser "OK" no "REQUESTING_CONFIGURATION"

# Verificar conectividad UDP saliente al puerto 9993
nc -zuv 195.181.173.159 9993

Sin asignación de IP:

# Comprobar si el nodo está autorizado en el panel
sudo zerotier-cli listnetworks
# La columna "type" debe ser "PRIVATE" y el estado "OK"

# Verificar rangos de IP configurados en el panel
# My.ZeroTier.com > Red > IPv4 Auto-Assign

Problemas de routing entre subredes:

# Verificar IP forwarding
sysctl net.ipv4.ip_forward

# Comprobar reglas de iptables
sudo iptables -L FORWARD -n -v

# Traceroute para diagnóstico
traceroute -i ztxxxxxxxx 10.144.0.1

Conclusión

ZeroTier ofrece una solución potente para crear redes virtuales distribuidas sin la complejidad de configurar VPNs tradicionales. Con su soporte para routing, bridging y controladores auto-hospedados, es una herramienta versátil para conectar infraestructuras en múltiples ubicaciones de forma segura y eficiente.