当前位置:   article > 正文

网络安全之重发布与路由策略详解

网络安全之重发布与路由策略详解

重发布;import (路由导入)

将不同方式(直连、静态、缺省、其他协议)的路由器重发布进入RIP,OSPF中。

注意:1、华为中不能将缺省路由重发布进入RUO协议(思科也是一样)。2、不能将缺省路由重发布进入OSPF协议中(思科同样)。

seed-metric:种子度量值。

RIP——种子度量值为0

OSPF——默认类型2,seed-metric为1

重发布进入RIP命令为:

想要重发布哪一个协议在import-route 后就跟什么协议,若是相同协议,则注意协议后要有协议号,比如在RIP 100中重发布引入RIP 200,则为import-route rip 200

修改seed-metric值:

方法一、修改RIP协议seed-metric值,在华为中针对所有方式重发布生效(思科中不针对重发布的直连生效)。命令为:

种子度量值修改值范围为0-15.

方法二、在重发布过程中指定度量值(针对某一方式)。命令为:

比如重发布OSPF 100,引入RIP的种子度量值范围都为0-15。

如果同时部署,则方法二优于方法一生效(一般来讲,若针对某项参数进行修改时,出现了歧义,命令匹配更精确的优先生效,即加入我们上面使用方法一修改了种子度量值为13,而后又使用了方法二对OSPF 100种子度量值设置为了6,那么在查看的时候,重发布进入的OSPF 100度量值为6,其余重发布的路由种子度量值为13)。

重发布进入OSPF协议,默认不能将缺省进行重发布,重发布引入的默认类型为类型2,seed-metric值为1.

修改seed-metric值:

方法一、修改seed-metric,也可以修改LSA类型。

修改LSA类型命令:

修改seed-metric值命令为:范围为0-16777214.

方法二、重发布过程中,可以修改seed-metric,也可以修改LSA类型。

命令为:修改重发布进入OSPF的RIP 100的seed-metric为100,LSA类型为类型1。

以上,重发布定义:将A协议重发布进入B协议时,进入B协议实施,将本路由器上通过A协议学习并加表的路由以及通告进入A协议接口对应的路由重发布进行B协议(除ODR ISIS)。注意:ODR是一个很老的协议,不满足重发布的定义、ISIS若要重发布到另一个协议中,只能将ISIS学习并加表的路由进行重发布,而通告到ISIS协议中,接口对应的路由是不能重发布的。如果要将ISIS学习加表的所有路由以及通告到ISIS接口对应的路由进行重发布,除了要重发布ISIS,还要重发布一个直连路由进行一个这个路由器上接口的路由的重发布。

重发布中有两个分类;点和向,其中重发布点的类型又分为单点、双点、多点。重发布向的类型又分为单向、双向、多向。

单点:只在一个路由器上做重发布。

双点:同时在两个路由器上做重发布。这可以做一个备份,增强网络的稳定性,一个设备坏了,还有另一个设备,不至于让网络直接崩溃。

多点:在两个以上的路由器上做重发布。效果与双点重发布一致。

单向:

双向:就是在单向的基础上,可以让双方协议都能互相学习到对方协议中的路由,将A协议重发布进B协议,再将B协议重发布进A协议。(但是A重发布进B,B重发布进C就不叫双向重发布了)

多向:

重发布是强行将一个协议的路由重发布进另一个协议中的路由,在进行多点多向重发布时,会出现严重的网络问题,轻则路由不优选,重则出现路由环路。

1、次优路径(原因是不同的路由协议AD值不同,以及计算metric值得方式不同,是一定要出现的)

2、路由环路(原因:路由回馈)

以上,如果重发布过程中没有路由回馈就没有路由环路。还有一个严重问题就是次优路径,还是如上图例子,R1要学习R3的路由,R2在给R1传,R4也在给R1传,如果他们的默认种子度量值一样,而且跳数也一样的话,R1只有一个选择就是负载均衡,因为分判断出来走哪一个好。R3学习到R1的路由也是同理,如果最优的路径是R1走R2去学习R3,再从R4返回。那么执行了负载均衡或走其他路径就是次优路径。简而言之我们到达目标网段没有走最优路径就是次优路径。该负载均衡没有负载均衡,该走上面接口走了另一个接口都是有可能的。

