当前位置: 首页 > 科技观察

如何在QuaggaBGP路由器中过滤BGP路由?

时间:2023-03-14 12:49:04 科技观察

我们在之前的教程中演示了如何使用Quagga将CentOS设备变成边界网关协议(BGP)路由器。当时我们还探索了基本的BGP对等和前缀交换设置。在本教程中我们将重点介绍如何使用prefix-list(前缀列表)和route-map(路由映射)来控制入站和出站BGP前缀。如前面的教程所述,BGP路由决策是根据接收到的/通告的前缀做出的。为了确保路由没有错误,建议您使用某种过滤机制来控制这些入站和出站前缀。例如,如果您的BGP邻居之一开始通告不属于他们的前缀,而您错误地收到了此类虚假前缀,您的流量将被发送到那个错误的邻居,并且其下落将丢失(这被称为“进入黑洞”)。为确保不接收此类前缀,也不向任何邻居通告此类前缀,您可以使用前缀列表和路由映射。前者是一种基于前缀的过滤机制,而后者是一种更通用的基于前缀的策略机制,用于微调动作。我们将演示如何在Quagga中使用前缀列表和路由映射。拓扑和要求我们在本教程中采用以下拓扑。ServiceProviderA和ServiceProviderB建立了eBGP对等关系,他们之间交换路由信息。AS和前缀详细信息如下所述。?对等块:192.168.1.0/24?SPA:AS100,前缀10.10.0.0/16?SPB:AS200,前缀10.20.0.0/16在这种情况下,SPB只想接收三个前缀10.10。ProviderA提供的10.0/23、10.10.10.0/24和10.10.11.0/24。Quagga安装和BGP对等我们已经在之前的教程中探讨了安装Quagga和设置BGP对等的方法。因此,我们不会在这里重复具体细节。但是,我提供了BGP配置和前缀通告的摘要:以上输出显示BPG对等互连已建立。路由器A向路由器B通告多个前缀。另一方面,路由器B向路由器A通告单个前缀10.20.0.0/16。两台路由器都毫无问题地接收前缀。创建前缀列表在路由器中,可以使用访问控制列表(ACL)或前缀列表来阻止前缀。人们通常更喜欢使用前缀列表而不是ACL,因为前缀列表不像ALC那样需要大量处理器。此外,前缀列表更易于创建和维护。ipprefix-listDEMO-PRFXpermit192.168.0.0/23上面的命令创建了一个名为“DEMO-FRFX”的前缀列表,它只允许192.168.0.0/23。前缀列表的另一个不错的特性是我们可以指定子网掩码范围。我们来看下面的例子:ipprefix-listDEMO-PRFXpermit192.168.0.0/23le24上面的命令创建了一个名为“DEMO-PRFX”的前缀列表,它允许192.168.0.0/23到/24,包括192.168.0.0/23、192.168.0.0/24和192.168.1.0/24。“le”运算符表示小于或等于。您还可以使用“ge”运算符来表示大于或等于。前缀列表语句可能有多个允许/拒绝操作。每个语句都分配有一个序列号,可以自动确定或手动分配。多个前缀列表语句按照序号递增的顺序逐一解析。配置前缀列表时,我们应该记住,在所有前缀列表语句的末尾总是有一个隐式拒绝。这意味着任何未明确允许的前缀都将被拒绝。要允许所有内容,我们可以使用以下前缀列表语句,它允许任何前缀:从0.0.0.0/0到使用子网/32的任何地址。ipprefix-listDEMO-PRFXpermit0.0.0.0/0le32既然我们知道如何创建前缀列表语句,我们将创建一个名为“PRFX-LST”的前缀列表以允许我们场景中所需的前缀。router-b#conftrouter-b(config)#ipprefix-listPRFX-LSTpermit10.10.10.0/23le24#p#创建路由映射除了前缀列表和ACL,还有另外一种路由映射机制,即可以控制BGP路由器中的前缀。事实上,路由映射允许更灵活地微调可能适用于与ACL或前缀列表匹配的前缀的操作。与前缀列表一样,路由映射语句指定允许或拒绝操作,后跟序列号。每个路由映射语句可能有多个允许/拒绝动作,例如:route-mapDEMO-RMAPpermit10上面的语句创建了一个名为“DEMO-RMAP”的路由映射,并在允许动作中添加了一个序列10。现在,我们将在序列10下使用match命令。BGP/VPN扩展社区属性列表接口 匹配第一个路由段接口ipipinfoipv6IPv6infometricmatchroutemetricoriginBGPsourcecodepeermatchpeeraddressprobabilitymatchpercentagevaluedefinedrouteparttagmatchroutetag如我们所见,一个路由映射可以匹配很多属性。我们将在本教程中匹配前缀。route-mapDEMO-RMAPpermit10matchipaddressprefix-listDEMO-PRFXmatch命令将匹配先前创建的前缀列表“DEMO-PRFX”允许的IP地址(即192.168.0.0/23、192.168.0.0/24和192.168.1.0/24这三个前缀)。接下来,我们可以使用set命令来更改属性。以下示例显示了set的一个可能用例。route-mapDEMO-RMAPpermit10matchipaddressprefix-listDEMO-PRFXset(press?inkeyboard)aggregatorBGP聚合器属性as-pathchangeBGPASpathattributeatomic-aggregateBGPatomicaggregationattributecomm-listsetBGPcommunityattributelist(fordeletion)communityBGPcommunityattributeextcommunityBGPextendedcommunityattributeforwarding-address 转发地址ipIP信息ipv6IPv6信息local-preferenceBGPlocalpreferencepathattributemetricvaluefordestinationroutingprotocolmetric-typemetrictypeoriginBGPsourcecodeoriginator-idBGPoriginatorIDattributesrcsrcaddressoftheroutetag路由协议标记的值vpnv4VPNv4infoweightBGP路由表的权重正如我们所见,set命令可用于更改许多属性。为了演示,我们将设置BGP本地首选项。route-mapDEMO-RMAPpermit10matchipaddressprefix-listDEMO-PRFXsetlocal-preference500就像前缀列表一样,所有路由映射语句的末尾都有一个隐式拒绝。因此,我们将在序列号20处添加另一个允许语句,允许所有前缀。route-mapDEMO-RMAPpermit10matchipaddressprefix-listDEMO-PRFXsetlocal-preference500!route-mapDEMO-RMAPpermit20sequencenumber20没有具体的匹配命令,所以默认匹配所有。由于决定是允许的,所以路由映射语句将允许一切。如果您还记得,我们的要求是只允许/拒绝某些前缀。所以在我们的场景中,set命令不是必需的。我们将只使用一个allow语句,如下所示。router-b#conftrouter-b(config)#route-mapRMAPpermit10router-b(config-route-map)#matchipaddressprefix-listPRFX-LST这个路由映射表语句应该可以得到想要的结果。使用路由映射时要牢记一件事:除非应用于接口或BGP邻居,否则ACL、前缀列表和路由映射不起作用。就像ACL或前缀列表一样,单个路由映射语句可以与任意数量的接口或邻居结合使用。但是,任何一个接口或邻居只能支持一种用于入站流量的路由映射语句和一种用于出站流量的路由映射语句。我们将使用入站前缀通告将刚刚创建的路由映射应用于路由器B的邻居192.168.1.1的BGP配置。router-b#confterminalrouter-b(config)#routerbgp200router-b(config-router)#neighbor192.168.1.1route-mapRMAPin现在,我们使用以下命令来查看发布和接收的路由。对于通告的路由:showipbgpneighbor-IPadvertised-routes对于接收的路由:showipbgpneighbor-IProutes可以发现,虽然路由器A向路由器B通告了四个前缀,但路由器只收到了三个前缀。如果我们检查范围,我们可以看到只有路由映射允许的前缀在路由器B上可见。所有其他前缀都被丢弃。提示:如果接收到的前缀没有变化,尝试使用命令:“clearipbgpneighbor-IP”重置BGP会话。在我们的例子中:clearipbgp192.168.1.1正如我们所看到的那样,要求已经满足。我们可以在路由器A和B中创建类似的prefix-list和route-map语句来进一步控制入站和出站前缀。我已将配置汇总在一个地方,以便您一目了然。路由器bgp200network10.20.0.0/16neighbor192.168.1.1remote-as100neighbor192.168.1.1route-mapRMAPin!ipprefix-listPRFX-LSTseq5permit10.10.10.0/23le24!route-mapaddmresRMAPprefix-listPRFX-LST结论在本教程中,我们演示了如何在Quagga中定义前缀列表和路由映射来过滤BPG路由。我们还演示了如何结合前缀列表和路由映射以对入站前缀进行细粒度控制。以类似的方式,您可以创建自己的前缀列表和路由映射来满足您的网络要求。这些工具是保护生产网络免受路由损坏和虚假路由通告的最有效方法之一。希望本文有所帮助。