Route-policy工具理论与实践
用途
Route-policy包含一个或者多个“节点Node”的列表。
在部署重发布期间可以关联Route-policy,执行一些路由策略,路由信息或修改某一条特定路由的属性。
Route-policy的应用非常广泛,是一个相当重要的基础工具。
初相识

定义了route-policy的名称为RP,route-policy有点像列表的形态,既然是列表就肯定有很多行,在这就是有很多个节点(Node),route-policy可以有一个或多个Node,每一个Node都有一个序号来标识,这个序号是有大小的,大小就决定所有的Node排列顺序,排列从小到大的顺序排列。
顺序非常重要,因为在route-policy计算过程中按这个顺序计算,名字叫RP的route -policy包含了有n个节点,每个节点可以部署二元,条件和动作,条件就是在这个节点定义一条,多条,条件,只有满足节点中所有条件,才会执行该节点下的动作。
如果定义了多个条件,你是不满足的或不全满足,这时就会进入下一个节点进行计算,如果下一个条件还是不满足再往下,直到所有节点都比完。
如果满足一个节点,就直接被动作掉了,不会再往下计算,这就是route-policy,相当于编程中的条件语句。
名字叫RP的route-policy当中,有n个序号,这个序号用十进制呈现,从小到大排序,在每一个node中,可以配置条件或者执行语句,条件语句用if0match,执行语句是apply,这就是二元,在note1节点中配置了两条if-match语句,这意味对于条件x1和x2都必须满足,这时候才会执行y1的动作,就不会再往下匹配,如果x1满足,x2不满足意味着这个节点不匹配,则会再往下计算note。
配置
创建route-policy
[huawei] route-policy name { permit | deny } node node
Permit指定节点的匹配模式为允许。执行计算时如果都满足节点下的所有条件,将执行该节点的apply子句,并且apply语句执行完后,不再进入下一个节点的过滤,也就是匹配动作到此结束;如果条件没有都满足,将进入下一个节点继续过滤匹配中。
Deny指定节点的匹配模式为拒绝,如果节点下的条件都满足,不会执行apply子句,并且匹配动作到此结束。如果条件不满足,将进入下一个节点继续匹配。
默认所有未匹配的路由将被拒绝通过route-policy,如果route-policy中定义了一个以上的节点,则各节点中至少应该有一个节点的匹配模式是permit。
配置if-match子句
[Huawei-route-policy] if-match ?
Acl 匹配ACL
Cost 匹配路由信息的cost
Interface 匹配路由信息的出接口
Ip { next-hop | route-source | group-address } 匹配IPv4的路由信息(下一跳、源地址或组播地址)
Ip-prefix 匹配前缀列表
Route-type 匹配各类型路由信息
Tag 匹配路由信息的标记域
if-match关键字用于定义条件,可以调用acl来匹配路由做策略,比如有192.168.1.0/24和192.168.2.0/24两条路由。现在要对192.168.1.0/24做策略,先定义ACL匹配1.0路由,再到if-macth调用这个ACL做策略。但是在华为的产品中,ACL只能够用于匹配路由中的网络号,比如一条路由指定了网络号和掩码,这才是一条完整的路由前缀,但是acl使能匹配192.168.1.0,没法识别掩码,因此就有了ip-prefix。
在一个node中可以定义0个,1个,多个if-match条件,当你定义0个时,这个节点就是为permit any,所有的匹配对象都满足,如果是一个那就是一个条件啦,如果定义多个意味着使用了if-match条件语句定义了多行,这些不同条件之间,通常是一个且的关系,你要同时满足才可以执行apply语句。
If-match和ip-prefix不能同时配置,后配置的命令会覆盖先配置的命令。
当有多个if-match子句,之间是一个“与”的关系,即路由信息必须同时满足所有匹配条件,才可以执行apply子句的动作。
但命令if-match route-type和if-match interface除外,这两个命令的各自if-match子句间是“或”的关系。
如果不指定if_match子句,则所有的路由信息都会通过该节点的过滤。
配置apply子句
[Huawei-route-policy] apply ?
Cost 设置路由的cost
Cost—type { type-1 | type-2 } 设置OSPF的开销类型
Ip-address next-hop 设置IPv4路由信息的下一跳地址
Preference 设置路由协议的优先级
Tag 设置路由信息的标记域
执行语句,当你满足条件后,我就来执行apply所定义的动作。
Route-policy配置示例1

