如何使用 Quagga BGP(边界网关协议)路由器来过滤 BGP 路由

之前的文章中,我们介绍了如何使用 Quagga 将 CentOS 服务器变成一个 BGP 路由器,也介绍了 BGP 对等体和前缀交换设置。在本教程中,我们将重点放在如何使用前缀列表prefix-list和路由映射route-map来分别控制数据注入和数据输出。

之前的文章已经说过,BGP 的路由判定是基于前缀的收取和前缀的广播。为避免错误的路由,你需要使用一些过滤机制来控制这些前缀的收发。举个例子,如果你的一个 BGP 邻居开始广播一个本不属于它们的前缀,而你也将错就错地接收了这些不正常前缀,并且也将它转发到网络上,这个转发过程会不断进行下去,永不停止(所谓的“黑洞”就这样产生了)。所以确保这样的前缀不会被收到,或者不会转发到任何网络,要达到这个目的,你可以使用前缀列表和路由映射。前者是基于前缀的过滤机制,后者是更为常用的基于前缀的策略,可用于精调过滤机制。

本文会向你展示如何在 Quagga 中使用前缀列表和路由映射。

拓扑和需求

本教程使用下面的拓扑结构。

服务供应商A和供应商B已经将对方设置成为 eBGP 对等体,实现互相通信。他们的自治系统号和前缀分别如下所示。

  • 对等区段: 192.168.1.0/24
  • 服务供应商A: 自治系统号 100, 前缀 10.10.0.0/16
  • 服务供应商B: 自治系统号 200, 前缀 10.20.0.0/16

在这个场景中,供应商B只想从A接收 10.10.10.0/23, 10.10.10.0/24 和 10.10.11.0/24 三个前缀。

安装 Quagga 和设置 BGP 对等体

之前的教程中,我们已经写了安装 Quagga 和设置 BGP 对等体的方法,所以这里就不再详细说明了,只简单介绍下 BGP 配置和前缀广播:

上图说明 BGP 对等体已经开启。Router-A 在向 router-B 广播多个前缀,而 Router-B 也在向 router-A 广播一个前缀 10.20.0.0/16。两个路由器都能正确无误地收发前缀。

创建前缀列表

路由器可以使用 ACL 或前缀列表来过滤一个前缀。前缀列表比 ACL 更常用,因为前者处理步骤少,而且易于创建和维护。


  1. ip prefix-list DEMO-PRFX permit 192.168.0.0/23

上面的命令创建了名为“DEMO-FRFX”的前缀列表,只允许存在 192.168.0.0/23 这个前缀。

前缀列表的另一个强大功能是支持子网掩码区间,请看下面的例子:


  1. ip prefix-list DEMO-PRFX permit 192.168.0.0/23 le 24

这个命令创建的前缀列表包含在 192.168.0.0/23 和 /24 之间的前缀,分别是 192.168.0.0/23, 192.168.0.0/24 和 192.168.1.0/24。运算符“le”表示小于等于,你也可以使用“ge”表示大于等于。

一个前缀列表语句可以有多个允许或拒绝操作。每个语句都自动或手动地分配有一个序列号。

如果存在多个前缀列表语句,则这些语句会按序列号顺序被依次执行。在配置前缀列表的时候,我们需要注意在所有前缀列表语句之后是隐性拒绝语句,就是说凡是不被明显允许的,都会被拒绝。

如果要设置成允许所有前缀,前缀列表语句设置如下:


  1. ip prefix-list DEMO-PRFX permit 0.0.0.0/0 le 32

我们已经知道如何创建前缀列表语句了,现在我们要创建一个名为“PRFX-LST”的前缀列表,来满足我们实验场景的需求。


  1. router-b# conf t
  2. router-b(config)# ip prefix-list PRFX-LST permit 10.10.10.0/23 le 24

创建路由映射

除了前缀列表和 ACL,这里还有另一种机制,叫做路由映射,也可以在 BGP 路由器中控制前缀。事实上,路由映射针对前缀匹配的微调效果比前缀列表和 ACL 都强。

与前缀列表类似,路由映射语句也可以指定允许和拒绝操作,也需要分配一个序列号。每个路由匹配可以有多个允许或拒绝操作。例如:


  1. route-map DEMO-RMAP permit 10

上面的语句创建了名为“DEMO-RMAP”的路由映射,添加序列号为10的允许操作。现在我们在这个序列号所对应的路由映射下使用 match 命令进行匹配。


  1. router-a(config-route-map)# match (press ? in the keyboard)


  1. as-path Match BGP AS path list
  2. community Match BGP community list
  3. extcommunity Match BGP/VPN extended community list
  4. interface match first hop interface of route
  5. ip IP information
  6. ipv6 IPv6 information
  7. metric Match metric of route
  8. origin BGP origin code
  9. peer Match peer address
  10. probability Match portion of routes defined by percentage value
  11. tag Match tag of route

如你所见,路由映射可以匹配很多属性,在本教程中匹配的是前缀。


  1. route-map DEMO-RMAP permit 10
  2. match ip address prefix-list DEMO-PRFX

