路由重分布
路由重分布所解决的问题
如下图所示,R1中运行的是RIP协议,R3是运行OSPF协议,由于两者运行的协议不同,所以RIP域内的路由是无法学习到OSPF域内的路由的
换句话说,R1上是没有OSPF域上的路由表的,而R3上也是没有RIP域内的路由表的,这就导致了双方是无法通信的
但是由于R2上同时运行着两种协议,所以R2的路由表中应该是有RIP和OSPF两者的路由条目的
这个时候我们就可以使用路由重分布技术来在R2上,将在OSPF中学到的路由引入到RIP中,RIP中学到的路由引入到OSPF中
除此之外,重分布可以和路由策略相互结合,针对一些特定的路由拒绝它们重发布
还可以修改它们重发布的其它路由的开销值、路由类型等
重发布的位置
重发布的位置必须是在两个路由协议之间的路由器,即区域边界路由器(ASBR)
因为ASBR上运行着至少两种路由协议,ASBR对于两种路由协议都有它们的路由表
并且路由器重发布的路由是一定会存在该设备上的路由表中的
由于直连路由也存在与路由表中,所以直连路由同样也可以被我们引入其它路由协议中
路由重分布的场景
1、在公司的出口处,我们会使用安全性较高的静态路由,可以将这个静态路由引入到下联内网中的IGP协议中
2、两个公司合并的时候,新公司A使用的是OSPF协议,旧公司使用的是RIP协议
3、公司需要更换路由协议的时候
4、大型的骨干网络使用BGP,边缘设备使用OSPF时,需要将OSPF和BGP的路由双向重发布
路由重发布的配置命令
路由重发布命令的差别主要是重发布到RIP协议中与其它协议之间
由于RIP协议是无类路由协议,是不区分主类网络和子网的,只去关注跳数和网络地址本身,所以在重发不进RIP协议中,是不需要加上subnets的
重发布到OSPF进程中
router ospf 1
redistribute [bgp | rip | static | connected | isis] subnets [metric | metric-type | route-map | tag]
重发布到RIP进程中
router rip
redistribute [bgp | ospf id | static | connected | isis area-tag] [metric | route-map]
在重发布时,需要注意几个点
1、重发布是有方向的,如OSPF重发布到RIP中,这仅仅只是单向的,如下图,使得RIP中有OSPF的路由,但OSPF中没有RIP的路由
这必然会使得两个路由协议之间的通信出现问题。所以我们做的更多的是路由双向重发布
2、重发布的路由必须存在重发布路由器上才能进行重发布,如上图,R2上重发布20.0和40.0的基础上是,R2本身就有它们的路由条目,换句话说,R2需要知道20.0和40.0怎么走,才能告诉其它人怎么去往20.0和40.0
策略路由+路由重发布
策略路由与路由重发布两者相互结合,可以做到在重分布时针对某些特定的路由进行过滤或执行某些策略,如允许某些路由通告,不允许某些路由通过,针对某些路由修改开销值等
策略路由+路由重发布的配置步骤
1、使用ACL或Prefix-list(前缀列表)来匹配路由
2、在route-map中引入ACL/Prefix-list
3、重发布的时候,在redistribute 后引入route-map
匹配路由
匹配路由的方式有两种,1、ACL,2、Prefix-list前缀列表
在匹配路由的ACL中,与之前我们学的用于过滤的ACL不同
在使用标准ACL进行匹配的时候,我们只能匹配到路由的网络号
其缺点是,在路由条目变多的时候,需要一条一条的路由条目写上去,繁琐复杂
使用扩展ACL进行匹配路由,扩展ACL与之前用于过滤的ACL不同,用于匹配的扩展ACL是用源地址当作网络号,用目地址当作子网掩码
但是在不同子网掩码下,如192.168.1.0/16、192.168.1.0/25,上图只能匹配到192.168.1.0/24,如果有多个子网掩码,还是需要写多行ACL
那解决这一系列问题,我们可以使用前缀列表Prefix-list
1、Prefix-list可以用于匹配网络号+子网掩码,使用ge和le来为子网掩码定范围
2、与ACL相似的是,Prefix-list也可以写多个,用于顺序匹配
3、如果路由条目中没有与Prefix-list匹配的条目,那么将不进行匹配
特殊的前缀列表
匹配所有的网络的前缀列表
ip prefix-list ruijie seq 5 permit 0.0.0.0/0 le 32
匹配缺省路由0.0.0.0 0.0.0.0,缺省路由网络号和掩码都是0.0.0.0直接输入进行匹配即可
ip prefix-list ruijie seq 5 0.0.0.0 0.0.0.0
匹配所有/32位的主机路由
依然是不对任何主机进行匹配,但是必须让直接掩码为32位
重分布案例
重发布修改metric值
重发布之前的路由表
R1
R2
R3
可以看到,作为ASBR的R2,是同时拥有两边的路由的
在R2上配置策略路由+路由重发布
R2(config)#access-list 1 permit 172.16.0.0 0.0.255.255 //使用ACL匹配网络
R2(config)#route-map ruijie permit 10
R2(config-route-map)# match ip address 1
R2(config-route-map)# set metric 50 //配置匹配后的策略为修改开销值为50
R2(config-route-map)#ex
R2(config)#route-map ruijie permit 20
R2(config-route-map)#ex //由于route-map的末尾隐含一个deny any ,所以要写一个空permit语句来防止其它路由被过滤
R2(config)#router ospf 1
R2(config-router)#redistribute rip route-map ruijie subnets //进入OSPF进程,进行策略路由+路由重发布
没有改metric值R3的路由表
再次去查看R3的路由表,metric值已经被修改了
重发布过滤路由
要求在将OSPF 100进程的路由中的2.2.2.2和3.3.3.3重发布到OSPF 200,注意是只将2.2.2.2和3.3.3.3重发布到OSPF 200中
我们可以通过将第一条route-map语句就拒绝不需要的路由,然后在末尾写上一条允许其它路由通过即可达到效果
重发布之前R1、R2、R3的路由表
可以看到R1和R3的OSPF是没有学到任何东西的
在R2上进行策略路由+路由重分布
R2(config)#access-list 1 permit 1.1.1.1 0.0.0.0 //使用ACL对192.168.1.1进行匹配
R2(config)#route-map ruijie deny 10
R2(config-route-map)#match ip address 1 //拒绝ACL1所匹配的条目
R2(config)#route-map ruijie permit 20
R2(config-route-map)#ex //一个空的route-map中存在一个match all,所以借此来使得除1.1.1.1的路由通过
R2(config)#router ospf 200
R2(config-router)#redistribute ospf 100 subnets route-map ruijie
R2(config-router)#ex
不使用route-map重分发的R3路由表
使用route-map重分发的R3路由表
可以看到1.1.1.1已经被route-map给过滤掉了
重发布达到主备切换的目的
如下图,要求R3访问生产服务器时走R1这边,访问办公服务器时走R2这边,当R1发生故障的时候,自动切换到R2,反之,同理
通过在R1和R2上对直连路由/静态路由重发布到OSPF域内,并且在重发布时使用策略路由针对不同的路由条目进行metric的修改即可
在R1上配置
R1(config)#ip route 10.1.1.1 255.255.255.255 10.0.1.4
R1(config)#ip route 10.2.2.2 255.255.255.255 10.0.2.4 //创建静态路由
R1(config)#access-list 1 permit 10.1.1.1 0.0.0.0
R1(config)#access-list 2 permit 10.2.2.2 0.0.0.0 //进行路由匹配
R1(config)#route-map ruijie permit 10
R1(config-route-map)#match ip add 1
R1(config-route-map)#set metric 10
R1(config-route-map)#ex
R1(config)#route-map ruijie permit 20
R1(config-route-map)#match ip add 2
R1(config-route-map)#set metric 20
R1(config-route-map)#ex //创建策略路由
R1(config)#router ospf 100
R1(config-router)#redistribute static subnets route-map ruijie
R1(config-router)#ex
在R2上配置
R2(config)#ip route 10.1.1.1 255.255.255.255 10.0.1.4
R2(config)#ip route 10.2.2.2 255.255.255.255 10.0.2.4
R2(config)#access-list 1 permit 10.1.1.1 0.0.0.0
R2(config)#access-list 2 permit 10.2.2.2 0.0.0.0
R2(config)#route-map ruijie permit 10
R2(config-route-map)#match ip add 1
R2(config-route-map)#set metric 20
R2(config-route-map)#ex
R2(config)#route-map ruijie permit 20
R2(config-route-map)#match ip add 2
R2(config-route-map)#set metric 10
R2(config-route-map)#ex //创建策略路由
R2(config)#router ospf 100
R2(config-router)#redistribute static subnets route-map ruijie
R2(config-router)#ex
在没有使用策略路由进行重发布时,R3的路由表对于10.1.1.1和10.2.2.2就会存在两条路径
使用策略路由之后,R3的路由表
可以看到不同的开销对应不同的网关,这就是更改metric值的作用,当我们手动将一个接口给shutdown掉的时候,就会发现路由表的开销和网关就变了一个
如下所示,我们就将R1与服务器的接口给手动shutdown掉
分发列表过滤路由
对于更改的重分布+策略路由的过滤路由实验,我们还可以直接将全部的路由重分布到另一个OSPF进程内,然后在使用distribute-list对某些特定的路由进行过滤
R2上重发布并使用distribute-list进行过滤
在使用分发列表之前,我们需要使用ACL对什么路由应该做什么动作进行配置,如这里的,就ACL需要针对1.1.1.1做出拒绝的动作
R2(config)#access-list 1 deny 1.1.1.1 0.0.0.0
R2(config)#access-list 1 permit any //ACL末尾有一条阻止全部的不显示语句
R2(config)#router ospf 200
R2(config-router)#distribute-list 1 out //distribute-list的方向是非常重要的,由于是将1.1.1.1这条路由发布出去,所以是out方向
使用分发列表之前R3的路由
使用分发列表之后R3的路由
可以明显地看到1.1.1.1/32这条路由被阻止重发布进OSPF 200中了