综上,我们进行重发布后,很多路由学到的都不是最优路由,走的次优路径。所以,在我们进行重发布后要通过一些技术手段来进行调优,保证我们最终学到的每条路由都是最优路由。

需要使用网络工具来解决次优路径以及路由环路。

思路:1、先解决路由回馈(保证所有进行重发布的路由器上是正确的),就解决了路由环路。2、根据不同的路由协议进行次优路径的调整。

以上,接下来讲解,路由策略和策略路由。

路由策略:控制层面的路由控制。(通过调整路由的策略)比如一个R1有三个路由,R2去学习R1的三个路由,我们通过策略让R2只允许学习其中的一条路由,不学习另外两条,这就是路由策略。

策略路由:数据层面针对数据层面,使用一些列表控制数据的发送。(通过策略去影响路由)比如R1有A/B两个网段,R1有F0/1和F0/2两个端口连接到R2,我们通过策略让A网段的数据只能走F0/1到R2,B网段的数据只能走F0/2网段到R2,这就是策略路由。

学习路由的方式分为两步:

1、对路由进行抓取。路由抓取工具:1、ACL。2、前缀列表 prefix-list。

2、对路由属性进行控制。实施策略工具列表:fitter-policy(过滤策略列表)、route-policy(对路由属性进行调整,也能过滤路由)。

ACL ,可以查看该文章进行一个简单的了解学习:网络安全之ACL-CSDN博客 

ACL可以对路由进行一个调整,但是有一个瑕疵的,那就是不能对网络掩码进行一个抓取。

比如下面这个命令:抓取的并不是1.1.1.0 255.255.255.0,没有后面的网络掩码,抓取的只是1.1.1.0,通配符是全0,表示前面三十二位bit固定为1.1.1.0,所以抓取的并不是1.1.1.0/24,而是1.1.1.0。

ACL除了不能精确匹配网络掩码之外,还不能范围性匹配,当我们要大范围抓取路由时,使用ACL就不合适了,可能就只能一条一条的去抓取,比如抓取网络掩码24到28的,就不太好抓了。

prefix-list:前缀列表

特点:1、仅仅抓取路由信息。(ACL可以抓数据也可以抓路由)2、能严格匹配网络掩码(以及可以范围性匹配掩码)。3、存在序列号,从小到大匹配,一经匹配立即执行。4、末尾隐含了拒绝所有(没有说允许的话剩下的路由就全拒绝)。

前缀列表命令:

这个C1只是个名称,可以随便取。部署的前缀列表的序列号默认第一个是10,第二个20,后面的一次增加10。

下面的这个命令就是抓取2.2.2.0/24的网段

若是要抓2.2.2开头的/28网段,其中2.2.2.0代表着是2.2.2.0这个网段,24代表这个网段的前二十四位固定,网络掩码由后面的大于等于greater-equal 和小于等于less-equal 决定。也就是说这个代码说的就是网络号前二十四位2.2.2固定,网络掩码为28的网络。

再比如以下这代码就是2.2.2这前24位固定,掩码为大于等于28小于等于30,也就是掩码为28,29或30的网络号。

如果只写大于等于28,则就是范围28-32的即28,29,30,31,32的网络掩码,若是只写了小于等于30,则掩码范围为24-30。若是大于等于和小于等于都没有写,只有

则将其length长度作为网络掩码长度,也就是其中的24,作为固定长度和网络掩码,一旦后面有大于等于,小于等于的条件,则只作为固定长度,固定前多少多少位固定。

比如要抓缺省路由就是:

若是允许所有就是:代表着32位bit没有一位固定,网络掩码小于等于32,也就是0-32,所有网络掩码都允许。

如果要匹配所有的主机路由:因为主机路由是32位网络掩码,所以前面三十二位bit不固定网络号随便,但是掩码必须是32位,才能是主机路由,也就是说,三十二位的网络掩码的所有路由都抓取。

若是要抓取所有的A类主网段路由:A类网段第一位固定,掩码为255,所以是下面这种,B,C类网段同理。

抓取所有B类网段路由:128开头,前两位固定,网络掩码为255.255,一共16位网络掩码。

抓取所有C类网段)包括子网段和主网段:其中/24掩码的是主网段,大于/24的掩码是子网段。

