
Hat
译者
⚠️ 注意
如果您发现了错误,欢迎 参与贡献。
💡 摘要 (Powered by OpenAI)
本文是 BIRD 用户指南的第六章第八节,介绍了 BIRD 的 Babel 协议,包括其距离向量防环机制、双栈支持、区间类型配置、RTT 度量和 MAC 认证,以便您更好地理解相关内容。
Babel 协议 (RFC 8966) 是一种防环的距离向量路由协议,在普通有线网络和无线 mesh 网络中均表现出良好的鲁棒性和效率。
Babel 在概念上运行非常简洁,使用默认配置即可"开箱即用",但也可以进行一些配置(且在某些场景下是可取的)。
Babel 协议是双栈的——即可以通过同一 IPv6 传输同时承载 IPv4 和 IPv6 路由。发送和接收 Babel 数据包仅需一个链路本地 IPv6 地址。
BIRD 实现了 IPv6 源特定路由(SSR 或 SADR)扩展,但必须相应配置才能使用。启用 SADR 的 Babel 路由器可以与未启用 SADR 的 Babel 路由器互操作,但后者会忽略带有特定(非零)源前缀的路由。
Babel 协议同时支持 IPv4 和 IPv6 通道,两者可同时配置。也可配置 IPv6 SADR 通道代替常规 IPv6 通道,以启用 SADR 支持。
Babel 除所有协议通用的选项外不提供全局配置选项,但支持以下按接口配置选项:
protocol babel [<名称>] {
ipv4 { <通道配置> };
ipv6 [sadr] { <通道配置> };
randomize router id <开关>;
interface <接口模式> {
type wired|wireless|tunnel;
rxcost <数值>;
limit <数值>;
hello interval <时间>;
update interval <时间>;
port <数值>;
tx class|dscp <数值>;
tx priority <数值>;
rx buffer <数值>;
tx length <数值>;
check link <开关>;
next hop ipv4 <地址>;
next hop ipv6 <地址>;
next hop prefer native|ipv6;
extended next hop <开关>;
rtt cost <数值>;
rtt min <时间>;
rtt max <时间>;
rtt decay <数值>;
send timestamps <开关>;
authentication none|mac [permissive];
password "<文本>";
password "<文本>" {
id <数值>;
generate from "<日期>";
generate to "<日期>";
accept from "<日期>";
accept to "<日期>";
from "<日期>";
to "<日期>";
algorithm ( hmac sha1 | hmac sha256 | hmac sha384 |
hmac sha512 | blake2s128 | blake2s256 | blake2b256 | blake2b512 );
};
};
}ipv4 | ipv6 [sadr] 通道配置
支持的通道为 IPv4、IPv6 和 IPv6 SADR。
randomize router id 开关
若启用,BIRD 会在每次协议实例启动时随机化其路由器 ID 的高 32 位。如果 Babel 节点重启,它会丢失序列号,这可能导致其路由被对等体拒绝,直到网络中其他节点清除掉状态(可能需要数分钟)。启用此选项使 BIRD 每次启动时选择一个随机路由器 ID,避免了此问题,但代价是网络中路由器 ID 不稳定。默认值:no
type wired|wireless|tunnel
指定接口类型:
limit 选项描述96默认值:wired
rxcost 数值
指定接口的名义 RX 开销。有效的邻居路由度量开销将根据接口 type 决定的机制由此值计算得出。
注意:与其他路由协议(如 RIP 或 OSPF)不同,rxcost 指定的是 RX 开销而非 TX 开销,因此它主要影响邻居的路由选择,而非本地的路由选择。默认值:有线接口 96,无线接口 256
limit 数值
BIRD 跟踪来自每个邻居的 Hello 消息以确定邻居可达性。对于有线接口,此选项指定最近 16 个 Hello 中至少需要正确接收多少个才认为邻居处于 Up 状态。无线接口忽略此选项,采用渐进式开销下降而非硬性限制。默认值:12
hello interval 时间 s|ms
此接口上发送周期性 Hello 消息的间隔,带时间单位。默认值:4 s
update interval 时间 s|ms
发送周期性(完整)更新的间隔,带时间单位。默认值:Hello 间隔的 4 倍
next hop ipv4 地址
设置在此接口上通告(IPv4)路由时所宣告的 IPv4 下一跳地址。默认值:接口的首选 IPv4 地址
next hop ipv6 地址
设置在此接口上通告路由时所宣告的 IPv6 下一跳地址。若未设置,使用与 Babel 数据包源地址相同的链路本地地址。正常情况下无需设置此选项。
next hop prefer native|ipv6
默认情况下,BIRD 偏好使用 IPv4 下一跳地址通告 IPv4 路由,仅在接口上缺少 IPv4 地址时使用 IPv6 下一跳。设为 ipv6 时,BIRD 即使接口上有 IPv4 地址也会使用 IPv6 下一跳通告 IPv4 路由(需启用 extended next hop 选项)。默认值:native
extended next hop 开关
指定 BIRD 是否允许使用 IPv6 下一跳承载 IPv4 路由(如 RFC 9229 所述)。注意:当 IPv4 和 IPv6 下一跳均可用时,由 next hop prefer 选项控制宣告哪一个。默认值:yes
rtt cost 数值
基于到每个邻居的实测 RTT 应用于其所有路由的额外开销。若设置了此值,生成的 Babel Hello 和 IHU 消息中将包含时间戳,且(若邻居也启用了时间戳)将计算到每个邻居的 RTT。
当邻居的 RTT 超过接口上配置的 rtt min 值时,将施加额外开销,额外开销从 0 到该选项配置的 RTT 开销值线性缩放;若邻居 RTT 达到 rtt max 选项配置的值(及超过此值),则应用全额开销。默认值:0(禁用),隧道接口除外(为 96)
rtt min 时间 s|ms RTT 开销开始生效的最小 RTT 阈值(从零线性缩放至全额开销)。默认值:10 ms
rtt max 时间 s|ms 全额 RTT 开销生效的最大 RTT 阈值。默认值:120 ms
rtt decay 数值 用于计算每个邻居 RTT 采样指数移动平均的衰减因子,单位为 1/256。值越大,旧 RTT 采样被丢弃的速度越快。取值范围 1-256。默认值:42
send timestamps 开关 控制是否在此接口上发送用于 RTT 计算的时间戳。发送时间戳使对等体可以计算到本节点的 RTT,即使未应用 RTT 开销到路由度量。默认值:yes
port 数值 选择操作的 UDP 端口。默认使用 Babel RFC 规定的端口 6696。
tx class|dscp|priority 数值 指定出站 Babel 数据包的 ToS/DiffServ/流量类别/优先级。详见 tx class 通用选项。
rx buffer 数值 指定用于数据包处理的缓冲区大小。应大于接收数据包的最大尺寸。默认值为接口 MTU,且会钳制到最小值 512 字节 + IP 包头开销。
tx length 数值 指定生成的 Babel 数据包的最大长度。为避免 IP 分片,不应超过接口 MTU 值。默认值为接口 MTU,且会钳制到最小值 512 字节 + IP 包头开销。
check link 开关 若启用,硬件链路状态(由操作系统报告)将被纳入考量。当链路消失时,邻居立即被视为不可达。默认值:yes
authentication none|mac [permissive]
选择使用的认证方式。
none:数据包完全不认证mac:按 RFC 8967 所述执行 MAC 认证。选中 MAC 认证后,可使用 permissive 后缀选择一种操作模式:出站数据包仍被签名,但认证失败的入站数据包也会被接受。这对于跨网络增量部署 MAC 认证非常有用。若选中 MAC 认证,必须使用 password 配置选项指定密钥。默认值:none
password "文本" 指定用于认证的密码。详见 password 通用选项。Babel 协议仅接受基于 HMAC 的算法或 Blake 系列算法,且密码字符串长度必须与所选算法使用的密钥大小匹配。
Babel 仅定义一个属性:路由的内部 Babel 度量值 babel_metric,范围为 1 至无穷大 (65535)。
protocol babel {
interface "eth*" {
type wired;
};
interface "wlan0", "wlan1" {
type wireless;
hello interval 1;
rxcost 512;
};
interface "tap0";
# 匹配 babeld 的默认行为:重分发本地接口上配置的所有地址
# 以及重分发从其他 babel 对等体收到的所有路由
ipv4 {
export where (source = RTS_DEVICE) || (source = RTS_BABEL);
};
ipv6 {
export where (source = RTS_DEVICE) || (source = RTS_BABEL);
};
}当撤销一条路由时,Babel 会根据 RFC 要求在短时间内生成一条不可达路由。此行为与其他协议的交互尚未经过充分测试,可能出现异常情况。

译者
原文作者: <Ondrej Filip>, <Martin Mares>, <Maria Matejka>, <Ondrej Zajicek>
原文链接: https://bird.network.cz/?get_doc&v=20&f=bird-6.html#ss6.8
原文标题: 6.8 Babel
遵循协议: CC BY-NC-SA 4.0
译者: hat
翻译时间: 2026-05-01
更新时间: 2026-05-01
本文链接: https://bird.xmsl.dev/docs/user-guide/6-8-babel.html