“The "forwarding address" has one other application. It enables routers in the Autonomous System's 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 then 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 LSA's "forwarding address" field.”[1]
FA还有另一个应用,FA可以使一个AS中的某一台路由器成为一个“路由服务器”。这样该路由器宣告自己为一个ASBR,并且把将通过静态配置或者其它路由协议得到的路由信息以5类LSA的形式引入到OSPF区域之中,并且通过设定FA来标明正确的AS出口位置。
“Call the destination described by the LSA N. N's address is obtained by masking the LSA's Link State ID with the network/subnet mask contained in the body 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 external 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-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.”[2]
如果LSA描述的目标网络为N。N的地址通过LSA中LS ID和LSA体中的网络掩码计算而来。在路由表中查找生成该LSA的ASBR。如果不存在该ASBR的表项(比如ASBR不可达),那么对该LSA不做操作。
否则,该LSA就描述了到达AS外部网络N的路径。检查AS-external-LSA中的‘转发地址’,这个地址就是发往该目标网络N的数据包应该被送达的地址。
如果转发地址被设为0.0.0.0,包应当被转发到ASBR。……..
如果转发地址不是零,那么在路由表中查找FA。匹配FA的路由表项必须是区域内或区域间路径,如果没有符合条件的表项存在,那么对该LSA不做操作。
从RFC中对于FA的定义可以看出,FA为外部路由提供了额外的转发信息。FA的重点有两个部分,一个是ASBR与外部路由器的连接必定是通过一个多点可达的网络(NBMA或者以太网);另一个重点是,FA非0时,SPF计算会根据FA来计算目标网络的下一跳,因此需要对覆盖FA的路由信息做检查。从下面这个例子中可以看到FA的作用。
见下图。RouterC为OSPF区域外部的路由器,它通过一个多点可达的网络与ASBR-1和RouterB连接。ASBR-1将RouterC的网络引入OSPF。当OSPF区域内部的路由器RouterA访问外部网络时,流量会达到RouterB并转发给ASBR-1,然后到达RouterC,也就是图中红线路径。很显然,这样的转发路径在RouterB这里走了一个弯路,因为RouterB完全可以将数据直接通过多点可达网络转发给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的作用
RouterC interface Ethernet0/0 ip address 2.2.2.2 255.255.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-1 router 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.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 |
|
RouterB router 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 network 2.2.2.0 0.0.0.255 network 10.0.0.2 0.0.0.0 |
<RouterB>display ospf lsdb ase 1.1.1.1
OSPF Process 1 with Router ID 10.0.0.2 Link State Database
Type : ASE Ls id : 1.1.1.1 Adv rtr : 10.0.0.1 Ls age : 304 Len : 36 Seq# : 80000001 Chksum : 0x118a Options : (DC) Net mask : 255.255.255.255 Tos 0 metric: 1 E type : 2 Forwarding Address :2.2.2.2 Tag: 1
|
|
<RouterB>display ip routing-table Routing Table: public net Destination/Mask Protocol Pre Cost Nexthop Interface 1.1.1.1/32 O_ASE 150 1 2.2.2.2 Ethernet0/0/0 2.2.2.0/24 DIRECT 0 0 2.2.2.3 Ethernet0/0/0 2.2.2.3/32 DIRECT 0 0 127.0.0.1 InLoopBack0 10.0.0.1/32 OSPF 10 2 2.2.2.4 Ethernet0/0/0 10.0.0.2/32 DIRECT 0 0 127.0.0.1 InLoopBack0 127.0.0.0/8 DIRECT 0 0 127.0.0.1 InLoopBack0 127.0.0.1/32 DIRECT 0 0 127.0.0.1 InLoopBack0
|
CMW是H3C网络产品使用的操作系统,CMW对FA的填写作了如下规定:
l OSPF在ASBR的下一跳接口启用;
l ASBR的下一跳接口没有被设置为被动接口;
l ASBR的下一跳接口不是OSPF P2P或P2MP类型的;
l ASBR的下一跳接口地址是落在OSPF协议中发布的网络范围之内;
l 除此之外,其它情况FA都填为0.0.0.0。
在RFC中规定,覆盖FA的路由必须是区域内或区域间路由。为什么要做这样一个检查呢。我们知道OSPF是一个无环的链路状态协议,区域内的无环是依靠最短路径树来保证,而区域间的无环是依靠非骨干区域和骨干区域连接来实现,这些方法保证了AS内部路由计算的可靠性。但是OSPF无法控制AS外部的路由信息是否可靠,FA本身就是用于转发到达外部网络的地址,如果用一个外部路由来迭代查找FA并进行路由计算,那么很可能会导致路由问题。我们来看下面的例子:
先不考虑所有红色的拓扑部分。正常情况下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。这个时候跟第一个例子基本上是完全相同的。
当考虑到红色的拓扑部分时,就有了一些变化。在OSPF区域外部RouterA和RouterD之间运行IGP并且将2.2.2.0/24传递给RouterD,然后ASBR-2做路由引入,将2.2.2.0/24这样一个5类的LSA泛洪进骨干区域。这个时候骨干区域内的路由器RouterC的LSA会包括这样3条:
Ase: 1.1.1.1/32 FA=2.2.2.2
Ase: 2.2.2.0/24 Adv router=ASBR-2
Snet: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的路由进行限制是必要的。
在RFC中规定,当收到5类LSA并做路由计算时,要求首先看引入该5类LSA的ASBR是否路由可达,否则就不对该LSA做处理。当FA非0时,存在类似的问题,需要查找覆盖FA的区域内或者区域间路由,如果存在才进行处理。
在第二个例子中,如果RouterA这里进行路由过滤,只允许1.1.1.1/32放入路由表。这时候虽然全局路由表中没有ASBR的路由,但是也会计算出正确的外部路由进入路由表,下文的配置和路由显示说明了这一点。在全局路由表中并不存在ASBR的路由(多数情况下ASBR只是作为一个LSA用于SPF计算,确实并不会产生全局路由的条目),那么是不是说只要LSA存在,能构造出正确的SPF计算树,就可以计算出正确的外部路由呢?
RouterA router id 10.0.0.3 # interface Ethernet0/0/0 ip address 2.2.1.1 255.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-table Routing Table: public net Destination/Mask Protocol Pre Cost Nexthop Interface 1.1.1.1/32 O_ASE 150 1 2.2.1.2 Ethernet0/0/0 2.2.1.0/24 DIRECT 0 0 2.2.1.1 Ethernet0/0/0 2.2.1.1/32 DIRECT 0 0 127.0.0.1 InLoopBack0 10.0.0.3/32 DIRECT 0 0 127.0.0.1 InLoopBack0 127.0.0.0/8 DIRECT 0 0 127.0.0.1 InLoopBack0 127.0.0.1/32 DIRECT 0 0 127.0.0.1 InLoopBack0
|
在RFC的定义中使用了routing table这个词来定义对ASBR可达性,或者FA迭代查找的位置。 其实这里的routing table是指OSPF的路由表。CMW中有一个专门的ABR&ASBR路由表,可以通过命令display ospf abr-asbr来显示相关的内容:
OSPF Process 1 with Router ID 104.0.0.6
Routing Table to ABR and ASBR
I = Intra i = Inter A = ASBR B = ABR S = SumASBR Destination Area Cost Nexthop Interface IB 104.0.0.3 0.0.0.0 1 104.1.36.1 Ethernet1/0 iS 1.1.1.1 0.0.0.0 1563 104.1.36.1 Ethernet1/0 |
对于ASBR可达性的查询是以这个表为依据的。
当ASBR可达性查找完成了后,就会看5类LSA的FA是否为0,当非0时,要在routing table中查找是否有合法的表项来迭代FA(合法的为intra&inter)。这里的routing table很显然也并非全局路由表。细心的人可能已经注意到这个问题,在1.2小节中的例子里,路由器RouterB使用了FA项作为转发ASE的下一跳,但是在RouterB的路由表中覆盖FA的只有一条直连路由而已!这说明了迭代FA的查找在这里肯定不是在全局路由表中进行的。
在CMW中,使用display ospf routing可以看到这样一张OSPF的路由表。
[RouterB-ospf-1] display ospf routing
OSPF Process 1 with Router ID 10.0.0.2 Routing Tables
Routing for Network Destination Cost Type NextHop AdvRouter Area 2.2.2.0/24 1 Stub 2.2.2.3 10.0.0.2 0.0.0.1 ……….
|
与全局路由表比较一下,会发现即使是直连网段,只要OSPF被使能,就会存在于OSPF路由表中。
[RouterB-ospf-1] display ip routing-table Routing Table: public net Destination/Mask Protocol Pre Cost Nexthop Interface 1.1.1.1/32 O_ASE 150 1 2.2.2.2 Ethernet0/0/0 2.2.2.0/24 DIRECT 0 0 2.2.2.3 Ethernet0/0/0 2.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.2 Routing Tables
Routing for Network Destination Cost Type NextHop AdvRouter Area 2.2.2.0/24 3 Stub 104.1.23.3 10.0.0.1 0.0.0.1 ……….(104.1.23.3为ASBR-1与RouterB建立OSPF邻接关系的地址) |
这时候路由计算的结果将变为:
[RouterB-ospf-1] display ip routing-table Routing Table: public net Destination/Mask Protocol Pre Cost Nexthop Interface 1.1.1.1/32 O_ASE 150 3 104.1.23.3 Ethernet0/0/1 2.2.2.0/24 DIRECT 0 0 2.2.2.3 Ethernet0/0/0 2.2.2.3/32 DIRECT 0 0 127.0.0.1 InLoopBack0
|
前文提到CMW对于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,可以同时将该接口配置为被动接口以减少对网络的影响。比如如下的拓扑。
图3 FA对转发的优化
当一个ASE中的FA为0时,按照Adv Rtr(也就是ASBR)来计算该ASE的下一跳。
同时满足如下条件时,ASBR会在ASE的FA域内填写转发地址。
l OSPF在ASBR与外部网络连接的下一跳接口启动;
l ASBR与外部网络连接的下一跳接口没有被设置为被动接口;
l ASBR与外部网络连接的下一跳接口不是OSPF P2P或P2MP类型的;
l ASBR与外部网络连接的下一跳接口地址是落在OSPF协议中发布的网络范围之内;
当一个ASE中的FA为非0时,就不考虑Adv Rtr了,而是用FA来计算该ASE的下一跳。
对于CMW来说,会在OSPF路由表中寻找区域内或区域间路由迭代查找FA,如果找不到,该LSA就丢弃,不计算。
在组网中可能遇到不同厂家的设备或者是相同厂家不同版本的设备,在对FA的处理上可能会存在不同,所以需要在配置规划中注意一些问题:
l 尽量在ASBR处对外部路由进行聚合。
l 如果不在ASBR处进行路由聚合,那么进行路由过滤,只引入希望引入的外部路由。
l 如果ASBR连接外部网络的接口上使能了OSPF,并且该接口连接了一个多点可达的网络,那么在所有OSPF内的路由器,要可以通过区域内或者区域间路由访问ASBR连接外部网络的接口地址。
l 如果路由器并不存在与ASBR的直接邻接,并且FA直连可达。为了使FA实现转发的优化,必须在直连FA的接口也使能OSPF,可以同时将该接口配置为被动接口以减少对网络的影响。