路由策略中的IP-Prefix你了解多少?
1.技术背景
在部署路由策略的过程中,我们往往需要通过一些手段“抓取”路由,从而能够针对特定的路由来执行相应的策略,以实现差异化。在“抓取”路由的工具中,ACL无疑是最常用的工具之一。
在上图中,R2部署了RIP到OSPF的路由重发布,在这个场景中,我们有个特殊需求:将引入OSPF后的外部路由192.168.1.0/24的cost设定为10、192.168.2.0/24的cost设定为20,那么我们便要先匹配或者说“抓取”相关路由,然后针对不同的路由在route-policy中apply不同的cost,从而实现策略。
使用ACL来应对这个需求是完全没问题的,定义一个ACL2001,匹配192.168.1.0,定义一个ACL2002匹配192.168.2.0,然后在route-policy RP中写两个node分别针对这两条路由apply不同的cost值,很简单。
但是……
上面这个环境,ACL就无能为力了。为什么呢?因为ACL只能够匹配路由前缀的网络地址部分,无法匹配路由前缀的网络掩码(或者说前缀长度)。准确的说,一条路由前缀是包含网络地址和网络掩码(前缀长度)的,对于192.168.1.0,这算不上一条完整的路由,应该采用192.168.1.0 255.255.255.0或者192.168.1.0/24的方式呈现,这才是一条完整路由。而只要网络地址或者网络掩码中有任何一项不同,这就是两条不同的路由了,例如192.168.1.0/24和192.168.1.0/25,这就是两条不同的路由。
ACL是无法匹配路由前缀的掩码部分的,因此上图所示的需求用ACL是无法完成的。这里顺便多嘴一句,如果使用Basic ACL匹配路由,那么建议在书写ACL时,反掩码使用0.0.0.0,否则会造成匹配不精确的现象。例如要匹配192.168.1.0/24这条路由,如果acl的rule这么写:
rule permit source 192.168.1.0 0.0.0.255
- 1
这事实上是不严谨的,因为它将192.168.1.0、192.168.1.1、192.168.1.2、192.168.1.3…………等众多网络地址全匹配住了。也就是说,上面的0.0.0.255,并不能用于匹配网络掩码255.255.255.0,它只不过是与前面的192.168.1.0组合,并用于匹配网络地址而已。所以,建议这么写:
rule permit source 192.168.1.0 0.0.0.0
- 1
或者:
rule permit source 192.168.1.0 0
- 1
2.IP-Prefix(IP前缀列表)
- IP前缀列表匹配路由的可控性比ACL高得多,也更为灵活;
- IP前缀列表可匹配路由前缀中的网络地址及网络掩码(前缀长度),增强了匹配的精确度;
- IP前缀列表除了能够匹配具体的网络掩码长度,还能够匹配掩码长度范围,非常灵活。
- 一个IP前缀列表可以包含一个或多个表项(语句),在匹配过程中依序进行计算。表项中的索引号
(序号)决定了每个表项在整个IP前缀列表中的位置。
3.IP前缀列表的配置
创建一个IP前缀列表的配置如下:
[Huawei] ip ip-prefix name [ index index-number ] { permit | deny } ip-address mask-length [ greater-equal greater-
equal-value ] [ less-equal less-equal-value ],
- 1
- 2
- Name参数是本IP前缀列表的名称。
- Index关键字及参数指示本表项在本IP前缀列表中的序号(或索引号),该关键字及参数是可选的。缺省情况下,该序号值按照配置先后顺序依次递增,每次加10,第一个序号值为10。
- Permit及deny关键字用于配置本表项的匹配模式。
- ip-address mask-length参数用于分别制定IP地址及掩码长度。
- **[ greater-equal greater-equal-value ] [ less-equal less-equal-value ]**是可选配置,用于指定掩码长度的范围。
如果在命令中只指定了greater-equal,则前缀范围为[greater-equal-value,32]
;
如果在命令中只指定了less-equal,则前缀范围为[mask-length,less-equal-value]
。
IP前缀列表由列表名称进行标识,每个IP前缀列表可以包含多个表项。下面的配置展示了一个名为abcd,它包含两个表项:
[Huawei] ip ip-prefix abcd index 10 deny 1.0.0.0 8
[Huawei] ip ip-prefix abcd index 20 permit 2.0.0.0 8
- 1
- 2
在IP前缀列表的匹配过程中,设备按索引号升序依次检查各个表项,只要有一个表项满足条件,就不再去匹配后续表项。
以ip ip-prefix abcd index 10 deny 1.0.0.0 8
为例,这个表项属于IP前缀列表abcd,它的索引号为10,并且匹配模式为拒绝,在该表项中IP前缀为1.0.0.0,掩码长度为8,因此这个表项用于匹配路由1.0.0.0/8,只有该路由才会被匹配,并且该路由将会被该表项过滤(deny)。这个命令中没有定义掩码长度范围。
如果一条路由无法被一个IP前缀列表中的所有表项匹配,那么这条路由被视为被该前缀列表拒绝通过。也就是说,一个IP前缀列表的末尾,隐含着一条拒绝所有的表项。
4.配置示例
示例1:
匹配某条特定路由192.168.1.0/24:
ip ip-prefix ipprefix1 192.168.1.0 24
- 1
匹配默认路由0.0.0.0/0:
ip ip-prefix ipprefix2 permit 0.0.0.0 0
- 1
注意:IP前缀为0.0.0.0时表示通配地址。此时不论掩码指定为多少,都表示掩码长度范围内的所有路由全被匹配。
匹配所有/32主机路由:
ip ip-prefix ipprefix3 permit 0.0.0.0 0 greater-equal 32
- 1
匹配任意路由(any):
ip ip-prefix ipprefix4 permit 0.0.0.0 0 less-equal 32
- 1
示例2:
匹配以下路由(用最精确最简洁的方式):
192.168.4.0/24
192.168.5.0/24
192.168.6.0/24
192.168.7.0/24
ip ip-prefix abcd permit 192.168.4.0 22 greater-equal 24 less-equal 24
- 1
- 2
- 3
- 4
- 5
上面这条命令的意思是,允许那些网络地址的前22bit与192.168.4.0的前22bit相同,并且网络掩码长度为24的路由。注意此处“greater-equal 24 less-equal 24”要求网络掩码长度既大于或等于24,又小于或等于24,因此只能是24。
示例3:
在以上配置中,我们首先创建了一个名称为1的IP前缀列表,该列表中包含一个表项,这个表项要求被匹配路由的网络地址的前16bit与192.168.0.0的前16bit相同,并且路由的网络掩码长度为16,因此该表项只能用于匹配路由192.168.0.0/16。由于该表项的匹配模式为permit,因此路由192.168.0.0/16被该IP前缀列表允许。
随后我们定义了一个route-policy RP,它包含一个节点,且该节点的匹配模式为permit。该节点调用了IP前缀列表1,如此一来,192.168.0.0/16将被route-policy RP所允许,而由于route-policy的末尾隐含着一个拒绝所有的节点,因此对于route-policy RP而言,只允许了路由192.168.0.0/16。
文章来源: blog.csdn.net,作者:wljslmz,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/weixin_43025343/article/details/108957284
- 点赞
- 收藏
- 关注作者
评论(0)