设备配置指南
本指南将引导您从头到尾完成 DoubleZero 设备 (DZD) 的配置。每个阶段对应入网检查清单。
各部分如何协同工作
本指南将引导您在链上注册基础设施,以便 DoubleZero 网络能够通过它路由流量。设备注册得越完整,它对网络的作用就越大。完整的链上设备表示能够实现更好的故障排除、容量规划,并允许控制器做出更明智的决策。随着时间推移,目标是让控制器承担更多的配置职责。
关键概念
接口
DZD 上的接口有不同形式:以太网端口、端口通道(由多个以太网端口组成的 LAG)和环回接口。每个在网络中发挥作用的接口都需要在链上注册并带有适当的标志,以便协议知道它的功能。
以太网端口和端口通道可以承担以下角色:
| 标志 | 含义 |
|---|---|
--interface-dia dia |
将该接口标记为直接互联网接入上行链路 |
--interface-cyoa <subtype> |
声明用户如何通过该接口建立 GRE 隧道(例如通过公共互联网、通过私有对等链路) |
--user-tunnel-endpoint true |
该接口承载用户终止 GRE 隧道的公共 IP |
用于 WAN 或 DZX 链路的接口不带特定标志,它们在注册时附带带宽信息,然后在创建链路时被引用。
环回接口有多种用途:
| 环回接口 | 含义 |
|---|---|
| Loopback100 / 101 | 承载用户终止 GRE 隧道的公共 IP。使用 --user-tunnel-endpoint true 注册。 |
Loopback255 (vpnv4) |
注册后控制器可以分配用于 BGP 路由器 ID、VPN-IPv4 对等(单播)、IS-IS 身份和段路由的 IP |
Loopback256 (ipv4) |
注册后控制器可以分配用于 IPv4 BGP 对等(多播)和 MSDP 会话的 IP |
链路
链路与接口分开注册,接口必须先在链上存在,然后链路才能引用它们。当您创建 WAN 或 DZX 链路时,您需要指定一个已注册的接口作为链路的物理端点。并非所有接口都关联到链路:DIA、CYOA 和环回接口不连接到链路。
| 术语 | 含义 |
|---|---|
| WAN 链路 | 您自己的两个 DZD 之间的链路 |
| DZX 链路 | 您的 DZD 与另一个贡献者的 DZD 之间的链路 |
架构概览
flowchart TB
subgraph Onchain
SC[DoubleZero 账本]
end
subgraph Your Infrastructure
MGMT[管理服务器<br/>DoubleZero CLI]
subgraph DZD[您的 DZD]
CYOA["DIA · CYOA 接口<br/>(面向用户的上行链路)"]
WAN_INTF["WAN 链路接口"]
DZX_INTF["DZX 链路接口"]
LO100["Loopback100/101<br/>(用户隧道端点)"]
end
DZD2[您的其他 DZD]
end
subgraph Other Contributor
OtherDZD[对方的 DZD]
end
USERS["用户"]
MGMT -.->|注册设备、<br/>链路、接口| SC
WAN_INTF ---|WAN 链路| DZD2
DZX_INTF ---|DZX 链路| OtherDZD
USERS -.|GRE 隧道|.-> CYOA
CYOA ---|路由到| LO100
阶段 1:前提条件
在配置设备之前,您需要完成物理硬件设置并分配一些 IP 地址。
所需条件
| 要求 | 原因 |
|---|---|
| DZD 硬件 | Arista 7280CR3A 交换机(参见硬件规格) |
| 机架空间 | 4U,具备适当的气流通道 |
| 电源 | 冗余供电,建议约 4KW |
| 管理访问 | 通过 SSH/控制台访问配置交换机 |
| 互联网连接 | 用于发布指标和从控制器获取配置 |
| 公共 IPv4 地址块 | DZ 前缀池最少需要 /29(见下文) |
安装 DoubleZero CLI
DoubleZero CLI (doublezero) 在整个配置过程中用于注册设备、创建链路和管理您的贡献。它应该安装在管理服务器或虚拟机上——而不是 DZD 交换机本身。交换机只运行配置代理和遥测代理(在阶段 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
验证守护进程正在运行:
sudo systemctl status doublezerod
了解您的 DZ 前缀
您的 DZ 前缀是一组由 DoubleZero 协议管理用于 IP 分配的公共 IP 地址块。
flowchart LR
subgraph "您的 /29 地址块(8 个 IP)"
IP1["第一个 IP<br/>为您的设备保留"]
IP2["IP 2"]
IP3["IP 3"]
IP4["..."]
IP8["IP 8"]
end
IP1 -->|分配给| LO[Loopback100<br/>在您的 DZD 上]
IP2 -->|分配给| U1[用户 1]
IP3 -->|分配给| U2[用户 2]
DZ 前缀的使用方式:
- 第一个 IP:为您的设备保留(分配给 Loopback100 接口)
- 其余 IP:分配给连接到您的 DZD 的特定用户类型:
IBRLWithAllocatedIP用户EdgeFiltering用户(未来用例)
- IBRL 用户:不消耗此池中的地址(他们使用自己的公共 IP)
DZ 前缀规则
您不能将这些地址用于:
- 您自己的网络设备
- DIA 接口上的点对点链路
- 管理接口
- DZ 协议之外的任何基础设施
要求:
- 必须是全球可路由(公共) IPv4 地址
- 私有 IP 范围(10.x、172.16-31.x、192.168.x)将被智能合约拒绝
- 最小规模:/29(8 个地址),更大的前缀更好(如 /28、/27)
- 整个地址块必须可用——不要预先分配任何地址
如果您需要为自己的设备分配地址(DIA 接口 IP、管理接口等),请使用单独的地址池。
阶段 2:账户设置
在此阶段,您将创建用于在网络上标识您和您的设备的加密密钥。
CLI 运行位置
不要在交换机上安装 CLI
DoubleZero CLI (doublezero) 应安装在管理服务器或虚拟机上,而不是您的 Arista 交换机上。
flowchart LR
subgraph "管理服务器/虚拟机"
CLI[DoubleZero CLI]
KEYS[您的密钥对]
end
subgraph "您的 DZD 交换机"
CA[配置代理]
TA[遥测代理]
end
CLI -->|创建设备、链路| BC[区块链]
CA -->|拉取配置| CTRL[控制器]
TA -->|提交指标| BC
| 安装在管理服务器上 | 安装在交换机上 |
|---|---|
doublezero CLI |
配置代理 |
| 您的服务密钥对 | 遥测代理 |
| 您的指标发布者密钥对 | 指标发布者密钥对(副本) |
什么是密钥?
可以将密钥理解为安全的登录凭据:
- 服务密钥:您的贡献者身份——用于运行 CLI 命令
- 指标发布者密钥:您的设备身份,用于提交遥测数据
两者都是加密密钥对(一个您共享的公钥,一个您保密的私钥)。
flowchart LR
subgraph "您的密钥"
SK[服务密钥<br/>~/.config/solana/id.json]
MK[指标发布者密钥<br/>~/.config/doublezero/metrics-publisher.json]
end
SK -->|用于| CLI[CLI 命令<br/>doublezero device create<br/>doublezero link create]
MK -->|用于| TEL[遥测代理<br/>在链上提交指标]
步骤 2.1:生成服务密钥
这是您与 DoubleZero 交互的主要身份。
doublezero keygen
这将在默认位置创建一个密钥对。输出显示您的公钥——这是您将与 DZF 共享的内容。
步骤 2.2:生成指标发布者密钥
此密钥由遥测代理用于签署指标提交。
doublezero keygen -o ~/.config/doublezero/metrics-publisher.json
步骤 2.3:向 DZF 提交密钥
联系 DoubleZero 基金会或 Malbec Labs 并提供:
- 您的服务密钥公钥
- 您的 GitHub 用户名(用于仓库访问)
他们将:
- 在链上创建您的贡献者账户
- 授予私有贡献者仓库的访问权限
步骤 2.4:验证您的账户
确认后,验证您的贡献者账户是否存在:
doublezero contributor list
您应该在列表中看到您的贡献者代码。
步骤 2.5:访问贡献者仓库
malbeclabs/contributors 仓库包含:
- 基础设备配置
- TCAM 配置文件
- ACL 配置
- 附加设置说明
请按照其中的说明进行设备特定配置。
阶段 3:设备配置
现在您将在区块链上注册您的物理设备并配置其接口。
了解设备类型
边缘(Edge) — 仅接受用户连接
flowchart LR
subgraph EDZD[边缘 DZD]
E_CYOA["DIA · CYOA 接口"]
E_TUN["Loopback100/101
(用户隧道端点)"]
E_DZX["DZX 链路接口"]
E_CYOA --- E_TUN
end
EU["用户"] -.|GRE 隧道|.-> E_CYOA
E_DZX <-->|DZX 链路| ED["DZD(不同贡献者)"]
中转(Transit) — 在设备之间传输流量,没有用户连接
flowchart LR
subgraph TDZD[中转 DZD]
T_WAN["WAN 链路接口"]
T_DZX["DZX 链路接口"]
end
T_WAN <-->|WAN 链路| T2["DZD(同一贡献者)"]
T_DZX <-->|DZX 链路| TD["DZD(不同贡献者)"]
混合(Hybrid) — 用户连接和骨干网,最常见
flowchart LR
subgraph HDZD[混合 DZD]
H_CYOA["DIA · CYOA 接口"]
H_TUN["Loopback100/101
(用户隧道端点)"]
H_WAN["WAN 链路接口"]
H_DZX["DZX 链路接口"]
H_CYOA --- H_TUN
end
HU["用户"] -.|GRE 隧道|.-> H_CYOA
H_WAN <-->|WAN 链路| H2["DZD(同一贡献者)"]
H_DZX <-->|DZX 链路| HD["DZD(不同贡献者)"]
| 类型 | 功能 | 适用场景 |
|---|---|---|
| 边缘(Edge) | 仅接受用户连接 | 单一位置,仅面向用户 |
| 中转(Transit) | 在设备之间传输流量 | 骨干网连接,无用户 |
| 混合(Hybrid) | 同时支持用户连接和骨干网 | 最常见——功能全面 |
步骤 3.1:查找您的位置和交换点
在创建设备之前,查找您的数据中心位置和最近交换点的代码:
# 列出可用位置(数据中心)
doublezero location list
# 列出可用交换点(互联点)
doublezero exchange list
步骤 3.2:在链上创建您的设备
在区块链上注册您的设备:
doublezero device create \
--code <YOUR_DEVICE_CODE> \
--contributor <YOUR_CONTRIBUTOR_CODE> \
--device-type hybrid \
--location <LOCATION_CODE> \
--exchange <EXCHANGE_CODE> \
--public-ip <DEVICE_PUBLIC_IP> \
--dz-prefixes <YOUR_DZ_PREFIX>
示例:
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"
预期输出:
Signature: 4vKz8H...truncated...7xPq2
验证您的设备已创建:
doublezero device list | grep nyc-dz001
参数说明:
| 参数 | 含义 |
|---|---|
--code |
设备的唯一名称(例如 nyc-dz001) |
--contributor |
您的贡献者代码(由 DZF 提供) |
--device-type |
hybrid、transit 或 edge |
--location |
来自 location list 的数据中心代码 |
--exchange |
来自 exchange list 的最近交换点代码 |
--public-ip |
用户通过互联网连接到您设备的公共 IP |
--dz-prefixes |
为用户分配的 IP 地址块 |
步骤 3.3:创建必需的环回接口
每个设备都需要两个用于内部路由的环回接口:
# VPNv4 环回
doublezero device interface create <DEVICE_CODE> Loopback255 --loopback-type vpnv4
# IPv4 环回
doublezero device interface create <DEVICE_CODE> Loopback256 --loopback-type ipv4
预期输出(每个命令):
Signature: 3mNx9K...truncated...8wRt5
步骤 3.4:创建物理接口
注册将用于 WAN 或 DZX 链路的物理接口。这些接口必须先在链上存在,然后才能创建引用它们的链路。在此步骤中,您只需注册接口及其带宽,链路将在后续步骤中创建。
doublezero device interface create <DEVICE_CODE> <INTERFACE_NAME> \
--bandwidth <PORT_SPEED>
示例:
doublezero device interface create nyc-dz001 Ethernet1/1 \
--bandwidth 10Gbps
预期输出:
Signature: 7pQw2R...truncated...4xKm9
对每个将用作 WAN 或 DZX 链路端点的接口重复此操作。CYOA 和 DIA 接口在下一步中单独注册。
步骤 3.5:创建 CYOA 接口(适用于边缘/混合设备)
混合和边缘 DZD 需要两个公共 IP 地址供用户终止 GRE 隧道。用户可以通过单播、多播或两者连接,哪个 IP 用于哪种用途会按用户轮换。
两个 IP 都必须使用 --user-tunnel-endpoint true 注册,可以在物理接口或环回接口上。这包括您在设备创建时提供的 IP——该 IP 仍然需要在此处显式注册。
如果您的 IP 资源有限,可以使用 DZ 前缀的第一个 /32 作为两个 IP 之一。
CYOA 和 DIA
| 类型 | 标志 | 用途 |
|---|---|---|
| DIA | --interface-dia dia |
将端口标记为直接互联网接入 |
| CYOA | --interface-cyoa <subtype> |
声明用户如何通过 GRE 隧道连接到您的设备 |
CYOA 标志始终设置在物理接口(以太网端口或端口通道)上。绝不设置在环回接口上。
| CYOA 子类型 | 适用场景 |
|---|---|
gre-over-dia |
用户通过公共互联网连接。最常见。 |
gre-over-private-peering |
用户通过直连交叉连接或私有线路连接 |
gre-over-public-peering |
用户在互联网交换点 (IX) 与您对等 |
gre-over-fabric |
用户位于同一数据中心,通过本地交换网络连接 |
gre-over-cable |
直连线缆连接到单个专用用户 |
场景 A:单物理接口
到 ISP 的单物理上行链路。Ethernet1/1 是 CYOA 和 DIA 接口,承载两个公共 IP 中的一个。Loopback100 承载第二个公共 IP。
flowchart LR
USERS(["终端用户"])
subgraph DZD["DZD"]
E1["Eth1/1
203.0.113.1/30
CYOA · DIA · 用户隧道端点"]
LO["Loopback100
198.51.100.1/32\n 用户隧道端点"]
E1 --- LO
end
ISP["ISP 路由器
203.0.113.2/30"]
ISP -- "10GbE" --- E1
USERS -. "GRE 隧道" .-> E1
USERS -. "GRE 隧道" .-> LO
| 接口 | --interface-cyoa |
--interface-dia |
--ip-net |
--bandwidth |
--cir |
--routing-mode |
--user-tunnel-endpoint |
|---|---|---|---|---|---|---|---|
| Ethernet1/1 | gre-over-dia |
dia |
贡献者分配的 IP/子网 | 端口速率 | 承诺速率 | bgp 或 static |
true |
| Loopback100 | — | — | 您的公共 /32 | 0bps |
— | — | true |
基于场景 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
场景 B:端口通道 (LAG)
DZD 通过带有 IP 的端口通道连接到上游设备。端口通道承载一个公共 IP 并作为 CYOA 端点。Loopback100 承载第二个公共 IP。
flowchart LR
USERS(["终端用户"])
subgraph SW["上游路由器 / 交换机"]
SWPC(["bond0
203.0.113.2/30"])
end
subgraph DZD["DZD"]
subgraph PC["Port-Channel1 · 203.0.113.1/30 · CYOA · DIA · 用户隧道端点"]
E1["Eth1/1"]
E2["Eth2/1"]
end
LO["Loopback100
198.51.100.1/32\n 用户隧道端点"]
PC --- LO
end
SWPC -- "2x 10GbE" --- PC
USERS -. "GRE 隧道" .-> PC
USERS -. "GRE 隧道" .-> LO
| 接口 | --interface-cyoa |
--interface-dia |
--ip-net |
--bandwidth |
--cir |
--routing-mode |
--user-tunnel-endpoint |
|---|---|---|---|---|---|---|---|
| Port-Channel1 | gre-over-dia |
dia |
贡献者分配的 IP/子网 | LAG 合计速率 | 承诺速率 | bgp 或 static |
true |
| Loopback100 | — | — | 您的公共 /32 | 0bps |
— | — | true |
基于场景 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
场景 C:连接到不同路由器的双物理上行链路
每个物理接口连接到不同的上游路由器。两个公共 IP 分别在 Loopback100 和 Loopback101 上,都注册为用户隧道端点。
flowchart LR
USERS(["终端用户"])
RA["路由器 A
203.0.113.2/30"]
RB["路由器 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 用户隧道端点"]
LO1["Loopback101
198.51.100.2/32\n 用户隧道端点"]
E1 --> LO0
E2 --> LO1
end
RA -- "10GbE" --- E1
RB -- "10GbE" --- E2
USERS -. "GRE 隧道" .-> LO0
USERS -. "GRE 隧道" .-> LO1
| 接口 | --interface-cyoa |
--interface-dia |
--ip-net |
--bandwidth |
--cir |
--routing-mode |
--user-tunnel-endpoint |
|---|---|---|---|---|---|---|---|
| Ethernet1/1 | gre-over-dia |
dia |
贡献者分配的 IP/子网 | 端口速率 | 承诺速率 | bgp 或 static |
— |
| Ethernet2/1 | gre-over-dia |
dia |
贡献者分配的 IP/子网 | 端口速率 | 承诺速率 | bgp 或 static |
— |
| Loopback100 | — | — | 您的公共 /32 | 0bps |
— | — | true |
| Loopback101 | — | — | 您的公共 /32 | 0bps |
— | — | true |
基于场景 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
步骤 3.6:验证您的设备
doublezero device list
示例输出:
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...
您的设备应显示状态为 activated。
阶段 4:链路建立与代理安装
链路将您的设备连接到 DoubleZero 网络的其余部分。
了解链路
flowchart LR
subgraph "您的网络"
D1[您的 DZD 1<br/>NYC]
D2[您的 DZD 2<br/>LAX]
end
subgraph "其他贡献者"
O1[对方的 DZD<br/>NYC]
end
D1 ---|WAN 链路<br/>同一贡献者| D2
D1 ---|DZX 链路<br/>不同贡献者| O1
| 链路类型 | 连接 | 接受方式 |
|---|---|---|
| WAN 链路 | 您的两个设备 | 自动(您拥有两端) |
| DZX 链路 | 您的设备与另一个贡献者的设备 | 需要对方接受 |
步骤 4.1:创建 WAN 链路(如果您有多个设备)
WAN 链路连接您自己的设备:
doublezero link create wan \
--code <LINK_CODE> \
--contributor <YOUR_CONTRIBUTOR> \
--side-a <DEVICE_1_CODE> \
--side-a-interface <INTERFACE_ON_DEVICE_1> \
--side-z <DEVICE_2_CODE> \
--side-z-interface <INTERFACE_ON_DEVICE_2> \
--bandwidth 10000 \
--mtu 9000 \
--delay-ms 20 \
--jitter-ms 1
示例:
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
预期输出:
Signature: 5tNm7K...truncated...9pRw2
步骤 4.2:创建 DZX 链路
DZX 链路将您的设备直接连接到另一个贡献者的 DZD:
doublezero link create dzx \
--code <DEVICE_CODE_A:DEVICE_CODE_Z> \
--contributor <YOUR_CONTRIBUTOR> \
--side-a <YOUR_DEVICE_CODE> \
--side-a-interface <YOUR_INTERFACE> \
--side-z <OTHER_DEVICE_CODE> \
--bandwidth <BANDWIDTH in Kbps, Mbps, or Gbps> \
--mtu <MTU> \
--delay-ms <DELAY> \
--jitter-ms <JITTER>
预期输出:
Signature: 8mKp3W...truncated...2nRx7
创建 DZX 链路后,另一个贡献者必须接受它:
# 另一个贡献者运行此命令
doublezero link accept \
--code <LINK_CODE> \
--side-z-interface <THEIR_INTERFACE>
预期输出(接受方贡献者):
Signature: 6vQt9L...truncated...3wPm4
步骤 4.3:验证链路
doublezero link list
示例输出:
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...
链路在双方都配置完成后应显示状态为 activated。
代理安装
两个软件代理运行在您的 DZD 上:
flowchart TB
subgraph "您的 DZD"
CA[配置代理]
TA[遥测代理]
HW[交换机硬件/软件]
end
CA -->|轮询配置| CTRL[控制器服务]
CA -->|应用配置| HW
HW -->|指标| TA
TA -->|在链上提交| BC[DoubleZero 账本]
| 代理 | 功能 |
|---|---|
| 配置代理 | 从控制器拉取配置,并应用到您的交换机 |
| 遥测代理 | 测量到其他设备的延迟/丢包,在链上报告指标 |
步骤 4.4:安装配置代理
在交换机上启用 API
添加到 EOS 配置中:
management api eos-sdk-rpc
transport grpc eapilocal
localhost loopback vrf default
service all
no disabled
VRF 注意事项
如果不同,请将 default 替换为您的管理 VRF 名称(例如 management)。
下载并安装代理
# 在交换机上进入 bash
switch# bash
$ sudo bash
# cd /mnt/flash
# wget AGENT_DOWNLOAD_URL
# exit
$ exit
# 作为 EOS 扩展安装
switch# copy flash:AGENT_FILENAME extension:
switch# extension AGENT_FILENAME
switch# copy installed-extensions boot-extensions
验证扩展
switch# show extensions
状态应为 "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
配置并启动代理
添加到 EOS 配置中:
daemon doublezero-agent
exec /usr/local/bin/doublezero-agent -pubkey <YOUR_DEVICE_PUBKEY> -controller <controller_IP>:<controller_port>
no shut
控制器 IP 和端口
控制器 IP 和端口可以在步骤 2.5 中您获得访问权限的贡献者仓库中找到。
VRF 注意事项
如果您的管理 VRF 不是 default(即命名空间不是 ns-default),请在 exec 命令前加上 exec /sbin/ip netns exec ns-<VRF>。例如,如果您的 VRF 是 management:
daemon doublezero-agent
exec /sbin/ip netns exec ns-management /usr/local/bin/doublezero-agent -pubkey <YOUR_DEVICE_PUBKEY>
no shut
从 doublezero device list(account 列)获取您的设备公钥。
验证运行状态
switch# show agent doublezero-agent logs
您应该看到 "Starting doublezero-agent" 和成功的控制器连接信息。
步骤 4.5:安装遥测代理
将指标发布者密钥复制到您的设备
scp ~/.config/doublezero/metrics-publisher.json <SWITCH_IP>:/mnt/flash/metrics-publisher-keypair.json
在链上注册指标发布者
doublezero device update \
--pubkey <DEVICE_ACCOUNT> \
--metrics-publisher <METRICS_PUBLISHER_PUBKEY>
从您的 metrics-publisher.json 文件中获取公钥。
下载并安装代理
switch# bash
$ sudo bash
# cd /mnt/flash
# wget TELEMETRY_DOWNLOAD_URL
# exit
$ exit
# 作为 EOS 扩展安装
switch# copy flash:TELEMETRY_FILENAME extension:
switch# extension TELEMETRY_FILENAME
switch# copy installed-extensions boot-extensions
验证扩展
switch# show extensions
状态应为 "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
配置并启动代理
添加到 EOS 配置中:
daemon doublezero-telemetry
exec /usr/local/bin/doublezero-telemetry --local-device-pubkey <DEVICE_ACCOUNT> --env mainnet --keypair /mnt/flash/metrics-publisher-keypair.json
no shut
VRF 注意事项
如果您的管理 VRF 不是 default(即命名空间不是 ns-default),请在 exec 命令中添加 --management-namespace ns-<VRF>。例如,如果您的 VRF 是 management:
daemon doublezero-telemetry
exec /usr/local/bin/doublezero-telemetry --management-namespace ns-management --local-device-pubkey <DEVICE_ACCOUNT> --env mainnet --keypair /mnt/flash/metrics-publisher-keypair.json
no shut
验证运行状态
switch# show agent doublezero-telemetry logs
您应该看到 "Starting telemetry collector" 和 "Starting submission loop"。
阶段 5:链路老化测试
所有新链路在承载流量之前必须经过老化测试
新链路必须排空至少 24 小时才能激活用于生产流量。此老化要求定义在 RFC12: Network Provisioning 中,其规定在链路准备投入使用之前需要约 200,000 个 DZ 账本槽位(约 20 小时)的干净指标。
安装并运行代理后,在 metrics.doublezero.xyz 上监控您的链路至少 24 个连续小时:
- "DoubleZero Device-Link Latencies" 仪表板——验证链路在一段时间内零丢包
- "DoubleZero Network Metrics" 仪表板——验证您的链路上零错误
只有在老化期间显示链路干净、零丢包且零错误后,才能取消链路排空。
阶段 6:验证与激活
逐项检查此清单以确认一切正常工作。
您的设备创建时处于锁定状态(max_users = 0)
设备创建时,max_users 默认设置为 0。这意味着还没有用户可以连接到它。这是有意为之的——您必须在接受用户流量之前验证一切正常工作。
在将 max_users 设置为大于 0 之前,您必须:
- 确认所有链路已在 metrics.doublezero.xyz 上完成24 小时老化测试且零丢包/零错误
- 与 DZ/Malbec Labs 协调进行连接测试:
- 测试用户能否连接到您的设备?
- 用户是否通过 DZ 网络接收到路由?
- 用户能否通过 DZ 网络端到端路由流量?
- 只有在 DZ/ML 确认测试通过后,才将 max_users 设置为 96:
doublezero device update --pubkey <DEVICE_ACCOUNT> --max-users 96
设备检查
# 您的设备应显示状态为 "activated"
doublezero device list | grep <YOUR_DEVICE_CODE>
预期输出:
7xKm9pQw2R4vHt3... | nyc-dz001 | acme | EQX-NY5 | nyc | hybrid | 203.0.113.10 | 198.51.100.0/28 | 0 | 14 | activated | pending | | 5FMtd5Woq5XAAg54...
# 您的接口应被列出
doublezero device interface list | grep <YOUR_DEVICE_CODE>
预期输出:
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
链路检查
# 链路应显示状态为 "activated"
doublezero link list | grep <YOUR_DEVICE_CODE>
预期输出:
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...
代理检查
在交换机上:
# 配置代理应显示成功的配置拉取
switch# show agent doublezero-agent logs | tail -20
# 遥测代理应显示成功的提交
switch# show agent doublezero-telemetry logs | tail -20
最终验证图
flowchart TB
subgraph "验证清单"
D[设备状态:activated?]
I[接口:已注册?]
L[链路:activated?]
CA[配置代理:正在拉取配置?]
TA[遥测代理:正在提交指标?]
end
D --> PASS
I --> PASS
L --> PASS
CA --> PASS
TA --> PASS
PASS[所有检查通过] --> NOTIFY[通知 DZF/Malbec Labs<br/>您已达到技术就绪状态!]
故障排除
设备创建失败
- 验证您的服务密钥已获授权(
doublezero contributor list) - 检查位置和交换点代码是否有效
- 确保 DZ 前缀是有效的公共 IP 范围
链路停留在 "requested" 状态
- DZX 链路需要另一个贡献者的接受
- 联系对方运行
doublezero link accept
配置代理无法连接
- 验证管理网络具有互联网访问
- 检查 VRF 配置是否与您的设置匹配
- 确保设备公钥正确
遥测代理未提交
- 验证指标发布者密钥已在链上注册
- 检查密钥对文件是否存在于交换机上
- 确保设备账户公钥正确