问题描述
我们需要对路由信息过滤,能够对接收、发布、引入的路由进行过滤。
解决方案
Filter-Policy(过滤-策略)是个很常用的路由信息过滤工具,能够对接收、发布、引入的路由进行过滤,可应用于 IS-IS、OSPF、BGP 等协议。
如图所示,R1、R2、R3 间运行BGP路由协议,路由在各个设备间传递。当需要根据实际需求过滤某些路由信息时,能够使用 Filter-Policy 实现。
在距离矢量路由协议中
在距离矢量路由协议中,设备间传递的是路由信息,如果需要对这种路由信息进行某种过滤,可以使用 Filter-Policy 实现
注意,出方向和入方向的生效位置:
距离矢量协议是基于路由表生成路由的,因此过滤器会影响从邻居接收的路由和向邻居发布的路由。
如果要过滤掉上游设备到下游设备的路由,只需要在上游设备配置filter-policy export或者在下游设备上配置filter-policy import。
在链路状态路由协议中
在链路状态路由协议中,各路由设备间传递的是 LSA 信息,然后设备根据 LSA 汇总成的 LSDB 信息计算出路由表。
但是 Filter-Policy 仅过滤路由信息,而无法过滤 LSA:
Import:
1)操作对象:学习到的路由条目(实际上是对 OSPF 计算出来的路由进行过滤,不是对发布和接收的 LSA 进行过滤);
2)OSPF 把网络中所泛洪的LSA存储到自己的 LSDB 中,并且运行 SPF 算法,计算出一棵以自己为根且无环的最短路径树,Filter-Policy对 OSPF 计算出来的路由(加载到路由表之前)进行过滤,而不会对 LSA 进行过滤(否则会影响拓扑计算);
Export:
1)操作对象:通过命令 import-route 引入外部路由;
2)对引入的路由在发布时进行过滤,只将满足条件的外部路由转换为 Type5 LSA 发布出去;
配置命令(Huawei)
OSPF(链路状态)
// 按照过滤策略,控制下发到 IP Routing Table 中的路由条目,但不会影响通告; [Huawei-ospf-100] filter-policy { acl | ip-prefix | route-policy route-policy-name [ secondary ] } import // 按照过滤策略,设置对引入路由在向外发布时进行过滤。 [Huawei-ospf-100] filter-policy { acl | ip-prefix | route-policy route-policy-name } export [ protocol [ process-id ] ]
ISIS(链路状态)
// 配置 IS-IS 路由加入 IP Routing Table 时的过滤策略。 [Huawei-isis-1] filter-policy { acl | ip-prefix | route-policy } import // 配置IS-IS对已引入的路由在向外发布时进行过滤的过滤策略。 [Huawei-isis-1] filter-policy { acl | ip-prefix | route-policy } export [ protocol [ process-id ] ]
BGP(类距离矢量)
// 对接收的路由进行过滤,针对所有 Peer 发来的路由进行过滤 ⇒ 所有邻居 [Huawei-bgp-af-ipv4] filter-policy { acl | ip-prefix } import // 对发布的路由进行过滤,只有通过过滤的路由才被 BGP 发布; [Huawei-bgp-af-ipv4] filter-policy { acl | ip-prefix } export [ protocol [ process-id ] ] // 配置向 Peer(组)发布或从 Peer(组)接收路由时的过滤策略 ⇒ 特定邻居 [Huawei-bgp-af-ipv4] peer { group-name | ipv4-address } filter-policy { acl-number | acl-name acl-name } { import | export }
补充说明
Filter Policy Import 影响 LSA Type 3
在 OSPF 中,如果在 ABR 中使用 Filter Policy Import 策略,会影响自身,也会影响后续路由传递:
1)不会生成需要向后传递的 Type 3 LSA;但是并不会影响 Type 5 LSA;
2)导致 AR2、AR3 能够无法通过 Type 3 LSA 学习到 5.5.5.5 网络;
3)但是 AR2、AR3 能通过外部路由学习到 5.5.5.5 网络(import-route direct);