OSPF重发布以及路由策略
- 一、重发布
- 1、作用
- 2、条件
- 3、规则
- 4、名词解释
- 点
- 向
- 5、单点重发布
- 6、双点重发布
- 二、路由策略
- 1、控制层流量和数据层流量
- 2、抓流量
- ACL列表
- 前缀列表 (ip-prefix)
- 3、做策略
- 过滤策略(filter-policy)
- 路由策略(route-policy)
一、重发布
在同一个网络拓扑结构中,如果存在多种不同的路由协议,由于不同路由协议的机理各有不同,对路由的处理也不相同,这就在网络中造成了路由信息的隔离,在路由协议的边界设备上,将某种路由协议的路由信息引入另-种路由协议中,这个操作被称为路由引入 (Route lmportation)或者路由重分发(Route Redistribution)— 这个技术的叫法比较多,也就是我们说的重发布。
1、作用
在一个网络中,若运行多种路由协议或相同路由协议的不同进程,协议之间不能直接沟通计算,进程之间也是独立转发和运算的,所以,需要使用重发布来实现路由的共享。
2、条件
1,必须存在ASBR设备-- 同时连接两种协议或两个进程,同时学到两边的路由,之后进行路由共享。
重发布的操作就是在ASBR设备上,说明,重发布这个技术主要就应用在两个协议或者两个进程之间。都是两两之间完成的。
2,必须关注种子度量值 — 起始度量值,A协议和B协议的开销计算逻辑是不一样,无法直接使用。故将A协议发布到B协议是,ASBR将不携带A协议的度量值,而是共享到B协议后,由ASBR设备在路由种添加一个起始度量值。
不同动态路由协议设置的默认种子度量值不同,这点需要重点关注。
3、规则
1、将A协议发布到B协议中,在ASBR中的B协议上配置-- 该规则定义的是重发布技术的配置位置规则。
2,将A协议发布到B协议中,ASBR将会将所有通过A协议学习到的路由以及ASBR上宣告在A协议中的所有直连路由,全部共享到B协议中。.-. 该规则定义的是重发布发布的内容规则。 … 这条规则是重发布学习的重中之重
4、名词解释
点
- 单点— 两个协议或两个进程之间存在一个ASBR
- 双点—两个协议或两个进程之间存在两个ASBR
- 多点—两个协议或两个进程之间存在多个ASBR
向
- 单向— 仅将A协议路由共享到B协议中
- 双向— A/B协议的路由均共享
(因为重发布都是发生在两两之间的,所以,不存在多向)
5、单点重发布
(可以搭建以上拓扑环境,来完成单点重发布配置讲解。)
在进行配置讲解的时候,可以从三个方面来讲
- A->B:一种动态路由协议发布到另外一种动态路由协议。
- 静态->B:将静态路由导入到动态路由协议中
- 直连->B:将直连路由导入到动态路由协议中
注意:这里拿将OSPF的路由信息重发布到RIP中进行演示
A->B:一种动态路由协议发布到另外一种动态路由协议
[r2-rip-1]import-route ospf 1
结论:
- 通过重发布技术将其他协议的路由信息导入到RIP中,其赋予的默认种子度量值为0。
修改种子度量值的方法
- 在进程当中对全局进行修改:
[r2-rip-1]default-cost 2
- 针对本次重发布进行修改:
[r2-rip-1]import-route ospf 1 cost 3
注意: 当以上两条命令同时执行时,将按照第2条,匹配更精确的命令来执行
静态->B:将静态路由导入到动态路由协议中
[r2-rip-1jimport-route static
结论:
- 导入静态RIP赋予的种子度量值也是0
- 重发布在导入的路由中无法导入缺省路由信息。
直连->B:将直连路由导入到动态路由协议中
[r2-rip-1jimport-route direct
结论:
- 除了R1的直连网段外,所有直连都会导入。
- 若ASBR进行了A->B的重发布以及直连->B的重发布,并且两次包含相同的路由信息,则将会优先学习直连->B的重发布信息。
6、双点重发布
单点重发布看完之后,我们再来看双点重发布(多点和双点差不多)。我们可以搭建如下拓扑:
思考 — 如果我们再R2和R4上同时做双向的重发布,会遇到哪些问题呢?
假设,R2上有一个环回2.0网段,在RIP进程中进行了宣告。因为R4也运行了RIP进程,所以,通过RIP进程R4T将学习到2.0网段的路由信息。之后,R2上进行重发布,将R2的RIP的路由重发布到OSPF中,则2.0网段的路由信息也将发布过来。(这个属于宣告在A协议的接口对应的直连网段),因为R4也运行了OSPE,所以,R4将通过OSPF学习到2.0网段的路由信息。R4通过两种协议学习到2.0网段的路由信息,按照优先级,则将学习OSPF的(事实并不会是如此,因为重发布的路由在OSPF中是以5类LSA通告的,其生成的路由默认优先级被定义为150,大于RIP的默认值100)。一旦学习了,R4的路由表将发生变化,之后将通过R3访问R2的环回。之后,如果R4也进行了重发布,则R4也会将2.0网段的路由信息重发布到RIP之中。 (这属于通过A协议学习到的路由信息)。因为重发布过来会清除原先的度量值,所以在R1上到达2.0网段将形成一个负载均衡,同时走R2和R4,这很明显出现了选路不佳。这种现象就是所谓的路由回馈现象。严重的也会引起路由环路的产生。
结论: 默认RIP和OSPF协议若进行双点重发布,由于两者的优先级不同,故第一台ASBR设备重发布动作结束后,将影响其他ASBR设备的路由表。使得路由可能被回传到源协议当中,发生路由回馈— A协议的路由重发布到B协— 当然,因为华为设备议当中后,又被重新发布回A协议。路由回馈可能会导致选路不佳甚至路由环路的出现。将重发布到OSPF的路由的优先级设置为了150,所以,在上图所示情况下是不会发生路由回馈的。
当然,就算解决了路由回馈问题,多点的重发布还是存在其必然产生的问题 --. 选路不佳。主要还是因为他清楚原先的开销值导致的。–而这个问题,想要解决,是无法仅通过重发布技术来解决,而需要使用到路由策略。
二、路由策略
1、控制层流量和数据层流量
- 控制层流量— 路由协议传递路由信息产生的流量
- 数据层流量— 设备访问目标地址时产生的流量
而所谓路由策略…- 在控制层面转发流量的过程中,截取流量,之后修改流量再转发或者不转发,最终达到影响路由器路由表的生成,干涉选路的效果。
(这个概念就和我们之前讲的ACL列表有点像,只不过ACL是针对数据层流量进行访问控制,路由策略主要针对的是控制层流量。)
路由策略的整体动作也是分为两部分的,一部分是先截取流量(抓流量),还有一部分就是针对流量进行修改或者不转发(做策略)。、
2、抓流量
我们这里介绍抓取流量的方法主要有两种,一种是通过ACL列表来抓取流量;另一种是通过前缀列表(ip.prefix)来抓取流量。
ACL列表
因为ACL列表本身设计是为了抓取数据层流量的,所以,因为通配符的存在他可以灵活的匹配数字特征,但是没有办法匹配路由信息中的掩码特征。所以,并不擅长控制层流量的抓取。
ACL在抓取路由信息时,只能按照数字特征来进行匹配
例如我们抓取一条携带192.168.1.0/24路由信息的数据包,使用ACL列表抓取时只能如下抓取:
[r2]acl 2000
[r2-acl-basic-2000]rule permit source 192.168.1.00
后面的0是通配符,代表所有的数字都不允许发生变化.
正式因为如此,如果需要我们在192.168.1.0/24,192.168.1.0/25,192.168.1.0/26中抓取到192.168.1.0/24则ACL将无能为力,他只能按照数字特征抓,则意味着使用以上抓法将同时抓到携带这三种路由信息的数据包。
前缀列表 (ip-prefix)
从名字上看,P前缀列表是一个列表形态的工具。它所匹配的对象是IP地址前缀,也就是路由条目。一个路由条目由目的网络地址(也被称为前缀)及掩码长度(也被称为前缀长度)共同标识。使用ACL以一批路由中筛选出感兴趣的路由时,是无法指定被匹配对象的目的网络掩码长度的,但是IP前缀列表却可以做到,它除了能够指定被匹配对象的目的网络地址,还能指定目的网络掩码长度,从而实现对路由的精确匹配。
P前缀列表可以包含一条或多条语句,每条语句都使用一个十进制的序号(lndex)进行标识。在本例中,这个名称为abcd的IP前缀列表中只有一条语句,这条语句的序号为10,正如前面所说,您可以为一个IP前缀列表创建多条语句,每条语句使用不同的序号,所有的语句按照序号从小到大依序排列,这与ACL非常类似。
前缀列表还可以进行范围匹配,下面的示例中增加了greater-equal (大于或等于)及less-equal(小于或等于)这两个关键字及参数,从而指定了掩码长度的范围。这条命令要求路由的目的网络地址的前16个比特位与172.16.0.0的前16个比特位相同。另外路由的目的网络掩码长度需大于或等于24,同时小于或等于32。只有满足上述条件的路由才会被该语句匹配。
如果一条语句中只是指定了greater-equal关键字(且没有指定less-equal关键字),则掩码长度的范围是大于或等于greater-equal关键字所指定的值,同时小于或等于32。而如果只是指定了less-equal关键字(且没有指定greater-equal关键字),则掩码长度的范围是大于或等于命令中指定的掩码长度,同时小于或等于less-equal关键字指定的值。
前缀列表的匹配规则: 从上而下,逐一匹配,一旦匹配上则将按照该规则执行,不再向下匹配。末尾隐含拒绝所有的规则。
IP前缀列表是一个重要的路由策略工具,能够作为路由过滤器被应用于各种场景,例如可以被Route-Policy调用或者Filter-Policy调用等等,另外,也在BGP路由协议中被直接用于路由过滤。
实例演示
下面通过几个例子来加深大家对IP前缀列表的理解。假设有四条路由:172.16.0.0/16、172.16.0.0/24.172.16.0.0/30,172.16.1.1/32,它们都是用于测试的被匹配对象。通过不同的P前缀列表可以达到不同的结果。
- ip ip-prefix aa index 10 permit 172.16.0.0 24
- 上述语句要求路由的目的网络地址的前24个比特位需与172.16.0.0的前24个比特位相同,并且路由的目的网络掩码长度必须为24。因此aa这个P前缀列表只允许了四条路由中的172.16.0.0/24
- ip ip-prefix bb index 10 permit 172.16.0.0 16 less-equal 24
- 上述语句要求路由的目的网络地址的前16个比特位需与172.16.0.0的前16个比特位相同,并且路由的目的0网络掩码长度须大于或等于16,且小于或等于24。因此bb这个IP前缀列表允许了四条路由中的172.16.0.0/16及172.16.0.0/24。
- ip ip-prefix cc index 10 permit 172.16.0.0 16 greater-equal 24。
- 上述语句要求路由的目的网络地址的前16个比特位需与172.16.0.0的前16个比特位相同,并且路由的目的网络掩码长度须大于或等于24(且小于或等于32,系统会自动在该命令后添加less-equal 32)。因此cc这个IP前缀列表允许了四条路由中172.16.0.0/24、172.16.0.0/30以及172.16.1.1/32。
- ip ip-prefix dd index 10 permit 172.16.0.0 1 greater-equal 24 less-equal 30
- 上述语句要求路由的目的网络地址的前16个比特位须与172.16.0.0的前16个比特位相同,并且路由的目的o网络掩码长度须大于或等于24,且小于或等于30。因此dd这个IP前缀列表允许了四条路由中的172.16.0.0/24和172.16.0.0/30。
- ip ip-prefix ee index 10 deny 172.16.0.0 30
ip ip-prefix ee index 20 permit 172.16.0.0 24 - 上述IP前缀列表的名称为ee,它拥有两条语句。序号为10的语句要求路由的目的网络地址的前30个比特0位须与172.16.0.0的前30个比特位相同,并且路由的目的网络掩码长度必须为30,而由于该语句的匹配模式为deny,因此四条路由中的172.16.0.0/30被该语句匹配住而且被拒绝。另外,序号为20的语句匹配路由172.16.0.0/24。由于IP前缀列表末尾隐含拒绝所有,因此最终四条路由中只有172.16.0.0/24被该IP前缀列表所允许。
- ip ip-prefix ff index 10 permit 0.0.0.0 0less-equal 32
- 上述语句中,IP地址为0.0.0.0,这种形式的IP地址被称为通配地址,也即该地址能匹配任意的目的网络地址。因此该语句并不关心被匹配路由的目的网络地址,但是要求路由的目的网络掩码长度须大于或等于0,且小于或等于32,实际上所有的路由都满足上述要求,因此,该条语句相当于“允许所有”。因此四条路由都将被允许。
- ip ip-prefix gg index 10 deny 172.16.0.0 30
ip ip-prefix gg index 20 permit 0.0.0.0 0 less-equal 32 - 上述IP前缀列表的名称为g8,它拥有两条语句。序号为10 的语句拒绝了路由172.16.0.0/30.而序号为20的语句则为允许所有,因此四条路由中,除了172.16.0.0/30之外,其他所有路由都被允许
- ip ip-prefix hh index 10 permit 0.0.0.0 0 greater-equal 32 less-equal 32
- 上述IP前缀列表将匹配网络掩码长度为32的任意路由,也就是匹配所有的主机路由,因此四条路由中,只有172.16.1.1/32被允许。
- ip ip-prefix ii index 10 permit 0.0.0.0 0
这是一个非常特殊的语句,该语句允许的是默认路由0.0.0.0/0。
3、做策略
我们需要针对抓取到的流量执行对应的操作,修改其中内容或者是拒绝通过,这些操作都需要依靠策略来完成。我们这里主要给大家介绍的策略有两种。过滤策略 (filter-policy) 和路由策略(route-policy)
过滤策略(filter-policy)
Filter-Policy(过源-策略),可以将其视为一种路由过滤器。下图展示了一个Filter-Policy的部署案例。R1、R2及CO_SW运行了RIPV2,CO_SW将服务器集群的网段发布到了RIP中,并将路由通过RIP通告给R1及R2,初始情况下,R1及R2都能学习到所有到达服务器集群网段的路由。现在网络中增加了一个需求:要求R1下联的PC不能访问服务器集群中的192.168.2.0/24网段,但是仍可以访问其他服务器网段。
要实现上述需求其实有多种方法,Filter-Policy便是其中之一。我们可以在CO_SW上部署Filter-Policy,将其通告给R1的RIP路由进行过滤,把192.168.2.0/24从路由更新中过滤掉,如此一来R1将无法再通过RIP获知到达192.168.2.0/24的路由,那么PC用户也就无法再通过R1访问该网段了。
需要强调的是,filter-Policy 只能够对路由信息进行过滤,而无法对LSA进行过滤
配置案例:
就使用搭建的双点重发布的环境,如果R2和R4都进行了重发布,则R1这边通过RIP学习到的到达OSPF网段都将是负载均街,我们可以通过过滤策略来打破这个负载均衡,选取最佳的洗路。比如,R2和R3之间的23.0.0.0/24网段,R1到达该网段,选择走R2为下一跳是最佳的选择,而不应该走R4。则我们可以将R4发来的路由信息进行过滤。
这个过滤策略在做的时候,做的位置是可以自行选择的,我们可以在R1上做,在R1收到R4发来的路由信息时将其进行过滤,我们将这样的策略称为入方向的策略,入方向的策略将影响自身,当然,我们也可以在R4上进行配置,让R4在给R1发路由信息的时候不去携带这条路由信息,我们将这样策略称为出方向的策略,出方向的策略影响他人。
因为我们针对的只是23.0.0.0/24网段的路由信息,所以,我们需要先抓取流量,针对该网段的流量进行过滤.
步骤:(这里是在R4上进行了出方向的策略)
1,抓取流量
(这里使用ACL列表抓取,当然也可以使用过滤列表进行抓取)
[r2]acl 2000
[r2-acl-basic-2000]rule deny s 23.0.0.00 --- 注意,过滤列表本身没有过滤能力,所以,需要在抓取流量时使用拒绝动作。
(后面写0代表完全按照数字特征来抓取路由信息)
[r2-acIbasic-20001rule permit source any --. 注意,在抓流量时,末尾一定要放通剩余流量,否则将会把所有流量全部过滤掉。
2、在过滤策略中调用— 这里时在R4上进行的出方向的调用,也可以在R1上进行入方向的调用
[r4-rip-1]filter-policy 2001 export GigabitEthernet 0/0/0 --- 因为是进程中进行调用,所以需要选定策略影响的入接口
注意: 过滤列表可以在OSPF中使用,但是,因为OSPF中传递的是拓扑信息,所以,无法进行出方向的过滤,只能进行入方向的调用,并且,调用的效果是仅将过滤抓取的路由信息不加表。
路由策略(route-policy)
基本概念
Route-Policy是一个非常重要的路由策略工具,如下图所示,您可以把它想象成拥有一个或多个节点(Node)的列表,每一个节点都可以是一系列条件语句及执行语句的集合,这些节点按照编号从小到大的顺序排列。在每个节点中,用户可以定义条件语句及执行语句,这就有点像程序设计语言里的 f-Then (如果-则)组合。在 Route-Policy被执行的时候,设备从编号最小的节点开始进行路由匹配,如在途中首先看节点,设备对该节点中的条件语句进行匹配,如果被匹配的对象满足所有条件,则执行该节点中的执行语句,并且不会再继续往下一个节点进行匹配。而如果节点1中,有任何一个条件不满足,则前往下一个节点,也就是到节点2中去匹配条件语句,如果被匹配的对象满足所有条件,则执行该节点中的执行语句,如果不满足,则继续往下一个节点进行匹配,以此类推。
1,创建一个Route-Policy节点
route-policy route-policy-name [ permit deny }node node
在设备的系统视图中使用上述命令,即可创建一个Route-Policy节点,并进入该Route-Policy节点的配置视图.在该命令中,Route-Policy 的名称可以根据需要自行定义
在名称的后面,有两个关键字可以选择,它们用于指定该节点的匹配模式
- Permit;指定该节点的匹配模式为允许。如果路由匹配的结果是满足该节点的所有if-match语句,则该路由被视为允许通过,该节点的 apply语句将被执行,且不再进入下一个节点:如果该节点中有if-match语句不满足则进入下一个节点继续匹配。
- Deny:指定节点的匹配模式为拒绝。如果节点的匹配模式为deny,则该节点的apply 语句将不被执行。如果路由匹配的结果是满足该节点的所有if-match 语句,那么Route-Policy 的匹配过程立即结束,不会再进入下一个节点,而且满足该节点条件的路由被视为拒绝通过。如果该节点下有if-match语句不满足,则进入下一个节点继续匹配。
值得注意的是,当Route-Policy用于路由匹配时,被匹配对象(也就是路由条目)必须满足一个节点中的所有ifmatch语句(“与”的关系),才被认为匹配该节点。如果某条路由没有被Route-Policy的任何节点匹配,则该路由被视为拒绝通过该Route-Policy,也就是说,Route-Policy 的末尾隐含着一个类似拒绝所有的节点。当然,为了避免所有的路由都被拒绝通过,一个Route-Policy中必须至少有一个节点的匹配模式为permit.
2,(可选)配置if-match语句
在Route-Policy的节点视图下,使用if-match命令可定义匹配条件,所匹配的对象是路由信息的一些属性,例如路由的目的网络地址或掩码长度、度量值、标记或下一跳IP地址等。常用的就是匹配ACL或者前缀列表抓取的流量。
- 匹配ACL:
if-match acl{acl-number acl-name}
- 匹配IP前缀列表:
if-match ip-prefix ip-prefix-name
一个节点中可以包含多条if-match 语句,这些if-match语句之间是”与”的关系,也就是说所有的if-match语句必须同时满足,被匹配对象才被视为匹配该节点。一个节点中可以不包含任何 if-match语句,当这种情况出现时,则视为匹配所有,也就是任何的被匹配对象都满足该节点的条件。
3,(可选)配置apply 语句
在Route-Policy的节点视图下,使用apply命令指定需执行的动作,这些动作主要是对所匹配的路由的某些属性进行修改,例如修改路由的度量值、优先级值、际记等。以下是一些常用的apply命令。 (后续BGP将大量使用路由策略来修改其中的路径属性)
- 设置路由的度量值:
apply cost[+l-] cost
- 设置OSPF的度量值类型
apply cost-type {type-1 / type-2
- 设置路由的标记
apply tag tag
一个节点中可以不包含任何 apply语句,此时该节点只被用于执行路由过滤,而不用于设置路由的属性。