开始输入,可搜索发票、服务、域名、工单,以及 更多...
AS 路径预置(AS-Path Prepending)是多线 BGP 环境中最常用的入站流量调度手段:在某条上游的公告中重复添加自己的 ASN,让该路径变长、优先级降低。但很多用户配置后发现BGP AS-Path Prepending 被对等体拒绝,前缀从该上游消失或预置不生效。本文分析常见原因(路径长度限制、AS 路径过滤策略、IRR/RPKI 校验),并给出 BIRD 2 与 FRRouting 的正确配置示例,适用于 Debian/Ubuntu 与 CentOS/Rocky/AlmaLinux。示例本端 ASN 64500、上游 203.0.113.1(AS64496)、前缀 198.51.100.0/24,请替换为您的真实值。
先确认本机确实以预置后的路径发出了公告,再通过日志查看是否收到 NOTIFICATION 或会话重置;同时用公共 Looking Glass 查看全球看到的 AS 路径。如果本机发出的路径正确、但外部完全看不到经该上游的路径,基本可以判定被上游或更远的网络过滤。
# BIRD 2
birdc show route 198.51.100.0/24 export upstream1 all
journalctl -u bird --since "1 hour ago" --no-pager
# FRRouting
vtysh -c "show bgp ipv4 unicast neighbors 203.0.113.1 advertised-routes"
vtysh -c "show bgp ipv4 unicast neighbors 203.0.113.1" | grep -iE "state|prefix|notification"curl -s "https://stat.ripe.net/data/looking-glass/data.json?resource=198.51.100.0/24" | grep -o '"as_path":"[^"]*"' | sort | uniq -c最常见的错误是预置了别的 ASN(例如上游或其他网络的 ASN),或者在路径末尾插入了别的 ASN,导致起源 AS 改变。上游通常会检查路径首个 ASN 必须等于邻居 ASN,并按您的 as-set 校验起源;路径中出现不相关的 ASN 会被视为路由劫持而丢弃。私有 ASN(64512–65534)也常被直接过滤。以下为 BIRD 2 的正确写法,BIRD 在 eBGP 导出时会自动再加一次本端 ASN:
# /etc/bird/bird.conf (BIRD 2)
filter export_upstream1 {
if net = 198.51.100.0/24 then {
bgp_path.prepend(64500); # own ASN only
bgp_path.prepend(64500);
accept;
}
reject;
}
protocol bgp upstream1 {
local as 64500;
neighbor 203.0.113.1 as 64496;
ipv4 {
import none;
export filter export_upstream1;
};
}
birdc configureFRR 通过出方向 route-map 实现预置。修改后使用 soft out 重新发送公告,不会中断会话。
vtysh
configure terminal
ip prefix-list MY-NETS seq 10 permit 198.51.100.0/24
route-map UPSTREAM-OUT permit 10
match ip address prefix-list MY-NETS
set as-path prepend 64500 64500
exit
route-map UPSTREAM-OUT deny 100
exit
router bgp 64500
address-family ipv4 unicast
neighbor 203.0.113.1 route-map UPSTREAM-OUT out
exit-address-family
end
write memory
clear bgp ipv4 unicast 203.0.113.1 soft out不少网络会丢弃 AS 路径过长的路由,有的还专门限制同一 ASN 连续重复的次数。预置 1–3 次就足以显著影响选路,超过 5 次几乎不再带来收益,反而容易被过滤。另一个常见原因是上游的 AS 路径过滤器写得过严,例如只允许正则 ^64500$,预置后的 “64500 64500 64500” 就会被拒绝;此时需要请上游改为 ^(64500_)+$ 一类的规则。
可以这样确认实际发出的 AS 路径长度:
birdc show route 198.51.100.0/24 export upstream1 all | grep BGP.as_path
vtysh -c "show bgp ipv4 unicast 198.51.100.0/24"预置本身不改变起源 AS,但如果前缀缺少 IRR route 对象、未包含在提交给上游的 as-set 中,或 ROA 的起源 ASN、最大前缀长度不匹配,上游同样会拒绝。可以用以下命令检查:
whois -h whois.radb.net -- '-i origin AS64500'
whois -h whois.ripe.net -- '-T route 198.51.100.0/24'
curl -s "https://stat.ripe.net/data/rpki-validation/data.json?resource=AS64500&prefix=198.51.100.0/24"RPKI 状态为 valid 才最稳妥;若为 invalid,请先修正 ROA。修正后,上游的过滤列表通常需要一段时间自动更新,也可以联系上游手动刷新。
对方网络可能通过 Local Preference 等高于 AS 路径长度的属性选路,预置对其无效。此时可尝试上游提供的 Community 或调整广播的前缀粒度。
不可以。只能重复自己的 ASN,加入其他 ASN 会破坏路径真实性,大多数网络会直接丢弃。
在 IMIDC 服务器上广播自有或租用的 IP 时,可以通过工单说明需求,技术人员会协助检查会话、过滤和 IRR/ROA 状态。
如仍无法解决,可提交工单联系 IMIDC 7×24 技术支持。