fitter-policy:过滤策略列表,进行路由信息的过滤。

特点:

1、自身不具备过滤功能。

2、可以在同种路由协议之间使用或不同路由协议之间使用(重发布)过程中使用。

3、同种路由协议之间分为距离矢量型(可以在出和入两个方向实施)和链路状态型协议(仅仅在路由学习的入方向使用,并且不过滤LSA,只是阻止LSA的加表,备注:华为设备中可以在出方向上针对5类和7类LSA进行过滤)

4、在不同协议之间使用时,必须为export+A协议(需要被重发布的协议)

距离矢量型协议:可以在in out方向实施。

做好的ip-prefix c1直接在运行的协议里去调用,比如下面的在入方向的接口G0/0/0调用,也可以不跟接口。

fitter-policy虽然能做什么东西,但是功能太单一,只能做过滤,若是要将路由的一些属性进行调整,fitter-policy就不行了,我们就可以使用router-policy来进行调整。

router-policy:策略列表——route-map

使用环境:1、重发布(在同种路由协议里不能使用route-policy,但可以使用fitter-policy。)。2、BGP。3、PBR(QOS,是数据层面的控制,将数据的转发可以不按照路由表来转发甚至于没有路由表靠PBR也能转发)

特点:

1、自身具有过滤功能。

2、序列号由小及大匹配(默认10,20,30……)。

3、可以过滤路由或者改变路由的属性。

4、末尾隐含拒绝所有。

5、每一个条目中包含逻辑语句(if-match apply 注意:横向if-match match任意,竖向if-match match所有)没有 match 匹配all 没有apple apple nothing

第五点中如果匹配的permit就有两句话,比如if-match acl 2000 apply cost 1000(如果是acl 2000里的路由,就将路由的开销值设置为1000),if-match ip-prefix c1 apply oe 1(如果是ip-prefix名字为c1发布的路由,就将其默认的五类LSA类型2改为类型1)。

横向:可以这样写if-match acl 2000 2001 2002…… apply cost 99也就是将acl2000 2001等多个acl一起匹配,如果匹配到其中任意一个acl条件,就可以执行apple的动作,这种就是横向if-match也就是横向任意any的意思。

竖向:if-match acl 2000 cost 5 oe 2 apply tag 999,其中匹配条件为acl 2000,cost为2,五类LSA类型为2,这三个条件全部匹配才能执行动作tag 999打上标记999,这种就是竖向if-match也就是竖向所有all的意思。

什么时候用横向,什么时候用竖向:横向只能用在条件都相似类似的情况下,比如上面例子中的匹配acl 2000 2001 2002……都是acl这种同一类的条件就是横向,竖向就是条件都不一样,又是acl又是cost的,如果多了不同类的条件就变为竖向。

apple只有竖向没有横向,if-match acl 2000 cost 5 oe 2 apply tag 999 cost 20 oe 1,将都匹配的数据打上标记999开销值改为20,五类LSA类型改为1。apple不可能出现横向,因为要是横向的比如apply cost 10 20 30这样,那么符合条件的修改cost是改为10还是20或是30,没办法修改,所以只有竖向。

比如将3.3.1.0这条路由改为类型1,3。3.3.2.0metric值改为100,3.3.3.0进行过滤,3.3.4.0tag标记修改为8888,23.1.1.0允许通过。为了满足这几个条件就需要写router-policy,router-policy和fitter-policy一样要去调用ACL或前缀列表,只是不一样的是router-policy自身具备过滤的功能,它调用ACL和前缀列表时只需要ACL列表和前缀列表抓取路由就行,抓取之后让router-policy去进行调试即可。

拓扑图如下:

所以接下来我们只需写四条前缀列表将3.3.1./2/3/4.0抓取出来,23.1.1.0是允许通过,其余的全部放行,所以只需要写四条ACL或前缀列表或ACL与前缀列表交叉使用就行了。

我们将这四条前缀列表写好了,接下来写router-policy。

router-policy后跟的bb为名字可以随便取,只要调用时别调用错就行,后面的node 10为编号10表示第一条,若是第二条就要写20。

接着去匹配ip-policy b1。

再执行动作改为类型1

接着写第二条:

第三条:因为是过滤,所以deny掉匹配到b3即可没有apply

第四条:

因为末尾是拒绝所有,所以我们要进行一个放通所有:

如果if-match没有写就默认匹配所有,如果没有写apply就相当于不做任何动作,当if-match没有写,apply也没有写的时候就代表着router-policy后跟的动作是permit就是所有都通过,若是deny就是拒绝所有(拒绝所有的话,可以不写这个router-policy,因为只要做了router-policy,其末尾就隐含了拒绝所有。)。

然后进行一个查看router-policy bb这个的应用就可以看到1-5条的应用,都修改成功b1修改类型为1,b2修改开销值为100,b3过滤掉了,b4修改tag标记8888,node50允许所有。

接着在重发布中使用:

以上就是当我们进行双点双向重发布时或更复杂的重发布时,路由不正常,使用以上的工具将路由进行一个修改正常即可。

———————————————————————————————————————————

双点双向重发布小实验例子:

拓扑图如下

我们将IP配置好以及RIP协议和OSPF协议的通告等完成后,先第一步检查路由。比如R4上检查RIP和OSPF学习到的路由以及邻居关系建立,其他路由器上同理。

接着在R2和R4上做重发布,在做重发布之前,我们要了解知道R4和R2上学习到的路由是从哪里学的,比如R4上学到的R2的RIP路由是痛过RIP中学习到的,而再重发布之后,就变成了从OSPF中学习到的R2的RIP路由,就将RIP路由又重发布回去了,这就是路由回馈,就形成了路由环路,出现路由环路就意味着有路由回馈,要解决掉重发布后出现的路由环路就要解决掉路由回馈,也就是说,再进行重发布前后,作为进行重发布的路由器所学习到的路由是没有变化的,这就解决了路由回馈。没有路由回馈之后就没有路由环路,接着我们就要着重去解决一个次优路径的问题。

下面在R2和R4上进行双向重发布;

这时再去查看R2和R4的路由表有没有一个变化。在华为设备中是没有变化的,因为在华为设备的OSPF中,有两个优先级,一个内部优先级10,一个外部优先级150,一个比RIP优先级100大,一个比RIP优先级小,这就会导致RIP重发布进OSPF后,R4和R2不会学习的一个错误的OSPF路由。没有学习一个错误的OSPF路由,其路由表就不会变,就不会出现一个路由回馈进而出现一个路由环路。若是一个协议只有一个优先级,没有分外部和内部的,比如在思科中RIP优先级固定为120,OSPF优先级固定为110,只要没有分一个外部内部优先级,在它做一个双点及以上的重发布的时候,必定会出现路由回馈。

在以下R2上可以查看到OSPF学习到了RIP中的路由,但是还没有加表,没有加表的原因是因为它的优先级为150,R4上查看也是同理

所以在华为设备上做双点以上重发布就很简单,不会出现路由回馈问题。若是在做其他厂商设备的双点以上重发布出现路由回馈,我们可以修改其优先级来解决,但是优先级并不是改所有的优先级,只能改由A协议重发布进B协议中的路由的优先级,且重发布过来的优先级要改的比原协议的优先级要大才行。

路由回馈没有出现问题,那么就要查看次优路径的问题了,此时查看R1和R3上的路由。我们发现R1到达R3的环回,R4的环回,23网段,34网段都是走的负载均衡,在结合我们的拓扑图,R1学习R3的环回负载均衡是没问题的,但是到23网段,走R2应该更优,到R4的网段,走R4更优,到34网段,走R4更优,所以,这些不是最优的路径就是次优路径。R4上查看的路由问题同理。

出现次优路径了,就需要我们使用本文前面讲解到的路由策略等来进行一个解决,在RIP这个距离矢量型协议中解决也很简单,就是两点,改优先级和改开销值。但是改优先级不能对单个路由的路由协议进行控制,因此不适用于在同种协议中使用,只适用于在不同协议之间使用。

