剪不断理还乱的缺省路由第三篇.docx
《剪不断理还乱的缺省路由第三篇.docx》由会员分享,可在线阅读,更多相关《剪不断理还乱的缺省路由第三篇.docx(19页珍藏版)》请在冰豆网上搜索。
剪不断理还乱的缺省路由第三篇
剪不断理还乱的缺省路由(第三篇)
作者:
黄明祥 ▪ 资料开发部
缺省路由综合应用案例(BGP-OSPF缺省路由)
网络规划
网络拓扑及IP地址规划如图1 所示:
图1 网络拓扑及IP地址规划
路由部署
1、路由总体部署
图2 路由总体部署
如图2 所示,总体路由部署如下:
骨干层和汇聚层分别是两个自治系统,AS100有两个出口路由器RTC,RTD上行到AS200。
骨干层RTE和RTF之间运行OSPFarea0 ;汇聚层RTA、RTB、RTC、RTD之间运行OSPFarea0。
AS200与AS100建立EBGP邻居关系,即RTE与RTC,RTF与RTD建立EBGP邻居关系;RTC与RTD,RTE与RTF建立IBGP邻居关系。
骨干层通过RTE、RTF下发BGP缺省路由引导汇聚层流量出AS,汇聚层将OSPF明细路由引入BGP通告给骨干层。
汇聚层出口设备RTC、RTD通过OSPF强制下发缺省路由给汇聚层各个设备,引导汇聚层流量上行。
2、发布缺省路由
骨干层不希望汇聚层知道它的明细路由,因此骨干层通过RTE、RTF下发BGP缺省路由引导上行流量。
为减少汇聚层各设备的路由表规模,汇聚层ASBR通过OSPF给汇聚层各个下挂设备强制下发缺省路由引导上行流量。
如图3所示,AS200与AS100间通过BGP下发缺省路由的方式向汇聚层下发缺省路由,AS100内部ASBR通过OSPF强制下发方式分别下发缺省路由。
图3 发布缺省路由
配置完成后,RTC上通过EBGP学习到一条指向RTE的缺省路由,RTD上通过EBGP学习到一条指向RTF的缺省路由。
RTA和RTB都是通过OSPF学习到两条等价的缺省路由,负载分担。
详细如下所示:
RouteFlags:
R-relay,D-downloadtofib
------------------------------------------------------------------------------
RoutingTables:
Public
Destinations:
24 Routes:
26
Destination/Mask Proto Pre Cost FlagsNextHop Interface
0.0.0.0/0 EBGP 255 0 D 192.168.7.1 GigabitEthernet1/0/0
……
displayiprouting-table
RouteFlags:
R-relay,D-downloadtofib
------------------------------------------------------------------------------
RoutingTables:
Public
Destinations:
24 Routes:
26
Destination/Mask Proto Pre Cost FlagsNextHop Interface
0.0.0.0/0 EBGP 255 0 D 192.168.8.1 GigabitEthernet1/0/0
……
displayiprouting-table
RouteFlags:
R-relay,D-downloadtofib
------------------------------------------------------------------------------
RoutingTables:
Public
Destinations:
18 Routes:
21
Destination/Mask Proto Pre Cost FlagsNextHop Interface
0.0.0.0/0 O_ASE 150 1 D 192.168.2.1 GigabitEthernet0/0/0
O_ASE 150 1 D 192.168.5.1 GigabitEthernet0/0/1
……
displayiprouting-table
RouteFlags:
R-relay,D-downloadtofib
------------------------------------------------------------------------------
RoutingTables:
Public
Destinations:
18 Routes:
21
Destination/Mask Proto Pre Cost FlagsNextHop Interface
0.0.0.0/0 O_ASE 150 1 D 192.168.3.1 GigabitEthernet0/0/0
O_ASE 150 1 D 192.168.4.1 GigabitEthernet0/0/1
……
业务流向
如图4所示,按照上述组网规划进行业务部署以后,上行流量依靠RTA和RTB、及RTC和RTD的缺省路由引导出去,RTA和RTB上行的流量负载分担。
图4 OSPF强制下发时的业务流向
OSPF强制下发缺省路由可能产生环路和次优路由的问题
特殊场景下产生次优路由
如图5 所示,RTD的上行链路故障后,RTD不能从RTF学到BGP缺省路由,但由于RTC和RTD是IBGP邻居关系,所以RTD可以通过RTC学习到缺省路由。
而RTD上依然给下挂设备下发缺省路由,所以RTA的出流量负载分担,有部分流量发往RTD,这条转发路径并不是最优的,产生了次优路由。
图5 OSPF强制下发缺省路由-特殊场景下产生次优路由
特殊场景下产生环路
如图6所示,RTD的上行链路以及RTD连接RTC的横穿链路故障以后,RTD不能从RTF学到BGP缺省路由,但还可以通过RTA、RTB学到IBGP缺省路由(因为RTC和RTD是IBGP邻居关系,而BGP基于TCP的连接,所以只要还有路由能通即可建立IBGP邻居关系),形成负载分担;该缺省路由经过一次迭代,实际下一跳指向了RTA和RTB。
而RTA的缺省路由下一跳指向RTC和RTD。
按照上述缺省路由的指引,RTA的部分流量发往RTD,RTD的部分流量又重新发回RTA,在RTA和RTD之间形成环路。
问题主要是链路故障以后,RTD依然“固执”的给RTA和RTB下发缺省路由导致的。
图6 OSPF强制下发缺省路由-特殊场景下产生环路
详细的路由表如下:
displayiprouting-table
RouteFlags:
R-relay,D-downloadtofib
------------------------------------------------------------------------------
RoutingTables:
Public
Destinations:
18 Routes:
21
Destination/Mask Proto Pre Cost FlagsNextHop Interface
0.0.0.0/0 O_ASE 150 1 D 192.168.5.1 GigabitEthernet0/0/1
O_ASE 150 1 D 192.168.2.1 GigabitEthernet0/0/0
……
[RTD]display iprouting-table 0.0.0.0verbose
RouteFlags:
R-relay,D-downloadtofib
------------------------------------------------------------------------------
RoutingTable:
Public
SummaryCount:
1
Destination:
0.0.0.0/0
Protocol:
IBGP ProcessID:
0
Preference:
255 Cost:
0
NextHop:
10.3.3.3 Neighbour:
10.3.3.3
State:
ActiveAdvRelied Age:
00h01m16s
Tag:
0 Priority:
low
Label:
NULL QoSInfo:
0x0
IndirectID:
0x1
RelayNextHop:
192.168.5.2 Interface:
GigabitEthernet0/0/1
TunnelID:
0x0 Flags:
RD
RelayNextHop:
192.168.3.2 Interface:
GigabitEthernet0/0/2
TunnelID:
0x0
……
OSPF强制下发缺省路由存在的问题总结
特殊场景下产生环路和次优路由的根本原因是OSPF配置了强制下发缺省路由,这样无论RTC、RTD本机是否存在激活的非OSPF缺省路由,都会产生并发布一个描述缺省路由的LSA。
说的通俗一点就是RTC、RTD在下发OSPF缺省路由的时候太固执,不够灵活。
可以通过配置OSPF非强制下发,同时配合修改路由协议优先级来解决上述问题,具体细节在下面的章节中进行讲解。
OSPF非强制下发缺省路由解决环路和次优路由的问题
OSPF非强制下发缺省路由的规则
根据上一节的分析,特殊场景下产生次优路由和环路的根本原因是OSPF配置了强制下发缺省路由,这样无论RTC、RTD本机是否存在激活的非OSPF缺省路由,都会产生并发布一个描述缺省路由的LSA。
能否让OSPF下发缺省路由灵活一点,不那么固执呢?
可以通过配置OSPF非强制下发缺省路由,同时配合修改路由协议优先级来实现。
图7 OSPF非强制下发缺省路由
如图7所示,通过ospf进程视图下配置default-route-advertise命令实现OSPF非强制下发缺省路由,此时RTC和RTD上面OSPF遵循如下原则下发缺省路由:
当RTC和RTD都满足非强制下发的条件(即当前路由表中存在激活的非OSPF缺省路由时),同时下发缺省路由LSA时,相互不学习到对方的OSPF缺省路由(OSPF路由表中不生成缺省路由)。
此时即使手工调高OSPF外部路由的优先级(如改为10)使其优于当前路由表中的缺省路由,路由器也不学习到对方的OSPF缺省路由。
当其中一台路由器(RTD)不满足非强制下发的条件时(即当前路由表中不存在激活的非OSPF缺省路由时),会计算、学习到对方的OSPF缺省路由。
当RTD上再次通过其它路由协议(包括静态)学习到缺省路由后,除非该路由的协议优先级高于OSPF外部路由,否则仍不会触发RTD下发OSPF缺省路由(这一点在后面会详细讲解,并给出解决方案)。
此时业务流向图如图8所示:
图8 OSPF非强制下发缺省路由时的业务流向
特殊场景下次优路由的消失
如图9 所示,当RTD的上行链路故障时, RTD上不存在激活的非OSPF进程的缺省路由了,此时RTD不再给汇聚层设备下发OSPF缺省路由,这样RTA的上行流量只有一个出口。
虽然此时RTD的缺省路由指向RTC,但是由于RTA没有发往RTD的流量,所以不会形成次优路由。
此时,整个汇聚层以RTC为出口。
图9 OSPF非强制下发缺省路由-次优路由消失
详细路由表项如下:
display iprouting-table
RouteFlags:
R-relay,D-downloadtofib
------------------------------------------------------------------------------
RoutingTables:
Public
Destinations:
18 Routes:
20
Destination/Mask Proto Pre Cost FlagsNextHop Interface
0.0.0.0/0 O_ASE 150 1 D 192.168.2.1 GigabitEthernet0/0/0
……
display iprouting-table
RouteFlags:
R-relay,D-downloadtofib
------------------------------------------------------------------------------
RoutingTables:
Public
Destinations:
21 Routes:
23
Destination/Mask Proto Pre Cost FlagsNextHop Interface
0.0.0.0/0 O_ASE 150 1 D 192.168.1.1 GigabitEthernet0/0/0
……
特殊场景下环路的消失
如图10所示,当RTD的上行链路以及RTD和RTC互联的链路同时故障时,RTD上不存在激活的非OSPF进程的缺省路由了,此时RTD不再给汇聚层设备下发OSPF缺省路由,这样RTA的上行流量都只有一个出口。
同时RTD从RTA和RTB上学习到两条OSPF缺省路由,负载分担。
但是由于这样RTA的上行流量都只有一个出口,不会有流量发往RTD,因此不会形成环路。
此时,整个汇聚层以RTC为出口。
图10 OSPF非强制下发缺省路由-环路消失
详细路由表项如下:
display iprouting-table
RouteFlags:
R-relay,D-downloadtofib
------------------------------------------------------------------------------
RoutingTables:
Public
Destinations:
18 Routes:
20
Destination/Mask Proto Pre Cost FlagsNextHop Interface
0.0.0.0/0 O_ASE 150 1 D 192.168.2.1 GigabitEthernet0/0/0
……
[RTD]disiprouting-table
RouteFlags:
R-relay,D-downloadtofib
------------------------------------------------------------------------------
RoutingTables:
Public
Destinations:
18 Routes:
20
Destination/Mask Proto Pre Cost FlagsNextHop Interface
0.0.0.0/0 O_ASE 150 1 D 192.168.5.2 GigabitEthernet0/0/1
O_ASE 150 1 D 192.168.3.2 GigabitEthernet0/0/2
……
修改EBGP默认路由优先级使之优于O_ASE
在IP网络规划设计的时候,针对本文所描述的组网场景,一般建议修改EBGP默认路由优先级使之优于O_ASE。
那么为什么会有这样的建议呢?
下面通过实验详细说明。
在前面的讨论中,当RTD的上行链路故障时,在OSPF非强制下发的时候不会形成次优路由,RTD不具备下发缺省路由的条件了,因此不再下发缺省路由,RTA和RTB上行只有一条下一跳指向RTC的缺省路由。
那么当RTD的上行链路恢复正常的时候,是不是应该重新恢复成原来的流量模型?
即RTA和RTB都是有两条缺省路由。
把RTD的上行链路shutdown以后,路由表项如下:
displayiprouting-table
RouteFlags:
R-relay,D-downloadtofib
------------------------------------------------------------------------------
RoutingTables:
Public
Destinations:
18 Routes:
20
Destination/Mask Proto Pre Cost FlagsNextHop Interface
0.0.0.0/0 O_ASE 150 1 D 192.168.2.1 GigabitEthernet0/0/0
……
displayiprouting-table
RouteFlags:
R-relay,D-downloadtofib
------------------------------------------------------------------------------
RoutingTables:
Public
Destinations:
18 Routes:
20
Destination/Mask Proto Pre Cost FlagsNextHop Interface
0.0.0.0/0 O_ASE 150 1 D 192.168.4.1 GigabitEthernet0/0/1
……
[RTC]display iprouting-table
RouteFlags:
R-relay,D-downloadtofib
------------------------------------------------------------------------------
RoutingTables:
Public
Destinations:
23 Routes:
25
Destination/Mask Proto Pre Cost FlagsNextHop Interface
0.0.0.0/0 EBGP 255 0 D 192.168.7.1 GigabitEthernet1/0/0
……
[RTD]displayiprouting-table
RouteFlags:
R-relay,D-downloadtofib
------------------------------------------------------------------------------
RoutingTables:
Public
Destinations:
21 Routes:
23
Destination/Mask Proto Pre Cost FlagsNextHop Interface
0.0.0.0/0 O_ASE 150 1 D 192.168.1.1 GigabitEthernet0/0/0
……
从上述表项可以看出,RTD不具备下发缺省路由的条件以后,不再下发缺省路由,RTA和RTB上都只有一条下一跳指向RTC的缺省路由。
接下来,把RTD的上行链路恢复正常,可以发现虽然RTD重新从EBGP学习到了缺省路由,但是仍然没有触发RTD下发OSPF缺省路由,RTA、RTB、RTC、RTD的路由表项仍然和链路没恢复的时候是一样的。
这是为什么呢?
按照网络规划这显然不是理想的可靠性要求,这样会导致当链路恢复正常的时候所有AS100的流量都以RTC为出口,给RTC带来的极大的流量压力。
产生上述现象的原因在“OSPF非强制下发缺省路由的规则”小节里面已经讲过,当RTD上再次通过其它路由协议(包括静态)学习到缺省路由后,除非该路由的协议优先级高于OSPF外部路由,否则仍不会触发RTD下发OSPF缺省路由。
默认情况下EBGP的优先级为255,低于O_ASE路由的优先级150,这样当然就不能触发RT