这个 match 命令会匹配之前建好的前缀列表中允许的 IP 地址(也就是前缀 192.168.0.0/23, 192.168.0.0/24 和 192.168.1.0/24)。

接下来,我们可以使用 set 命令来修改这些属性。例子如下:


  1. route-map DEMO-RMAP permit 10
  2. match ip address prefix-list DEMO-PRFX
  3. set (press ? in keyboard)


  1. aggregator BGP aggregator attribute
  2. as-path Transform BGP AS-path attribute
  3. atomic-aggregate BGP atomic aggregate attribute
  4. comm-list set BGP community list (for deletion)
  5. community BGP community attribute
  6. extcommunity BGP extended community attribute
  7. forwarding-address Forwarding Address
  8. ip IP information
  9. ipv6 IPv6 information
  10. local-preference BGP local preference path attribute
  11. metric Metric value for destination routing protocol
  12. metric-type Type of metric
  13. origin BGP origin code
  14. originator-id BGP originator ID attribute
  15. src src address for route
  16. tag Tag value for routing protocol
  17. vpnv4 VPNv4 information
  18. weight BGP weight for routing table

如你所见,set 命令也可以修改很多属性。为了作个示范,我们修改一下 BGP 的 local-preference 这个属性。


  1. route-map DEMO-RMAP permit 10
  2. match ip address prefix-list DEMO-PRFX
  3. set local-preference 500

如同前缀列表,路由映射语句的末尾也有隐性拒绝操作。所以我们需要添加另外一个允许语句(使用序列号20)来允许所有前缀。


  1. route-map DEMO-RMAP permit 10
  2. match ip address prefix-list DEMO-PRFX
  3. set local-preference 500
  4. !
  5. route-map DEMO-RMAP permit 20

序列号20未指定任何匹配命令,所以默认匹配所有前缀。在这个路由映射语句中,所有的前缀都被允许。

回想一下,我们的需求是只允许或只拒绝一些前缀,所以上面的 set 命令不应该存在于这个场景中。我们只需要一个允许语句,如下如示:


  1. router-b# conf t
  2. router-b(config)# route-map RMAP permit 10
  3. router-b(config-route-map)# match ip address prefix-list PRFX-LST

这个路由映射才是我们需要的效果。

应用路由映射

注意,在被应用于一个接口或一个 BGP 邻居之前,ACL、前缀列表和路由映射都不会生效。与 ACL 和前缀列表一样,一条路由映射语句也能被多个接口或邻居使用。然而,一个接口或一个邻居只能有一条路由映射语句应用于输入端,以及一条路由映射语句应用于输出端。

下面我们将这条路由映射语句应用于 router-B 的 BGP 配置,为 router-B 的邻居 192.168.1.1 设置输入前缀广播。


  1. router-b# conf terminal
  2. router-b(config)# router bgp 200
  3. router-b(config-router)# neighbor 192.168.1.1 route-map RMAP in

现在检查下广播路由和收取路由。

显示广播路由的命令:


  1. show ip bgp neighbor-IP advertised-routes

显示收取路由的命令:


  1. show ip bgp neighbor-IP routes

可以看到,router-A 有4条路由前缀到达 router-B,而 router-B 只接收3条。查看一下范围,我们就能知道只有被路由映射允许的前缀才能在 router-B 上显示出来,其他的前缀一概丢弃。

小提示:如果接收前缀内容没有刷新,试试重置下 BGP 会话,使用这个命令:clear ip bgp neighbor-IP。本教程中命令如下:


  1. clear ip bgp 192.168.1.1

我们能看到系统已经满足我们的要求了。接下来我们可以在 router-A 和 router-B 上创建相似的前缀列表和路由映射语句来更好地控制输入输出的前缀。

这里把配置过程总结一下,方便查看。


  1. router bgp 200
  2. network 10.20.0.0/16
  3. neighbor 192.168.1.1 remote-as 100
  4. neighbor 192.168.1.1 route-map RMAP in
  5. !
  6. ip prefix-list PRFX-LST seq 5 permit 10.10.10.0/23 le 24
  7. !
  8. route-map RMAP permit 10
  9. match ip address prefix-list PRFX-LST

总结

在本教程中我们演示了如何在 Quagga 中设置前缀列表和路由映射来过滤 BGP 路由。我们也展示了如何将前缀列表结合进路由映射来进行输入前缀的微调功能。你可以参考这些方法来设置满足自己需求的前缀列表和路由映射。这些工具是保护网络免受路由毒化和来自 bogon 路由(LCTT 译注:指不该出现在internet路由表中的地址)的广播。

希望本文对你有帮助。

本文来自合作伙伴“Linux中国”,原文发布日期:2015-10-26

时间: 2024-09-15 21:11:11

如何使用 Quagga BGP(边界网关协议)路由器来过滤 BGP 路由的相关文章

BGP边界网关协议

BGP(Border GatewayProtocol)边界网关协议,用来连接Internet上独立系统的路由选择协议.它是Internet工程任务组制定的一个加强的.完善的.可伸缩的协议.BGP4支持CIDR寻址方案,该方案增加了Internet上的可用IP地址数量.BGP是为取代最初的外部网关协议EGP设计的,也被 认为是一个路径矢量协议.背景路由包括两个基本的动作:确定最佳路径和信息群(通常称为分组)通过网络的传输.通过网络传输分组相对较简单,而路径 的确定 复杂.BGP就是当今网络中实现路

