
Hat
译者
⚠️ 注意
如果您发现了错误,欢迎 参与贡献。
💡 摘要 (Powered by OpenAI)
本文是 BIRD 用户指南的第六章第十一节,介绍了 BIRD 的管道协议 (Pipe),包括其作为两表桥梁的工作方式、配置语法和典型应用场景,以便您更好地理解相关内容。
管道协议 (Pipe) 充当两张路由表之间的桥梁,允许路由从主表(通过 table 关键字连接的表)传递到辅表(通过 peer table 声明的表),反之亦然,具体取决于过滤器的许可。
两张表的网络类型必须相同。
管道协议将所有路由从一张表重传到另一张表,同时保留其原始来源和属性。如果将 import 和 export 过滤器均设为 accept,那么两张表将具有完全相同的内容。
多路由表配合管道协议的主要用途是实现策略路由 (Policy Routing)——即单个数据包的处理不仅依赖于目标地址,还取决于源地址、来源接口、协议类型等参数。
以 Linux 为例,内核允许通过定义路由规则来强制执行路由策略,这些规则根据数据包的参数从多个路由表中选择一个。设置这些规则超出了 BIRD 的职责范围(在 Linux 上可使用 ip 命令),但你可以在 BIRD 中创建多个路由表、将它们与内核表关联、使用过滤器控制路由出现在哪些表中,并通过管道协议将一个表中选定的子集导出到另一个表。
本质上,管道协议只是一个两侧均连接到路由表的通道。因此 protocol pipe 的配置块可以直接包含标准通道配置选项,参见下方示例。
peer table 路由表
定义要连接的辅路由表。主路由表由 table 关键字指定。
管道协议不定义任何路由属性。
假设一台边界路由器连接了两个不同的自治系统,各自连接到路由器的一组接口,拥有独立的外部连接,并希望在对等 AS 的外部线路中断时,使用另一个 AS 作为备份连接。
最简洁的解决方案是使用两张路由表(称为 as1 和 as2)并设置内核路由规则:从属于第一个 AS 的接口到达的数据包按 as1 路由,第二个 AS 同理。这样就将一台路由器逻辑上拆分为两台,各自在自己的路由表上运行各自的协议。为了将另一个 AS 的路由用作备份,可以通过管道协议在两表之间传递路由,同时降低其偏好值并修正 BGP 路径以反映跨 AS 边界。
ipv4 table as1; # 定义路由表
ipv4 table as2;
protocol kernel kern1 { # 与内核同步
ipv4 { table as1; export all; };
kernel table 1;
}
protocol kernel kern2 {
ipv4 { table as2; export all; };
kernel table 2;
}
protocol bgp bgp1 { # 外部连接
ipv4 { table as1; import all; export all; };
local as 1;
neighbor 192.168.0.1 as 1001;
}
protocol bgp bgp2 {
ipv4 { table as2; import all; export all; };
local as 2;
neighbor 10.0.0.1 as 1002;
}
protocol pipe { # 管道协议
table as1;
peer table as2;
export filter {
if net ~ [ 1.0.0.0/8+] then { # 仅 AS1 网络
if preference>10 then preference = preference-10;
if source=RTS_BGP then bgp_path.prepend(1);
accept;
}
reject;
};
import filter {
if net ~ [ 2.0.0.0/8+] then { # 仅 AS2 网络
if preference>10 then preference = preference-10;
if source=RTS_BGP then bgp_path.prepend(2);
accept;
}
reject;
};
}
译者
原文作者: <Ondrej Filip>, <Martin Mares>, <Maria Matejka>, <Ondrej Zajicek>
原文链接: https://bird.network.cz/?get_doc&v=20&f=bird-6.html#ss6.11
原文标题: 6.11 Pipe
遵循协议: CC BY-NC-SA 4.0
译者: hat
翻译时间: 2026-05-01
更新时间: 2026-05-01
本文链接: https://bird.xmsl.dev/docs/user-guide/6-11-pipe.html