## OSPF LSA过滤简述 OSPF的过滤有两种,一种是对路由表的过滤,这种方式只对配置过滤的路由器起作用,不能阻止LSA的泛洪,因此也不能影响其他路由器生成路由,filter-policy import(VRP) /distribute-list in(IOS);另一种是对LSA的过滤,这种方式其实并不是对LSA过滤,只是阻止LSA的生成,没有了LSA,相应也会影响其他同区域或同自治域的路由器。 对路由表的过滤,适用所有运行OSPF的路由器;其他命令都是阻止LSA的生成,只能过滤原本应该是本路由器产生的LSA,这种过滤只能在LSA生成者上做过滤,ASBR是ASE/NSSA LSA的生成者,ABR是SUMMARY LSA的生成者,NSSA区域的ABR是NSSA转ASE的生成者,所以我们很容易想到这种方式的过滤只能在ABR,ASBR和NSSA区域的ABR上。 ## OSPF中6种过滤方式 ### filter-policy import(OSPF) 只能用来过滤OSPF有效路由表里的路由,并不能阻止LSA的泛洪。(除此之外,以下的过滤方式均是对LSA的过滤),被过滤的路由在路由表中为inactive状态。 对应IOS命令为`Router(config-router)# distribute-list 1 in/distribute-list prefix 1 in` Users can define a route map to prevent OSPF routes from being added to the routing table. 对应Junos命令为import policy。IOS并不认为这是一种真正的OSPF过滤。 [[b6e90ff8ee00e412d87c02c8ac6d3652_MD5.png|Open: Pasted image 20240309005549.png]] ![[b6e90ff8ee00e412d87c02c8ac6d3652_MD5.png]] R1路由器上配置两条静态路由,然后import到ospf中。 ``` ip route-static 11.11.11.11 255.255.255.255 NULL0 ip route-static 111.111.111.111 255.255.255.255 NULL0 ``` 查看R2的路由表 ``` <R2>dis ip routing-table Route Flags: R - relay, D - download to fib --------------------------------------------------------------------------- Routing Tables: Public         Destinations : 13       Routes : 13 Destination/Mask    Proto  Pre  Cost     Flags NextHop         Interface     11.11.11.11/32  O_ASE  150  1           D  100.0.12.1      Serial0/0/0 111.111.111.111/32  O_ASE  150  1           D  100.0.12.1      Serial0/0/0 ``` 然后在R2上配置filter-policy import过滤掉11.11.11.11/32的路由不让其加入到R2的路由表中。 ``` ospf 1  filter-policy ip-prefix huawei import # ip ip-prefix huawei index 10 deny 11.11.11.11 32 ip ip-prefix huawei index 20 permit 0.0.0.0 0 less-equal 32 ``` 配置后查看R2的路由表: ``` <R2>dis ip routing-table Route Flags: R - relay, D - download to fib ---------------------------------------------------------------------------- Routing Tables: Public         Destinations : 13       Routes : 13 Destination/Mask    Proto  Pre  Cost     Flags NextHop         Interface 111.111.111.111/32  O_ASE  150  1           D  100.0.12.1      Serial0/0/0 ``` 可以看到路由表中已经没有了11.11.11.11/32的路由,但是LSDB中还是有的。 ``` [R2]dis ospf lsdb          OSPF Process 1 with Router ID 2.2.2.2                  Link State Database                  AS External Database  Type      LinkState ID    AdvRouter          Age  Len   Sequence   Metric  External  11.11.11.11     111.111.111.111    200  36    80000001       1  External  111.111.111.111 111.111.111.111    189  36    80000001       1 ``` ### filter-policy export \[acl/ip-prefix]/import-route (OSPF)\[route-policy] 该命令用来在ASBR上对ASE/NSSA过滤,可以对本台路由器引入而产生的ASE/NSSA LSA做过滤,过滤彻底,所有OSPF域的路由器将不会收到被过滤的ASE/NSSA LSA。 对应IOS命令为`Router(config-router)#distribute-list x out [rip]/ redistribute rip route-map` [[49534873c9e949f1e303ff89d9e38a1b_MD5.png|Open: Pasted image 20240309005605.png]] ![[49534873c9e949f1e303ff89d9e38a1b_MD5.png]] 在R1上配置filter-policy export的策略,拒绝11.11.11.11/32的lsa进入到ospf中。 ``` ospf 1  filter-policy ip-prefix huawei export     import-route static # ip ip-prefix huawei index 10 deny 11.11.11.11 32 ip ip-prefix huawei index 20 permit 0.0.0.0 0 less-equal 32 ``` 配置后在R1上查看lsdb,发现已经没有了11.11.11.11/32的ase lsa。 ``` [R1]dis ospf lsdb          OSPF Process 1 with Router ID 111.111.111.111                  Link State Database                  AS External Database Type      LinkState ID    AdvRouter          Age  Len   Sequence   Metric External  111.111.111.111 1.1.1.1             10  36    80000001       1 ``` R2、R3也同样没有了11.11.11.11/32的ase lsa,当然也无法计算出路由来。 ### asbr-summary not-advertise (OSPF) 该命令用来在ASBR 上可以对自身产生的ASE/NSSA做过滤,阻止本路由器产生符合特定条件的ASE/NSSA,以及在NSSA区域的ABR上可以对7转5的LSA做过滤,阻止本路由器根据NSSA产生符合特定条件的ASE。 对应IOS命令为`Router(config-router)#summary-address 10.0.0.0 255.255.25.0 no advertise` [[49534873c9e949f1e303ff89d9e38a1b_MD5.png|Open: Pasted image 20240309005615.png]] ![[49534873c9e949f1e303ff89d9e38a1b_MD5.png]] NSSA区域的ABR可以在ABR上对Type7转5的LSA进行二次过滤 [[608b021c4d4b48c316e9cb74f4db9016_MD5.png|Open: Pasted image 20240309005624.png]] ![[608b021c4d4b48c316e9cb74f4db9016_MD5.png]] 在R1上配置`[R1-ospf-1]asbr-summary 11.11.11.11 255.255.255.255 not-advertise` 配置后,查看R1的lsab发现已经没有了11.11.11.11/32的ase lsa,其他路由器也没有11.11.11.11/32的ase lsa,同样无法计算出路由,过滤彻底。 ``` [R1-ospf-1]dis ospf lsdb                  AS External Database  Type      LinkState ID    AdvRouter          Age  Len   Sequence   Metric  External  111.111.111.111 1.1.1.1            142  36    80000001       1 ``` 对于在ABR上配置7转5时过滤时需要注意以下特性: ABR全局路由表中只有存在FA地址的路由时,才会将nssa-external转换成external lsa,其他路由器收到这个external的lsa后,还要检查是否有到达fa地址的路由,如果没有,不会参与计算,所以在ABR上如果对fa地址路由(该种过滤无法通过配置suppress-fa来搞定,因为在ABR上根本没有执行nssa-external转external)或lsa进行过滤,都会导致骨干区其他路由器无法计算该路由。如果确实需要进行过滤,那么需要在ABR上配置`R2(config-router)#area 100 nssa translate type7 suppress-fa`命令。 [[910823ddcf3188ff8ac05b8f44a41240_MD5.png|Open: Pasted image 20240309005635.png]] ![[910823ddcf3188ff8ac05b8f44a41240_MD5.png]] 在上图的组网中,如果想在ABR上做Area 2区域的ASBR地址的LSA过滤,(我司VRP5命令为aera视图下abr-summary 100.0.15.0 255.255.255.0 not-advertise,此时在ABR上仍旧有ASBR FA地址的路由和nssa-external路由,该路由器也会将nssa-external lsa转换成external lsa,其他路由器也有external的lsa,但由于没有FA地址的路由,因此该external lsa不会参与计算,无法生成路由)或者(配置distribute-list in过滤掉FA的路由,此时ABR的路由表上由于没有asbr FA地址的路由,也算不出来nssa-external的路由,同时ABR不会将nssa-external转换成external,这样其他路由器根本都不会再有external的lsa),那么会导致Area0的路由器无法到达AS1的网络,因为Area 2中ASBR的地址被写进了Type 7 LSA的FA中,没有到达这个FA地址的路由,Area0中的路由器无法使用这些Type5(7转5)的LSA计算路由。 注:主要原因是在ABR上将FA地址的LSA聚合了,导致Area0中没有这个FA地址路由无法迭代。 This problem is solved by suppressing the forwarding address on the ABR so that the forwarding address is set to 0.0.0.0 in the Type-5 LSAs that were translated from Type-7 LSAs. A forwarding address set to 0.0.0.0 indicates that packets for the external destination should be forwarded to the advertising OSPF router, in this case, the translating NSSA ABR 配置命令:`Router(config-router)# area 10 nssa translate type7 suppress-fa` Caution:Configuring this feature causes the router to be noncompliant with RFC 1587. Also, suboptimal routing might result because there might be better paths to reach the destination’s forwarding address. This feature should not be configured without careful consideration and not until the network topology is understood. ### filter import(area) \[acl/ip-prefix/route-policy] 该命令用来在ABR上作summary lsa过滤, 如果是骨干区域(非骨干区域),就防止从其他非骨干区域(骨干区域)转换到该区域符合特定条件的summary lsa生成,过滤彻底。 对应IOS命令为`Router(config-router)# area _area-id_ filter-list prefix _prefix-list-name_ in filter export(area)[acl/ip-prefix/route-policy]`命令用来在ABR上作summary lsa过滤,如果是骨干区域(非骨干区域),就阻止从该区域转换到其他非骨干区域(骨干区域)符合特定条件的summary lsa生成,过滤彻底。 对应IOS命令为`Router(config-router)# area _area-id_ filter-list prefix _prefix-list-name_ out` [[a9af377267a71ee3629e509bd03bd16d_MD5.png|Open: Pasted image 20240309005648.png]] ![[a9af377267a71ee3629e509bd03bd16d_MD5.png]] 配置summary lsa过滤前,在R3上查看summary lsa的条目: ``` <R3>dis ospf lsdb          OSPF Process 1 with Router ID 3.3.3.3                  Link State Database                          Area: 0.0.0.0  Type      LinkState ID    AdvRouter          Age  Len   Sequence   Metric Sum-Net   100.0.12.0      2.2.2.2            298  28    80000001    1562 Sum-Net   1.1.1.1         2.2.2.2            282  28    80000001    1563 ``` 在R2路由器上过滤100.0.12.0/30的summary lsa不传递到area 0,配置命令如下: ``` ospf 1  area 0.0.0.0   network 2.2.2.2 0.0.0.0   network 100.0.23.0 0.0.0.3  area 0.0.0.100   filter ip-prefix huawei export   //在area 0中配置filter ip-prefix huawei import作用相同   network 100.0.12.0 0.0.0.3 #  ip ip-prefix huawei index 10 deny 100.0.12.0 30  ip ip-prefix huawei index 20 permit 0.0.0.0 0 less-equal 32 ``` 配置后查看R3的summary lsa条目,发现已经没有了100.0.12.0的条目: ``` <R3>dis ospf lsdb          OSPF Process 1 with Router ID 3.3.3.3                  Link State Database                          Area: 0.0.0.0  Type      LinkState ID    AdvRouter          Age  Len   Sequence   Metric Sum-Net   1.1.1.1         2.2.2.2            149  28    80000001    1563 ``` ### abr-summary not-advertise(area) 用来在ABR上summary lsa做过滤,如果是骨干区域(非骨干区域),就防止从该区域转换到其他非骨干区域(骨干区域)符合特定条件的summary lsa生成,类似filter-policy export(area)命令的作用,但又有点区别,该命令只对本区域的区域内路由作过滤不对区域间路由做过滤。(原因是:这条命令是聚合命令,目前我们VRP和IOS的聚合命令的实现是只对本区域的路由做聚合而不对区域间路由做聚合,所以说abr-summary not-advertise这条命令实际只是对本区域的区域内路由起过滤作用。) [[a9af377267a71ee3629e509bd03bd16d_MD5.png|Open: Pasted image 20240309005515.png]] ![[a9af377267a71ee3629e509bd03bd16d_MD5.png]] 对应IOS命令为:`Router(config-router)#area 10 range 1.1.1.0 255.255.255.0 no-advertise` 在R2上配置abr-summary过滤1.1.1.1/32的summary lsa。 `[R2-ospf-1-area-0.0.0.100]abr-summary 1.1.1.1 255.255.255.255 not-advertise` 配置后在R3上查看lsa,发现已经没有了1.1.1.1的lsa信息。 ``` <R3>dis ospf lsdb          OSPF Process 1 with Router ID 3.3.3.3                  Link State Database                          Area: 0.0.0.0  Type      LinkState ID    AdvRouter          Age  Len   Sequence   Metric Sum-Net   100.0.12.0      2.2.2.2             39  28    80000001    1562 ``` ### ospf filter-lsa-out 该命令用来在广播、NBMA、P2P以及P2MP网络中,配置对特定OSPF接口出方向的LSA进行过滤。有以下参数: - all:对所有的LSA(除了Grace LSA)都进行过滤。 - summary:对Network Summary LSA(Type3)进行过滤。 - acl acl-number:指定基本访问控制列表编号。整数形式。 - ase:对AS External LSA(Type5)进行过滤。 - nssa:对NSSA LSA(Type7)进行过滤。 通过对特定OSPF接口出方向的LSA进行过滤可以不向邻居发送无用的LSA,从而减少邻居LSDB的大小,提高网络收敛速度。 当两台路由器之间存在多条链路时,通过配置本地路由器可以在某些链路上过滤LSA的传送,减少不必要的重传,节省带宽资源。 在P2MP网络中配置对指定邻居发送的LSA进行过滤时,需要使用filter-lsa-out peer命令。