如何过滤来自一个 AS 的所有路由?
我想过滤从 AS 6400 到 AS1000 的所有路由,如何过滤从一个 AS 到另一个 AS 的整个路由?
我不想被用作中转 AS,所以我需要这样做,我在谷歌上搜索并得到了一些关于使用前缀列表 + 路由映射的东西,但问题是 AS6400 是一个实际的 Internet 活动 AS,它承载了大约 500000 多条路由,并且为该数量的路由编写前缀列表听起来不合理,那我该怎么办?
如何过滤来自一个 AS 的所有路由?
我想过滤从 AS 6400 到 AS1000 的所有路由,如何过滤从一个 AS 到另一个 AS 的整个路由?
我不想被用作中转 AS,所以我需要这样做,我在谷歌上搜索并得到了一些关于使用前缀列表 + 路由映射的东西,但问题是 AS6400 是一个实际的 Internet 活动 AS,它承载了大约 500000 多条路由,并且为该数量的路由编写前缀列表听起来不合理,那我该怎么办?
有几种方法可以做到这一点,而不必在前缀列表中指定您从 AS6400 接收的每个前缀(我个人建议不要这样做,因为正如您所提到的,管理开销很高,并且该过程将随着前缀数量的增加,变得更容易出错)。
1) 使用无出口社区标记您从 AS6400 收到的路由。您可以在路线图中执行此操作:
route-map RECEIVE-FROM-6400 permit 5
set community no-export additive
这将告诉 R3不要将通过 eBGP 会话从 AS6400 获知到 AS1000 的路由通告给 R1。这是您最简单的选项(请注意,这需要是在与 R2/AS6400 的 eBGP 会话上的 R4 上应用的入站过滤器)。
2) 您可以使用 AS 路径访问列表来确定哪些前缀具有以 6400 开头的 AS 路径,然后您可以在带有过滤器列表的 BGP 邻居语句中使用它,或者您可以在路由映射中使用它来拒绝在 R3 上通告前缀。这不太简单,因为它需要正则表达式的知识(公平地说,这里所需的正则表达式有点简单),而且还取决于没有人对他们的 AS 路径做任何有趣的事情,对此没有真正的保证。使用路由映射,要实现的配置看起来像这样(假设 IOS):
ip as-path access-list 10 permit ^6400_[0-9]*$
route-map ANNOUNCE-TO-1000 deny 5
match as-path 10
route-map ANNOUNCE-TO-1000 permit 10
请注意,对于与 AS1000 的 eBGP 会话,需要将上述内容配置为R3 上的出站过滤器。
使用著名的“无出口”社区可能是您最好的选择,同时您对 AS1000 和 AS6400 的出站公告也非常明智。
如果您的目标是不将流量通过您的 AS 传输到其他人,您需要做的就是严格控制您的出站公告,以确保只有您的路由被通告给任一上游对等方。
如果您是边缘 AS(不是对您自己的客户使用 BGP 的 ISP),那么简单的方法几乎与您提到的完全相同,但只需使用前缀列表来控制对等方的路由公告。完全按照您想要向对等方通告它们的方式定义所有前缀,然后将出站前缀列表应用于两个对等方。在 Team Cymru安全 BGP 模板中有一个很好的例子(以及其他良好的 BGP 实践)。
他们的示例如下所示:
router bgp ###
neighbor x.x.x.x remote-as ****
neighbor x.x.x.x prefix-list announce out
ip prefix-list announce description Our allowed routing announcements
ip prefix-list announce seq 5 permit 192.0.2.0/24
ip prefix-list announce seq 10 deny 0.0.0.0/0 le 32
这会导致 192.0.2.0/24 网络完全匹配并被允许,而下一行匹配所有其他前缀(掩码长度为 0,但匹配长度小于/等于 32)并拒绝它们。