全球互联网的致命软肋——边界网关协议

这个27年前的互联网协议让数据任由劫持,搞定它就可以搞定整个互联网 三张餐巾协议 那是在1989年,当两名工程师在共进午餐的时候,互联网的扩展日益严重,一些问题已经变得可怕起来,曾经是计算机科学家眼中新奇事物的网络,如今已膨胀成庞然大物,越来越逼近互联网最基本协议中那堵坚硬的数学壁垒. 随着系统崩溃的预期隐约出现,两人开始在被番茄酱弄脏的餐巾背面粗略梳理解决方案火花,一张写不下又接着画上了第二张.第三张.这被发明人昵称为"三张餐巾协议"的东西,将迅速引发互联网革命.尽管还有挥之不去的问

《BGP设计与实现》一第1章 高级BGP介绍1.1 理解BGP的特性

第1章 高级BGP介绍 BGP设计与实现本章涵盖以下主题: 理解BGP的特性: 比较BGP和IGP. 边界网关协议(Border Gateway Protocol,BGP)是一种用来在路由选择域之间交换网络层可达性信息(Network Layer Reachability Information,NLRI)的路由选择协议.由于不同的管理机构分别控制着他们各自的路由选择域,因此,路由选择域经常被称为自治系统(Autonomous System,AS).现在的Internet是一个由多个自治系统相互

路由技术:ADSL猫+路由器方式实现双路由连接

双路由连接的问题是大家关心的话题,下面本文就为你介绍ADSL猫+路由器这种方式的实现双路由连接的方法,如若再加一个路由器就是:ADSL猫+路由器1+路由器2,将路由器2当交换机使用设置方法(以d-link路由器为例)如下: 1.从路由器1 LAN(1-4号)口分下的线插在路由器2的LAN口(1-4号)路由器2的WAN口空掉 2.路由器2进行设置:d-link 路由默认网关地址:192.168.0.1进路由管理 3. 路由器2进行设置:找到DHCP功能 将其关掉/重启路由器 ADSL猫+路由器方式

路由器-Linux配置BGP的自治系统编号AS

问题描述 Linux配置BGP的自治系统编号AS 最近在用Linux配置BGP,想知道BGP的自治系统编号AS是否能改?如果能改请告诉具体步骤.不胜感激!!! 解决方案 AS号码是APNIC等IP地址分配机构分的,如果你想在公网通告,就不能随意改变配置这个号码的前提是你有自己的IP地址段和AS号码,否则意义不大. 如果只是想配置练习一下,要看你用的是什么路由软件,linux缺省的routd没用过,不知道好用不好用,一般互联网交换中心用的 GNU Zebra,Quagga等开源的多一些. 下面是个

五款百元价位路由器对比 360安全路由成性价比之王

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 如果有99元的法拉利和83元的夏利,你选哪个?区区16元的价差,当然是法拉利了!路由器同样一个道理,支持最新802.11ac的双频路由和802.11n路由如果也只差16元,首选802.11ac路由,毕竟1167Mbps和300Mbps的速度差距太大了. 360安全路由就是平民法拉利,纵观市场上最热的5款百元路由器,唯独360安全路由鹤立鸡群,

五款百元价位路由器对比360安全路由成性价比之王

如果有99元的法拉利和83元的夏利,你选哪个?区区16元的价差,当然是法拉利了!路由器同样一个道理,支持最新802.11ac的双频路由和802.11n路由如果也只差16元,首选802.11ac路由,毕竟1167Mbps和300Mbps的速度差距太大了.360安全路由就是平民法拉利,纵观市场上最热的5款百元路由器,唯独360安全路由鹤立鸡群,凭借802.11ac的WiFi最高标准,让其他竞品俯首称臣.五款热门百元路由 360安全路由一枝独秀纵观市场上最热门的5款路由器,价格虽然相近,但是功能.规格

ISP路由表分发中的AS与BGP

原文出自[听云技术博客]:http://blog.tingyun.com/web/article/detail/1348 摘要 本文面向,初级网络工程师,数据挖掘工程师,涉及EGP(外部网关协议; Exterior Gateway Protocol),IGP(内部网关协议; Interior Gateway Protocol)两类协议,AS(自治系统;Autonomous System)构成,whois内容解析及部分RPSL(路由策略规范语言;Routing Policy Specificati

【★】深入BGP原理和思想【第…

       前言:学思科技术我想说,浅尝辄止,不是天才千万别深钻.和我研究高等数学一样,越深入就会发现越多的问题与不合理之处.尤其对于IT界,算法的最终解释权还是掌握在老外手中,所以对于有些细节,我们"记住就好".        本文主要关于BGP的逻辑而不是具体实验,所以我就随便配了几幅图,大多还是文字哈.由于BGP太过复杂,本文只是第一部介绍作品,以后会有更新!        BGP边界网关协议(Border Gateway Protocol)是互联网上很重要的一个高层协议,被广