路由重发布Route Redistribution

在实际的组网中,我们可能会遇到这样一个场景:在一个网络中同时存在两种或者两种以上的路由协议。例如客户的网络原先是纯CISCO的设备,使用EIGRP协议将网络的路由打通。但是后来网络扩容,增加了一批华为的设备,而华为的设备是不支持EIGRP的,因此可能就在扩容的网络中跑一个OSPF,但是这两部分网络依然是需要路由互通的,这就面临一个问题。因为这毕竟是两个不同的路由协议域,在两个域的边界,路由信息是相互独立和隔离的。那么如何将全网的路由打通呢?这就需要用到路由重发布了。

一、技术背景
 

 路由重发布Route Redistribution_第1张图片

我们看上图,R1与R2之间运行RIP来交互路由信息,R2通过RIP学习到了R1发布过来的192.168.1.0/24及2.0/24的RIP路由,装载进路由表并标记为R(RIP)。同时R2与R3又运行OSPF,建立起OSPF邻接关系,R2也从R3、通过OSPF学习到了两条路由:192.168.3.0及192.168.4.0/24,也装载进了路由表,标记为O(OSPF区域内部路由)。

那么这样一来,对于R2而言,它自己就有了去往全网的路由,但是在R2内部,我们可以这么形象的理解:它不会将从RIP学习过来的路由,“变成”OSPF路由告诉给R3,也不会将从OSPF学习来的路由,变成RIP路由告诉给R1。对于R2而言,虽然它自己的路由表里有完整的路由信息,但是,就好像冥冥之中,R和O的条目之间有道鸿沟,无法逾越。而R2就也就成了RIP 及OSPF域的分界点,我们称之为ASBR(AS边界路由器)。

那么如何能够让R1学习到OSPF域中的路由,让R3学习到RIP域中的路由呢?关键点在于R2上,通过在R2上部署路由重发布(Route Redistribution,又被称为路由重分发),可以实现路由信息在不同路由选择域间的传递。

 路由重发布Route Redistribution_第2张图片

上图是初始状态。R2同时运行两个路由协议进程:RIP及OSPF。它通过RIP进程学习到RIP路由,又通过OSPF进程学习到OSPF域内的路由,但是这两个路由协议进程是完全独立的,其路由信息是相互隔离的。
 

 路由重发布Route Redistribution_第3张图片

 

好,现在我们开始在R2上执行重发布的动作,将OSPF的路由“注入”到了RIP路由协议进程之中,如此一来R2就会将192.168.3.0/24及192.168.4.0/24这两条OSPF路由“翻译”成RIP路由,然后通过RIP通告给R1。R1也就能够学习到192.168.3.0/24及192.168.4.0/24路由了。注意重发布的执行点,是在R2上,也就是在路由域的分界点(ASBR)上执行的,另外,路由重发布是有方向的,例如刚才我们执行完相关动作后,OSPF路由被注入到了RIP,但是R3还是没有RIP域的路由,需要进一步在R2上将RIP路由重发布进OSPF,才能让R3学习到192.168.1.0/24及192.168.2.0/24路由。 

路由重发布是一种非常重要的技术,在实际的项目中时常能够见到。由于网络规模比较大,为了使得整体路由的设计层次化,并且适应不同业务逻辑的路由需求,我们会在整个网络中设计多个路由协议域,而为了实现路由的全网互通,就需要在特定设备上部署路由重发布。另外在执行路由重发布的过程中,又可以搭配工具来部署路由策略,或者执行路由汇总,如此一来路由重发布带来一个对路由极富弹性和想象力的操作手柄。

 

二、实施要点

2.1 管理距离问题

 路由重发布Route Redistribution_第4张图片

 

如上图所示,R5将192.168.1.0宣告进了RIP,R3及R4都能够学习到这条路由,并且装载进自己的路由表。为了让OSPF域能够学习到RIP域内的路由,我们在R3及R4上都部署RIP到OSPF的重发布。理想中的情况是,OSPF域内的路由器能同时从R3及R4学习到注入进来的路由。但是情况却没有那么如人意。

