双点双向重分发问题.note
配置 双点双向重分发时,会有这样一个问题:

如上拓扑,RIP 和 OSPF 进行重分发,小度量值的OSPF双点重分发进入 大度量值的RIP是没有问题的,但是如果是大度量值的 RIP双点重分发进入 OSPF,就会出现这样一个问题,假设先在 R3上将 RIP重分发进入OSPF,以 5.5.5.0/24 路由为例,此时该路由传递给R4,此时R4去往 5.5.5.0/24 就会有两个路径:OSPF 和 RIP,而 OSPF的度量值比RIP更小,所以OSPF的路由更优先,会出现在路由表中,而RIP路由表的这条路由就会冗余消失,此时,R4如果要去往 5.5.5.0/24 就会通过OSPF绕远路去往R5,这样会有一个次优路径的问题;而且,当R4上接收到关于 RIP的路由消失时,再在R4上配置将RIP重分发进入 OSPF就会是失败的,因为此时已经没有RIP的路由了(被OSPF传入的更优先的路由顶替)。
解决方法:
双点双向重分发,不论什么情况,都必须打上 tag 然后拒绝路由回流
当路由器放进路由表中的路由错误,就需要调整AD值(有时是不需要调整的)# 什么情况要降低AD值,例如:
R1
RIP -------- OSPF
R2
RIP中有一条10.1.1.0/24的路由,R1 把 RIP 重分发进 OSPF,并打 tag,R2 收到这条 OSPF 外部路由以后,因为做了tag过滤,所以 R2 不会再把它重分发回 RIP,但是,R2会将这条路由放进本机路由表,此时就出现问题了,原本R2去往10.1.1.0/24这条路由,直接通过RIP即可,但是因为路由表中装载了R1传过来的路由,因此它去往10.1.1.0/24,就会走R1这条OSPF的链路,因为OSPF外部路由AD值为110,RIP路由AD值为120,OSPF外部路由更优先,因此路由表优先装载OSPF外部路由。反过来也是一样,R2将路由传给R1,R1也将这条OSPF路由装进路由表,此时,R1和R2上关于这条路由的RIP路由就消失了,重分发就不会重分发这条RIP路由到OSPF中了,并且还形成了短暂的路由环路(R1丢给R2,R2丢给R1),然后等待一段时间路由过期后,R1和R2上的这条OSPF路由就都会消失(因为这条路由没有源RIP路由重分发进OSPF),它们消失后,次优的RIP正常路由又出现在路由表,然后又经历这个过程,反反复复
# 下面对应关系,需要降低AD值的:
RIP(AD:120) - OSPF(AD:110)
(降低RIP AD值为 100)
router rip
distance 100
EIGRP外部路由(170) - OSPF(110)
(降低EIGRP外部路由AD值为:100)
router eigrp 100
distance eigrp 90 100
EIGRP外部路由(170) - RIP(120)
(降低EIGRP外部路由AD值为:100)
router eigrp 100
distance eigrp 90 100
EIGRP内部路由(90) - OSPF(110) 不需要降低AD值(EIGRP 90 优于 OSPF 110;OSPF 110 优于 EIGRP external 170)
EIGRP内部路由(90) - RIP(120) 不需要降低AD值(EIGRP 90 优于 RIP 120;RIP 120 优于 EIGRP external 170)

