ESC

开始输入,可搜索发票、服务、域名、工单,以及 更多...

搜索... Ctrl+K
IP 与 ASN

BGP AS 路径预置(AS-Path Prepending)被对等体拒绝的原因与解决方法:BIRD/FRR 配置示例

5 个步骤 7 分钟阅读 911 次阅读 84
本文目录

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,请替换为您的真实值。

步骤 1:确认 AS-Path Prepending 被拒绝的现象

先确认本机确实以预置后的路径发出了公告,再通过日志查看是否收到 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

步骤 2:BGP 预置只能使用自己的 ASN

最常见的错误是预置了别的 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 configure

步骤 3:在 FRRouting 中正确配置 AS 路径预置

FRR 通过出方向 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

步骤 4:控制 AS 路径长度,避免触发长度限制

不少网络会丢弃 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"
许多上游支持通过 BGP Community 让其代为预置(只对其特定对等体生效),这比自己预置更精确、更不容易被过滤。具体 Community 值请查阅上游的公开文档或咨询上游。

步骤 5:检查 IRR 路由对象与 RPKI/ROA

预置本身不改变起源 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,加入其他 ASN 会破坏路径真实性,大多数网络会直接丢弃。

IMIDC 能协助配置预置吗?

在 IMIDC 服务器上广播自有或租用的 IP 时,可以通过工单说明需求,技术人员会协助检查会话、过滤和 IRR/ROA 状态。

如仍无法解决,可提交工单联系 IMIDC 7×24 技术支持。

这篇文章有帮助吗?

相关教程