假设在R3上先完成的重发布配置,192.168.1.0这条路由将被R3注入到OSPF中,并被更新给R1,再由R2更新给R4,此刻,R4同时从OSPF及RIP都学习到了这条路由,它会作何优选?当然是优选OSPF的,因为AD小,所以它的路由表里,关于192.168.1.0的路由是OSPF的下一跳R2。这样一来,对于R4而言,它去往192.168.1.0网络,就存在次优路径,也就是说,绕远路了,走的是R2-R1-R3-R5这条路径。

并且由于R4路由表里没了关于192.168.1.0的RIP路由,自然RIP向OSPF的重发布就失败了。因为我们说过,只有当路由存在于路由表中时,才能够将该路由注入到其他路由协议中。

以上就是双点路由重发布的模型中,最容易出现的一个问题:次优路径问题,根本原因还是出在管理距离上。几种常见的路由协议其AD值列举如下:

 路由重发布Route Redistribution_第5张图片

解决次优路径的方法有不少,例如我们可以在R4上,将OSPF外部路由的管理距离从缺省的110修改为130,比RIP的管理距离120更大,这样一来,关于192.168.1.0的路由,R4一方面是从R2学习到,类型为OSPF外部路由,另一方面又从RIP学习到,而此时在R4上OSPF外部路由的管理距离被修改为130比RIP要大,因此R4优选来自RIP的192.168.1.0路由,并将RIP路由装载到路由表,次优路径问题即可解决,而且一旦192.168.1.0的RIP路由出现在路由表后,R4的RIP到OSPF重发布就能够成功。

2.2 路由feedback

 路由重发布Route Redistribution_第6张图片

路由的Feedback(倒灌)是一个在部署路由重发布时需要非常注意的一个现象。如上图所示,R5将192.168.1.0宣告进了RIP,R3及R4都能够学习到这条路由,并且装载进自己的路由表。如果我们在R3就R4上部署RIP到OSPF的双向重发布,会发生什么事情呢?我们假设在R3上先完成的配置,192.168.1.0这条路由将被R3注入到OSPF中,并被更新给R1,再由R2更新给R4,到此R4就出现次优路径了,这个上面已经介绍过了,并且由于R4路由表里没了关于192.168.1.0的RIP路由,自然RIP向OSPF的重发布就失败了,更糟糕的是,由于我们在R3及R4上部署的是双向重发布,也就是RIP向OSPF及OSPF向RIP都做了重发布,这就导致R4上关于192.168.1.0的OSPF路由被倒灌回RIP,这就是路由Feedback,路由被灌回来了:

 路由重发布Route Redistribution_第7张图片

 

这是有极大隐患的,非常容易引发路由环路问题。

在上面这个场景中,我们在R3及R4两个点上,部署了RIP到OSPF、OSPF到RIP的双向路由重发布,这种组网被称之为:“双点双向路由重发布”,嗯,非常碉堡了的名字,双点双向重发布的模型在不少组网中被应用,这里头蕴含了许多细节和许多技巧,而且稍微操作不当,就容易引发次优路径或路由环路的问题。关于这块知识点,本文档专门有一个章节做讨论。

2.3 Metric问题

 路由重发布Route Redistribution_第8张图片

要知道,每一种路由协议,对路由Metric(度量值)的定义是不同的,OSPF是用cost(开销)来衡量一条路由的优劣,RIP是用跳数,EIGRP是用混合的各种元素,那么当我将一些路由,从某一中路由协议重发布到另一种路由协议中,这些路由的metric会作何变化呢?

方式之一是,你可以在执行重发布的动作的时候,手工制定重发布后的Metric值,具体改成什么值,要看实际的环境需求,这个我们后面会举例别担心,哥们就这么实诚 :)。 

