Guía de Aprovisionamiento de Dispositivos
Esta guía te lleva a través del aprovisionamiento de un Dispositivo DoubleZero (DZD) de principio a fin. Cada fase corresponde a la Lista de Verificación de Incorporación.
Cómo Encaja Todo
Esta guía te lleva a través del registro de tu infraestructura en la cadena para que la red DoubleZero pueda enrutar tráfico a través de ella. Cuanto más completo sea el registro de tu dispositivo, más útil será para la red. Una representación completa en la cadena de tu dispositivo permite una mejor resolución de problemas, planificación de capacidad y permite al controlador tomar decisiones informadas. Con el tiempo, el objetivo es que el controlador asuma más responsabilidad de configuración.
Conceptos clave
Interfaces
Las interfaces en un DZD vienen en diferentes formas: puertos Ethernet, canales de puertos (LAGs compuestos por múltiples puertos Ethernet) y loopbacks. Cada interfaz que cumple un rol en la red necesita ser registrada en la cadena con las flags apropiadas para que el protocolo sepa qué hace.
Los puertos Ethernet y canales de puertos pueden cumplir los siguientes roles:
| Flag | Qué significa |
|---|---|
--interface-dia dia |
Marca la interfaz como el enlace ascendente de acceso directo a internet |
--interface-cyoa <subtype> |
Declara cómo los usuarios establecen túneles GRE a través de esta interfaz (por ejemplo, a través de internet público, mediante un enlace de peering privado) |
--user-tunnel-endpoint true |
Esta interfaz lleva una IP pública en la que los usuarios terminan túneles GRE |
Las interfaces usadas para enlaces WAN o DZX no llevan una flag específica, se registran con su ancho de banda y luego se referencian cuando se crea el enlace.
Las interfaces loopback sirven para varios propósitos:
| Loopback | Qué significa |
|---|---|
| Loopback100 / 101 | Llevan IPs públicas en las que los usuarios terminan túneles GRE. Se registran con --user-tunnel-endpoint true. |
Loopback255 (vpnv4) |
Se registra para que el controlador pueda asignar una IP usada para el router ID de BGP, peering VPN-IPv4 (unicast), identidad IS-IS y segment routing |
Loopback256 (ipv4) |
Se registra para que el controlador pueda asignar una IP usada para peering BGP IPv4 (multicast) y sesiones MSDP |
Enlaces
Los enlaces se registran por separado de las interfaces, y las interfaces deben existir en la cadena antes de que un enlace pueda referenciarlas. Cuando creas un enlace WAN o DZX, especificas una interfaz ya registrada como el punto final físico del enlace. No todas las interfaces están vinculadas a un enlace: las interfaces DIA, CYOA y loopback no están conectadas a un enlace.
| Término | Qué significa |
|---|---|
| Enlace WAN | Un enlace entre dos de tus propios DZDs |
| Enlace DZX | Un enlace entre tu DZD y el DZD de otro contribuidor |
Visión general de la arquitectura
flowchart TB
subgraph Onchain
SC[DoubleZero Ledger]
end
subgraph Your Infrastructure
MGMT[Servidor de Gestión<br/>DoubleZero CLI]
subgraph DZD[Tu DZD]
CYOA["Interfaz DIA · CYOA<br/>(enlace ascendente hacia usuarios)"]
WAN_INTF["Interfaz de enlace WAN"]
DZX_INTF["Interfaz de enlace DZX"]
LO100["Loopback100/101<br/>(endpoint de túnel de usuario)"]
end
DZD2[Tu otro DZD]
end
subgraph Other Contributor
OtherDZD[Su DZD]
end
USERS["Usuarios"]
MGMT -.->|Registra dispositivos,<br/>enlaces, interfaces| SC
WAN_INTF ---|Enlace WAN| DZD2
DZX_INTF ---|Enlace DZX| OtherDZD
USERS -.|Túnel GRE|.-> CYOA
CYOA ---|enruta a| LO100
Fase 1: Prerrequisitos
Antes de poder aprovisionar un dispositivo, necesitas tener el hardware físico configurado y algunas direcciones IP asignadas.
Lo Que Necesitas
| Requisito | Por Qué Se Necesita |
|---|---|
| Hardware DZD | Switch Arista 7280CR3A (ver especificaciones de hardware) |
| Espacio en Rack | 4U con flujo de aire adecuado |
| Energía | Alimentación redundante, se recomiendan ~4KW |
| Acceso de Gestión | Acceso SSH/consola para configurar el switch |
| Conectividad a Internet | Para publicar métricas y obtener configuración del controlador |
| Bloque IPv4 Público | Mínimo /29 para el pool de prefijos DZ (ver abajo) |
Instalar el CLI de DoubleZero
El CLI de DoubleZero (doublezero) se usa a lo largo del aprovisionamiento para registrar dispositivos, crear enlaces y gestionar tu contribución. Debe instalarse en un servidor de gestión o VM — no en el switch DZD en sí. El switch solo ejecuta el Config Agent y el Telemetry Agent (instalados en la Fase 4).
Ubuntu / Debian:
curl -1sLf https://dl.cloudsmith.io/public/malbeclabs/doublezero/setup.deb.sh | sudo -E bash
sudo apt-get install doublezero
Rocky Linux / RHEL:
curl -1sLf https://dl.cloudsmith.io/public/malbeclabs/doublezero/setup.rpm.sh | sudo -E bash
sudo yum install doublezero
Verifica que el demonio esté ejecutándose:
sudo systemctl status doublezerod
Entendiendo Tu Prefijo DZ
Tu prefijo DZ es un bloque de direcciones IP públicas que el protocolo DoubleZero gestiona para la asignación de IPs.
flowchart LR
subgraph "Tu Bloque /29 (8 IPs)"
IP1["Primera IP<br/>Reservada para<br/>tu dispositivo"]
IP2["IP 2"]
IP3["IP 3"]
IP4["..."]
IP8["IP 8"]
end
IP1 -->|Asignada a| LO[Loopback100<br/>en tu DZD]
IP2 -->|Asignada a| U1[Usuario 1]
IP3 -->|Asignada a| U2[Usuario 2]
Cómo se usan los prefijos DZ:
- Primera IP: Reservada para tu dispositivo (asignada a la interfaz Loopback100)
- IPs restantes: Asignadas a tipos específicos de usuarios que se conectan a tu DZD:
- Usuarios
IBRLWithAllocatedIP - Usuarios
EdgeFiltering(caso de uso futuro)
- Usuarios
- Usuarios IBRL: NO consumen de este pool (usan su propia IP pública)
Reglas del Prefijo DZ
NO PUEDES usar estas direcciones para:
- Tu propio equipamiento de red
- Enlaces punto a punto en interfaces DIA
- Interfaces de gestión
- Cualquier infraestructura fuera del protocolo DZ
Requisitos:
- Deben ser direcciones IPv4 enrutables globalmente (públicas)
- Los rangos de IP privados (10.x, 172.16-31.x, 192.168.x) son rechazados por el contrato inteligente
- Tamaño mínimo: /29 (8 direcciones), se prefieren prefijos más grandes (por ejemplo, /28, /27)
- El bloque completo debe estar disponible — no pre-asignes ninguna dirección
Si necesitas direcciones para tu propio equipamiento (IPs de interfaz DIA, gestión, etc.), usa un pool de direcciones separado.
Fase 2: Configuración de Cuenta
En esta fase, creas las claves criptográficas que te identifican a ti y a tus dispositivos en la red.
Dónde Ejecutar el CLI
NO instales el CLI en tu switch
El CLI de DoubleZero (doublezero) debe instalarse en un servidor de gestión o VM, no en tu switch Arista.
flowchart LR
subgraph "Servidor de Gestión/VM"
CLI[DoubleZero CLI]
KEYS[Tus Pares de Claves]
end
subgraph "Tu Switch DZD"
CA[Config Agent]
TA[Telemetry Agent]
end
CLI -->|Crea dispositivos, enlaces| BC[Blockchain]
CA -->|Obtiene config| CTRL[Controlador]
TA -->|Envía métricas| BC
| Instalar en Servidor de Gestión | Instalar en el Switch |
|---|---|
CLI doublezero |
Config Agent |
| Tu par de claves de servicio | Telemetry Agent |
| Tu par de claves de publicador de métricas | Par de claves de publicador de métricas (copia) |
¿Qué Son las Claves?
Piensa en las claves como credenciales de inicio de sesión seguras:
- Clave de Servicio: Tu identidad como contribuidor - usada para ejecutar comandos del CLI
- Clave de Publicador de Métricas: La identidad de tu dispositivo para enviar datos de telemetría
Ambas son pares de claves criptográficas (una clave pública que compartes, una clave privada que mantienes en secreto).
flowchart LR
subgraph "Tus Claves"
SK[Clave de Servicio<br/>~/.config/solana/id.json]
MK[Clave de Publicador de Métricas<br/>~/.config/doublezero/metrics-publisher.json]
end
SK -->|Usada para| CLI[Comandos del CLI<br/>doublezero device create<br/>doublezero link create]
MK -->|Usada para| TEL[Telemetry Agent<br/>Envía métricas a la cadena]
Paso 2.1: Genera Tu Clave de Servicio
Esta es tu identidad principal para interactuar con DoubleZero.
doublezero keygen
Esto crea un par de claves en la ubicación predeterminada. La salida muestra tu clave pública - esto es lo que compartirás con DZF.
Paso 2.2: Genera Tu Clave de Publicador de Métricas
Esta clave es usada por el Telemetry Agent para firmar los envíos de métricas.
doublezero keygen -o ~/.config/doublezero/metrics-publisher.json
Paso 2.3: Envía las Claves a DZF
Contacta a la Fundación DoubleZero o Malbec Labs y proporciona:
- Tu clave pública de servicio
- Tu nombre de usuario de GitHub (para acceso al repositorio)
Ellos:
- Crearán tu cuenta de contribuidor en la cadena
- Otorgarán acceso al repositorio privado de contribuidores
Paso 2.4: Verifica Tu Cuenta
Una vez confirmado, verifica que tu cuenta de contribuidor exista:
doublezero contributor list
Deberías ver tu código de contribuidor en la lista.
Paso 2.5: Accede al Repositorio de Contribuidores
El repositorio malbeclabs/contributors contiene:
- Configuraciones base de dispositivos
- Perfiles TCAM
- Configuraciones de ACL
- Instrucciones adicionales de configuración
Sigue las instrucciones allí para la configuración específica del dispositivo.
Fase 3: Aprovisionamiento del Dispositivo
Ahora registrarás tu dispositivo físico en la blockchain y configurarás sus interfaces.
Entendiendo los Tipos de Dispositivo
Edge — solo acepta conexiones de usuarios
flowchart LR
subgraph EDZD[DZD Edge]
E_CYOA["Interfaz DIA · CYOA"]
E_TUN["Loopback100/101
(endpoint de túnel de usuario)"]
E_DZX["Interfaz de enlace DZX"]
E_CYOA --- E_TUN
end
EU["Usuarios"] -.|Túnel GRE|.-> E_CYOA
E_DZX <-->|Enlace DZX| ED["DZD (contribuidor diferente)"]
Transit — mueve tráfico entre dispositivos, sin conexiones de usuarios
flowchart LR
subgraph TDZD[DZD Transit]
T_WAN["Interfaz de enlace WAN"]
T_DZX["Interfaz de enlace DZX"]
end
T_WAN <-->|Enlace WAN| T2["DZD (mismo contribuidor)"]
T_DZX <-->|Enlace DZX| TD["DZD (contribuidor diferente)"]
Hybrid — conexiones de usuarios y backbone, el más común
flowchart LR
subgraph HDZD[DZD Hybrid]
H_CYOA["Interfaz DIA · CYOA"]
H_TUN["Loopback100/101
(endpoint de túnel de usuario)"]
H_WAN["Interfaz de enlace WAN"]
H_DZX["Interfaz de enlace DZX"]
H_CYOA --- H_TUN
end
HU["Usuarios"] -.|Túnel GRE|.-> H_CYOA
H_WAN <-->|Enlace WAN| H2["DZD (mismo contribuidor)"]
H_DZX <-->|Enlace DZX| HD["DZD (contribuidor diferente)"]
| Tipo | Qué Hace | Cuándo Usarlo |
|---|---|---|
| Edge | Solo acepta conexiones de usuarios | Ubicación única, solo orientado a usuarios |
| Transit | Mueve tráfico entre dispositivos | Conectividad backbone, sin usuarios |
| Hybrid | Conexiones de usuarios Y backbone | El más común - hace todo |
Paso 3.1: Encuentra Tu Ubicación e Intercambio
Antes de crear tu dispositivo, busca los códigos de la ubicación de tu centro de datos y el intercambio más cercano:
# Lista las ubicaciones disponibles (centros de datos)
doublezero location list
# Lista los intercambios disponibles (puntos de interconexión)
doublezero exchange list
Paso 3.2: Crea Tu Dispositivo en la Cadena
Registra tu dispositivo en la blockchain:
doublezero device create \
--code <TU_CÓDIGO_DE_DISPOSITIVO> \
--contributor <TU_CÓDIGO_DE_CONTRIBUIDOR> \
--device-type hybrid \
--location <CÓDIGO_DE_UBICACIÓN> \
--exchange <CÓDIGO_DE_INTERCAMBIO> \
--public-ip <IP_PÚBLICA_DEL_DISPOSITIVO> \
--dz-prefixes <TU_PREFIJO_DZ>
Ejemplo:
doublezero device create \
--code nyc-dz001 \
--contributor acme \
--device-type hybrid \
--location EQX-NY5 \
--exchange nyc \
--public-ip "203.0.113.10" \
--dz-prefixes "198.51.100.0/28"
Salida esperada:
Signature: 4vKz8H...truncated...7xPq2
Verifica que tu dispositivo fue creado:
doublezero device list | grep nyc-dz001
Parámetros explicados:
| Parámetro | Qué Significa |
|---|---|
--code |
Un nombre único para tu dispositivo (por ejemplo, nyc-dz001) |
--contributor |
Tu código de contribuidor (proporcionado por DZF) |
--device-type |
hybrid, transit, o edge |
--location |
Código del centro de datos de location list |
--exchange |
Código del intercambio más cercano de exchange list |
--public-ip |
La IP pública donde los usuarios se conectan a tu dispositivo vía internet |
--dz-prefixes |
Tu bloque de IPs asignado para usuarios |
Paso 3.3: Crea las Interfaces Loopback Requeridas
Cada dispositivo necesita dos interfaces loopback para enrutamiento interno:
# Loopback VPNv4
doublezero device interface create <CÓDIGO_DISPOSITIVO> Loopback255 --loopback-type vpnv4
# Loopback IPv4
doublezero device interface create <CÓDIGO_DISPOSITIVO> Loopback256 --loopback-type ipv4
Salida esperada (para cada comando):
Signature: 3mNx9K...truncated...8wRt5
Paso 3.4: Crea las Interfaces Físicas
Registra las interfaces físicas que se usarán para enlaces WAN o DZX. Estas interfaces deben existir en la cadena antes de que puedas crear un enlace que las referencie. En este paso solo registras la interfaz y su ancho de banda, el enlace se crea en un paso posterior.
doublezero device interface create <CÓDIGO_DISPOSITIVO> <NOMBRE_INTERFAZ> \
--bandwidth <VELOCIDAD_DEL_PUERTO>
Ejemplo:
doublezero device interface create nyc-dz001 Ethernet1/1 \
--bandwidth 10Gbps
Salida esperada:
Signature: 7pQw2R...truncated...4xKm9
Repite esto para cada interfaz que se usará como endpoint de enlace WAN o DZX. Las interfaces CYOA y DIA se registran por separado en el siguiente paso.
Paso 3.5: Crea la Interfaz CYOA (para dispositivos Edge/Hybrid)
Los DZDs hybrid y edge necesitan dos direcciones IP públicas en las que los usuarios terminan sus túneles GRE. Los usuarios pueden conectarse vía unicast, multicast, o ambos, y qué IP sirve para qué propósito rota por usuario.
Ambas IPs deben registrarse con --user-tunnel-endpoint true, ya sea en una interfaz física o un loopback. Esto incluye la IP que proporcionaste al momento de crear el dispositivo, esa IP aún necesita ser registrada explícitamente aquí.
Si tienes restricciones de IP, puedes usar el primer /32 de tu prefijo DZ como una de las dos IPs.
CYOA y DIA
| Tipo | Flag | Propósito |
|---|---|---|
| DIA | --interface-dia dia |
Marca el puerto como acceso directo a internet |
| CYOA | --interface-cyoa <subtype> |
Declara cómo los usuarios conectan túneles GRE a tu dispositivo |
La flag CYOA siempre se establece en una interfaz física (puerto Ethernet o canal de puertos). Nunca en un loopback.
| Subtipo CYOA | Cuándo usarlo |
|---|---|
gre-over-dia |
Los usuarios se conectan a través de internet público. El más común. |
gre-over-private-peering |
Los usuarios se conectan vía una conexión cruzada directa o circuito privado |
gre-over-public-peering |
Los usuarios hacen peering contigo en un Internet Exchange (IX) |
gre-over-fabric |
Los usuarios están co-ubicados y se conectan a través de un fabric local |
gre-over-cable |
Conexión por cable directa a un único usuario dedicado |
Escenario A: Interfaz física única
Un único enlace ascendente físico al ISP. Ethernet1/1 es la interfaz CYOA y DIA y lleva una de las dos IPs públicas. Loopback100 lleva la segunda IP pública.
flowchart LR
USERS(["Usuarios Finales"])
subgraph DZD["DZD"]
E1["Eth1/1
203.0.113.1/30
CYOA · DIA · endpoint de túnel de usuario"]
LO["Loopback100
198.51.100.1/32\n endpoint de túnel de usuario"]
E1 --- LO
end
ISP["Router ISP
203.0.113.2/30"]
ISP -- "10GbE" --- E1
USERS -. "Túneles GRE" .-> E1
USERS -. "Túneles GRE" .-> LO
| Interfaz | --interface-cyoa |
--interface-dia |
--ip-net |
--bandwidth |
--cir |
--routing-mode |
--user-tunnel-endpoint |
|---|---|---|---|---|---|---|---|
| Ethernet1/1 | gre-over-dia |
dia |
IP/subred asignada por el contribuidor | velocidad del puerto | tasa comprometida | bgp o static |
true |
| Loopback100 | — | — | tu /32 público | 0bps |
— | — | true |
Ejemplo de comandos a ejecutar basado en el Escenario A:
doublezero device interface create mydzd-nyc01 Ethernet1/1 \
--interface-cyoa gre-over-dia \
--interface-dia dia \
--ip-net 203.0.113.1/30 \
--bandwidth 10Gbps \
--cir 1Gbps \
--routing-mode bgp \
--user-tunnel-endpoint true
doublezero device interface create mydzd-nyc01 Loopback100 \
--ip-net 198.51.100.1/32 \
--bandwidth 0bps \
--user-tunnel-endpoint true
Escenario B: Canal de puertos (LAG)
El DZD se conecta al dispositivo upstream mediante un canal de puertos con una IP. El canal de puertos lleva una IP pública y es el endpoint CYOA. Loopback100 lleva la segunda IP pública.
flowchart LR
USERS(["Usuarios Finales"])
subgraph SW["Router / Switch Upstream"]
SWPC(["bond0
203.0.113.2/30"])
end
subgraph DZD["DZD"]
subgraph PC["Port-Channel1 · 203.0.113.1/30 · CYOA · DIA · endpoint de túnel de usuario"]
E1["Eth1/1"]
E2["Eth2/1"]
end
LO["Loopback100
198.51.100.1/32\n endpoint de túnel de usuario"]
PC --- LO
end
SWPC -- "2x 10GbE" --- PC
USERS -. "Túneles GRE" .-> PC
USERS -. "Túneles GRE" .-> LO
| Interfaz | --interface-cyoa |
--interface-dia |
--ip-net |
--bandwidth |
--cir |
--routing-mode |
--user-tunnel-endpoint |
|---|---|---|---|---|---|---|---|
| Port-Channel1 | gre-over-dia |
dia |
IP/subred asignada por el contribuidor | velocidad LAG combinada | tasa comprometida | bgp o static |
true |
| Loopback100 | — | — | tu /32 público | 0bps |
— | — | true |
Ejemplo de comandos a ejecutar basado en el Escenario B:
doublezero device interface create mydzd-fra01 Port-Channel1 \
--interface-cyoa gre-over-dia \
--interface-dia dia \
--ip-net 203.0.113.1/30 \
--bandwidth 20Gbps \
--cir 2Gbps \
--routing-mode bgp \
--user-tunnel-endpoint true
doublezero device interface create mydzd-fra01 Loopback100 \
--ip-net 198.51.100.1/32 \
--bandwidth 0bps \
--user-tunnel-endpoint true
Escenario C: Enlaces ascendentes físicos duales a routers separados
Cada interfaz física se conecta a un router upstream diferente. Las dos IPs públicas residen en Loopback100 y Loopback101, ambas registradas como endpoints de túnel de usuario.
flowchart LR
USERS(["Usuarios Finales"])
RA["Router A
203.0.113.2/30"]
RB["Router B
203.0.113.6/30"]
subgraph DZD["DZD"]
E1["Eth1/1
203.0.113.1/30
CYOA · DIA"]
E2["Eth2/1
203.0.113.5/30
CYOA · DIA"]
LO0["Loopback100
198.51.100.1/32\n endpoint de túnel de usuario"]
LO1["Loopback101
198.51.100.2/32\n endpoint de túnel de usuario"]
E1 --> LO0
E2 --> LO1
end
RA -- "10GbE" --- E1
RB -- "10GbE" --- E2
USERS -. "Túneles GRE" .-> LO0
USERS -. "Túneles GRE" .-> LO1
| Interfaz | --interface-cyoa |
--interface-dia |
--ip-net |
--bandwidth |
--cir |
--routing-mode |
--user-tunnel-endpoint |
|---|---|---|---|---|---|---|---|
| Ethernet1/1 | gre-over-dia |
dia |
IP/subred asignada por el contribuidor | velocidad del puerto | tasa comprometida | bgp o static |
— |
| Ethernet2/1 | gre-over-dia |
dia |
IP/subred asignada por el contribuidor | velocidad del puerto | tasa comprometida | bgp o static |
— |
| Loopback100 | — | — | tu /32 público | 0bps |
— | — | true |
| Loopback101 | — | — | tu /32 público | 0bps |
— | — | true |
Ejemplo de comandos a ejecutar basado en el Escenario C:
doublezero device interface create mydzd-ams01 Ethernet1/1 \
--interface-cyoa gre-over-dia \
--interface-dia dia \
--ip-net 203.0.113.1/30 \
--bandwidth 10Gbps \
--cir 1Gbps \
--routing-mode bgp
doublezero device interface create mydzd-ams01 Ethernet2/1 \
--interface-cyoa gre-over-dia \
--interface-dia dia \
--ip-net 203.0.113.5/30 \
--bandwidth 10Gbps \
--cir 1Gbps \
--routing-mode bgp
doublezero device interface create mydzd-ams01 Loopback100 \
--ip-net 198.51.100.1/32 \
--bandwidth 0bps \
--user-tunnel-endpoint true
doublezero device interface create mydzd-ams01 Loopback101 \
--ip-net 198.51.100.2/32 \
--bandwidth 0bps \
--user-tunnel-endpoint true
Paso 3.6: Verifica Tu Dispositivo
doublezero device list
Salida de ejemplo:
account | code | contributor | location | exchange | device_type | public_ip | dz_prefixes | users | max_users | status | health | mgmt_vrf | owner
7xKm9pQw2R4vHt3... | nyc-dz001 | acme | EQX-NY5 | nyc | hybrid | 203.0.113.10 | 198.51.100.0/28 | 0 | 14 | activated | pending | | 5FMtd5Woq5XAAg54...
Tu dispositivo debería aparecer con estado activated.
Fase 4: Establecimiento de Enlaces e Instalación de Agentes
Los enlaces conectan tu dispositivo al resto de la red DoubleZero.
Entendiendo los Enlaces
flowchart LR
subgraph "Tu Red"
D1[Tu DZD 1<br/>NYC]
D2[Tu DZD 2<br/>LAX]
end
subgraph "Otro Contribuidor"
O1[Su DZD<br/>NYC]
end
D1 ---|Enlace WAN<br/>Mismo contribuidor| D2
D1 ---|Enlace DZX<br/>Contribuidores diferentes| O1
| Tipo de Enlace | Conecta | Aceptación |
|---|---|---|
| Enlace WAN | Dos de TUS dispositivos | Automática (eres dueño de ambos) |
| Enlace DZX | Tu dispositivo con el de OTRO contribuidor | Requiere su aceptación |
Paso 4.1: Crea Enlaces WAN (si tienes múltiples dispositivos)
Los enlaces WAN conectan tus propios dispositivos:
doublezero link create wan \
--code <CÓDIGO_ENLACE> \
--contributor <TU_CONTRIBUIDOR> \
--side-a <CÓDIGO_DISPOSITIVO_1> \
--side-a-interface <INTERFAZ_EN_DISPOSITIVO_1> \
--side-z <CÓDIGO_DISPOSITIVO_2> \
--side-z-interface <INTERFAZ_EN_DISPOSITIVO_2> \
--bandwidth 10000 \
--mtu 9000 \
--delay-ms 20 \
--jitter-ms 1
Ejemplo:
doublezero link create wan \
--code nyc-lax-wan01 \
--contributor acme \
--side-a nyc-dz001 \
--side-a-interface Ethernet3/1 \
--side-z lax-dz001 \
--side-z-interface Ethernet3/1 \
--bandwidth 10000 \
--mtu 9000 \
--delay-ms 65 \
--jitter-ms 1
Salida esperada:
Signature: 5tNm7K...truncated...9pRw2
Paso 4.2: Crea Enlaces DZX
Los enlaces DZX conectan tu dispositivo directamente con el DZD de otro contribuidor:
doublezero link create dzx \
--code <CÓDIGO_DISPOSITIVO_A:CÓDIGO_DISPOSITIVO_Z> \
--contributor <TU_CONTRIBUIDOR> \
--side-a <TU_CÓDIGO_DISPOSITIVO> \
--side-a-interface <TU_INTERFAZ> \
--side-z <CÓDIGO_DISPOSITIVO_OTRO> \
--bandwidth <ANCHO_DE_BANDA en Kbps, Mbps, o Gbps> \
--mtu <MTU> \
--delay-ms <LATENCIA> \
--jitter-ms <JITTER>
Salida esperada:
Signature: 8mKp3W...truncated...2nRx7
Después de crear un enlace DZX, el otro contribuidor debe aceptarlo:
# El OTRO contribuidor ejecuta esto
doublezero link accept \
--code <CÓDIGO_ENLACE> \
--side-z-interface <SU_INTERFAZ>
Salida esperada (para el contribuidor que acepta):
Signature: 6vQt9L...truncated...3wPm4
Paso 4.3: Verifica los Enlaces
doublezero link list
Salida de ejemplo:
account | code | contributor | side_a_name | side_a_iface_name | side_z_name | side_z_iface_name | link_type | bandwidth | mtu | delay_ms | jitter_ms | delay_override_ms | tunnel_id | tunnel_net | status | health | owner
8vkYpXaBW8RuknJq... | nyc-dz001:lax-dz001 | acme | nyc-dz001 | Ethernet3/1 | lax-dz001 | Ethernet3/1 | WAN | 10Gbps | 9000 | 65.00ms | 1.00ms | 0.00ms | 42 | 172.16.0.84/31 | activated | pending | 5FMtd5Woq5XAAg54...
Los enlaces deberían mostrar estado activated una vez que ambos lados estén configurados.
Instalación de Agentes
Dos agentes de software se ejecutan en tu DZD:
flowchart TB
subgraph "Tu DZD"
CA[Config Agent]
TA[Telemetry Agent]
HW[Hardware/Software del Switch]
end
CA -->|Consulta configuración| CTRL[Servicio del Controlador]
CA -->|Aplica configuración| HW
HW -->|Métricas| TA
TA -->|Envía a la cadena| BC[DoubleZero Ledger]
| Agente | Qué Hace |
|---|---|
| Config Agent | Obtiene la configuración del controlador, la aplica a tu switch |
| Telemetry Agent | Mide latencia/pérdida hacia otros dispositivos, reporta métricas en la cadena |
Paso 4.4: Instala el Config Agent
Habilita la API en tu switch
Agrega a la configuración de EOS:
management api eos-sdk-rpc
transport grpc eapilocal
localhost loopback vrf default
service all
no disabled
Nota sobre VRF
Reemplaza default con el nombre de tu VRF de gestión si es diferente (por ejemplo, management).
Descarga e instala el agente
# Entra a bash en el switch
switch# bash
$ sudo bash
# cd /mnt/flash
# wget AGENT_DOWNLOAD_URL
# exit
$ exit
# Instala como extensión de EOS
switch# copy flash:AGENT_FILENAME extension:
switch# extension AGENT_FILENAME
switch# copy installed-extensions boot-extensions
Verifica la extensión
switch# show extensions
El estado debería ser "A, I, B":
Name Version/Release Status Extension
------------------------------------------- ------------------- ---------- ---------
AGENT_FILENAME MAINNET_CLIENT_VERSION/1 A, I, B 1
A: available | NA: not available | I: installed | F: forced | B: install at boot
Configura e inicia el agente
Agrega a la configuración de EOS:
daemon doublezero-agent
exec /usr/local/bin/doublezero-agent -pubkey <PUBKEY_DE_TU_DISPOSITIVO> -controller <IP_controlador>:<puerto_controlador>
no shut
IP y puerto del controlador
La IP y el puerto del controlador se pueden encontrar en el repositorio de contribuidores al que se te dio acceso en el Paso 2.5.
Nota sobre VRF
Si tu VRF de gestión no es default (es decir, el namespace no es ns-default), prefija el comando exec con exec /sbin/ip netns exec ns-<VRF>. Por ejemplo, si tu VRF es management:
daemon doublezero-agent
exec /sbin/ip netns exec ns-management /usr/local/bin/doublezero-agent -pubkey <PUBKEY_DE_TU_DISPOSITIVO>
no shut
Obtén la pubkey de tu dispositivo de doublezero device list (la columna account).
Verifica que está ejecutándose
switch# show agent doublezero-agent logs
Deberías ver "Starting doublezero-agent" y conexiones exitosas al controlador.
Paso 4.5: Instala el Telemetry Agent
Copia la clave del publicador de métricas a tu dispositivo
scp ~/.config/doublezero/metrics-publisher.json <IP_DEL_SWITCH>:/mnt/flash/metrics-publisher-keypair.json
Registra el publicador de métricas en la cadena
doublezero device update \
--pubkey <CUENTA_DEL_DISPOSITIVO> \
--metrics-publisher <PUBKEY_DEL_PUBLICADOR_DE_MÉTRICAS>
Obtén la pubkey de tu archivo metrics-publisher.json.
Descarga e instala el agente
switch# bash
$ sudo bash
# cd /mnt/flash
# wget TELEMETRY_DOWNLOAD_URL
# exit
$ exit
# Instala como extensión de EOS
switch# copy flash:TELEMETRY_FILENAME extension:
switch# extension TELEMETRY_FILENAME
switch# copy installed-extensions boot-extensions
Verifica la extensión
switch# show extensions
El estado debería ser "A, I, B":
Name Version/Release Status Extension
------------------------------------------- ------------------- ---------- ---------
TELEMETRY_FILENAME MAINNET_CLIENT_VERSION/1 A, I, B 1
A: available | NA: not available | I: installed | F: forced | B: install at boot
Configura e inicia el agente
Agrega a la configuración de EOS:
daemon doublezero-telemetry
exec /usr/local/bin/doublezero-telemetry --local-device-pubkey <CUENTA_DEL_DISPOSITIVO> --env mainnet --keypair /mnt/flash/metrics-publisher-keypair.json
no shut
Nota sobre VRF
Si tu VRF de gestión no es default (es decir, el namespace no es ns-default), agrega --management-namespace ns-<VRF> al comando exec. Por ejemplo, si tu VRF es management:
daemon doublezero-telemetry
exec /usr/local/bin/doublezero-telemetry --management-namespace ns-management --local-device-pubkey <CUENTA_DEL_DISPOSITIVO> --env mainnet --keypair /mnt/flash/metrics-publisher-keypair.json
no shut
Verifica que está ejecutándose
switch# show agent doublezero-telemetry logs
Deberías ver "Starting telemetry collector" y "Starting submission loop".
Fase 5: Periodo de Prueba del Enlace
Todos los enlaces nuevos deben pasar un periodo de prueba antes de transportar tráfico
Los enlaces nuevos deben estar drenados durante al menos 24 horas antes de ser activados para tráfico de producción. Este requisito de periodo de prueba está definido en RFC12: Network Provisioning, que especifica ~200,000 slots del DZ Ledger (~20 horas) de métricas limpias antes de que un enlace esté listo para servicio.
Con los agentes instalados y ejecutándose, monitorea tus enlaces en metrics.doublezero.xyz durante al menos 24 horas consecutivas:
- Panel "DoubleZero Device-Link Latencies" — verifica cero pérdida de paquetes en el enlace a lo largo del tiempo
- Panel "DoubleZero Network Metrics" — verifica cero errores en tus enlaces
Solo desdrena el enlace una vez que el periodo de prueba muestre un enlace limpio con cero pérdidas y cero errores.
Fase 6: Verificación y Activación
Revisa esta lista de verificación para confirmar que todo funciona.
Tu dispositivo comienza bloqueado (max_users = 0)
Cuando se crea un dispositivo, max_users se establece en 0 por defecto. Esto significa que ningún usuario puede conectarse a él todavía. Esto es intencional — debes verificar que todo funcione antes de aceptar tráfico de usuarios.
Antes de establecer max_users por encima de 0, debes:
- Confirmar que todos los enlaces han completado su periodo de prueba de 24 horas con cero pérdidas/errores en metrics.doublezero.xyz
- Coordinar con DZ/Malbec Labs para ejecutar una prueba de conectividad:
- ¿Puede un usuario de prueba conectarse a tu dispositivo?
- ¿El usuario recibe rutas a través de la red DZ?
- ¿Puede el usuario enrutar tráfico a través de la red DZ de extremo a extremo?
- Solo después de que DZ/ML confirme que las pruebas pasan, establece max_users en 96:
doublezero device update --pubkey <CUENTA_DEL_DISPOSITIVO> --max-users 96
Verificaciones del Dispositivo
# Tu dispositivo debería aparecer con estado "activated"
doublezero device list | grep <TU_CÓDIGO_DE_DISPOSITIVO>
Salida esperada:
7xKm9pQw2R4vHt3... | nyc-dz001 | acme | EQX-NY5 | nyc | hybrid | 203.0.113.10 | 198.51.100.0/28 | 0 | 14 | activated | pending | | 5FMtd5Woq5XAAg54...
# Tus interfaces deberían estar listadas
doublezero device interface list | grep <TU_CÓDIGO_DE_DISPOSITIVO>
Salida esperada:
nyc-dz001 | Loopback255 | loopback | vpnv4 | none | none | 0 | 0 | 1500 | static | 0 | 172.16.1.91/32 | 56 | false | activated
nyc-dz001 | Loopback256 | loopback | ipv4 | none | none | 0 | 0 | 1500 | static | 0 | 172.16.1.100/32 | 0 | false | activated
nyc-dz001 | Ethernet1/1 | physical | none | none | none | 0 | 0 | 1500 | static | 0 | | 0 | false | activated
Verificaciones de Enlaces
# Los enlaces deberían mostrar estado "activated"
doublezero link list | grep <TU_CÓDIGO_DE_DISPOSITIVO>
Salida esperada:
8vkYpXaBW8RuknJq... | nyc-lax-wan01 | acme | nyc-dz001 | Ethernet3/1 | lax-dz001 | Ethernet3/1 | WAN | 10Gbps | 9000 | 65.00ms | 1.00ms | 0.00ms | 42 | 172.16.0.84/31 | activated | pending | 5FMtd5Woq5XAAg54...
Verificaciones de Agentes
En el switch:
# El Config Agent debería mostrar obtenciones exitosas de configuración
switch# show agent doublezero-agent logs | tail -20
# El Telemetry Agent debería mostrar envíos exitosos
switch# show agent doublezero-telemetry logs | tail -20
Diagrama de Verificación Final
flowchart TB
subgraph "Lista de Verificación"
D[Estado del Dispositivo: ¿activado?]
I[Interfaces: ¿registradas?]
L[Enlaces: ¿activados?]
CA[Config Agent: ¿obteniendo config?]
TA[Telemetry Agent: ¿enviando métricas?]
end
D --> PASS
I --> PASS
L --> PASS
CA --> PASS
TA --> PASS
PASS[Todas las Verificaciones Pasan] --> NOTIFY[Notifica a DZF/Malbec Labs<br/>¡Estás técnicamente listo!]
Solución de Problemas
La creación del dispositivo falla
- Verifica que tu clave de servicio esté autorizada (
doublezero contributor list) - Comprueba que los códigos de ubicación e intercambio sean válidos
- Asegúrate de que el prefijo DZ sea un rango de IP público válido
El enlace está atascado en estado "requested"
- Los enlaces DZX requieren aceptación por parte del otro contribuidor
- Contáctalos para que ejecuten
doublezero link accept
El Config Agent no se conecta
- Verifica que la red de gestión tenga acceso a internet
- Comprueba que la configuración de VRF coincida con tu configuración
- Asegúrate de que la pubkey del dispositivo sea correcta
El Telemetry Agent no envía datos
- Verifica que la clave del publicador de métricas esté registrada en la cadena
- Comprueba que el archivo del par de claves exista en el switch
- Asegúrate de que la pubkey de la cuenta del dispositivo sea correcta
Próximos Pasos
- Revisa la Guía de Operaciones para actualizaciones de agentes y gestión de enlaces
- Consulta el Glosario para definiciones de términos
- Contacta a DZF/Malbec Labs si encuentras problemas