1、给两边路由打上tag,分别拒绝:
两边重分发时调用 route-map,先拒绝对端打过tag的路由,然后给剩余的重分发路由打上tag,对端也是一样
# OSPF:
route-map BGP-to-OSPF deny 10
match tag 100
route-map BGP-to-OSPF permit 20
set tag 200
router ospf 100
redistribute bgp 65001 subnets route-map BGP-to-OSPF
# BGP:
route-map OSPF-to-BGP deny 10
match tag 200
route-map OSPF-to-BGP permit 20
set tag 100
router bgp 65001
redistribute ospf 100 route-map OSPF-to-BGP·(注意)在OSPF中,默认路由不会受它限制,因为默认路由是通过 default-information originate通告的,因此我们要在这个命令后应用route-map,限制才会对默认路由生效:
## route-map正常配置即可:
route-map BGP-to-OSPF deny 10
match tag 100
route-map BGP-to-OSPF permit 20
set tag 200
router ospf 1
default-information originate route-map BGP-to-OSPF2、降低AD值:
# 有时候不能降低:
假如:RIP(120)- OSPF(110)双点双向重分发,此时OSPF有一条外部的默认路由(120),重分发给RIP,然后RIP降低AD值为100后,就会对这条路由造成影响
因此有时候不需要降低AD值,或者降低AD值时只针对指定路由条目进行降低
但是只要在降低AD值时,值匹配该协议的原生网段路由来降低,就不会出现这个问题,因为不会改对面被重分发的协议的路由的AD值(能自定内部、外部AD值的就不需要定义匹配网段,直接根据需求修改内部、外部AD值即可)
# rip:
router rip
distance 100 0.0.0.0 255.255.255.255 [ACL/route-map 定义匹配的网段]
# 为什么需要这样做:
第一种打tag的方法解决了路由环路的问题,那么我们来分析解决路由环路后会产生什么样的新问题
举个默认路由例子(不仅是默认路由,所有路由都会出现这个问题):
- R2
假如:RI - - R4
- R3
R1和R2、R3之间运行eigrp,R2、R3和R4 在右边接口运行OSPF,此时R1有一条默认路由(外部引入的)同时传给R2和R3,(在已经解决路由环路问题后)这条路由会同时被R2和R3收到,为了让R4能够接收到这条默认路由,就在R2和R3上使用 default-information originate将它重分发给R4,但是此时就出现问题了,R2会将这条默认路由同时发给R3,R3也会将这条默认路由同时发给R2,我们知道,ospf的外部路由AD值是110,EIGRP的外部路由AD值是170,110更优先于170,此时,在R2和R3上,原本R1通过EIGRP传给R2和R3这两个邻居的默认路由就会被顶掉,并且该默认路由的下一跳不会是R1,而会是R2或者R3,再由它去到R1,并且在路由被顶掉之后,这条EIGRP源路由消失,OSPF重分发就找不到要重分发的默认路由了,因此OSPF中的默认路由也会消失,在它们消失后,优先级更低(AD170)的eigrp默认路由就又会浮现,然后再次经历前面的过程被顶掉,一直重复
所以至此,我们能够得出,根本原因是因为EIGRP外部路由的AD值优先级低于OSPF的外部路由,所以我们就需要修改EIGRP的外部路由AD值,让它优先于OSPF的外部路由
反之,如果默认路由是由OSPF传给EIGRP的,那么就不需要修改AD值,因为它的外部路由AD值本身就优先于EIGRP外部路由所以可以得出结论:
1、这个问题只会在外部路由重分发给其它路由协议时才会发生
2、并且只会在 低优先级的外部管理距离(eigrp) 重分发给 高优先级的外部管理距离(ospf)时 才会出现问题# 路由AD值:
BGP //eBGP:20,iBGP:200
OSPF //内部:110,外部:110
EIGRP //内部:90,外部:170
RIP //内部:120,外部:120
IS-IS //Level-1:115,Level-2:115,外部:115# RIP:
access-list 1 permit 5.5.5.0 //用ACL匹配路由
router rip
# distance 100 //将所有路由AD值设置为100
distance 100 192.168.13.1 0.0.0.0 1 //将 从192.168.13.1邻居传入的路由(邻居router-id),匹配ACL 1,将其AD值改为100
(AD值只需要比OSPF小即可)
# EIGRP:
router eigrp 1
distance eigrp 90 100 //设置内部路由AD值为90(不变),外部路由设置为100(从170设置为100,刚好比OSPF的110小10)
# OSPF:
router ospf 1
distance ospf intra-area 100 inter-area 100 external 121
## intra-area:区域内
## inter-area:区域间
## external:外部
# BGP:
router bgp 65000
distance bgp 20 100 200
# 第一个值20:eBGP路由AD值
# 第二个值100:iBGP路由AD值
# 第三个值200:本地产生的BGP路由的AD值