
Hat
译者
⚠️ 注意
如果您发现了错误,欢迎 参与贡献。
💡 摘要 (Powered by OpenAI)
本文是 BIRD 用户指南的第六章第十节,介绍了 BIRD 的资源公钥基础设施 (RPKI),包括 RPKI-RTR 协议、TCP/SSH 传输方式、ROA 和 ASPA 验证以及实用示例配置,以便您更好地理解相关内容。
资源公钥基础设施 (Resource Public Key Infrastructure, RPKI) 是用于 BGP 路由来源验证的机制(RFC 6480)。
BIRD 支持基于 RPKI 的来源验证,并实现了 RPKI to Router (RPKI-RTR) 协议(RFC 6810)。该协议利用部分 RPKI 数据,使路由器能够验证宣称某个 IP 地址前缀的自治系统是否确实被授权这样做。
虽然这不是加密验证、理论上可被攻击绕过,但它能防止当今互联网上绝大多数的意外劫持——例如著名的巴基斯坦意外宣告 YouTube 地址空间事件。
RPKI-RTR 协议从缓存服务器(亦称验证器)接收并维护一组 ROA (Route Origin Authorization) 数据。你可以使用过滤器中的 roa_check() 函数验证路由(RFC 6483、RFC 6811),并将其设置为 BGP 协议的 import 过滤器。
BIRD 提供 RPKI 更新后受影响路由的粗略自动重验证功能,参见选项 rpki reload。你也可以使用 BIRD 客户端命令 reload in bgp_protocol_name 手动调用所有路由的重验证。
自版本 2 起,同一协议还接收并维护一组 ASPA (Autonomous System Provider Authorization) 数据。你可以使用 aspa_check() 函数在(import)过滤器中验证 AS 路径。
当前每个协议仅支持一个缓存服务器,但可以定义多个 RPKI 协议。
protocol rpki [<名称>] {
roa4 { table <表>; };
roa6 { table <表>; };
aspa { table <表>; };
remote <IP> | "<域名>" [port <数值>];
port <数值>;
local address <IP>;
refresh [keep] <数值>;
retry [keep] <数值>;
expire [keep] <数值>;
ignore max length <开关>;
min version <数值>;
max version <数值>;
transport tcp {
authentication none|md5;
password "<文本>";
};
transport ssh {
bird private key "</path/to/id_rsa>";
remote public key "</path/to/known_host>";
user "<名称>";
};
}注意:需要指定 ROA 和 ASPA 通道。若仅导入 IPv4 前缀,只需指定 roa4 通道;同理仅 IPv6 前缀只需 roa6。若要获取 IPv4 和 IPv6 两种 ROA,则需同时指定两个通道。
remote IP | "主机名" [port 数值]
指定缓存服务器的目标地址,可为 IP 地址或完整域名字符串。每个协议只能指定一个缓存。此选项为必选。
port 数值
指定端口号。默认值:无加密传输为 323,SSH 加密传输为 22
local address IP
定义应用作 RTR 会话源地址的本地地址。
refresh [keep] 数值
以秒为单位的时间周期。指定在下一次尝试使用 Serial Query 或 Reset Query 数据包轮询缓存之前等待的时间。必须小于 86400 秒(一天)。值过低可能导致网络连接问题的误报。关键字 keep 禁止缓存服务器更新此值。默认值:3600 秒
retry [keep] 数值
以秒为单位的失败 Serial/Reset Query 与下一次尝试之间的时间周期。最大允许值为 7200 秒(两小时)。值过低可能导致网络连接问题的误报。关键字 keep 禁止缓存服务器更新此值。默认值:600 秒
expire [keep] 数值
以秒为单位的时间周期。如果客户端在此时间段内无法成功刷新数据,接收到的记录将被删除。范围:600 秒(十分钟)至 172800 秒(两天)。关键字 keep 禁止缓存服务器更新此值。默认值:7200 秒
ignore max length 开关
忽略 ROA 记录中接收到的 max length 值,改为使用最大值(32 或 128)。对于为黑洞路由实现宽松 RPKI 检查可能有用。默认值:disabled
min version 数值
允许的 RTR 协议最低版本。BIRD 将拒绝将连接降级到低于此版本并改为中断会话。默认值:0
max version 数值
允许的 RTR 协议最高版本。BIRD 将从此版本开始连接。如果向缓存发送版本 2 导致问题,可使用此选项。默认值:2
transport tcp { TCP 传输选项... }
通过 TCP 传输,是默认的传输方式。不能与 SSH 传输同时使用。默认:TCP,无认证。
transport ssh { SSH 传输选项... }
启用 SSHv2 传输加密。不能与 TCP 传输同时使用。默认:off
authentication none|md5
选择使用的认证方式。none 表示无认证,md5 为 TCP-MD5 认证(RFC 2385)。默认:无认证
password "文本"
用于 RPKI-to-Router 会话 TCP-MD5 认证的密码。
bird private key "/path/to/id_rsa"
BIRD 用于认证的 SSH 私钥路径,可为 id_rsa 文件。
remote public key "/path/to/known_host"
用于验证缓存服务器身份的缓存 SSH 公钥路径,可为 known_host 文件路径。
user "名称"
用于认证的 SSH 用户名。此选项为必选。
策略:不导入 ROA_INVALID 路由。
roa4 table r4;
roa6 table r6;
protocol rpki {
debug all;
roa4 { table r4; };
roa6 { table r6; };
# 请勿在生产环境中使用 rpki-validator.realmv6.org
remote "rpki-validator.realmv6.org" port 8282;
retry keep 5;
refresh keep 30;
expire 600;
}
filter peer_in_v4 {
if (roa_check(r4, net, bgp_path.last) = ROA_INVALID) then
{
print "Ignore RPKI invalid ", net, " for ASN ", bgp_path.last;
reject;
}
accept;
}
protocol bgp {
debug all;
local as 65000;
neighbor 192.168.2.1 as 65001;
ipv4 {
import filter peer_in_v4;
export none;
};
}roa4 table r4;
roa6 table r6;
protocol rpki {
debug all;
roa4 { table r4; };
roa6 { table r6; };
remote 127.0.0.1 port 2345;
transport ssh {
bird private key "/home/birdgeek/.ssh/id_rsa";
remote public key "/home/birdgeek/.ssh/known_hosts";
user "birdgeek";
};
# 使用默认间隔值
}
译者
原文作者: <Ondrej Filip>, <Martin Mares>, <Maria Matejka>, <Ondrej Zajicek>
原文链接: https://bird.network.cz/?get_doc&v=20&f=bird-6.html#ss6.10
原文标题: 6.10 RPKI
遵循协议: CC BY-NC-SA 4.0
译者: hat
翻译时间: 2026-05-01
更新时间: 2026-05-01
本文链接: https://bird.xmsl.dev/docs/user-guide/6-10-rpki.html