方式之二是,采用缺省的动作,也就是在路由协议之间重发布时使用的种子度量值。所谓种子度量值,指的就是当我将一条路由从外部路由选择协议重发布到本路由选择协议中时,所使用的缺省Metric值。

看下表(下表是CISCO IOS平台上的种子度量值,可在路由协议进程中使用default-metric修改,有可能的一个情况是,不同网络设备厂商,种子度量值有所不同):

 

路由重发布Route Redistribution_第9张图片

注意,以上是从其他动态路由协议重发布进该路由协议时的默认metric。而如果是重发布本地直连路由或静态路由到该路由协议,情况就不是这样,例如重发布直连或静态到如下路由协议时:

  • EIGRP       请见红茶三杯EIGRP笔记(访问ccietea.com)
  • RIP           重发布直连如果没有设置metric,则默认1跳传给邻居(邻居直接使用这个1跳作为metric);重发布静态路由默认metric=1,使用default-metric可以修改这个默认值,这条命令对重发布直连接口的metric无影响。
  • OSPF        重发布直连接口默认cost=20;重发布静态路由默认cost=20;使用default-metric可以修改重发布静态路由以及其他路由协议的路由进OSPF后的默认cost,只不过这条命令对重发布直连接口无效。 

 

三、 配置实现

3.1 配置命令

路由重发布是有方向的,将路由从A路由协议注入到B路由协议中,我们要在B路由协议的进程中进行配置,例如,要将其他路由协议重发布到RIP,那么配置如下(重发布到其他路由协议大同小异):

Router(config)#router rip

Router(config-router)#redistribute ?

  bgp             Border Gateway Protocol (BGP)

  connected  Connected

  eigrp          Enhanced Interior Gateway Routing Protocol (EIGRP)

  isis              ISO IS-IS

  iso-igrp      IGRP for OSI networks

  metric        Metric for redistributed routes

  mobile       Mobile routes

  odr             On Demand stub Routes

  ospf           Open Shortest Path First (OSPF)

  rip              Routing Information Protocol (RIP)

  route-map      Route map reference

  static               Static routes

 

3.2 配置示例

1. OSPF与RIP的重发布

 路由重发布Route Redistribution_第10张图片

 

R1与R2运行RIPv2;R2与R3建立OSPF邻接关系。初始化情况下R2的路由表中有四个条目,如上图所示,而R1的路由表中,只有2个条目,也就是两个直连链路。现在我们在R2上做重发布动作,将OSPF路由重发布到RIP,配置如下:

R2(config)# router rip

R2(config-router)# redistribute ospf 1 metric 3

上面的命令中ospf 1也就是指的进程1。是R2用于和R3形成邻接关系的OSPF进程号。而metric 3则是将OSPF路由注入到RIP所形成的RIP路由的metric值。

如此一来,R2的路由表中OSPF路由3.3.3.0/24,以及激活OSPF的直连接口所在网段192.168.23.0/24,都被注入到RIP,而R1通过RIP就能够学习到这两条路由,如下图示红色粗体部分。

 路由重发布Route Redistribution_第11张图片

当然,这个时候1.1.1.0是无法访问3.3.3.0的,因为R3并没有RIP路由选择域中的路由(也就是说回程路由有问题,数据通信永远要考虑来回路径,记住了),所以如果要实现全网互通,那么需在R2上,将RIP路由注入到OSPF:

R2(config)#router ospf 1

R2(config-router)#redistribute rip subnets

 路由重发布Route Redistribution_第12张图片

如此一来,就实现了全网互通。注意,当重发布路由到OSPF时,redistribute rip subnets,这个subnets关键字要加上,否则只有主类路由会被注入到OSPF中,因此如果不加关键字subnets,则本例中的子网路由1.1.1.0/24就无法被顺利的注入到OSPF。因此在配置其他路由协议到OSPF的重发布时,这个关键字一般都是要加上的。

 

