路由引入正解(三)_双点双向引入推理


在双点双向的的路由引入当中,必定会涉及到路由优先级,所以明确路由的优先级至关重要。

优先级

DIRECT 0
OSPF 10
ISIS 15
STATIC 60
RIP 100
OSPF ASE 150
BGP 255
  • 问题:为什么OSPF拥有两个优先级呢?而且这两个优先级相差这么多?先思考一下,我们会在下文有详细的解释。
  • 仔细观察,你会发现在华为体系当中,OSPF优先级仅次于直连,也就是OSPF比静态都要优秀!

引入问题

路由引入时如果规划不当,很容易导致以下两种问题:

  • 次优路由
  • 路由环路

次优问题

image-20230705145527761

如上图所示,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的优先级更高,所以没有产生次优路径问题。

环路问题

image-20230705145534250

  1. RTB从RTA引入了2.2.2.2这个外部路由,并且修改了开销为2
  2. 对于RTB来说,这条路由是外部路由通过五类LSA承载, 在OSPF域中传递时开销保持不变
  3. 路由到达RTE,而RTE又把OSPF引入到ISIS,而且还没有写开销,那到达RTD的开销就是默的1
  4. RTD再传到RTC,RTC又把ISIS引入到了OSPF,这时候开销又根据种子开销成了1,最终交给RTB
  5. 对于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的路由,就不会产生次优路径了。

按理说我们有两个解决问题的思路:

  1. 不让RTC发
  2. 不让RTB收

但是不让RTC发这个思路不行,因为RTC如果不发的话,那整个ISIS路由域就都收不到2.2.2.2这条路由了。

优先级(顺)

通过路由优先级可以很好的解决次优先路径的问题,本质允许路由计算,因为我们我们修改了优先级,导致算出来结果不会产生次优问题。

image-20230705145551081

注意,改优先级方案不要轻易使用,因为影响范围太大。假如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这一条路由,别影响到别的路由问题,那就没问题了

加标签

先回顾一下上面导致环路的问题:

image-20230705145558117

  • 路由环路的根本问题:

    • 上图当中有两个翻译者,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。

    image-20230705145606581

    PS:上图是通过TAG来进行选择性路由引入

标签+开销(疑惑)

image-20230705145615780

image-20230705145628661

双点单向

基础环境

image-20230705145651116

  • 要求:
    1. 配置基本地址信息和路由协议
    2. R2把OSPSF引入到RIP
    3. R4所RIP引入到OSPF
    4. R5把直连引入到OSFP
    5. R3把直连和静态引入到RIP,不引入/25路由
    6. 避免次优路由和环路

要求一:基础配置

做基础配置时,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

image-20230705145701791

根据路由,请求从上面走,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

image-20230705145711132

OK,那我们就来分析一下僵局,就从AR5开始引入5.5.5.5开始吧?

  1. AR5通过route-policy引入了5.5.5.5,以type-5 LSA、cost-type 2,cost-value为1交给AR1

  2. AR1加载到自己的路由表当中,开销是1,优先级是150

  3. AR2将5.5.5.5引入了RIP当中,开销给改成了RIP种子开销0,优先级改成了100,最终转换为RIP发给了AR4,AR4上的5.5.5.5开销是2,优先级100。在这个报文因为优先级的问题,导致AR4会选择通过AR3到达5.5.5.5前面我们已经说过了!

  4. 那AR4会不会将其加载到路由当中呢?当前会加载的,而且还会通过AR4再传给AR1,优先级是150,开销是1

  5. (关键来了),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
    

总结

在上述实验的过程当中,我们一共遇到了两个问题:

  1. AR4的次优问题。AR4产生次优问题的原因是从AR4收到的5.5.5.5路由优先级是100,而从AR1收到的5.5.5.的路由优先级是100,所以肯定选AR3了
  2. 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上通过查看路由看到的,如下所示:

image-20230705145726650

<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

image-20230705145735249

所以我们只要去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

image-20230705145744826

到此,问题看起来都解决了,AR1和AR4的次优路由都好了!

上一小节我们做到这里面了,AR2和AR4的问题都解决了,但又有新问题的出现,你想一下,如果这时候AR2在OSPF当中把RIP引入呢?23和34网段对OSPF来说是外部路由,那AR4也会将23网段优先级改为99(34网段因为是直连,所以不会改),这样的话,AR4到23网段又次优了!可不止这么简单,其实AR4的所有RIP路由都会失效,怎么解决呢?在AR4上再把RIP的开销再改小吗?如果在AR4的RIP优先级再改小,那AR3又会产生次优!

image-20230705145754752

所以,我们在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

image-20230705145805231

[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

image-20230705145814875

然后,我们去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

最终效果如下

image-20230705145826536

最后一步:

image-20230705145834894

前面我们已经做了三步了,再把最后一步做上,如下所示,橙色箭头:

image-20230705145843917

# 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

最终结果

image-20230705145857100

image-20230705145904746

image-20230705145911543

posted @ 2023-07-05 15:02  张贺贺呀  阅读(176)  评论(0编辑  收藏  举报