1、OSPF中 5类LSA的Forwarding Address关键词Key words:OSPF ,5类LSA,Forwarding Address摘 要Abstract:本文介绍了OSPF协议中关于 ASBR产生5类LSA时,对于Forwarding Address的处理。介绍了RFC2328中的规定,以及IOS及VRP实现的方法和条件。并对Forwarding Address如何影响路由计算的结果及可能产生的问题做了分析。并提出了规避问题的一些方法。RFC中对于 FA的描述1.1 原文1.1.1 RFC2328中2.3 小节The “forwarding address“ has one o
2、ther application. It enables routers in the Autonomous Systems interior to function as “route servers“. For example, in Figure 2 the router RT6 could become a route server, gaining external routing information through a combination of static configuration and external routing protocols. RT6 would th
3、en start advertising itself as an AS boundary router, and would originate a collection of OSPF AS-external-LSAs. In each AS-external-LSA, Router RT6 would specify the correct Autonomous System exit point to use for the destination through appropriate setting of the LSAs “forwarding address“ field. F
4、A还有另一个应用,FA 可以使一个AS 中的某一台路由器成为一个“路由服务器”。这样该路由器宣告自己为一个ASBR,并且把将通过静态配置或者其它路由协议得到的路由信息以 5类LSA 的形式引入到OSPF区域之中,并且通过设定FA来标明正确的AS出口位置。1.1.2 RFC2328中16.4 小节Call the destination described by the LSA N. Ns address is obtained by masking the LSAs Link State ID with thenetwork/subnet mask contained in the body
5、of the LSA. Look up the routing table entries (potentially one per attached area) for the AS boundary router (ASBR) that originated the LSA. If no entries exist for router ASBR (i.e., ASBR is unreachable), do nothing with this LSA and consider the next in the list.Else, this LSA describes an AS exte
6、rnal path to destination N.Examine the forwarding address specified in the AS-external-LSA. This indicates the IP address to which packets for the destination should be forwarded.If the forwarding address is set to 0.0.0.0, packets should be sent to the ASBR itself. If the forwarding address is non-
7、zero, look up the forwarding address in the routing table.24 The matching routing table entry must specify an intra-area or inter-area path; if no such path exists, do nothing with the LSA and consider the next in the list.如果LSA描述的目标网络为N。N 的地址通过LSA中LS ID和LSA体中的网络掩码计算而来。在路由表中查找生成该LSA的 ASBR。如果不存在该ASBR
8、的表项(比如ASBR 不可达),那么对该LSA 不做操作。否则,该LSA就描述了到达AS外部网络N的路径。检查AS-external-LSA中的转发地址,这个地址就是发往该目标网络N的数据包应该被送达的地址。如果转发地址被设为0.0.0.0,包应当被转发到ASBR。如果转发地址不是零,那么在路由表中查找FA。匹配FA的路由表项必须是区域内或区域间路径,如果没有符合条件的表项存在,那么对该LSA不做操作。(如果有默认路由能不能把数据包发向FA?)1.2 例子1.2.1 说明从RFC中对于FA的定义可以看出,FA为外部路由提供了额外的转发信息。FA 的重点有两个部分,一个是ASBR与外部路由器的连
9、接必定是通过一个多点可达的网络(NBMA或者以太网);另一个重点是,FA 非0时,SPF 计算会根据FA来计算目标网络的下一跳,因此需要对覆盖FA 的路由信息做检查。从下面这个例子中可以看到FA的作用。见下图。RouterC为OSPF区域外部的路由器,它通过一个多点可达的网络与 ASBR-1和RouterB连接。ASBR-1将RouterC的网络引入OSPF。当OSPF区域内部的路由器RouterA访问外部网络时,流量会达到RouterB并转发给ASBR-1,然后到达RouterC,也就是图中红线路径。很显然,这样的转发路径在RouterB这里走了一个弯路,因为RouterB完全可以将数据直接
10、通过多点可达网络转发给RouterC,也就是蓝色的路径。当出现这样的情况时,ASBR-1在引入RouterC的外部网络时,将FA 项填写为RouterC 的接口地址 2.2.2.2,这样RouterB会通过SPF 计算,将2.2.2.2作为这些外部网络的下一跳,就避免了数据多传一跳情况的发生。当然在实际情况中可能ASBR-1和RouterB之间有多台设备,虽然只有一个ASBR,但是FA使OSPF区域中不同设备访问外部网络时,可以根据FA计算出更合理的下一跳。图1 FA的作用1.2.2 配置RouterCinterface Ethernet0/0 ip address 2.2.2.2 255.2
11、55.255.0 rip version 2 multicast # interface LoopBack0 ip address 1.1.1.1 255.255.255.255 # rip undo summary network 2.0.0.0 network 1.0.0.0 ASBR-1router id 10.0.0.1# interface Ethernet2/0 ip address 2.2.2.4 255.255.255.0 rip version 2 multicast # interface LoopBack0 ip address 10.0.0.1 255.255.255.
12、255 # ospf 1 import-route rip area 0.0.0.1 network 2.2.2.0 0.0.0.255 network 10.0.0.1 0.0.0.0 # rip undo summary network 2.0.0.0 RouterBrouter id 10.0.0.2 # interface Ethernet0/0/0 ip address 2.2.2.3 255.255.255.0 # interface LoopBack1 ip address 10.0.0.2 255.255.255.255 # ospf 1 area 0.0.0.1 networ
13、k 2.2.2.0 0.0.0.255 network 10.0.0.2 0.0.0.0 1.2.3 结果display ospf lsdb ase 1.1.1.1OSPF Process 1 with Router ID 10.0.0.2Link State DatabaseType : ASELs id : 1.1.1.1Adv rtr : 10.0.0.1Ls age : 304Len : 36Seq# : 80000001Chksum : 0x118aOptions : (DC)Net mask : 255.255.255.255Tos 0 metric: 1E type : 2For
14、warding Address :2.2.2.2Tag: 1display ip routing-tableRouting Table: public netDestination/Mask Protocol Pre Cost Nexthop Interface1.1.1.1/32 O_ASE 150 1 2.2.2.2 Ethernet0/0/02.2.2.0/24 DIRECT 0 0 2.2.2.3 Ethernet0/0/02.2.2.3/32 DIRECT 0 0 127.0.0.1 InLoopBack010.0.0.1/32 OSPF 10 2 2.2.2.4 Ethernet0
15、/0/010.0.0.2/32 DIRECT 0 0 127.0.0.1 InLoopBack0127.0.0.0/8 DIRECT 0 0 127.0.0.1 InLoopBack0127.0.0.1/32 DIRECT 0 0 127.0.0.1 InLoopBack02 FA对路由计算的影响2.1目前 VRP 对 FA 填写的规定这个规定与CISCO的IOS相同。 OSPF在ASBR的下一跳接口启动; ASBR的下一跳接口没有被设置为被动接口; ASBR的下一跳接口不是OSPF P2P或P2MP 类型的; ASBR的下一跳接口地址是落在OSPF协议中发布的网络范围之内; 除此之外,其它情
16、况FA都填为0.0.0.0。2.2 覆盖FA的路由问题在RFC中规定,覆盖FA的路由必须是区域内或区域间路由 。为什么要做这样一个检查呢。我们知道OSPF 是一个无环的链路状态协议,区域内的无环是依靠最短路径树来保证,而区域间的无环是依靠非骨干区域和骨干区域连接来实现,这些方法保证了AS内部路由计算的可靠性。但是OSPF无法控制AS 外部的路由信息是否可靠,FA 本身就是用于转发到达外部网络的地址,如果用一个外部路由来递归查找FA并进行路由计算,那么很可能会导致路由问题。在VRP早期的版本中,对FA的查找可以递归到一个外部路由上,这样会导致问题。我们来看下面的例子。图2 外部路由迭代FA先不考
17、虑所有红色的拓扑部分。正常情况下ASBR-1从RouterA获得了外部路由1.1.1.1/32并且将FA填写为2.2.2.2。在ABR处,实施了路由聚合策略,区域1的所有2网段路由被汇总了。RouterC是一个骨干区域内的路由器,它会获得 3类汇总的LSA2.2.0.0/16和5类LSA1.1.1.1/32并且计算出正确的路由,下一跳都会指向 ABR。这个时候跟前面1.2中的例子基本上是完全相同的。当考虑到红色的拓扑部分时,就有了一些变化。在OSPF区域外部RouterA和RouterD之间运行IGP并且将2.2.2.0/24传递给RouterD,然后ASBR-2做路由引入,将2.2.2.0/
18、24 这样一个 5类的LSA泛洪进骨干区域。这个时候骨干区域内的路由器RouterC的LSA会包括这样 3条:Ase: 1.1.1.1/32 FA=2.2.2.2Ase: 2.2.2.0/24 Adv router=ASBR-2Snet:2.2.0.0/16 Adv router=ABR如果按照更精确的外部路由来递归FA,那么路由计算的结果就是1.1.1.1/32的下一跳指向ASBR-2 ,接着ASBR-2会将数据报文送到RouterD,而RouterD可能没有到达1.1.1.1/32的路由,于是出现问题。可见对于递归FA的路由进行限制是必要的。但是这样的限制又产生了新的问题。2.3FA 导致
19、的问题在CISCO 的IOS早期版本的实现中,对递归FA的路由限制导致了新的问题。在Comm on Routing Problem with OSPF Forwarding Address文档中,OSPF区域内部的路由器无法计算出正确的外部路由。是两个原因导致了这样问题的产生。一个是,在早期的IOS版本,当OSPF 引入RIP路由的时候,同时在RIP和OSPF 宣告了的网络都会被作为5类LSA引入到OSPF的LSDB中。第二个问题是,IOS 会查找精确匹配FA的路由信息,如果该路由不是区域内或者区域间路由,那么对该5类LSA就不做处理。我们看一下原文中的这个例子。 Intert Token R
20、igR2507R2504AB R251ASBR2513IP only3.28.0/24are 13.46.0/24are 13.4.0/2ar 120.1.0/24no-OSPF10/24are 70/24no-OSPF图3 FA产生的问题R2513是一个只运行RIP的路由器,Token Ring 网络是多点可达的。R2515同时运行了RIP和OSPF,并将R2513 的外部网络200.1.1.0/24引入OSPF。这时候因为前面提到的第一个原因,在R2515的LSDB中包括这样几个5类LSAType-5 AS External Link StatesLink ID ADV Router Ag
21、e 3.22.88.0 3.44.66.3 718 3.3.4.0 3.44.66.3 718 3.44.66.0 3.44.66.3 718 200.1.1.0 3.44.66.3 718R2515将这几个5类LSA传递给 R2504,并且对于200.1.1.0/24这个5类LSA,填写FA为R2513的接口地址3.3.4.4。R2504作为ABR在区域边界对3类LSA做了汇总为 3.0.0.0/8。这时候R2507的LSDB就变成这样一个情况:4 个 5类LSA不变,同时有一个覆盖FA的3类LSA(被汇总过的3.0.0.0/8)。进行200.1.1.0/24 的路由计算时,对覆盖FA的路由
22、进行精确匹配,发现3.3.4.0/24 是一个外部路由,于是对该 5类LSA不做处理,结果是R2507 的路由表中没有到达200.1.1.0/24的路由,从而导致错误。规避的方法很多,其实主要就是解决一个问题:当对FA进行路由查找时,防止外部路由成为最精确匹配的路由。所以下面的方法都可以解决问题。 一是在R2504这个ABR处不要对3类LSA进行汇总,那么在R2507上路由计算的结果3.3.4.0/24 就是一个区域间路由,符合RFC的规定,因此5 类LSA200.1.1.0/24也会得到正确的处理。 二是在ASBR处不将3网段作为5类LSA引入,这个方法在早期的IOS版本上就是在ASBR处进
23、行引入路由的过滤。 当然我们也可以在ASBR处对5类LSA也做汇总,只要汇总的结果不比ABR汇总的结果更小,就可以了。2.4 解决2.3问题的方法上一节谈到了FA可能导致的问题,以及解决的方法。其实除了前面讨论到的,还有其它的方法,新的IOS做了改进。当一个接口所属的网络同时在RIP和OSPF中宣告的时候,不会再额外产生一个 5类的LSA 。这样就避免了2.3中出现的问题。但是IOS目前对FA 进行迭代查找时还是会选择最精确的路由,如果最精确匹配到了一条外部路由,那么该ASE就不进行处理。也就是说对于2.2中的情况,IOS还是存在路由问题。不过在IOS的12.3中增加了一个新的特性,可以使用a
24、rea area-id nssa translate type7 suppress-fa命令。在一个NSSA的ABR处,7类LSA转换为5类LSA时,将FA项改为全0并泛洪进骨干区域,这样就可以进行正确的路由计算了。VRP的改进方法则不同,首先,同样是当一个接口所属的网络同时在RIP和OSPF 中宣告的时候,不会再额外产生一个5类的LSA(但VRP与IOS在引入路由时的实现还是小有区别,有兴趣的同学可以做实验比较一下)。更彻底的是,VRP不管是否存在更精确的外部路由来匹配FA 。SPF计算只会用区域内或区域间的路由来迭代查找FA,如果找不到,那么就不处理该5类LSA。这也就是在2.2中VRP可
25、以正确计算出路由的原因。在2.2中,做一点小小的变化,在ABR上改变聚合策略,聚合为2.2.0.0/16 后做not-advertise,这时候骨干区域内的路由器RouterC因为找不到区域内或区域间路由可以覆盖FA ,会放弃对5类LSA1.1.1.1/32 的计算。相比较而言,似乎VRP的实现方法更安全。2.5 到底在哪个路由表里查找 ASBR 和 FA?在RFC中规定,当收到5类LSA并做路由计算时,要求首先看引入该5类LSA的ASBR 是否路由可达,否则就不对该LSA做处理。同样的问题在存在于当FA非0时,需要查找覆盖FA的区域内或者区域间路由,如果存在才进行处理。2.5.1 ASBR的
26、可达性在VRP中做如下实验验证是如何对ASBR进行可达性查找的。比如 2.2中的例子,如果RouterA这里进行路由过滤,只允许1.1.1.1/32放入路由表。这时候虽然全局路由表中没有ASBR 的路由,但是也会计算出正确的外部路由进入路由表。在全局路由表中并不存在ASBR的路由(多数情况下 ASBR只是作为一个LSA用于SPF计算,确实并不会产生全局路由的条目),那么是不是说只要LSA存在,能构造出正确的SPF计算树,就可以计算出正确的外部路由呢。RouterArouter id 10.0.0.3 # interface Ethernet0/0/0 ip address 2.2.1.1 25
27、5.255.255.0 # interface LoopBack0 ip address 10.0.0.3 255.255.255.255 # ospf 1 filter-policy ip-prefix ase import area 0.0.0.0 network 2.2.1.0 0.0.0.255 network 10.0.0.3 0.0.0.0 # ip ip-prefix ase index 10 permit 1.1.1.1 32 RouterA display ip routing-tableRouting Table: public netDestination/Mask Pr
28、otocol Pre Cost Nexthop Interface1.1.1.1/32 O_ASE 150 1 2.2.1.2 Ethernet0/0/02.2.1.0/24 DIRECT 0 0 2.2.1.1 Ethernet0/0/02.2.1.1/32 DIRECT 0 0 127.0.0.1 InLoopBack010.0.0.3/32 DIRECT 0 0 127.0.0.1 InLoopBack0127.0.0.0/8 DIRECT 0 0 127.0.0.1 InLoopBack0127.0.0.1/32 DIRECT 0 0 127.0.0.1 InLoopBack0在RFC
29、的定义中使用了routing table这个词来定义对ASBR可达性,或者FA 迭代查找的位置。 其实这里的routing table是指 OSPF的路由表。无论是IOS 还是VRP 都有一个专门的 ABR&ASBR路由表。在VRP中的命令为display ospf abr-asbrOSPF Process 1 with Router ID 104.0.0.6Routing Table to ABR and ASBRI = Intra i = Inter A = ASBR B = ABR S = SumASBRDestination Area Cost Nexthop InterfaceIB
30、104.0.0.3 0.0.0.0 1 104.1.36.1 Ethernet1/0iS 1.1.1.1 0.0.0.0 1563 104.1.36.1 Ethernet1/0在IOS中的命令为Router# show ip ospf border-routersSPF Process 109 internal Routing TableCodes: i - Intra-area route, I - Inter-area routei 192.168.97.53 10 via 172.16.1.53, Serial0, ABR, Area 0.0.0.3, SPF 3i 192.168.10
31、3.51 10 via 192.168.96.51, Serial0, ABR, Area 0.0.0.3, SPF 3I 192.168.103.52 22 via 192.168.96.51, Serial0, ASBR, Area 0.0.0.3, SPF 3I 192.168.103.52 22 via 172.16.1.53, Serial0, ASBR, Area 0.0.0.3, SPF 3相信对于ASBR可达性的查询是以这个表为依据的。2.5.2 递归FA路由的问题当ASBR可达性查找完成了后,就会看5类LSA的FA是否为0,当非0时,要在routing table中查找是否有
32、合法的表项来迭代FA(合法的为intra&inter )。这里的routing table很显然也并非全局路由表。细心的人可能已经注意到这个问题,在1.2小节中的例子里,路由器RouterB使用了FA 项作为转发 ASE的下一跳。但是在RouterB 的路由表中覆盖FA的只有一条直连路由而已!那么迭代FA的查找肯定不是在全局路由表中进行的。在VRP中,使用dis os rout可以看到这样一张OSPF的路由表。PE3-ospf-1 display ospf routingOSPF Process 1 with Router ID 10.0.0.2Routing TablesRouting fo
33、r NetworkDestination Cost Type NextHop AdvRouter Area2.2.2.0/24 1 Stub 2.2.2.3 10.0.0.2 0.0.0.1.与全局路由表比较一下,会发现即使是直连网段,只要OSPF被使能,就会存在于OSPF 路由表中。PE3-ospf-1 display ip routing-tableRouting Table: public netDestination/Mask Protocol Pre Cost Nexthop Interface1.1.1.1/32 O_ASE 150 1 2.2.2.2 Ethernet0/0/02
34、.2.2.0/24 DIRECT 0 0 2.2.2.3 Ethernet0/0/02.2.2.3/32 DIRECT 0 0 127.0.0.1 InLoopBack0这解释了前面对FA迭代合法性的问题。那么如果在直连网段上OSPF没有被使能,会出现什么情况呢?这时候在OSPF 路由表中存在可迭代FA的intra类型OSPF路由OSPF Process 1 with Router ID 10.0.0.2Routing TablesRouting for NetworkDestination Cost Type NextHop AdvRouter Area2.2.2.0/24 3 Stub 1
35、04.1.23.3 10.0.0.1 0.0.0.1.(104.1.23.3为ASBR-1与RouterB建立OSPF邻接关系的地址 )这时候路由计算的结果将变为:PE3-ospf-1 display ip routing-tableRouting Table: public netDestination/Mask Protocol Pre Cost Nexthop Interface1.1.1.1/32 O_ASE 150 3 104.1.23.3 Ethernet0/0/12.2.2.0/24 DIRECT 0 0 2.2.2.3 Ethernet0/0/02.2.2.3/32 DIREC
36、T 0 0 127.0.0.1 InLoopBack0前一小节中提到VRP对于FA的迭代是直接在合法路由中进行,所以虽然 2.2.2.2地址直连可达,但是因为OSPF 没有在2.2.2.3接口上被使能,所以RouterB的OSPF路由表中只计算出通过ASBR-1到达2.2.2.0/24的路由,按照OSPF路由表计算的结果自然是将下一跳指向了ASBR-1。这个实验说明,如果计算ASE的路由器并不存在与ASBR的直接邻接,并且FA直连可达。为了使FA实现转发的优化,必须在直连FA 的接口也使能OSPF,可以同时将该接口配置为被动接口以减少对网络的影响。比如如下的拓扑。图4 FA对转发的优化IOS是
37、看不到OSPF 路由表的,是不是对于FA的迭代直接在全局路由表中进行了呢?将上面的例子中,将RouterB换成是一个CISCO的设备,如果在2.2.2.3这个接口不使能OSPF ,那么外部ASE是不会被计算。使能2.2.2.3接口后,虽然在全局路由表中的到的结果仍然是直连路由的形式,但这个时候外部ASE得到了正确的计算。可见在IOS中对于FA的迭代合法性检查是在全局路由表中进行的,只不过又做了额外检查:直连FA的接口是否使能了OSPF。比较一下VRP 和 IOS的实现: 当2.2.2.3接口使能OSPF的时候,两个系统都会根据 OSPF路由表迭代FA,正确的计算出ASE的下一跳。 当2.2.2
38、.3接口未使能OSPF的时候,IOS 会丢弃ASE,而VRP相当于按照FA为0进行了路由计算。从这两种实现的比较来看,类似2.4的情况,VRP目前的实现更合理一些。3 总结3.1 FA为0时当一个ASE中的FA 为0时,按照Adv Rtr(也就是ASBR)来计算该ASE的下一跳。3.2 FA为非0 时同时满足如下条件时,ASBR会在ASE的FA 域内填写转发地址。 OSPF在ASBR与外部网络连接的下一跳接口启动; ASBR与外部网络连接的下一跳接口没有被设置为被动接口; ASBR与外部网络连接的下一跳接口不是OSPF P2P或P2MP类型的; ASBR与外部网络连接的下一跳接口地址是落在OS
39、PF协议中发布的网络范围之内;当一个ASE中的FA 为非0时,就不考虑Adv Rtr了,而是用FA来计算该ASE的下一跳。对于IOS,会在全局路由表中寻找精确匹配FA的路由条目,如果这个路由条目不合法(不是ospf inter/intra路由),此LSA就丢弃,不计算。有一种特例就是当匹配FA的路由为直连路由并且该接口OSPF使能的情况下,该LSA 被正确计算。对于VRP ,会在 OSPF路由表中寻找区域内或区域间路由迭代查找FA,如果找不到,该LSA就丢弃,不计算。3.3 组网中需要注意的问题在组网中可能遇到多种版本的IOS或者是VRP,因为这些版本的差异(2.2和2.3介绍),需要在配置规划中注意一些问题。 尽量在ASBR处对外部路由进行聚合。 如果不在ASBR处进行路由聚合,那么进行路由过滤,只引入希望引入的外部路由。 如果ASBR连接外部网络的接口上使能了OSPF,并且该接口连接了一个多点可达的网络,那么在所有 OSPF内的路由器,要可以通过区域内或者区域间路由访问ASBR 连接外部网络的接口地址。 如果路由器并不存在与ASBR的直接邻接,并且FA直连可达。为了使FA实现转发的优化,必须在直连FA的接口也使能OSPF,可以同时将该接口配置为被动接口以减少对网络的影响。