2. OSPF与EIGRP的重发布

 路由重发布Route Redistribution_第13张图片

初始情况同上一个实验,接下去我们先看看将OSPF路由重发布进EIGRP AS 100,配置当然还是在R2上进行,进入R2的EIGRP路由进程:

R2(config)# router eigrp 100

R2(config-router)# redistribute ospf 1 metric 100000 100 255 1 1500

注意,EIGRP的metric是混合型的,metric 100000 100 255 1 1500 这里指定的参数,从左至右依次是带宽、延迟、负载、可靠性、MTU。可根据实际需要灵活的进行设定。上述配置完成后,R2就会将路由表中OSPF的路由:包括3.3.3.0,以及宣告进OSPF的直连网段192.168.23.0/24注入到EIGRP进程。这样R1就能够学习到这两条外部路由。

接下去是EIGRP到OSPF的重发布:

R2(config)# router ospf 1

R2(config-router)# redistribute eigrp 100 subnets

 

3.重发布直连路由

 路由重发布Route Redistribution_第14张图片

在上图中,R1的Fa1/0口并没有在OSPF进程中使用network命令激活OSPF。也就是说R2及R3是无法通过OSPF学习这个接口的直连路由。对于目前的整个OSPF域而言,1.1.1.0/24这条R1的直连路由就是域外的路由,整个域并不知晓。

现在我们可以在R1上部署重发布,将R1的直连路由注入到OSPF域中,形成OSPF外部路由,然后通告给域内的其他路由器。在这里要注意区分使用network命令激活接口,与使用重发布直连将接口路由注入OSPF的区别。

当我们在R1上使用OSPF的network命令将Fa1/0接口激活OSPF时,实际上是触发了两个事情,一是这个接口会激活OSPF于是开始尝试发送组播的Hello消息去发现链路上的其他OSPF路由器,二是这个接口会参与OSPF计算和操作,R1会将描述这个接口的相关信息通过OSPF扩散给其他的路由器,以便他们能够学习到1.1.1.0/24的路由,而且这些路由是OSPF内部路由。

而当我们在R1上不用network命令去激活Fa1/0口,而是直接用redistribute connected subnets命令将直连路由注入到OSPF,情况就不一样了。一是这个接口的直连路由会被以外部路由的形式注入到OSPF中,这将联动地产生许多细节上的不同;另外,这个接口并不激活OSPF,也就是说接口不会收发HELLO包。另一个有意思的地方是,redistribute connected subnets一旦在R1上被部署,则R1上所有未被OSPF network命令激活OSPF的接口的直连路由都会被注入到OSPF中:

 

 路由重发布Route Redistribution_第15张图片

R2(config)# router ospf 1

R2(config-router)# redistribute connected subnets

上面这条命令就是将本地所有直连路由(除了已经被network宣告的路由)注入到OSPF中。所有的动态路由协议都支持将直连路由重发布进路由域,命令都是类似的:redistribute connected。

 

4.重发布静态路由

 路由重发布Route Redistribution_第16张图片

在上图所示的场景中,R2与R3建立OSPF邻接关系,而R1可能由于不支持OSPF或者其他原因,没有运行OSPF。为了让R2能够访问1.1.1.0/24网络,我们给R2配置了一条静态路由:

R2(config)# ip route 1.1.1.0 255.255.255.0 192.168.12.1

这样R2确实是能够访问1.1.1.0/24网络了,但是R3,以及整个OSPF域内的其他路由器依然是无法访问的,总不能给所有的OSPF路由器们都配置一条静态路由去往1.1.1.0/24吧。

解决的办法很简单,就是在R2上部署静态路由重发布。命令如下:

R2(config)# router ospf 1

R2(config-router)# redistribute static subnets

上面这条命令的结果是,R2的路由表中,有的静态路由都会被注入到OSPF中形成OSPF外部路由,并且通过OSPF动态地传递到整个OSPF域。

 

3.3重发布的几个小问题

