一、技术背景
在实际的组网中,可能会遇到这样一个场景:在一个网络中同时存在两种或者两种以上的路由协议。例如客户的网络原先是纯 Cisco 的设备,使用 EIGRP 协议将网络的路由打通。但是后来网络扩容,增加了一批华为的设备,而华为的设备是不支持 EIGRP 的,因此可能就在扩容的网络中跑一个 OSPF,但是这两部分网络依然是需要路由互通的,这就面临一个问题。因为这毕竟是两个不同的路由协议域,在两个域的边界,路由信息是相互独立和隔离的。那么如何将全网的路由打通呢?这就需要用到路由重发布(Route Redistribution,又被称为路由重分发)。
看上图,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 Boundary Routers,AS 边界路由器)。
那么如何能够让 R1 学习到 OSPF 域中的路由,让 R3 学习到 RIP 域中的路由呢?关键点在于 R2 上,通过在 R2 上部署路由重发布,可以实现路由信息在不同路由选择域间的传递。
上图是初始状态。R2 同时运行两个路由协议进程:RIP 及 OSPF。它通过 RIP 进程学习到 RIP 路由,又通过 OSPF 进程学习到 OSPF 域内的路由,但是这两个路由协议进程是完全独立的,其路由信息是相互隔离的。
现在开始在 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 管理距离问题
如上图所示,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 值列举如下:
解决次优路径的方法有不少,例如可以在 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
路由的 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,路由被灌回来了:
这是有极大隐患的,非常容易引发路由环路问题。
在上面这个场景中,在 R3 及 R4 两个点上,部署了 RIP 到 OSPF、OSPF 到 RIP 的双向路由重发布,这种组网被称之为:“双点双向路由重发布
”。双点双向重发布的模型在不少组网中被应用,这里头蕴含了许多细节和许多技巧,而且稍微操作不当,就容易引发次优路径或路由环路的问题。
2.3 Metric 问题
要知道,每一种路由协议,对路由 Metric(度量值)的定义是不同的,OSPF 是用 cost(开销)来衡量一条路由的优劣,RIP 是用跳数,EIGRP 是用混合的各种元素,那么当将一些路由,从某一中路由协议重发布到另一种路由协议中,这些路由的 metric 会作何变化呢?
方式一是,你可以在执行重发布的动作的时候,手工指定重发布后的 Metric 值,具体改成什么值,要看实际的环境需求。
方式二是,采用缺省的动作,也就是在路由协议之间重发布时使用的种子度量值。所谓种子度量值,指的是当将一条路由从外部路由选择协议重发布到本路由选择协议中时,所使用的缺省 Metric 值。
看下表(下表是 Cisco IOS 平台上的种子度量值,可在路由协议进程中使用 default-metric 修改,有可能的一个情况是,不同网络设备厂商,种子度量值有所不同
):
注意,以上是从其他动态路由协议重发布进该路由协议时的默认 metric。而如果是重发布本地直连路由或静态路由到该路由协议,情况就不是这样,例如重发布直连或静态到如下路由协议时:
- EIGRP 请见红茶三杯 EIGRP 笔记(访问 ccietea.com)【访问异常】20240717
- 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 的重发布
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 就能够学习到这两条路由,如下图示红色粗体部分。
当然,这个时候 1.1.1.0 是无法访问 3.3.3.0 的,因为 R3 并没有 RIP 路由选择域中的路由(也就是说回程路由有问题,数据通信永远要考虑来回路径),所以如果要实现全网互通,那么需在 R2 上,将 RIP 路由注入到 OSPF:
R2 (config)#router ospf 1
R2 (config-router)#redistribute rip subnets
如此一来,就实现了全网互通。注意,当重发布路由到 OSPF 时,redistribute rip subnets,subnets 关键字要加上,否则只有主类路由会被注入到 OSPF 中,如果不加关键字 subnets,则本例中的子网路由 1.1.1.0/24 就无法被顺利的注入到 OSPF
。因此在配置其他路由协议到 OSPF 的重发布时,这个关键字一般都是要加上的
。
2. OSPF 与 EIGRP 的重发布
初始情况同上一个实验,接下去先看看将 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. 重发布直连路由
在上图中,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 中。
R2 (config)# router ospf 1
R2 (config-router)# redistribute connected subnets
上面这条命令就是将本地所有直连路由(除了已经被 network 宣告的路由)注入到 OSPF 中。所有的动态路由协议都支持将直连路由重发布进路由域
,命令都是类似的:redistribute connected。
4. 重发布静态路由
在上图所示的场景中,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 1R2 (config-router)# redistribute static subnets
上面这条命令的结果是,R2 的路由表中,所有的静态路由都会被注入到 OSPF 中形成 OSPF 外部路由,并且通过 OSPF 动态地传递到整个 OSPF 域。
3.3 重发布的几个小问题
1. 关联出接口的静态路由 在被 network 时的问题
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. 关联出接口的静态路由 在重发布时的问题
R2、R3 跑 RIP,在 R2 上配置静态路由(使用关联出接口的方式进行配置):
R2 (config)# ip route 1.1.1.0 255.255.255.0 serial 0/0
此时在 R2 上:
R2 (config)# router ripR2 (config-router)# redistribute connected
结果是 R3 无法学习到 1.1.1.0/24 的路由,换成 EIGRP、OSPF,现象也一样,R2 不会将 1.1.1.0/24 这条路由注入到动态路由协议中。
3. 只有在路由表中存在的路由才能够被重发布
在 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
,而无需满足上文提到的条件。
注:原文所有图防盗链不能直接被 csdn 转存,全部重传。
via:
-
路由重发布 Route Redistribution 红茶三杯新浪博客 红茶三杯 2014-09-06 10:19:34)
https://blog.sina.com.cn/s/blog_5ec353710102v23a.html