R1的配置如下:
[R1] interface GigabitEthernet 0/0/0
[R1-GigabitEthernet0/0/0] ip address 192.168.12.1 24
[R1] interface LoopBack1
[R1-LoopBack1] ip address 192.168.1.1 24
[R1] interface LoopBack2
[R1-LoopBack2] ip address 192.168.2.1 24
[R1] interface LoopBack3
[R1-LoopBack3] ip address 192.168.3.1 24
[R1] rip 1
[R1-rip-1] version 2 #指定RIP的版本为版本2
[R1-rip-1] network 192.168.12.0 #在GE0/0/0口上激活RIP
R2的配置如下:
[R2] interface GigabitEthernet 0/0/0
[R2-GigabitEthernet0/0/0] ip address 192.168.12.2 24
[R2] interface GigabitEthernet 0/0/1
[R2-GigabitEthernet0/0/1] ip address 192.168.23.2 24
[R2] rip 1
[R2-rip-1] version 2
[R2-rip-1] network 192.168.12.0
[R2] ospf 1 router-id 2.2.2.2
[R2-ospf-1] area 0
[R2-ospf-1-area-0.0.0.0] network 192.168.23.0 0.0.0.255
R3的配置如下:
[R3] interface GigabitEthernet 0/0/0
[R3-GigabitEthernet0/0/0] ip address 192.168.23.3 24
[R3] ospf 1 router-id 3.3.3.3
[R3-ospf-1] area 0
[R3-ospf-1-area-0.0.0.0] network 192.168.23.0 0.0.0.255
R1增加的配置如下:
[R1] acl 2000
[R1-acl-basic-2000] rule deny source 192.168.3.0 0
[R1-acl-basic-2000] rule permit
[R1-acl-basic-2000] quit
[R1] route-policy 1and2 permit node 10
[R1-route-policy] if-match acl 2000
[R1-route-policy] quit
[R1] rip
[R1-rip-1] import-route direct route-policy 1and2
题目的需求是不允许在R1的Loopback接口上激活RIPv2,但又希望RIP域能学习到这些Loopback路由,因此需在R1上部署路由重发布,将直连路由注入RIP。但是如果直接执行import-route direct命令,则R1所有的直连路由都会被注入到RIP,这显然是不满足需求的。因此我们首先在R1上定义一个ACL 2000,使用这个ACL来抓取希望注入的路由(在上面的配置中采用的思路是拒绝192.168.3.0路由,但是允许其他路由),然后再配置一个route-policy1and2来调用这个ACL,最后在执行重发布动作时关联该route-policy。如此R1将直连路由注入到RIP时,不会注入192.168.3.0路由。
有一个细节需要注意,那就是当使用ACL来抓取路由时ACL的书写方法,例如要抓取192.168.1.0/24这条路由,ACL的规则是“rule permit source 192.168.1.0 0.0.0.0“,为什么通配符不是0.0.0.255而是0.0.0.0呢?这是因为基本ACL在匹配路由时,只能匹配路由的网络号,而无法匹配路由的掩码,因此通配符写成0.0.0.0,表示精确匹配192.168.1.0这个网络号。
完成上述配置后,先看一下R2的路由表:
[R2] display ip routing-table protocol rip
Destination/Mask Proto Pre Cost Flags NextHop Interface
192.168.1.0/24 RIP 100 1 D 192.168.12.1 GigabitEthernet0/0/0
192.168.2.0/24 RIP 100 1 D 192.168.12.1 GigabitEthernet0/0/0
我们看到,R2的路由表中只有192.168.1.0/24及192.168.2.0/24两条RIP路由,没有学习到3.0/24的路由,实现了需求。
R2的配置增加如下:
#书写两个ACL,分别抓取192.168.1.0及192.168.2.0这两条路由:
[R2] acl 2001
[R2-acl-basic-2001] rule permit source 192.168.1.0 0
[R2-acl-basic-2001] quit
[R2] acl 2002
[R2-acl-basic-2002] rule permit source 192.168.2.0 0
[R2-acl-basic-2002] quit
#创建一个route-policy,配置三个node:
[R2] route-policy r2o permit node 10
[R2-route-policy] if-match acl 2001
[R2-route-policy] apply cost 10
[R2-route-policy] apply cost-type type-2
[R2-route-policy] quit
[R2] route-policy r2o permit node 20
[R2-route-policy] if-match acl 2002
[R2-route-policy] apply cost 20
[R2-route-policy] apply cost-type type-2
[R2-route-policy] quit
[R2]route-policy r2o permit node 30
[R2] ospf 1
[R2-ospf-1] import-route rip route-policy r2o
在R2上将RIP路由注入OSPF时,如果直接执行import-route rip命令,则R2路由表中所有的RIP路由都会被注入到OSPF,并且路由在注入OSPF后的度量值是统一的一个值,而我们的需求是要对192.168.1.0/24及192.168.2.0/24这两条路由区分对待,前者的度量值设置为10,后者设置为20,这就需要在R2执行路由重发布动作时关联一个route-policy来执行策略。总体的思路是先配置一个ACL2001来抓取192.168.1.0路由,再配置一个ACL2002抓取192.168.2.0路由,然后创建一个route-policy r2o,这个route-policy有三个node,序号分别为10、20及30,序号10调用ACL2001,对满足这个ACL的路由设置度量值10,同时设置外部路由类型为type2;序号20调用ACL2002,对满足该ACL的路由设置度量值20,同时设置外部路由类型为type2。值得注意的是route-policy在所有node的末尾有一个隐含的“拒绝所有“的node,所以为了把其他的路由(例如192.168.12.0/24)放通,还需要加一个route-policy r2o permit node 30,node30的行为是permit,而且没有配置任何if-match域间,所以意思是允许所有。
完成配置后,查看一下R3的路由表:
[R3] display ip routing-table protocol ospf
Destination/Mask Proto Pre Cost Flags NextHop Interface
192.168.1.0/24 O_ASE 150 10 D 192.168.23.2 GigabitEthernet0/0/0
192.168.2.0/24 O_ASE 150 20 D 192.168.23.2 GigabitEthernet0/0/0
192.168.12.0/24 O_ASE 150 1 D 192.168.23.2 GigabitEthernet0/0/0
R3已经学习到RIP路由域中的三条路由。192.168.1.0/24及192.168.2.0/24这两条路由的Cost
值正如需求所期望。
最后,要实现R3能够访问192.168.1.1及192.168.2.1,就要实现路由的双向互通。现在R3已经学习到这两个网段的路由,而R1却还没有获知192.168.23.0/24的路由,因此还需要在R2上部署路由重发布,将OSPF路由注入RIP。
R2增加的配置如下:
[R2] rip
[R2-rip-1] import-route ospf 1
如此一来R1就能够学习到192.168.23.0/24,R3也就能访问到192.168.1.1及192.168.2.1了。