1.关联出接口的静态路由 在被network时的问题

 路由重发布Route Redistribution_第17张图片

R2、R3跑RIP,在R2上配置静态路由(使用关联出接口的方式进行配置):

R2(config)# ip route 1.1.1.0 255.255.255.0 serial 0/0

在R2上查看路由表,你会发现刚才配置的这条路由在路由表中的现实很诡异,“directly connected”的意思是,路由器将1.1.1.0/24网络视为本地的直连网络,这是因为它认为,1.1.1.0/24这个网络就在家门口“Serial0/0“。

R2#show ip route

S       1.1.1.0 is directly connected, Serial0/0

 

接下去,R2在RIP进程中增加如下配置:

R2(config)# router rip

R2(config-router)# version 2

R2(config-router)# no auto-summary

R2(config-router)# network 192.168.23.0

R2(config-router)# network 1.0.0.0

则R2会将路由1.1.1.0/24宣告进RIP并将路由通告给R3。对于IGP而言,无论是RIP、EIGRP还是OSPF,要想使用关键字network来通告某条路由,这条路由都必须是本地直连的,但是这里是个特例,正是因为采用出接口的方式配置的静态路由,被认为是本地直连,所以才能够使用network命令通告。当然,如果将上面的静态路由修改为采用下一跳IP地址的方式配置,例如ip route 1.1.1.0 255.255.255.0 192.168.12.1,那就不行了。

如果的环境中,R2及R3换成EIGRP,则现象与RIP一样,R2会将1.1.1.0宣告进EIGRP

如果换成OSPF,则无效,即关联出接口的静态路由,在OSPF中network该路由的网络号时,并不会被宣告进OSPF。

 

2.关联出接口的静态路由 在重发布时的问题

 路由重发布Route Redistribution_第18张图片

R2、R3跑RIP,在R2上配置静态路由(使用关联出接口的方式进行配置):

R2(config)# ip route 1.1.1.0 255.255.255.0 serial 0/0

此时在R2上:

R2(config)# router rip

R2(config-router)# redistribute connected

结果是R3无法学习到1.1.1.0/24的路由,换成EIGRP、OSPF,现象也一样,R2不会将1.1.1.0/24这条路由注入到动态路由协议中。

 

3.只有在路由表中存在的路由才能够被重发布

路由重发布Route Redistribution_第19张图片

在R2上进行双向重发布,也就是配置RIP到OSPF,以及OSPF到RIP的重发布。则正常情况下R1能够学习到3.3.3.0/24路由、R3能学到1.1.1.0/24路由。

如果在R2上增加一条静态路由的配置:ip route 1.1.1.0 255.255.255.0 null0,这个时候R2路由表中原有的RIP的1.1.1.0 路由因为管理距离的原因,会被静态路由1.1.1.0/24覆盖掉,也就是说R2的路由表中,关于1.1.1.0/24路由现在是Static的了。

因此R2在将RIP重发布到OSPF时,路由1.1.1.0/24重发布不成功(在路由表中并没有RIP路由1.1.1.0/24),所以R3无法学习到1.1.1.0/24的路由;

同样,如果R2增加配置:ip route 3.3.3.3 255.255.255.0 null0也是一样的道理。

重发布是看路由表的,例如我将OSPF重发布到EIGRP,那么首先目标路由必须得在我路由表里有,而且必须是OSPF的路由,才能够被注入到EIGRP。

另外,这里有个小注意事项,回到上面这个图,R2上部署RIP到OSPF的重发布,注意R2左边这个接口(与R1对接的接口)的直连路由也会自动重发布到了OSPF中,这是因为该接口是直连并且已经通过network的方式通告进了RIP,因此能够被自动重发布到OSPF,而无需满足上文我们提到的条件。

 

红茶三杯(http://weibo.com/vinsoney)原创文章,作者版权所有,转载请注明出处

 

 

你可能感兴趣的:(网络协议)