ip前缀列表在路由器配置中使用比较多,掌握原理后使用也很简单并且灵活。
ip ip-prefix prefixName a.b.c.d x gr(le) y
1.掩码长度x的含义
其中x代表要精确匹配的位数,从a.b.c.d的左边第一位开始算,这个和子网掩码的意义是一样的。
比如写:ip ip-prefix prefixName 12.12.12.12 16,这样写等效于:
ip ip-prefix prefixName 12.12.0.0 16,并且你会发现敲进去之后再display出来的就是
12.12.0.0 16,因为路由器会按照精确匹配长度的规则来帮你规范。
大家在写静态路由的时候,路由器也会有同样的规范操作。比如你写:
ip route-static 1.1.255.1 20 2.2.2.2,敲进去之后路由器会提示你,你可能大意了,已帮你自动产生ip route-static 1.1.240.0 20 2.2.2.2这条路由。因为第三字节255的二进制8位全是1,而掩码是20 位的,所以路由器从左边第一位数,数够20位之后后面全部改成0。也即把255对应的1111 1111截断成了1111 0000,对应的十进制就是240。1.1.255.1就变成了1.1.240.0。
2.y的意义
y可以写less-equal或greater-equal,即小于等于或大于等于。如果不写的话,那就是路由要完全精确匹配。
y代表将要被过滤的这条路由它的掩码长度是多少位的,没有其他任何意义。
比如greater-equal 24,就代表被过滤的路由条目掩码长度24-32之间就行了。
3.x与y结合起来一起理解
比如1.1.240.0 20 greater-equal 24,看起来是不是有点矛盾?
其实没啥,分开来理解就好了,1.1.240.0 20就是前20位不能动,后面12位是1是0随意。并且这条路由的长度大于24就行了。
如这条路由0000 0001.0000 0001.1111 1111.0000 0000 25,即1.1.255.0 25,这条路由就是满足能通过的。注意下划线20位部分是需要被精确匹配部分。
又如这条路由0000 0001.0000 0001.1111 0000.0000 0000 23,即1.1.240.0 23,这条路由精确匹配部分是符合的,但掩码长度不满足要求,将不能通过。
4.一些巧用
(1)option C跨域时,通常只允许把as内各路由器的32位loopback接口发送给对端as,那可以这样写:
ip ip-prefix prefixName 0.0.0.0 0 greater-equal 32
匹配长度为0,即允许任何数值;长度大于等于32,那就是允许长度为32位的任何路由通过。
(2)不写y,使用精确匹配路由和长度,比如匹配缺省路由:
ip ip-prefix prefixName 0.0.0.0 0将只允许缺省路由0.0.0.0/0通过。
比如匹配汇总的某路由:
ip ip-prefix prefixName 192.168.1.0 24将只允许192.168.1.0/24这条路由通过。