这里只能修改开销值,比如R1到23网段是负载均衡,R2和R4重发布进来的默认种子度量值都为0,等传到R1的时候,R1到达R2和R4的开销值都为1,所以执行负载均衡,所以我们要么将R2发给R1的23网段的度量值降低,要么将R4发给R1的23网段的度量值增加,而在RIP中的度量值不能减少,我们只能将R4发给R123网段的度量值增加。增加度量值的方法也有很多,第一个就使用metric-in和metric-out,在R1与R4之间的接口使用,比如在R4的接口上就是out出口,R1上就是in入口,在这两个接口之中选择一个接口将23.1.1.0这个网段抓到,再把它的开销值增加。第二个就是在R4重发布过程中使用router-policy,在router-policy中将23.1.1.0抓到再把这条路由的metric值修改的高一些,也就是说在R4重发布的过程中将23.1.1.0这个网段的度量值调整大点(进入RIP的默认种子度量值为0)。第三种就是路由过滤,R2传给R1的23.1.1.0网段路由正常通行,将R4传给R1的23.1.1.0网段路由过滤掉,使R1学不到R4传来的23.1.1.0路由即可(而在路由过滤这个方法中又有两种方法去过滤,一、在重发布过程中使用fitter-policy进行路由过滤,用的是out+A协议的形式。二、在同种路由协议之间,也就是R1和R4之间使用路由过滤,将R4发来的路由进行过滤,可以在R4的出接口方向做,也可以在R1的入接口方向做)。以上就有四种方法进行选择最优路径。第一种R1R4之间修改开销值,第二种在重发布过程中修改开销值,第三种在重发布过程中进行路由过滤,第四种在同种路由协议之间进行路由过滤。具体使用哪种方法无所谓,在平时做实验时候就可以使用fitter-policy过滤列表,将这条路由列表过滤掉,但在实际应用中,一般不建议做路由过滤,因为如果做了路由过滤就没有备份路径,原本这个重发布的路由器也可以学,但过滤之后就不能学,另一个重发布的路由器故障后,网络就崩溃了。所以,实际应用中能不用fitter-policy就不使用fitter-policy。

我们在R1和R4之间选择R4上修改开销值。第一步将23.1.1.0这个网段路由抓取出来,使用ACL或前缀列表都可以。

比如这里我使用的ACL 2000

抓取出来后进行调用。因为是在R4是通过连接R1的接口将23.1.1.0网段路由传给R1的,所以在这个接口上进行调用修改。2000是ACL的名字,后面的2为增加的metric值,注意增加的metric值是有范围的2-15.

然后我们在R1上查看23.1.1.0的路由变化。可以发现R1到23.1.1.0网段的下一跳为12.1.1.2不再是负载均衡,恢复正常了。其他路由还在负载均衡也是同理进行调整。

到4.4.4.0以及34.1.1.0的修改方法用上面的也是一样的,现在在重发布的过程中使用router-policy进行开销值的增加。这次在R2上做,第一把还是先抓取这两个网段的路由,使用ACL或前缀列表都行。

抓到之后写router-policy。因为开销值默认为0,所以随便写个5。

但注意的是,router-policy默认隐含拒绝所有,所以我们在做完router-policy的时候要记得检查,是放通剩下的所有路由,还是拒绝剩下的所有路由。这里我们只是修改一个开销值,并不是要拒绝其他所有,所以要允许所有,即加一个空语句。

接下来进行调用,在重发布的过程中调用。

然后再在R1上进行查看。发现整体的路由都恢复正常了,路由表全部优选。所以,在距离矢量型协议里调整就是修改它的开销值。

RIP这里的次优路径问题解决了,接着我们去查看OSPF中的问题,在R3上查看OSPF路由表。除了到达R4的环回,其他走的都是负载均衡。结合拓扑图,R3到1.1.1.0负载均衡是没问题的,到2.2.2.0因该走R2,到12.1.1.0走R2,到14.1.1.0走R4。

接着我们在R2上针对路由进行控制,这时就牵扯到五类LSA的一个选路比较,五类LSA的选路时,优先级没有用,只有去调整开销值,调整开销值又可以调整两种开销值,一个是种子度量值,一个是沿途累加度量值,它在比较的时候,先比较种子度量值(越小越优),如果种子度量值一样则比较沿途累加度量值。所以在R3学习12.1.1.0的路由时,可以在R2上将发给R3的12.1.1.0网段和2.2.2.0的开销值降低,也可以R4上将发给R3的12.1.1.0网段和2.2.2.0的开销值增加(增加的时候可以增加沿途的累加度量值)。注意的是,在进行路由控制的时候,尽量不改变沿途累加度量值就不改变,因为沿途累加度量值影响的不是这一两条LSA,而是影响的所有路由。所以我们尽量不去修改沿途累加度量值,而是去增加其种子度量值。在调整14.1.1.0或4.4.4.0不是最优的时候也是同理。在OSPF中五类LSA的类型1永远优于五类LSA的类型2。