R1的配置(含接口IP)
<Huawei>sys
[Huawei]sys R1
[R1]int g0/0/0
[R1-GigabitEthernet0/0/0]ip address 192.168.12.1 24
[R1-GigabitEthernet0/0/0]quit
[R1]int loopback 1
[R1-LoopBack1]ip address 172.16.1.1 24
[R1-LoopBack1]quit
[R1]int loopback 2
[R1-LoopBack2]ip address 172.16.2.1 24
[R1-LoopBack2]quit
[R1]int loopback 3
[R1-LoopBack3]ip address 172.16.3.1 24
[R1-LoopBack3]quit
[R1]ospf 1 router-id 1.1.1.1
[R1-ospf-1]area 0
[R1-ospf-1-area-0.0.0.0]network 192.168.12.0 0.0.0.255
[R1-ospf-1-area-0.0.0.0]quit
[R1-ospf-1]import-route direct
[R1-ospf-1]quit
--------------------------------------------------------------
[R1]acl 2000
[R1-acl-basic-2000]rule 5 permit source 172.16.1.0 0
[R1-acl-basic-2000]quit
[R1]route-policy RP permit node 10
[R1-route-policy]if-match acl 2000
[R1-route-policy]apply cost 20
[R1-ro ute-policy]quit
[R1]ospf 1 router-id 1.1.1.1
[R1-ospf-1]import-route direct route-policy RP
[R1-ospf-1]
--------------------------------------------------------------
注意:对于route-policy来讲,用在执行路由策略上跟ACL有一点很类似,ACLL在末尾有一个隐含的deny any,对于每一个route-policy来讲在所有的node节点最后有一个隐含的deny any拒绝所有这样的特殊节点,假设有100个路由通过这个关卡时,被if-match语句所匹配的路由可以顺利过关,而且cost值设置为20,但是没有被这个节点所匹配的路由,它们就都被阻挡在OSPF之外,因为在route-policy最后有一个隐含着deny any。
R2的配置(含接口IP)
<Huawei>sys
[Huawei]sys R2
[R2]int g0/0/0
[R2-GigabitEthernet0/0/0]ip address 192.168.12.2 24
[R2-GigabitEthernet0/0/0]quit
[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.12.0 0.0.0.255
没有做路由策略的结果:
做了路由策略的结果:
很明显,路由条目中,只出现了一条OSPF路由,不难发现,Cost值也变化了。
Route-policy配置示例2

实现思路:
在R1和R2上配置两条静态路由,分别指向生产和办公的路由。现在在R1和R2上配置import-route static命令,这样就把两条静态路由引入OSPF域中,缺省情况下,被引入进来后他们的cost值相等,那R3就可以发现两条去往生产和办公网段的路径,而且这两条路径的cost值是相等的,R3的路由表出现等价负载分担的局面,这显然是不符合要求的,那我们在R1上把路由的cost值调小行不行,调小意味着会把生产和办公的路由都调小,就会导致R3同时从R1去访问生产和办公的网段,也不符合需求。
所以我们要在R1和R2引入路由时去关联route-policy,因为R1要分被对两条路由做不同的策略,意味着应该有两个node,node10用于匹配生产的路由,apply是把cost值调小,想对的在R2这边也有一个node10也用于匹生产的路由,apply是把cost相比于R1的调大一定,同理在办公网段时R1用node20匹配,apply是把cost值调大,R2也用node20匹配,apply是把cost值调小。
所以这时R1会把生产和办公路由都引入OSPF,R2也一样,R1引入路由时,生产路由cost值为10,办公路由cost值为20,R2引入路由时,生产路由cost值为20,办公路由cost值为10,当R3在做路由优选时,先是1.0路由两条路径可达但是R1的cost是10,R2的cost是20,所以会选择R1的路径,2.0的路由显然会选择R2的路径,这样一来,在R3的路由表就出现了分流,达成我们的效果,当PC访问生产时,R3查路由表往R1转发,当要去往办公时,往R2转发,而且R1或者路径发送故障时,原本生产网段的路径就会切换到R2这边,这就是实现的思路。
R1的配置(含接口IP):
<Huawei>sys
[Huawei]sys R1
[R1]ip route-static 10.0.1.0 24 NULL 0 #黑洞路由,相当于垃圾桶,纯粹为测试的
[R1]ip route-static 10.0.2.0 24 NULL 0
[R1]int g0/0/0
[R1-GigabitEthernet0/0/0]ip address 192.168.12.1 24
[R1-GigabitEthernet0/0/0]q
[R1]ospf 1 ro 1.1.1.1
[R1-ospf-1]area 0
[R1-ospf-1-area-0.0.0.0]network 192.168.12.0 0.0.0.255
[R1-ospf-1-area-0.0.0.0]q
[R1-ospf-1]q
[R1]ospf 1 ro 1.1.1.1
[R1-ospf-1]import-route static #都以缺省的方式,引入各自的两条路由
[R1-ospf-1]quit
--------------------------------------------------------------
[R1]acl 2000
[R1-acl-basic-2000]rule 5 permit source 10.0.1.0 0
[R1-acl-basic-2000]quit
[R1]acl 2001
[R1-acl-basic-2001]rule 5 permit source 10.0.2.0 0
[R1-acl-basic-2001]q #为什么在这个例子中用两条acl,因为要对两条不同路由进行区分对待
[R1]route-policy hcie permit node 10
[R1-route-policy]if-match acl 2000 #调用acl
[R1-route-policy]apply cost 10 #定义cost值
[R1-route-policy]quit
[R1]route-policy hcie permit node 20
[R1-route-policy]if-match acl 2001
[R1-route-policy]apply cost 20
[R1-route-policy]q
[R1]ospf 1 ro 1.1.1.1
[R1-ospf-1]import-route static route-policy hcie #关联上route-policy
--------------------------------------------------------------
R2的配置(含接口IP):
<Huawei>sys
[Huawei]sys R2
[R2]ip route-static 10.0.1.0 24 NULL 0
[R2]ip route-static 10.0.2.0 24 NULL 0
[R2]int g0/0/0
[R2-GigabitEthernet0/0/0]ip address 192.168.23.1 24
[R2-GigabitEthernet0/0/0]quit
[R2]ospf 1 ro 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
[R2-ospf-1-area-0.0.0.0]q
[R2-ospf-1]q
[R2]ospf 1 ro 2.2.2.2
[R2-ospf-1]import-route static #都以缺省的方式,引入各自的两条路由
[R2-ospf-1]quit
--------------------------------------------------------------
[R2]acl 2000
[R2-acl-basic-2000]rule 5 permit source 10.0.1.0 0
[R2-acl-basic-2000]quit
[R2]acl 2001
[R2-acl-basic-2001]rule 5 permit source 10.0.2.0 0
[R2-acl-basic-2001]quit
[R2]route-policy hcie permit node 10
[R2-route-policy]if-match acl 2000
[R2-route-policy]apply cost 20
#因为R1是作为去往1.0的备用路由器,因此他在通告路由时,cost是必要比R1的值更大,cost越大
,路由越不优。
[R2-route-policy]quit
[R2]route-policy hcie permit node 20
[R2-route-policy]if-match acl 2001
[R2-route-policy]apply cost 10 #必须比R1小
[R2-route-policy]quit
[R2]ospf 1 ro 2.2.2.2
[R2-ospf-1]import-route static route-policy hcie
--------------------------------------------------------------
R3的配置(含接口IP):
<Huawei>sys
[Huawei]sys R3
[R3]int g0/0/0
[R3-GigabitEthernet0/0/0]ip address 192.168.12.2 24
[R3-GigabitEthernet0/0/0]int g0/0/01
[R3-GigabitEthernet0/0/1]ip address 192.168.23.2 24
[R3-GigabitEthernet0/0/1]quit
[R3]ospf 1 ro 3.3.3.3
[R3-ospf-1]a 0
[R3-ospf-1-area-0.0.0.0]network 192.168.12.0 0.0.0.255
[R3-ospf-1-area-0.0.0.0]network 192.168.23.0 0.0.0.255
做了路由策略后的结果:
实现了数据的分流,又实现了链路和设备的冗余。
注意观察两条OSPF的路由,它们的下一跳是不一样的。