路由引入正解(三)_双点双向引入推理
在双点双向的的路由引入当中,必定会涉及到路由优先级,所以明确路由的优先级至关重要。
优先级
DIRECT | 0 |
---|---|
OSPF | 10 |
ISIS | 15 |
STATIC | 60 |
RIP | 100 |
OSPF ASE | 150 |
BGP | 255 |
- 问题:为什么OSPF拥有两个优先级呢?而且这两个优先级相差这么多?先思考一下,我们会在下文有详细的解释。
- 仔细观察,你会发现在华为体系当中,OSPF优先级仅次于直连,也就是OSPF比静态都要优秀!
引入问题
路由引入时如果规划不当,很容易导致以下两种问题:
- 次优路由
- 路由环路
次优问题
如上图所示,RTC将2.2.2.2引入到ISIS当中,对于RTB来说从RTA学来的优先级是15,同时RTB通过RIP学习到的优先级是60,明明实际上RTB去往2.2.2.2直接走RTD更近,但因为优先级问题导致RTB认为走RTA到达2.2.2.2更近,这就是路由引入导致的次优路径问题。如果RTB做引入的话,那RTC同样也会面临路由次优路由的问题。
但你想一下,如果上图不变,我们把ISIS替换成OSPF,那学会次优路径问题吗?就不会了,为什么?同时样还是RTC引入路由到OSPF。对于OSPF来说,RTC引入的路由是外部路由,引入的外部路由不能与本地的路由优先级一样,OSPF默认给引入的外部路由优先级设置为150,RTB从OSPF当中收到的2.2.2.2,优先级是150,从RIP当中收到的2.2.2.2优先级是60,所以还是走ISIS,并没有产生次优路径,这就是为什么OSPF要针对内部路由和外部路由要设置两个优先级原因,还是很巧妙的,但与思科的EIGRP相比的,还是EIGRP更胜一筹,EIGRP拥有三个优先级。
其实这个地方有一个规律:
- 从低优先级到高优先级就会产生环路问题,比如从RIP到ISIS。
- 从优先级高的(更优的)到优先级低的引入没有次优路由的问题,比如从RIP引入到OSPF,与OSPF的外部路由相比,RIP的优先级更高,所以没有产生次优路径问题。
环路问题
- RTB从RTA引入了2.2.2.2这个外部路由,并且修改了开销为2
- 对于RTB来说,这条路由是外部路由通过五类LSA承载, 在OSPF域中传递时开销保持不变
- 路由到达RTE,而RTE又把OSPF引入到ISIS,而且还没有写开销,那到达RTD的开销就是默的1
- RTD再传到RTC,RTC又把ISIS引入到了OSPF,这时候开销又根据种子开销成了1,最终交给RTB
- 对于RTB来说,通过RTA引入的外部路由优先级是150,开销是2,从RTC引入的外部路由优先级是150,开销是1,那RTB会认为去往2.2.2.2要交给RTC。当RTB再去访问2.2.2.2时,环路就产生了,RTB—>RTC—>RTD—>RTE—>RTB—>RTC……
- 路由环路的根本问题:
- 上图当中有两个翻译者,RTA和RTC都是翻译者
- RTA告诉RTB去往2.2.2.2应该走RTA,RTC也告诉RTB去往2.2.2.2应该走RTC
- 所以RTB就就蒙了,两个翻译者到底听谁的?结果听信了谗言,听了RTC的话,导致了环路!
解决方案
在IE考试当中,这三个方案是结合的,以下三种手段都要用上!
路由过滤(逆)
- 通过路由过滤可以很好的解决次优先路径的问题,本质是阻止路由计算。
- 解决思路简单粗暴,利用路由过滤,在RTB的ISIS进程当中,阻止它从数据库当中计算出这条路由;注意,由于ISIS也是链路状态路由协议,你不能把这个路由彻底拒绝,只能阻止它从数据库当中计算出来。
原来在RTB上会产生次优,RTB访问2.2.2.2的时候走RTA这条路径,原因是因为RTB通过RTA告诉它的信息计算出走RTA这条路径更优秀,现在的解决方法就是在RTB的isis进程当中,利用路由过滤阻止ISIS从数据库当中计算出RTA告诉它的路由,这样RTB的路由表当中只能看到RIP的路由,就不会产生次优路径了。
按理说我们有两个解决问题的思路:
- 不让RTC发
- 不让RTB收
但是不让RTC发这个思路不行,因为RTC如果不发的话,那整个ISIS路由域就都收不到2.2.2.2这条路由了。
优先级(顺)
通过路由优先级可以很好的解决次优先路径的问题,本质允许路由计算,因为我们我们修改了优先级,导致算出来结果不会产生次优问题。
注意,改优先级方案不要轻易使用,因为影响范围太大。假如RTA左而还有一个网段是1.1.1.1,RTA传到RTB,RTB学到的优先级因为我们修改是150;同时,RTA又把1.1.1.1告诉了RTC,RTC给RTD,而RTD告诉RTB是RIP的优先级100,这样就会导致RIP比ISIS优先级更优秀了,RTB去往1.1.1.1直接走RTD,这就又导致次优先路径了!解决2.2.2.2的问题,又造成了1.1.1.1出问题。如果是RTB上采用优先级方案加上路由策略精准匹配2.2.2.2,我们仅仅针对2.2.2.2这一条路由,别影响到别的路由问题,那就没问题了
加标签
先回顾一下上面导致环路的问题:
-
路由环路的根本问题:
- 上图当中有两个翻译者,RTA和RTC都是翻译者
- RTA告诉RTB去往2.2.2.2应该走RTA,RTC也告诉RTB去往2.2.2.2应该走RTC
- 所以RTB就就蒙了,两个翻译者到底听谁的?结果听信了谗言,听了RTC的话,导致了环路!
-
解决思路:
- 如果RTB不听RTC的话就好了!RTB发出去的路由就不应再回来影响RTB!不该回传
-
解决方案:
- 如下图所示:RTD从OSPF发出去的路由就不应该再回到OSPF域
- 所以在RTD把OSPF的路由引入到ISIS域时全都携带一个TAG标识(要在ISIS进程当中操作),这样在ISIS传的时候都会携带这个TAG,所以我们在RTB的OSPF引入ISIS时,通过路由策略明确要求不计算带有TAG的路由信息(通过route-policy全部拒绝),自己路由表里面没有,自然也就不会传给RTA。
PS:上图是通过TAG来进行选择性路由引入
标签+开销(疑惑)
双点单向
基础环境
- 要求:
- 配置基本地址信息和路由协议
- R2把OSPSF引入到RIP
- R4所RIP引入到OSPF
- R5把直连引入到OSFP
- R3把直连和静态引入到RIP,不引入/25路由
- 避免次优路由和环路
要求一:基础配置
做基础配置时,AR5注意一下,我们没有宣告5.5.5.5这个直连路由,AR3上也没有宣告直连和静态,后面做后面的要求时再宣告。
-
基础配置
# AR5 # AR5注意一下,我们没有宣告5.5.5.5这个直连路由 # AR3上也没有宣告直连和静态 sys sysn AR5 int l0 ip add 5.5.5.5 32 int s4/0/0 ip add 15.0.0.5 24 ospf 1 router-id 5.5.5.5 a 0 network 15.0.0.5 0.0.0.0 quit # AR1 sys sysn AR1 int l0 ip add 1.1.1.1 32 int s4/0/0 ip add 15.0.0.1 24 int g0/0/0 ip add 12.0.0.1 24 int g0/0/1 ip add 14.0.0.1 24 ospf 1 router-id 1.1.1.1 a 0 network 1.1.1.1 0.0.0.0 network 15.0.0.1 0.0.0.0 network 12.0.0.1 0.0.0.0 network 14.0.0.1 0.0.0.0 quit # AR4 sys sysn AR4 int l0 ip add 4.4.4.4 32 int g0/0/1 ip add 14.0.0.4 24 int g0/0/0 ip add 34.0.0.4 24 undo rip split-horizon ospf 1 router-id 4.4.4.4 a 0 network 14.0.0.4 0.0.0.0 rip version 2 undo summary network 34.0.0.0 # AR2 sys sysn AR2 int l0 ip add 2.2.2.2 32 int g0/0/1 ip add 23.0.0.2 24 undo rip split-horizon int g0/0/0 ip add 12.0.0.2 24 ospf 1 router-id 2.2.2.2 a 0 network 12.0.0.2 0.0.0.0 rip version 2 undo summary network 23.0.0.0 quit # AR3 sys sysn AR3 int l0 ip add 3.3.3.3 32 int g0/0/1 ip add 34.0.0.3 24 undo rip split-horizon int g0/0/0 ip add 23.0.0.3 24 undo rip split-horizon rip version 2 undo summary network 23.0.0.0 network 34.0.0.0 ip route-static 172.16.0.0 24 NULL 0 ip route-static 172.16.0.0 25 NULL 0
# 验证一下OSPF
## AR1没OSPF路由是对的,OSPF只宣告了直连网段嘛!
<AR1>dis ip routing-table protocol ospf
<AR1>dis ospf peer brief
OSPF Process 1 with Router ID 1.1.1.1
Peer Statistic Information
----------------------------------------------------------------------------
Area Id Interface Neighbor id State
0.0.0.0 Serial4/0/0 5.5.5.5 Full
0.0.0.0 GigabitEthernet0/0/0 2.2.2.2 Full
0.0.0.0 GigabitEthernet0/0/1 4.4.4.4 Full
----------------------------------------------------------------------------
# 验证一下RIP
<AR2>dis ip routing-table protocol rip
34.0.0.0/24 RIP 100 1 D 23.0.0.3 GigabitEthernet 0/0/1
<AR4>dis ip routing-table protocol rip
23.0.0.0/24 RIP 100 1 D 34.0.0.3 GigabitEthernet 0/0/0
<AR2>ping -a 23.0.0.2 34.0.0.4
PING 34.0.0.4: 56 data bytes, press CTRL_C to break
Request time out
Reply from 34.0.0.4: bytes=56 Sequence=2 ttl=254 time=50 ms
要求二:R2把OSPSF引入到RIP
# 此处的操作非常简单
[AR2]rip
[AR2-rip-1]import-route ospf
那从R2引入之后会发生什么呢?
R2的OSPF的数据库当中一共有三条OSPF路由,从R2引入到RIP之后,R3会收到三条RIP路由,而R4同样也会收到。R4虽然收到了,但是没有激活,这一点很好理解呀!因为R4本身OSPF路由表当中就有这三条路由,而且OSPF的优先级(10)还比RIP(100)更优秀,那AR4自然不会将这三条RIP路由加载到全局路由表了!如下所示,显示是inactive
[AR4]dis ip routing-table protocol rip
Route Flags: R - relay, D - download to fib
------------------------------------------------------------------------------
Public routing table : RIP
Destinations : 5 Routes : 5
RIP routing table status : <Active>
Destinations : 1 Routes : 1
Destination/Mask Proto Pre Cost Flags NextHop Interface
23.0.0.0/24 RIP 100 1 D 34.0.0.3 GigabitEthernet
0/0/0
# 看这里
RIP routing table status : <Inactive>
Destinations : 4 Routes : 4
Destination/Mask Proto Pre Cost Flags NextHop Interface
1.1.1.1/32 RIP 100 2 34.0.0.3 GigabitEthernet
0/0/0
12.0.0.0/24 RIP 100 2 34.0.0.3 GigabitEthernet
0/0/0
14.0.0.0/24 RIP 100 2 34.0.0.3 GigabitEthernet
0/0/0
15.0.0.0/24 RIP 100 2 34.0.0.3 GigabitEthernet
没激活并不代表没有用,只是不会优选而已,如果当R4的G0/0/1接口down之后,这些路由自然就active了!我们可以尝试一下
[AR4]int g0/0/1
[AR4-GigabitEthernet0/0/1]shutdown
# 注意看,已经全是active的了
[AR4-GigabitEthernet0/0/1]dis ip routing-table protocol rip
Route Flags: R - relay, D - download to fib
------------------------------------------------------------------------------
Public routing table : RIP
Destinations : 5 Routes : 5
RIP routing table status : <Active>
Destinations : 5 Routes : 5
Destination/Mask Proto Pre Cost Flags NextHop Interface
1.1.1.1/32 RIP 100 2 D 34.0.0.3 GigabitEthernet
0/0/0
12.0.0.0/24 RIP 100 2 D 34.0.0.3 GigabitEthernet
0/0/0
14.0.0.0/24 RIP 100 2 D 34.0.0.3 GigabitEthernet
0/0/0
15.0.0.0/24 RIP 100 2 D 34.0.0.3 GigabitEthernet
0/0/0
23.0.0.0/24 RIP 100 1 D 34.0.0.3 GigabitEthernet
0/0/0
RIP routing table status : <Inactive>
Destinations : 0 Routes : 0
# 测试完成之后再还原回来
[AR4-GigabitEthernet0/0/1]undo shutdown
要求三:在AR4把RIP引入OSPF
# 先看一下AR4的RIP数据库,目前AR2的RIP数据库当中就一条路由,然后再加上直连的23,一共两条
<AR4>dis ip routing-table protocol rip
Route Flags: R - relay, D - download to fib
------------------------------------------------------------------------------
Public routing table : RIP
Destinations : 5 Routes : 5
RIP routing table status : <Active>
Destinations : 1 Routes : 1
Destination/Mask Proto Pre Cost Flags NextHop Interface
23.0.0.0/24 RIP 100 1 D 34.0.0.3 GigabitEthernet
0/0/0
# 引入一下
[AR4]ospf 1
[AR4-ospf-1]import-route rip
# 去R5上校验一下,应该就会收到两条5类的路由信息
<AR5>dis ip routing-table protocol ospf
Route Flags: R - relay, D - download to fib
------------------------------------------------------------------------------
Public routing table : OSPF
Destinations : 5 Routes : 5
OSPF routing table status : <Active>
Destinations : 5 Routes : 5
Destination/Mask Proto Pre Cost Flags NextHop Interface
1.1.1.1/32 OSPF 10 48 D 15.0.0.1 Serial4/0/0
12.0.0.0/24 OSPF 10 49 D 15.0.0.1 Serial4/0/0
14.0.0.0/24 OSPF 10 49 D 15.0.0.1 Serial4/0/0
23.0.0.0/24 O_ASE 150 1 D 15.0.0.1 Serial4/0/0
34.0.0.0/24 O_ASE 150 1 D 15.0.0.1 Serial4/0/0
OSPF routing table status : <Inactive>
Destinations : 0 Routes : 0
这个时候,AR2也会从AR1收到34和12网段的路由,但是AR2不会激活!因为AR1告诉它的优先级是外部路由150,这个比RIP的优先级还要差,所以AR2不听AR1告诉它的信息,去往34和12依然还是走右边的RIP,这样就不会产生次优路径,所以从这个角度来看,OSPF还是比较优秀的!设置10和150两个优先级还是很厉害的,提前考虑到了这种情况!
问题出现:来回路径不一致
但现在面临一个尴尬的问题,那就是从AR1 ping AR3来回路由不一致,原因是因为我们仅做了单向的引入。
# AR1
<AR1>ping 34.0.0.3
PING 34.0.0.3: 56 data bytes, press CTRL_C to break
Reply from 34.0.0.3: bytes=56 Sequence=1 ttl=254 time=50 ms
Reply from 34.0.0.3: bytes=56 Sequence=2 ttl=254 time=20 ms
根据路由,请求从上面走,AR3的回复从下面走!
PS: 以上就是前三个要求,没有什么大问题,就是有来回路径不一致;
要求四:AR5引入直连的5.5.5.5
接下来,我们从AR5上引入外部路由5.5.5.5
[AR5]ip ip-prefix test1 permit 5.5.5.5 32
[AR5]ospf
[AR5-ospf-1]import-route direct route-policy test1
然后我们就会发现一个特别奇怪的问题,在R4上会发现R2去往5.5.5.5要竟然要走RIP,而且还有15.0.0.1也是很奇怪的出现在了R4的RIP路由表当中,如下所示:
<AR4>dis ip routing-table protocol rip
Route Flags: R - relay, D - download to fib
------------------------------------------------------------------------------
Public routing table : RIP
Destinations : 7 Routes : 7
RIP routing table status : <Active>
Destinations : 3 Routes : 3
Destination/Mask Proto Pre Cost Flags NextHop Interface
**5.5.5.5/32 RIP 100 2 D 34.0.0.3 GigabitEthernet0/0/0
15.0.0.1/32 RIP 100 2 D 34.0.0.3 GigabitEthernet0/0/0**
23.0.0.0/24 RIP 100 1 D 34.0.0.3 GigabitEthernet0/0/0
RIP routing table status : <Inactive>
Destinations : 4 Routes : 4
Destination/Mask Proto Pre Cost Flags NextHop Interface
1.1.1.1/32 RIP 100 2 34.0.0.3 GigabitEthernet0/0/0
12.0.0.0/24 RIP 100 2 34.0.0.3 GigabitEthernet0/0/0
14.0.0.0/24 RIP 100 2 34.0.0.3 GigabitEthernet0/0/0
15.0.0.0/24 RIP 100 2 34.0.0.3 GigabitEthernet0/0/0
怎么会这样,正常情况下,我们在OSPF域当中宣告了5.5.5.5,按理说AR4的左侧也连接了OSPF,5.5.5.5应该出现在OSPF域当中!这一点也很好理解,对于在OSPF域中的AR4来说,5.5.5.5毕竟属于外部路由,优先级150;AR2将5.5.5.5引入到RIP之后,优先级就成了RIP的100,那对于AR4来说,当然要选RIP了!!
问题出现:R1选路异常,导致环路
先看R3到5.5.5.5是不通的,tracert一下是环路的,是四台设备参与其中,怎么会产生环路呢?
# R3-R2-R1-R4-R3
<AR3>tracert 5.5.5.5
traceroute to 5.5.5.5(5.5.5.5), max hops: 30 ,packet length: 40,press CTRL_C t
o break
1 23.0.0.2 20 ms 20 ms 20 ms
2 12.0.0.1 20 ms 20 ms 30 ms
3 14.0.0.4 30 ms 40 ms 20 ms
4 34.0.0.3 20 ms 20 ms 20 ms
5 23.0.0.2 30 ms 30 ms 40 ms
6 12.0.0.1 30 ms 30 ms 30 ms
7 14.0.0.4 30 ms 50 ms 40 ms
8 34.0.0.3 20 ms 30 ms 30 ms
在哪里出了问题,从AR3—AR2—AR1这一部分是对的?可是为什么AR1又把数据交给了AR4呢?看来问题出在R1上!
# AR的路由表确实写着去5.5.5.5下一跳要给AR4,怎么会这样?5.5.5.5应该要给AR5才对嘛!AR5就在那旁边嘛!
<AR1>dis ip routing-tabl 5.5.5.5
5.5.5.5/32 O_ASE 150 1 D 14.0.0.4 GigabitEthernet
0/0/1
OK,那我们就来分析一下僵局,就从AR5开始引入5.5.5.5开始吧?
-
AR5通过route-policy引入了5.5.5.5,以type-5 LSA、cost-type 2,cost-value为1交给AR1
-
AR1加载到自己的路由表当中,开销是1,优先级是150
-
AR2将5.5.5.5引入了RIP当中,开销给改成了RIP种子开销0,优先级改成了100,最终转换为RIP发给了AR4,AR4上的5.5.5.5开销是2,优先级100。在这个报文因为优先级的问题,导致AR4会选择通过AR3到达5.5.5.5前面我们已经说过了!
-
那AR4会不会将其加载到路由当中呢?当前会加载的,而且还会通过AR4再传给AR1,优先级是150,开销是1
-
(关键来了),AR1通过AR4得到5.5.5.5开销是1,优先级是150、五类LSA、开销类型默认2;AR1之前通过AR5得到5.5.5.5,开销也是1,优先级是150、五类LSA、开销类型默认2,这一模一样的呀!!AR4怎么选呢?其实是会比较开销的,这里面的开销指的接口开销,即AR1收到五类LSA接口的开销,即AR1的g0/0/1接口和s4/0/0(48)接口,肯定是G0/0/1(1)接口更优的,如下所示,所以AR1选择AR4
<AR1>dis ospf interface OSPF Process 1 with Router ID 1.1.1.1 Interfaces Area: 0.0.0.0 (MPLS TE not enabled) IP Address Type State Cost Pri DR BDR 1.1.1.1 P2P P-2-P 0 1 0.0.0.0 0.0.0.0 15.0.0.1 P2P P-2-P 48 1 0.0.0.0 0.0.0.0 12.0.0.1 Broadcast BDR 1 1 12.0.0.2 12.0.0.1 14.0.0.1 Broadcast BDR 1 1 14.0.0.4 14.0.0.1
总结
在上述实验的过程当中,我们一共遇到了两个问题:
- AR4的次优问题。AR4产生次优问题的原因是从AR4收到的5.5.5.5路由优先级是100,而从AR1收到的5.5.5.的路由优先级是100,所以肯定选AR3了
- AR1的选路异常问题导致的环路问题,也可以理解为AR1的次优导致的环路问题。AR1的次优路由问题是因为5类LSA内部的开销类型冲突,都是type-2,导致AR1不得不通过接口开销来选择,连接G0/0/1接口开销比S4/0/0更优秀,所以AR1选择了AR4。
- 注意在这个地方还在声明一下,RIP当中的AR3和AR4也是会通过AR2的引入的OSPF路由收到15、14、12网段和5.5.5.5的
- AR2本身的OSPF更优,所以走这三个网段和5.5.5.5还是走OSPF
- AR3相信了走这三个网段和5.5.5.5下一跳要交给AR2
- AR4相信由于RIP的优先级优于OSPF的150,所以AR4走5.5.5.5给AR3,同时把5.5.5.5加载到自己的RIP路由表。但对于15、14、12这三个网段,AR4的OSPF域内优先级更优秀,所以AR4并不会把这三条路由加载到全局路由表,自然也不会通告给AR1,AR4通过五类LSA通告给AR1的只有34、23网段和5.5.5.5,并没有14、12、15网段;R4把23和34网段扔给AR1并不会产生什么问题,本来引入就是要这么做的,唯一有问题的就是AR5把5.5.5.5扔给了AR1导致了AR1次优;
以上两个问题其实我们一块解决,你看哈,如果我们不让AR4收到5.5.5.5的路由,那AR4也不会次优,AR4自然也就不再将5.5.5.5再转发给AR1,这样AR1就去往5.5.5.5就只能直接下一跳是R5!这就是我们解决问题的思路。
双点单向_问题解决
注意:目的对我们有威胁就是5.5.5.5,AR4拒绝了5.5.5.5,AR4本身的次优路由就解决了,同时那AR4就不传给AR1,AR1的次优路由也解决了,其它的网段都不是威胁。
解法一:在AR4的OSPF使用路由策略
这种解法有一个问题,我们是在AR4的OSPF引入的时候做的路由策略,明确拒绝5.5.5.5,但AR4的RIP已经加载了这条路由,RIP此的优先级更优秀嘛!所以在这里我们仅解决了AR1的次优环路问题,AR4的次优问题并没有解决,如下所示
[AR4]ip ip-prefix test_2 permit 5.5.5.5 32
[AR4]route-policy test_2_policy deny node 10
[AR4-route-policy]if-match ip-prefix test_2
[AR4]route-policy test_2_policy permit node 20
[AR4]ospf
[AR4-ospf-1]import-route rip 1 route-policy test_2_policy
[AR4-ospf-1]di th
[V200R003C00]
#
ospf 1 router-id 4.4.4.4
import-route rip 1 route-policy test_2_policy
area 0.0.0.0
network 14.0.0.4 0.0.0.0
# 我们去AR1看一下是否生效了,也生效了
<AR1>dis ospf lsdb
AS External Database
Type LinkState ID AdvRouter Age Len Sequence Metric
External 23.0.0.0 4.4.4.4 152 36 80000006 1
External 5.5.5.5 5.5.5.5 73 36 80000006 1
External 15.0.0.1 5.5.5.5 73 36 80000006 1
External 15.0.0.1 4.4.4.4 66 36 80000006 1
External 15.0.0.0 5.5.5.5 73 36 80000006 1
External 34.0.0.0 4.4.4.4 152 36 80000006 1
<AR1>dis ip rout 5.5.5.5
Route Flags: R - relay, D - download to fib
------------------------------------------------------------------------------
Routing Table : Public
Summary Count : 1
Destination/Mask Proto Pre Cost Flags NextHop Interface
5.5.5.5/32 O_ASE 150 1 D 15.0.0.5 Serial4/0/0
# AR4走5.5.5.5还是走R3
[AR4]dis ip routing-table 5.5.5.5
Route Flags: R - relay, D - download to fib
------------------------------------------------------------------------------
Routing Table : Public
Summary Count : 1
Destination/Mask Proto Pre Cost Flags NextHop Interface
5.5.5.5/32 RIP 100 2 D 34.0.0.3 GigabitEthernet
0/0/0
解法二:在AR4的RIP使用路由过滤
我们可以在AR4的RIP做IP-PREFIX匹配住5.5.5.5,然后进入RIP进程,通过路由过滤明确拒绝不再接收5.5.5.5.
# 修改之前,先看一下AR1去往5.5.5.5的下一跳,与后续修改完做对比
<AR1>dis ip routing-table 5.5.5.5
5.5.5.5/32 O_ASE 150 1 D **14.0.0.4** GigabitEthernet
<AR1>dis ospf lsdb
……
AS External Database
Type LinkState ID AdvRouter Age Len Sequence Metric
**External 23.0.0.0 4.4.4.4 1295 36 80000005 1**
**External 5.5.5.5 5.5.5.5 1216 36 80000005 1
External 5.5.5.5 4.4.4.4 39 36 80000001 1**
External 15.0.0.1 5.5.5.5 1216 36 80000005 1
External 15.0.0.1 4.4.4.4 1209 36 80000005 1
External 15.0.0.0 5.5.5.5 1216 36 80000005 1
**External 34.0.0.0 4.4.4.4 1295 36 80000005 1**
# AR4
[AR4]ip ip-prefix deny5 deny 5.5.5.5 32
[AR4]ip ip-prefix deny5 permit 0.0.0.0 0 less-equal 32
# 通过filter-policy明确拒绝!
[AR4]rip
[AR4-rip-1]filter-policy ip-prefix deny5 import
# 做完之后,去AR1看效果,看去往5.5.5.5的下一跳又没有更改成R5,成功!
<AR1>dis ip routing-table 5.5.5.5
5.5.5.5/32 O_ASE 150 1 D 15.0.0.5 Serial4/0/0
<AR1>dis ospf lsdb
AS External Database
Type LinkState ID AdvRouter Age Len Sequence Metric
**External 23.0.0.0 4.4.4.4 1419 36 80000005 1**
**External 5.5.5.5 5.5.5.5 1340 36 80000005 1**
External 15.0.0.1 5.5.5.5 1340 36 80000005 1
External 15.0.0.1 4.4.4.4 1333 36 80000005 1
External 15.0.0.0 5.5.5.5 1340 36 80000005 1
**External 34.0.0.0 4.4.4.4 1419 36 80000005 1**
# 不仅AR1的问题解决了,AR4的问题也解决了
[AR4]dis ip routing-table 5.5.5.5
Route Flags: R - relay, D - download to fib
------------------------------------------------------------------------------
Routing Table : Public
Summary Count : 1
Destination/Mask Proto Pre Cost Flags NextHop Interface
5.5.5.5/32 O_ASE 150 1 D 14.0.0.1 GigabitEthernet
0/0/1
解法三:TAG+Preference
前两种解法看着都没有什么问题,但在实际的环境当中,我们极少这么做!原因就是因为这么做不灵活,我拒绝5.5.5.5我就得写一条acl或ip-prefix,好麻烦!如果有1000条呢?这工作量岂不是很大。
OSPF和RIP报文当中的TAG字段:
我们接下来要使用一种主流的方法,那就是打TAG,无论是在OSPF的五类LSA当中,还是RIP的报文当中其实都有一个TAG字段,五类LSA的TAG字段空间非常大(只有五类LSA才有TAG字段),我们可以随意设置TAG值,而RIP报文中的TAG字段空间非常小,有多小呢?即只有0和1两种变化!难怪RIP被淘汰了,RIP确实是点落后!注意,只有RIPV2的报文当中才有TAG字段。
OSPF和RIP报文当中的TAG字段的默认值:
OSPF的五类LSA的TAG默认值是1,而RIP报文当中的TAG默认值是0
<AR1>dis ip routing-table 5.5.5.5 verbose
……
Tag: 1 Priority: medium
……
<AR3>dis ip routing-table 12.0.0.0 ver
……
Tag: 0 Priority: low
……
OSPF和RIP报文当中的TAG字段衔接问题:
什么是衔接问题呢?我们还是使用当前的拓扑图,我们目前就面临这样的问题。AR5向AR1发送五类的LSA,也就是5.5.5.5,TAG字段默认设置为1,AR2收到5.5.5.5当中TAG值肯定也是1,那AR2向RIP引入时,RIP会继承5.5.5.5的TAG吗?其实会的,AR2发送的RIP报文当中的TAG也都会设置成1。
OSPF中五类LSA的TAG我们可以设置很多值,只不过它默认是1,引入 到RIP当中RIP也会继承1;那如果我们手工把五类LSA的TAG值设置555,那RIP如何继承呢?要知道RIP当中的TAG字段就有两种变化呀,不可能把555放进去的!RIP对此采取的策略时,只要OSPF的TAG字段非0,RIP一律设置成1,我们下面会做实验来验证一下。
第一步:先把环境恢复到AR4和AR2次优的场景
[AR4]dis ip routing-table 5.5.5.5
Route Flags: R - relay, D - download to fib
------------------------------------------------------------------------------
Routing Table : Public
Summary Count : 1
Destination/Mask Proto Pre Cost Flags NextHop Interface
5.5.5.5/32 RIP 100 2 D 34.0.0.3 GigabitEthernet
0/0/0
<AR1>dis ip rout 5.5.5.5
Route Flags: R - relay, D - download to fib
------------------------------------------------------------------------------
Routing Table : Public
Summary Count : 1
Destination/Mask Proto Pre Cost Flags NextHop Interface
5.5.5.5/32 O_ASE 150 1 D 14.0.0.4 GigabitEthernet
0/0/1
第二步:我们去R5给5.5.5.5打TAG
注意,本来5.5.5.5就处于引入状态,我们仅仅在此基础上打了TAG
[AR5]ip ip-prefix 5 permit 5.5.5.5 32
[AR5]route-policy test2 permit node 10
Info: New Sequence of this List.
[AR5-route-policy]if-match ip-prefix 5
[AR5-route-policy]app tag 555
[AR5-route-policy]ospf
[AR5-ospf-1]import-route direct route-policy test2
[AR5-ospf-1]dis th
[V200R003C00]
#
ospf 1 router-id 5.5.5.5
import-route direct route-policy test2
area 0.0.0.0
network 15.0.0.5 0.0.0.0
#
是否生效了呢?我们可以去R1或AR2上通过查看路由看到的,如下所示:
<AR2>dis ospf rout
OSPF Process 1 with Router ID 2.2.2.2
Routing Tables
Routing for Network
Destination Cost Type NextHop AdvRouter Area
12.0.0.0/24 1 Transit 12.0.0.2 2.2.2.2 0.0.0.0
1.1.1.1/32 1 Stub 12.0.0.1 1.1.1.1 0.0.0.0
14.0.0.0/24 2 Transit 12.0.0.1 4.4.4.4 0.0.0.0
15.0.0.0/24 49 Stub 12.0.0.1 1.1.1.1 0.0.0.0
Routing for ASEs
Destination Cost Type Tag NextHop AdvRouter
**5.5.5.5/32 1 Type2 555 12.0.0.1 5.5.5.5**
23.0.0.0/24 1 Type2 1 12.0.0.1 4.4.4.4
34.0.0.0/24 1 Type2 1 12.0.0.1 4.4.4.4
Total Nets: 7
所以我们只要去R4的OSPF进程把TAG为1的路由给拒绝掉就大功搞成了!
# AR4
route-policy test3 deny node 10
if-match tag 1
route-policy test3 deny node 20
if-match tag 555
route-policy test3 permit node 30
[V200R003C00]OSPF
#
ospf 1 router-id 4.4.4.4
import-route rip 1
area 0.0.0.0
network 14.0.0.4 0.0.0.0
[AR4-ospf-1]import-route rip 1 route-policy test3
为什么我们即拒绝了tag1又拒绝了tag5呢?因为ENSP的TAG有问题,当AR2传到AR4时候,5.5.5.5正常情况应该是1,但一会又变成555,估计是ENSP的BUG,所以我们这里面把1和555全都拒绝了!
# 效果,AR1正常了
<AR1>dis ip routing-table 5.5.5.5
Route Flags: R - relay, D - download to fib
------------------------------------------------------------------------------
Routing Table : Public
Summary Count : 1
Destination/Mask Proto Pre Cost Flags NextHop Interface
5.5.5.5/32 O_ASE 150 1 D 15.0.0.5 Serial4/0/0
# AR4还是次优的
[AR4]dis ip routing-table 5.5.5.5
Route Flags: R - relay, D - download to fib
------------------------------------------------------------------------------
Routing Table : Public
Summary Count : 1
Destination/Mask Proto Pre Cost Flags NextHop Interface
5.5.5.5/32 RIP 100 2 D 34.0.0.3 GigabitEthernet0/0/0
解下来,我们去解决AR4的次优问题,AR4的问题在于RIP的优先级是100,而OSPF外部路由的优先级是150,RIP比OSPF更优,我们想解决的话,就得把OSPF外部路由的优先级改的更优:
# AR4
ospf
# 这是该OSPF内部路由的,这一个不要敲
preference 99
# 针对外部路由的,用这个,先用这个,后面告诉你这个的问题!
preference ase 99
preference ase 99的意思是,当AR1再给AR4传外部路由时,AR4会自动将这个外部路由优先级改成99,不改内部路由,这样就优于AR4通过Rip收到的,这样的话AR4再去5.5.5.5就正常了!如下所示:
# 校验一下,这样就正常了
[AR4]dis ip routing-table 5.5.5.5
Route Flags: R - relay, D - download to fib
------------------------------------------------------------------------------
Routing Table : Public
Summary Count : 1
Destination/Mask Proto Pre Cost Flags NextHop Interface
5.5.5.5/32 O_ASE 99 1 D 14.0.0.1 GigabitEthernet
0/0/1
**[AR4]tracert 5.5.5.5**
traceroute to 5.5.5.5(5.5.5.5), max hops: 30 ,packet length: 40,press CTRL_C to break
1 14.0.0.1 30 ms 10 ms 20 ms
2 15.0.0.5 50 ms 20 ms 20 ms
**[AR4]dis ip routing-table protocol ospf**
Route Flags: R - relay, D - download to fib
------------------------------------------------------------------------------
Public routing table : OSPF
Destinations : 4 Routes : 4
OSPF routing table status : <Active>
Destinations : 4 Routes : 4
Destination/Mask Proto Pre Cost Flags NextHop Interface
1.1.1.1/32 OSPF 10 1 D 14.0.0.1 GigabitEthernet0/0/1
5.5.5.5/32 O_ASE 99 1 D 14.0.0.1 GigabitEthernet0/0/1
12.0.0.0/24 OSPF 10 2 D 14.0.0.1 GigabitEthernet0/0/1
15.0.0.0/24 OSPF 10 49 D 14.0.0.1 GigabitEthernet0/0/1
OSPF routing table status : <Inactive>
Destinations : 0 Routes : 0
到此,问题看起来都解决了,AR1和AR4的次优路由都好了!
上一小节我们做到这里面了,AR2和AR4的问题都解决了,但又有新问题的出现,你想一下,如果这时候AR2在OSPF当中把RIP引入呢?23和34网段对OSPF来说是外部路由,那AR4也会将23网段优先级改为99(34网段因为是直连,所以不会改),这样的话,AR4到23网段又次优了!可不止这么简单,其实AR4的所有RIP路由都会失效,怎么解决呢?在AR4上再把RIP的开销再改小吗?如果在AR4的RIP优先级再改小,那AR3又会产生次优!
所以,我们在AR4上进行修改OSPF的外部路由优先级的时候,不能直接preference ase 99,这样影响的范围太大了,我们仅针对目的路由即可,这样AR4对5.5.5.5就不会产生次优了,同时如果AR2在OSPF再把RIP引入时,AR4去23.0.0.0也不会产生次次优了!
所以AR4应该这么搞:
# AR4
ospf
# 这一条命令太害人,解决一个小问题,出来一大堆问题
# 所以要删除掉
undo preference ase 99
# R4正确的操作
ip ip-prefix ase permit 5.5.5.5 32
route-policy ase permit node 10
if-match ip-prefix ase
app preference 88
route-policy ase permit node 20
ospf
preference ase route-policy ase
[AR4-ospf-1]dis th
[V200R003C00]
ospf 1 router-id 4.4.4.4
import-route rip 1 route-policy test3 # 拒绝5.5.5.5回传
preference ase route-policy ase 150 # 调整5.5.5.5在OSPF的优先级,150是自动加的
area 0.0.0.0
network 14.0.0.4 0.0.0.0
# 验收
# 做完之后AR4就不再次优了
[AR4]dis ip rout 5.5.5.5
Route Flags: R - relay, D - download to fib
------------------------------------------------------------------------------
Routing Table : Public
Summary Count : 1
Destination/Mask Proto Pre Cost Flags NextHop Interface
5.5.5.5/32 O_ASE 88 1 D 14.0.0.1 GigabitEthernet
0/0/1
至此,单向引入导致的两个问题:AR4次优、AR1环路问题正式解决
双点双向
我们已经做完了双点单向,也就是在AR2向将OSPF引入到RIP,在AR4上做了将RIP引入到了OSPF,并且通过TAG解决了AR1的环路问题,通过修改优先级解决了AR4次优问题,我们接下来该做要求五了!
要求五:在AR3引入直连3.3.3.3和172.16.0.1
要求五
[AR3]dis ip int bri
Interface IP Address/Mask Physical Protocol
GigabitEthernet0/0/0 23.0.0.3/24 up up
GigabitEthernet0/0/1 34.0.0.3/24 up up
GigabitEthernet0/0/2 unassigned down down
LoopBack0 3.3.3.3/32 up up(s)
LoopBack172 172.16.0.1/24 up up(s)
NULL0 unassigned up up(s)
[AR3]rip
[AR3-rip-1]import-route direct
[AR3-rip-1]import-route direct
[AR3-rip-1]dis th
[V200R003C00]
#
rip 1
version 2
network 23.0.0.0
network 34.0.0.0
import-route direct
要求六:AR2的OSPF引入RIP
[AR2]ospf
[AR2-ospf-1]dis th
[V200R003C00]
#
ospf 1 router-id 2.2.2.2
area 0.0.0.0
network 12.0.0.2 0.0.0.0
#
[AR2-ospf-1]import-route rip
然后,我们去AR1上查看当前的路由条目,当前AR2和AR4都向OSPF引入了RIP,所以AR1到RIP的所有路由都是负载,一共有四条,而且开销都是1
我们接下来的要求是:
- AR1去往34网段和3.3.3.3走AR4
- AR1去往23和172网段走R2
这个题怎么做呢?我们就要通过开销来实现,虽然我们想要在AR1上实现最终效果,但AR1上的路由条目都是AR2和AR4发给AR1的,所以我们的操作主要还是集中在AR2和AR4上。
操作思路:
- 由于目标是23网段和172是走R2,那我们就走AR4上把23网段和172网段的开销改成大于1,这样AR1就将23网段和172网段的下一跳指向AR2
- 由于目标34网段和3.3.3.3是走R4,那我们就走AR2上把34网段和3.3.3.3的开销改成大于1
# AR4的操作
[AR4]ip ip-prefix rip index 10 permit 172.16.0.0 24
[AR4]ip ip-prefix rip index 20 permit 23.0.0.0 24
route-policy rip permit node 10
if-match ip-prefix rip
apply cost 2
route-policy rip permit node 20
问题又出现了!如下所示,一个OSPF只能匹配一个route-policy,我们之前为了把5.5.5.5拒绝掉,已经使用了route-policy test3,那我们上面的这个策略怎么搞呢?
[AR4]ospf
[AR4-ospf-1]dis th
[V200R003C00]
#
ospf 1 router-id 4.4.4.4
import-route rip 1 route-policy test3
preference ase route-policy ase 150
area 0.0.0.0
network 14.0.0.4 0.0.0.0
#
# route-policy test3这个策略是用来拒绝5.5.5.5的,总不能给他删除掉吧,如果删除了,那R1和R4又环路了,怎么办呢?
[AR4]dis route-policy test3
Route-policy : test3
deny : 10 (matched counts: 0)
Match clauses :
if-match tag 1
deny : 20 (matched counts: 3)
Match clauses :
if-match tag 555
permit : 30 (matched counts: 17)
其实我们我们可以这两个策略结合到一块的:
# AR4
ip ip-prefix rip_2 index 10 permit 172.16.0.0 24
ip ip-prefix rip_2 index 20 permit 23.0.0.0 24
route-policy rto deny node 10
if-match tag 1
route-policy rto deny node 20
if-match tag 555
route-policy rto permit node 30
if-match ip-prefix rip_2
apply cost 2
route-policy rto permit node 40
ospf
import-route rip 1 route-policy rto
# AR2
# 由于AR4还没有把OSPF引入到RIP,并没有打TAG,那我们在AR2做的时候就不再拒绝TAG了,仅改开销就行了
ip ip-prefix rip_2 index 10 permit 3.3.3.3 32
ip ip-prefix rip_2 index 20 permit 34.0.0.0 24
route-policy rto permit node 30
if-match ip-prefix rip_2
apply cost 2
route-policy rto permit node 40
ospf
import-route rip 1 route-policy rto
最终效果如下
最后一步:
前面我们已经做了三步了,再把最后一步做上,如下所示,橙色箭头:
# AR4
RIP
import-route ospf
假如说我们向上面这么写,有什么后果?5.5.5.5被扔到RIP当中,被AR2收到,AR2一看优先级是100,比150更优,所以AR2又次优了!而且AR1也会次
<AR2>dis ip routing-table 5.5.5.5
Route Flags: R - relay, D - download to fib
------------------------------------------------------------------------------
Routing Table : Public
Summary Count : 1
Destination/Mask Proto Pre Cost Flags NextHop Interface
5.5.5.5/32 RIP 100 2 D 23.0.0.3 GigabitEthernet
0/0/1
[AR1]dis ip routing-table 5.5.5.5
Route Flags: R - relay, D - download to fib
------------------------------------------------------------------------------
Routing Table : Public
Summary Count : 1
Destination/Mask Proto Pre Cost Flags NextHop Interface
5.5.5.5/32 O_ASE 150 1 D 12.0.0.2 GigabitEthernet
0/0/0
所以之前在AR4上用那两招还得用出来,在AR2的OSPF当中拒绝5.5.5.5进入,由于AR5已经打了标签,我们可以直接通过前面的策略调用就行了
[AR2]ospf
[AR2-ospf-1]dis th
[V200R003C00]
#
ospf 1 router-id 2.2.2.2
import-route rip 1 route-policy rto
area 0.0.0.0
network 12.0.0.2 0.0.0.0
#
return
[AR2-ospf-1]dis route-policy rto
Route-policy : rto
permit : 30 (matched counts: 14)
Match clauses :
if-match ip-prefix rip_2
Apply clauses :
apply cost 2
permit : 40 (matched counts: 27)
# 在原本的策略上加两条,如下所示:
route-policy rto deny node 10
if-match tag 1
route-policy rto deny node 20
if-match tag 555
# 再查看
[AR2-route-policy]dis route-policy rto
Route-policy : rto
deny : 10 (matched counts: 8)
Match clauses :
if-match tag 1
deny : 20 (matched counts: 5)
Match clauses :
if-match tag 555
permit : 30 (matched counts: 18)
Match clauses :
if-match ip-prefix rip_2
Apply clauses :
apply cost 2
permit : 40 (matched counts: 31)
# 当前就把AR1次优的事搞好了,在AR1上测试一下
[AR1]dis ip routing-table 5.5.5.5
Route Flags: R - relay, D - download to fib
------------------------------------------------------------------------------
Routing Table : Public
Summary Count : 1
Destination/Mask Proto Pre Cost Flags NextHop Interface
5.5.5.5/32 O_ASE 150 1 D 15.0.0.5 Serial4/0/0
接下来还得把AR2本身次优的问题解决,跟AR4上一样,还是通过优先级,把OSPF过来的优先级改成小于100即可,如下所示:
# AR2
ip ip-prefix test22 permit 5.5.5.5 32
route-policy test22 permit node 10
if-match ip-prefix test22
apply preference 88
route-policy test22 permit node 20
ospf
preference ase route-policy test22
# 验收一下,成功,AR2对5.5.5.5选路也正常了
[AR2]dis ip routing-table 5.5.5.5
Route Flags: R - relay, D - download to fib
------------------------------------------------------------------------------
Routing Table : Public
Summary Count : 1
Destination/Mask Proto Pre Cost Flags NextHop Interface
5.5.5.5/32 O_ASE 88 1 D 12.0.0.1 GigabitEthernet
0/0/0