第4章 重发布&路由策略
一、路由重发布
背景作用
背景
目前为止,我们讨论的多数网络环境都有一个共同的特点,那就是网络中只用到了一种路由协议,然而现实网络往往更加复杂和多元化,在同一个网络中存在两种或者多种的路由协议的情况是很常见的。
举个例子,假设A公司和B公司各有自己的网络,这两个网络被独立管理及运维,A企业的网络使用的路由协议是OSPF,B公司使用RIP搭建,现在A公司将B公司收购了,这就导致原有的网络必须进行整合,为了使整合后的网络业务流量能够正常通讯,实现路由互通就是关键的问题之一。
然而问题来了,OSPF和RIP是两种不同的动态路由协议,不同的协议之间,必然标准不会统一,最简单的例子就是,开销算法不一致,那路由信息肯定是无法在路由协议之间直接交互的。
当然、有人会说,我不能把这两个公司的网络建设成一种吗?整改后不就只使用一种协议了吗?
当然可以,但是这样一来实施和变更的成本就是一个不能不考虑的问题。出在协议上的问题,也必须在协议上解决。解决办法就是保持原有的路由规划,然后在协议边界路由器上进行特定的操作,将某种路由协议的路由信息引入到另外一种路由协议。这个操作就被称为路由引入,又称之为路由重发布。
作用
在两种路由协议之间,或者一个协议的不同进程之间,借助ASBR设备(同时工作在两种协议或者协议的不同进程中)学习到两个网络的路由信息,并且通过重发布进行路由共享,最终实现全网可达。
部署条件
1.必须存在ASBR设备
ASBR设备同时连接两种协议或者一个协议的两种进程,这样的设备同时运行在两种协议中,就会同时学习到两边的路由。
重发布的操作就是在ASBR设备上进行配置的,这里值得注意的是虽然是在ASBR设备上配置,但重发布这种技术是主要运用在两种协议或者两种进程之间的行为,是两两之间完成的。
例如:如图,部署了两种动态路由协议,其中R1-R2部署的是RIP网络,宣告了1.0和2.0这两个网段,同时R3-R2部署了OSPF网络,同时宣告了3.0和4.0这两个网段,也就是或在这张图中R2分别运行了两种路由协议,所以对于R2而言,他通过运行两种路由协议获取到了所有的路由信息。
但是,默认情况下由于协议规则的不同,R2不会将R3上的路由信息通过RIP通告给R1,同时R2自然也不会将R1上的路由信息通过OSPF通告给R3,所以R3学习不到R1上的路由信息,R1自然也学习不到R3上的路由。
因此R2就变成了路由的分割点,怎么将路由打通,办法就是通过在R2(ASBR)上部署路由重发布,实现两端路由的传递。而R2就是所谓的ASBR。
2.起始种子度量值
路由的起始度量值,因为A协议和B协议的开销计算逻辑是不一样的,故不能直接使用原本协议本身传递路由携带的度量值。
做法就是,当A协议重发布到B协议时,ASBR将不携带A协议传递过来的度量,而是通告给B协议时,由ASBR设备在路由中添加一个起始的种子度量值,即定义值。
重发布的规则
A协议路由发布到B协议
-
配置位置规则
-
在ASBR中的B协议(OSPF)上配置。
-
-
发布内容规则
-
一旦发布,ASBR将会把所有通过A协议学习到的路由以及在ASBR上宣告在A协议中的所有直连路由,全部发布给B协议。
-
重发布的名词
-
方向性问题
-
单向
-
双向
-
注意:重发布一定是两种协议之间的行为。
-
ASBR数量问题
-
单点:只存在一个ASBR --- 重发布
-
双点:存在两个ASBR设备 --- 引发一些问题
-
多点:存在多个ASBR设备
-
需要强调的是,重发布这种行为是具有方向的。比如说,我将RIP的路由引入OSPF中,首先配置位置是在ASBR上,其次需要进入OSPF协议,然后执行路由引入的操作,这个过程将使得OSPF网络中的设备获取到达RIP网络的路由。
但是此时在RIP网络中,依然不存在任何OSPF网络的路由,为了实现全网路由的可达,还需要在R2上进入RIP进程,将OSPF路由引入RIP网络中,也就是路由的双向重发布。
当然,如果只希望OSPF网络学习到RIP网络的路由,那就仅可以在OSPF进程中执行引入RIP路由,这就是路由的单向重发布。
双点双向的重发布
出现的问题
选路不佳
-
因为不同协议之间 Cost 计算方法不一致,所以每个协议针对重发布的路由信息都会设置种子度量值,相当于抛弃原本协议自带的Cost。
OSPF为了避免路由回馈,针对域外路由设计了一个很大的路由优先级150。
路由回馈
路由回馈(route feedback)是指路由器或网络设备接收到关于路由信息的反馈或信息返回的过程。
路由回馈问题
-
可能选路不佳
-
可能出现环路
优先级
-
直连IP优先级为0
-
OSPF优先级为10
-
静态IP优先级为60
-
RIP优先级为100
-
域外路由优先级为150
命令
重发布到哪里就在哪个协议或进程当中。
重发布直连网络
import-route direct
重发布静态网络
import-route static
将RIP协议的路由重发布到OSPF协议中
注意可以在重发布时修改种子度量值和类型
import-route rip type [1/2] cost [种子度量值]
将OSPF路由重发布到RIP协议中
import-route ospf [进程号]
注意:
-
重发布不能重发布缺省路由,如果想要引入则需要主动下发。
-
如果出现重复发送路由的情况,则会由ASBR选择路由表中优先级高的发布。
-
RIP协议设计的默认种子度量值为0
-
在重发布过程中可以修改路由参数,但是是针对重发布本身的路由进行修改,其他路由不会更改。
-
重发布后,环回接口会协议学习到的路由信息和宣告在协议中的直连网段。
配置1
首先进行基础IP配置。
# R1 [R1-LoopBack0]ip address 1.1.1.1 24 [R1-rip-1]version 2 [R1-rip-1]network 1.0.0.0 [R1-rip-1]network 12.0.0.0 # R2,ASBR设备 [R2-rip-1]version 2 [R2-rip-1]network 12.0.0.0 [R2-ospf-1-area-0.0.0.0]network 23.0.0.0 0.0.0.255 [R2-ospf-2-area-0.0.0.0]network 34.0.0.0 0.0.0.255 # R3 [R3-LoopBack0]ip address 3.3.3.3 24 [R3-ospf-1-area-0.0.0.0]network 3.3.3.3 0.0.0.0 [R3-ospf-1-area-0.0.0.0]network 23.0.0.0 0.0.0.255 # R4 [R4-LoopBack0]ip address 4.4.4.4 24 [R4-ospf-2-area-0.0.0.0]network 4.4.4.4 0.0.0.0 [R4-ospf-2-area-0.0.0.0]network 34.0.0.0 0.0.0.255 # 查看路由表 [R2]display ip routing-table
重发布
### 路由重发布,将OSPF进程1引入RIP区域 [R2-rip-1]import-route ospf 1 # 查看RIP协议数据库表 [R2]display rip 1 database ### 重发布直连网络到RIP中 [R2-rip-1]import-route direct # 此时查表发现34网段也被引入 [R1]display ip routing-table protocol rip ### 重发布静态网络 # 任意写三条指向空接口的缺省和静态 [R2]ip route-static 0.0.0.0 0 NULL 0 [R2]ip route-static 3.3.3.3 32 NULL 0 [R2]ip route-static 10.0.0.0 24 NULL 0 # 引入静态 [R2-rip-1]import-route static ### 引入RIP并修改类型和种子度量值 [R2-ospf-1]import-route rip type 1 cost 10 # 引入直连和静态 [R2-ospf-1]import-route direct [R2-ospf-1]import-route static # 此时查看发现R1到R3的开销为11,成功修改,而且也成功学习到了静态路由 [R3]display ip routing-table protocol ospf
此时查看路由表发现缺省路由并未被引入,因为重发布不能重发布缺省路由,静态在之前引入OSPF时就已经重发布过了所以不会重复。
类型2默认开销为1,类型1则是当前的开销+到目标路径的开销。
配置2
首先进行基础IP配置。
# 环回路由 [R1-LoopBack0]ip address 1.1.1.1 255.255.255.0 [R2-LoopBack0]ip address 2.2.2.2 255.255.255.0 [R3-LoopBack0]ip address 3.3.3.3 255.255.255.0 [R4-LoopBack0]ip address 4.4.4.4 255.255.255.0 # 宣告 [R1-rip-1]network 1.0.0.0 [R1-rip-1]network 12.0.0.0 [R1-rip-1]network 13.0.0.0 [R2-rip-1]network 2.0.0.0 [R2-rip-1]network 12.0.0.0 [R3-rip-1]network 13.0.0.0 [R2-ospf-1-area-0.0.0.0]network 2.2.2.2 0.0.0.0 [R2-ospf-1-area 0.0.0.0]network 24.0.0.0 0.0.0.255 [R3-ospf-1-area-0.0.0.0]network 3.3.3.3 0.0.0.0 [R3-ospf-1-area-0.0.0.0]network 34.0.0.0 0.0.0.255 [R4-ospf-1-area 0.0.0.0]network 4.4.4.4 0.0.0.0 [R4-ospf-1-area 0.0.0.0]network 24.0.0.0 0.0.0.255 [R4-ospf-1-area 0.0.0.0]network 34.0.0.0 0.0.0.255 ### 重发布 [R2-ospf-1]import-route rip # 此时查LSDB表发现ASBR设备R3成功学习到R4的5类LSA [R3]display ospf lsdb # 查路由表发现R3通过RIP学习到R2的环回,并非是OSPF通过R4学习到的,因为域外路由优先级为150,RIP的优先级为100,最终R3选择通过RIP学习R2的环回 [R3]display ip routing-table protocol ospf
此时R2的路由信息是通过R4传到R3的,但是经过R3重发布后,RIP的默认开销值为0,到R1的RIP开销值为1,而R1到R2的开销值也为1,如果R3将获取到的信息重发布到RIP,就会造成选路不佳,还可能导致环路的出现,这称之为路由回馈。所以OSPF为了避免这种情况,当R3即使进行了重发布,也不会将R4的信息发布给RIP环境设备。并且建立了一种规则。
# 补全重发布 [R2-rip-1]import-route ospf [R3-rip-1]import-route ospf [R3-ospf-1]import-route rip # 查看路由表 [R1]display ip routing-table protocol rip [R4]display ip routing-table protocol ospf
此时查看R1的RIP路由表发现R1路由去往24.0和34.0网段有上下两条路,造成了负载均衡,容易造成选路不佳。这也是多点重发布造成的问题,重发布过后原本的开销值都变成了默认的种子度量值为0。查看R4的OSPF路由表发现R3的环回学习了两次,分别是通过OSPF和重发布学到的。
在R2中发现学习了两个R3的环回,分别是24和32两个掩码,24掩码是通过RIP学习的,而32才是重发布OSPF学习到的,这是因为存在路由回馈,没能达成统一。解决办法由两种:一是将R3环回的掩码修改为32保持全网一致,二是将R3环回接口的网络类型改为广播。
### 修改接口网络类型 [R3-LoopBack0]ospf network-type broadcast # 此时查看R2发现32掩码的环回路由 [R2]display ip routing-table
二、路由策略
功能
-
控制路由发送和接入。
-
发送或者接收时修改路由中的一些参数。
数据分为控制层面流量和数据层面流量。
ACL主要抓取控制层面流量,而前缀列表主要抓取数据层面流量。
ACL 访问控制列表
定义
ACL(Access Control List,访问控制列表),用于在网络设备上管理和控制流经设备的数据流。ACL通过定义规则来限制允许或拒绝特定类型的流量,以确保网络安全和合规性。
功能
-
访问控制
-
在路由器的出或入接口方向产生动作,只有 允许和拒绝。
-
-
定义感兴趣流量
-
帮助其他策略 抓流量。
-
分类
-
标准 ACL(2000~2999)
-
仅关注数据包中的 源IP地址。
-
-
扩展 ACL(3000~3999)
-
关注 数据包中的 源/目标IP地址,协议号 和 端口号。
-
注意:一个编码就是一张规则,一张规则能容纳大量的具体规则。
通配符
ACL的通配符与OSPF的反掩码规则相同,唯一区别在于通配符可以进行 0 1 穿插。
0 代表该位二进制不可变,1 代表该位二进制可变。
前缀列表
定义
前缀列表(Prefix List)是一种用于路由过滤和控制的功能,通常用于在路由器或网络设备上定义哪些特定的IP地址前缀可以被接受或拒绝。前缀列表可以帮助网络管理员控制流经设备的路由信息,从而实现精确的流量控制和过滤。
-
偏移列表(offset list)
-
是一种在路由器上用于调整路由信息的功能。
-
这是思科的说法,只能在距离矢量路由协议中使用(RIP和EIGRP)。
-
-
过滤列表(filter list)
-
通常用于网络设备上,用来过滤来自特定邻居路由器的路由信息或用作路由的过滤条件。
-
本质可以理解为一个调用工具,本身是没有过滤流量的能力,必须借助低阶列表(ACL、前缀列表)本身的过滤数据能力。
-
缺点:只能过滤路由信息但是不能过滤LSA,在OSPF中使用注意场景(只能在接口入方向调用)。
-
路由策略
路由策略(routing policy)是网络管理员定义的一组规则或条件,用来决定路由器如何处理、选择和传递路由信息。
命令
ACL 访问控制列表
创建 标准ACL表,编号为标准范围。
acl [标准编号]
规定 拒绝 源IP,在匹配地址时,需要使用通配符。
rule deny source [源IP] [通配符]
规定 允许源网段 通过 。
rule permit source [网段] [通配符]
规定 允许/拒绝所有 IP。
rule permit/deny source any
规定该规则的 步调,允许/拒绝 源IP 。
rule [步调] permit/deny source [源IP] [通配符]
在 相应接口 的 进/出方向上调用 标准/扩展ACL。
traffic-filter inbound/outbound acl 2000
查看标准 ACL 表。
display acl 2000
Prefix 前缀列表
创建前缀列表并抓取或拒绝指定网段
指定名称可以添加规则,注意列表名称要相同
ip ip-prefix [前缀列表名] permit/deny [网段] [掩码]
可以自行指定规则的index编号,插入到规则的位置。
ip ip-prefix [列表名] index [编号] permit/deny [网段] [掩码]
可以使用正则表达式来指定规则限制抓取的网段范围(≥或≤网段掩码)
ip ip-prefix [列表名] permit/deny [网段] [掩码] less-equal/greater-equal [掩码]
删除前缀列表全部规则,可以单独指定想要删除的index规则编号
undo ip ip-prefix [列表名]
undo ip ip-prefix [列表名] index [规则编号]
查看所有前缀列表(不指定列表名),指定名称可以查看对应前缀列表规则
display ip ip-prefix [列表名]
Offset 偏移列表
只能在距离矢量路由协议中使用(RIP和EIGRP)。
增加开销值(要先进入接口)
开销值范围为1~15,因为RIP 16跳数不可达。
只能在接口发出metricout或者接收metricin时调用前缀列表或者ACL抓取到的流量。
rip metricout ip-prefix [列表名] [待加开销值]
rip metricin ip-prefix [列表名] [待加开销值]
Filter 过滤列表
协议中调用过滤列表
过滤进入或者发出的方向,不匹配接口则过滤所有接口。
filter-policy ip-prefix [列表名] import [接口]
filter-policy ip-prefix [列表名] export [接口]
路由策略
创建路由策略并制定规则,定义编号
route-policy [名称] permit/deny node [规则编号]
匹配条件
if-match [列表类型] [编号]
当规则是允许时,没有IF-MATCH就代表匹配所有IP地址。
在重发布时调用路由策略
import-route rip route-policy [策略名称]
修改开销值计算类型
apply cost-type type-1/type-2
修改种子度量值,可以选择直接修改或加减
apply cost [度量值]
apply cost +/- [度量值]
查看全部路由策略,可以指定名称
display route-policy [策略名称]
注意
-
前缀列表默认在末尾隐含一条拒绝所有的规则,当流量没有匹配到具体的规则则默认直接拒绝;匹配规则是自上而下逐一匹配,一旦匹配上就不再向下匹配。
-
路由策略的末尾也隐含一条拒绝所有流量的规则,当流量没有匹配到具体的规则则默认直接拒绝,匹配规则是自上而下逐一匹配,一旦匹配上就不再向下匹配。
-
路由策略当规则是允许时,没有IF-MATCH就代表匹配所有IP地址(放通剩下的路由信息)。
配置1
这里我们继续使用重发布的拓扑图来进行抓取流量。
### 创建前缀列表并抓取流量 [R3]ip ip-prefix aaa permit 172.16.0.0 25 ### 添加规则,抓取新的网段流量 [R3]ip ip-prefix aaa permit 192.168.1.0 24 ### 拒绝指定流量,并指定编号添加到固定位置 [R3]ip ip-prefix aaa index 15 deny 172.16.0.1 24 ### 正则表达式 [R3]ip ip-prefix aaa permit 172.16.0.0 24 less-equal 27 [R3]ip ip-prefix aaa permit 172.16.0.0 24 greater-equal 27 less-equal 32 ### 抓取所有IP流量的规则 # 以下两条规则等价,大于掩码0和小于掩码32等价 [R3]ip ip-prefix aaa permit 0.0.0.0 0 less-equal 32 [R3]ip ip-prefix aaa permit 0.0.0.0 0 greater-equal 0 ### 删除规则,可以指定编号,不指定则删除全部规则 [R3]undo ip ip-prefix aaa index 10 ### 查看规则 [R3]display ip ip-prefix aaa
偏移列表
这里我们对24.0.0.0/24网段进行调整。
配置R1或者R3的入/出接口策略调整开销值,让路由选择从上方链路通过。
配置接口出入方向的路由策略(流量发出方向)。
### 新建一个前缀列表,抓取24.0网段的流量 [R3]ip ip-prefix bbb permit 24.0.0.0 24 ### 在接口0的发出方向增加RIP的开销 [R3-GigabitEthernet0/0/0]rip metricout ip-prefix bbb 10 # 新建前缀列表策略,在R1的接口1入方向配置 [R1]ip ip-prefix ccc permit 24.0.0.0 24 [R1-GigabitEthernet0/0/1]rip metricin ip-prefix ccc 10 # 查看路由表发现此时选路为12.0网段 [R1]display ip routing-table protocol rip
过滤列表
这里我们对24.0.0.0/24网段进行调整。
配置34.0.0.0/24网段流量从上路进来的过滤列表,让路由只能从下路进入。(R1入方向)
# 首先新建列表规则,拒绝34.0网段流量进入 [R1]ip ip-prefix b deny 34.0.0.0 24 ### 过滤b规则,不让34.0网段流量从上路进来 [R1-rip-1]filter-policy ip-prefix b import GigabitEthernet 0/0/0 # 查表发现34.0网段成功过滤上路,但是R4环回也被拒绝了,因为前缀列表默认在末尾隐含一条拒绝所有的规则 [R1]ip ip-prefix b permit 0.0.0.0 0 less-equal 32 # 添加允许所有流量进入的规则 [R1]ip ip-prefix b permit 0.0.0.0 0 less-equal 32 # 再次查表发现R4重新回到负载均衡 [R1]display ip routing-table protocol rip
这里也可以选择在R2上进行过滤,只不过要修改成接口0的发出export。
配置2
要求:
192.168.1.0 --- 拒绝
192.168.2.0 --- 类型一
192.168.3.0 --- 种子度量改为10
192.168.4.0 --- 打上tag 666 类型一 种子度量10
12.0.0.0 --- 正常放通
首先进行基础IP配置。
# 环回路由 [R1-LoopBack0]ip address 192.168.1.1 255.255.255.0 [R1-LoopBack1]ip address 192.168.2.1 255.255.255.0 [R1-LoopBack2]ip address 192.168.3.1 255.255.255.0 [R1-LoopBack3]ip address 192.168.4.1 255.255.255.0 # RIP [R1-rip-1]network 12.0.0.0 [R1-rip-1]network 192.168.1.0 [R1-rip-1]network 192.168.2.0 [R1-rip-1]network 192.168.3.0 [R1-rip-1]network 192.168.4.0 [R2-rip-1]network 12.0.0.0 # OSPF [R2-ospf-1-area 0.0.0.0]network 23.0.0.0 0.0.0.255 [R3-ospf-1-area 0.0.0.0]network 23.0.0.0 0.0.0.255
抓取流量
可以使用ACL或者前缀列表,这里先选择ACL。
# 创建标准ACL [R2]acl 2000 # 规定允许环回接口1的网段通过,抓取1.0网段 [R2-acl-basic-2000]rule permit source 192.168.1.0 0.0.0.255 ### 创建拒绝的路由策略a并指定编号 [R2]route-policy a deny node 10 ### 匹配ACL2000的规则(抓取的网段流量) [R2-route-policy]if-match acl 2000 ### 在重发布时调用路由策略 [R2-ospf-1]import-route rip route-policy a
开销计算类型
### 新建ACL2001列表,抓取2.0网段 [R2]acl 2001 [R2-acl-basic-2001]rule permit source 192.168.2.0 0.0.0.255 # 创建允许的路由策略,注意编号要不同 [R2]route-policy a permit node 20 # 匹配规则 [R2-route-policy]if-match acl 2001 ### 修改为类型一 [R2-route-policy]apply cost-type type-1 # 再次调用刷新路由策略 [R2-ospf-1]import-route rip route-policy a # 查看路由策略a [R2]display route-policy a # 查看R3路由表发现成功引入2.0网段并且修改了开销值计算类型 [R3]display ip routing-table protocol ospf
种子度量值
# 创建前缀列表a,抓取3.0网段 [R2]ip ip-prefix a permit 192.168.3.0 24 # 创建允许的路由策略 [R2]route-policy a permit node 30 ### 匹配前缀列表a [R2-route-policy]if-match ip-prefix a ### 修改种子度量值为10 [R2-route-policy]apply cost 10 # 调用刷新路由策略 [R2-ospf-1]import-route rip route-policy a # 查看R3路由表发现成功引入3.0网段并且修改了度量值 [R3]display ip routing-table protocol ospf
Tag标签
# 创建前缀列表b,抓取4.0网段 [R2]ip ip-prefix b permit 192.168.4.0 24 # 创建允许的路由策略 [R2]route-policy a permit node 40 [R2-route-policy]if-match ip-prefix b ### 修改标签 [R2-route-policy]apply tag 666 # 修改种子度量值和类型 [R2-route-policy]apply cost 10 [R2-route-policy]apply cost-type type-1 # 查看R3路由表发现成功引入4.0网段 [R3]display ip routing-table protocol ospf ### 创建空的路由策略,编号设置大一点使其在最后,没有if-match就代表匹配所有IP地址 [R2]route-policy a permit node 1000 ### 查看OSPF路由信息 [R3]display ospf routing
如果想要放通剩下的路由信息,则直接在规则编号的末尾创建一张空表即可,没有if-match就代表匹配所有IP地址。
三、实验
要求:
补全流量的列表规则
使选路最佳
配置
此时12.0和13.0两个网段到R4的选路均有两条,制定规则将选路调整到最佳。这里我们选择两种不同的方法。
### 拒绝12.0网段的下路选择 # 在R3上新建规则a拒绝12.0网段的流量 [R3]ip ip-prefix a deny 12.0.0.0 24 # 过滤规则a拒绝12.0网段从下路R3接口0进入 [R3-rip-1]filter-policy ip-prefix a import GigabitEthernet0/0/0 ### 拒绝13.0网段的上路选择 # 在R2上新建规则b拒绝13.0网段的流量 [R2]ip ip-prefix b deny 13.0.0.0 24 # 过滤规则b拒绝12.0网段从上路R2接口0进入 [R2-rip-1]filter-policy ip-prefix b import GigabitEthernet 0/0/0 ### 13.0网段我们再使用一下路由策略的方法 # 创建前缀列表c并允许13.0网段通过 [R2]ip ip-prefix c permit 13.0.0.0 24 # 创建拒绝的路由策略c,编号为10 [R2]route-policy c deny node 10 # 匹配前缀列表c的规则 [R2-route-policy]if-match ip-prefix c # 在重发布中调用路由策略 [R2-ospf-1]import-route rip route-policy c # 创建允许的路由策略空表,放通剩下的IP [R2]route-policy c permit node 1000 # 查看路由表发现12.0和13.0网段的选路配置成功 [R4]display ip routing-table protocol ospf