ZeroTier crea redes virtuales de capa 2 sobre Internet: los equipos que se unen a la misma red se ven como si estuvieran en la misma LAN, con conexiones cifradas punto a punto entre ellos. En este tutorial instalarás ZeroTier en un servidor Ubuntu 24.04, lo unirás a una red gestionada desde ZeroTier Central, autorizarás miembros con IP fija y configurarás el servidor como router hacia una subred privada.
Requisitos previos
Para seguir esta guía necesitas:
- Un servidor con Ubuntu 24.04 LTS, por ejemplo un VPS de CubePath, y un usuario no root con privilegios
sudo. - Una cuenta en ZeroTier Central. El plan gratuito permite un número limitado de dispositivos, suficiente para seguir la guía.
- Al menos otro equipo (tu portátil, por ejemplo) con el cliente de ZeroTier instalado, para probar la conexión.
- Para el paso 5, una subred privada a la que llegue el servidor, por ejemplo la red privada de tus servidores. En esta guía se usa
10.10.0.0/24.
Paso 1: Instalar ZeroTier
ZeroTier distribuye sus paquetes mediante un script que detecta la distribución, añade su repositorio firmado e instala el paquete zerotier-one. Descárgalo primero para poder revisarlo antes de ejecutarlo con privilegios de root:
curl -fsSL https://install.zerotier.com -o zerotier-install.sh
less zerotier-install.sh
Si el contenido es correcto, ejecútalo:
sudo bash zerotier-install.sh
El paquete activa y arranca el servicio zerotier-one. Comprueba su estado y la identidad del nodo:
systemctl status zerotier-one
sudo zerotier-cli info
200 info 8a3c1f5e92 1.14.2 ONLINE
El valor de 10 caracteres (8a3c1f5e92 en el ejemplo) es el ID de nodo. Lo necesitarás para autorizar el servidor. ONLINE indica que el nodo llega a la infraestructura de ZeroTier.
Paso 2: Crear una red en ZeroTier Central
Inicia sesión en ZeroTier Central y pulsa Create A Network. La red recibe un ID de red de 16 caracteres hexadecimales, por ejemplo a09acf02337b1c5e. Abre la red y revisa dos ajustes:
- Access Control: déjalo en Private. Así cada equipo que se una necesitará tu aprobación.
- IPv4 Auto-Assign: elige un rango que no choque con tus redes existentes, por ejemplo
10.147.17.*. ZeroTier asignará a cada miembro una IP de ese rango.
Paso 3: Unir el servidor a la red
Une el servidor a la red con su ID. Sustituye your_network_id por el tuyo:
sudo zerotier-cli join your_network_id
200 join OK
Consulta el estado de la red. Como aún no está autorizado, verás ACCESS_DENIED y ninguna IP asignada:
sudo zerotier-cli listnetworks
200 listnetworks <nwid> <name> <mac> <status> <type> <dev> <ZT assigned ips>
200 listnetworks a09acf02337b1c5e mi-red 7a:1b:2c:3d:4e:5f ACCESS_DENIED PRIVATE ztabcdef12 -
La columna <dev> muestra el nombre de la interfaz virtual, que empieza por zt.
Paso 4: Autorizar miembros
En ZeroTier Central, abre la red y baja hasta Members. El servidor aparece con su ID de nodo. Marca la casilla Auth y, si quieres una IP fija, escríbela en el campo de IP del miembro.
También puedes autorizar desde la API de ZeroTier Central, útil al desplegar muchos servidores. Crea un token de API en Account > API Access Tokens y exporta las variables. Sustituye los valores de ejemplo por los tuyos:
export ZT_TOKEN="your_api_token"
export ZT_NETWORK="your_network_id"
export ZT_NODE="your_node_id"
Autoriza el miembro y asígnale la IP 10.147.17.10:
curl -s -X POST \
-H "Authorization: token $ZT_TOKEN" \
-H "Content-Type: application/json" \
-d '{"name": "vps-router", "config": {"authorized": true, "ipAssignments": ["10.147.17.10"]}}' \
"https://api.zerotier.com/api/v1/network/$ZT_NETWORK/member/$ZT_NODE"
Unos segundos después, el servidor recibe la configuración. Comprueba que el estado ha pasado a OK y que la interfaz tiene la IP:
sudo zerotier-cli listnetworks
200 listnetworks a09acf02337b1c5e mi-red 7a:1b:2c:3d:4e:5f OK PRIVATE ztabcdef12 10.147.17.10/24
Une y autoriza de la misma forma tu portátil. Desde él, haz ping al servidor por su IP de ZeroTier:
ping -c 3 10.147.17.10
En el servidor, zerotier-cli peers muestra si la conexión con cada equipo es directa (DIRECT) o pasa por un relay (RELAY):
sudo zerotier-cli peers
Paso 5: Enrutar una subred privada a través del servidor
Para que los miembros de ZeroTier lleguen a equipos que no tienen ZeroTier instalado, el servidor debe reenviar su tráfico hacia la subred privada. Activa el reenvío de paquetes de forma permanente:
echo 'net.ipv4.ip_forward = 1' | sudo tee /etc/sysctl.d/99-zerotier.conf
sudo sysctl -p /etc/sysctl.d/99-zerotier.conf
net.ipv4.ip_forward = 1
Identifica la interfaz del servidor conectada a la subred privada:
ip -br addr
lo UNKNOWN 127.0.0.1/8 ::1/128
eth0 UP 203.0.113.20/24
eth1 UP 10.10.0.4/24
ztabcdef12 UNKNOWN 10.147.17.10/24
En este ejemplo la subred privada está en eth1 y la interfaz de ZeroTier es ztabcdef12. Los equipos de la subred no conocen la red 10.147.17.0/24, así que el servidor hará NAT (masquerade) del tráfico que sale hacia ellos. Añade las reglas con tus nombres de interfaz:
sudo iptables -t nat -A POSTROUTING -s 10.147.17.0/24 -o eth1 -j MASQUERADE
sudo iptables -A FORWARD -i ztabcdef12 -o eth1 -j ACCEPT
sudo iptables -A FORWARD -i eth1 -o ztabcdef12 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
Instala iptables-persistent para que las reglas sobrevivan a un reinicio. Durante la instalación responde Yes a guardar las reglas IPv4 actuales:
sudo apt install iptables-persistent
Si más adelante cambias las reglas, guárdalas de nuevo con sudo netfilter-persistent save.
Por último, publica la ruta a todos los miembros. En ZeroTier Central, en Advanced > Managed Routes, añade una ruta con destino 10.10.0.0/24 y Via 10.147.17.10 (la IP de ZeroTier del servidor). Los clientes aceptan las rutas gestionadas por defecto.
Desde el portátil, haz ping a un equipo de la subred privada:
ping -c 3 10.10.0.5
Paso 6: Ajustar el firewall
ZeroTier usa el puerto UDP 9993. No necesita tenerlo abierto para funcionar, pero permitir la entrada facilita que los demás nodos establezcan conexiones directas en lugar de pasar por relay:
sudo ufw allow 9993/udp
Si UFW está activo en el servidor router, también bloquea por defecto el tráfico reenviado. Permite el reenvío desde ZeroTier hacia la subred privada:
sudo ufw route allow in on ztabcdef12 out on eth1
sudo ufw status
To Action From
-- ------ ----
9993/udp ALLOW Anywhere
Anywhere on eth1 ALLOW FWD Anywhere on ztabcdef12
Solución de problemas
El estado se queda en REQUESTING_CONFIGURATION. El nodo no llega al controlador de la red. Comprueba que sudo zerotier-cli info devuelve ONLINE y que no hay un firewall bloqueando el UDP saliente. Revisa los logs:
sudo journalctl -u zerotier-one -n 50
El estado es ACCESS_DENIED. El miembro no está autorizado. Marca Auth en ZeroTier Central o repite la llamada a la API del paso 4.
Hay IP de ZeroTier pero no llegas a la subred. Verifica, en este orden, que la ruta gestionada existe y apunta a la IP correcta, que sysctl net.ipv4.ip_forward devuelve 1, y que las reglas NAT y de reenvío están cargadas:
sudo iptables -t nat -S POSTROUTING
sudo iptables -S FORWARD
Conclusión
Tienes un servidor Ubuntu 24.04 unido a una red virtual ZeroTier, con miembros autorizados e IP fija, que además da acceso a una subred privada a todos los nodos de la red. Como siguientes pasos, puedes definir reglas de flujo (Flow Rules) en ZeroTier Central para limitar qué tráfico se permite entre miembros, automatizar el alta de servidores con la API, o desplegar un controlador propio como ZTNET si no quieres depender de ZeroTier Central.