在R2上做,先将12.1.1.0和2.2.2.0的路由抓取出来,再用router-policy将它的类型2改为类型1,R3在学习的时候直接优选。同时在R2上顺便将14.1.1.0网段抓取出来,在重发布过程中用router-policy将它的开销值改的比1还大,这样R3学习14.1.1.0网段的路由就优先学习R4传来的。这样就可以一次性解决问题。

也可以使用路由过滤的方法(分为在重发布过程中过滤和同种路由协议之间过滤),在重发布的过程中我们也可以过滤(fitter-policy或router-policy都可以),同种路由协议之间也能过滤,使用fitter-policy,而fitter-policy在链路状态型协议中使用时,只能在入方向进行过滤,入方向阻止路由加表,出方向做不会生效。但现在需要进行控制过滤的LSA是五类LSA,五类LSA是路由LSA,所以使用fitter-policy可以在out方向上做(三类五类七类都可以做,一二类做不了),一二类只能在入方向上做,但只能阻止本路由器的路由加表,不影响LSA的同步,学习。

这里最简单的方法就是在重发布过程中将路由分别调整抓取出来,对它们的属性进行修改。可以在R2上做也可以在R4上做,比如现在在R2上做。

接下来进行调用。

然后在R3上进行查看。问题一次性解决。

———————————————————————————————————————————

策略路由:在数据层面对传输的数据包进行控制(优先于路由层面),是一种策略。

PBR:policy based route——基于策略的路由

PBR分为两种:一种是本地PBR,另一种是远程PBR。

本地PBR:针对本设备产生的流量进行策略控制

远程PBR:针对途经本设备的流量进行策略控制

本地PBR实验演示拓扑如下:R1和R2之间有一个12.1.1.0网段R1上面有环回,R2上面也有环回。写了R2到达R1的路由,但是没有写R1到达R2的环回路由,正常情况下R1不能ping通R2的环回接口,当使用本地PBR时,就能通,因为这个策略优于路由。这个PBR及其强大,强大到没有路由,纯听策略。

R2上做一个回包路由。

接下来做本地PBR:

第一步、抓流量,只能使用ACL,因为前缀列表只能抓路由,而ACL既能抓路由,又能抓数据。

抓取1.1.1.0这个网段里的所有IP。

第二步、抓到之后,强行给它指定下一跳。注意这里跟router-policy很相似,做完之后不必再做一个空语句允许其他所有,因为这只是一个策略,匹配的上就通过,对于其他的不关注。

第三步、进行本地PBR的调用

现在使用1.1.1.1去ping2.2.2.2看是否通。成功ping通(没有路由ping通的),若是直接ping2.2.2.2是ping不通的。

直接没有ping通是因为对方没有开启ARP的代理,没有开启ARP代理,就不给ARP应答,它的数据就无法封装,用环回的时候无所谓,它的下一跳是12.1.1.2,封装的是12.1.1.2的MAC地址,现在封装的是2.2.2.2的MAC地址,所以,我们现在要做的是在R2的g0/0/0上开启ARP代理。

此时直接ping2.2.2.2还是ping不通是因为没有路由所以在ACL中再抓取一个12.1.1.1的数据即可。

然后再用12.1.1.1端口ping2.2.2.2就ping通了。

以上就是本地PBR的基本配置。接着在R2后增加一个R3,配置一个环回和23网段。用于远程PBR的讲解。

在R2与R1的出接口也就是R1传给R3的入接口上调用。

第一步、抓取流量到达R2的流量。

第二步、使用MQC模型中的classifier

第三步、使用traffic behavior 定义策略(行为)(指定下一跳)

第四步、定义traffic policy ,关联以上两个列表

第五步、在入接口处调用。

以上就是远程PBR的一个基础配置。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/638288
推荐阅读
相关标签
  

闽ICP备14008679号