学习ACL,一旦知道ACL,就不能不戴上通配符掩码、通配符掩码。 简单来说,通配符掩码0是绝对匹配的,必须严格匹配,但1是任意的,从某种意义上说,8位有一个字符,就只有0或1两种方式,但组合起来方式更多。
举个例子来说明吧。
我们一般在APP应用中进行地址块匹配,怎么说呢? 也就是说:
1 )匹配某个a、b、c类网,或教通配符屏蔽
2 )将ACL应用于某个子网络。
3 )将ACL应用于特定主机
4 )将ACL应用于任何主机或网络
5 )特殊情况匹配
会出现以上五种情况。 以下逐一说明。
1 )对某一类网络进行ACL通配符掩码。
这种情况可以很好地说明。
例如,10.0.0.0 0.255.255.255类
首先用二进制格式写。 00001010.0000000.00000000.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000.11111111.11111111.11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
可见第一个字节需要严格匹配。 也就是说,10 .必须是之后的任意一致。
得到的网络为10.*
如果改变这个呢? 10.0.0.0 0.0.3.255
同样用二进制格式写。 00001010.0000000.0000000.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000.0000000.000000000000000000000000000000000000000000000111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
前两个字节严格匹配10.0,在后面同上问题的一种想法中,0严格匹配,1是可选的。
这里,后10位任意一致,通过计算能够得到适当结果:
10.0.0.*
10.0.1.*
10.0.2.*
10.0.3.*
这四个子网
2 )
ACL在子网中的应用
还是以c类网络192…168.1.0/24为例进行子网划分?
引入地址块的思想进行说明,会更容易理解。 因为子网一般作为地址块存在。
地址块为128、192.168.1.1280.0.0.127
地址块为64,192.168.1.0.0.63
地址块为32,192.168.1.0.0.31
地址块为16,192.168.1.0.0.15
地址块为8,192.168.1.0.0.7
地址块为4,192.168.1.0.0.0.3
地址块为2,192.168.1.0.0.1
3 )将ACL应用于特定主机
通配符必须完全匹配。 例如182.168.12.4 0.0.0.0
另一种显示方法是host 182.168.12.4
Host在此是一个关键字,用于代替0.0.0.0,用于源地址和目标地址字段。
4 )将ACL应用于任何主机或网络
这是任意匹配的情况,主机是任意的,通配符是任意匹配的。 0.0.0.0 255.255.255.255,同时这里还有缩短为——any
5 )比较特殊的。
用我的话来说,这种情况在不按规则出牌的情况下,很有趣。
我不想用通配符屏蔽某个子网或某个类型的网络。 我只是想屏蔽一些主机,但这部分主机也必须有规律。 管理员一定疯了。 哈哈。
为了说明,我举两个例子。
随便写一个,计算切断了什么样的网络。
自由书写192.168.1.23 0.0.0.5
怎么了? 笨蛋的眼睛? 这是不按照规则出牌的情况。 CCNA自学指南一定要从2的幂开始,而不是从11.0和12.0等网络开始。 无视这个规则,还是用最原始的方法一一匹配。
写为二进制格式: 11000000.10101000.00000001.00010111
00000000.000000.00000000.000000000000000000000000000000000000000000000000000000000000000000000000001
接下来是匹配计算。 前三个字节毫无疑问,严格匹配。 最后的字节都是0匹配,都是1是任意的。
00010111
00000101 000101
如上式所示,可以看到带星号的位置任意一致。 这样可以计算以下内容:
00010010——18
00010011——19
00010110——21
00010111——23
由此可见,所得结果为192.168.1.18
192.68.1.19
192.168.1.21
192.168.1.23均使用0.0.0.5通配符掩码进行了掩码。
怎么样,不按这个规则出牌的通配符面具也把你当傻瓜了一次吗?
备注:严格符合0——,1——任意配置原则是任何反口罩都是纸老虎。
写第二个,我需要匹配网络中奇数IP的主机或偶数IP的主机(或的路由过滤器需要奇数网络)。
请看一个例子:
192.168.1.1
192.168.1.2
192.168.1.3
192.168.1.4
192.168.1.5
192168.1.6
192.168.1.7
192.168
.1.9……………
192.168.1.254
思路都是一样的,条条道路通罗马,这里条条道路通配符
我还是要写成二进制形式
前面的三个字节就省略了,只写后面的一个字节的:
00000001
00000010
00000011
00000100
00000101
00000110
00000111
…………
看出规律了么? 什么?没有啊,仔细瞧瞧么!奇数IP的最后一位都是1,而偶数IP的最后一位都是0。这就是规律啊。
那么怎么写呢?这个就比较简单了吧,奇数IP的:192.168.1.1 0.0.0.254 ;偶数IP的呢——192.168.1.2 0.0.0.254
如上就是我对ACL的理解,有说错的,做错的,还望大家指正,所谓三人行必有我师,你有什么更好的办法别忘记跟帖。
ACL主要难点是在通配符的计算,如有这么一道题:
已知子网,求通配符掩码。
例:允许199.172.5.0/24
199.172.10.0/24
199.172.13.0/24
199.172.14.0/24网段访问路由器。要求写出ACL来,但只能用两条ACL代替。
5.0 0 1 0 1
10.0 1 0 1 0
13.0 1 1 0 1
14.0 1 1 1 0
观察可以看到5.0和13.0
10.0和14.0有共同点。
2.
将不相同的部分用Z表示
5.0和13.0 Z 1 0 1
10.0和14.0 1 Z 1 0
3.
将Z换成1,数字换成0。可以得出:
5.0和13.0 Z 1 0 1
------------ 1 0 0 0
10.0和14.0 1 Z 1 0
------------ 0 1 0 0
4.
最后将二进制换成十进制:
5.0和13.0 Z 1 0 1
------------ 1 0 0 0
-------- 8
10.0和14.0
1 Z 1 0
------------ 0 1 0 0
-------- 4
最后得出:
access-list 10 permit 199.172.5.0 0.0.8.0
access-list 11 permit 199.172.10.0 0.0.4.0