1、 反掩码详解 在配置路由协议的时候(如OSPF、EIGRP )使用的反掩码必需是连续的1即网络地址。 例: route ospf 100 network 192.168.1.0 0.0.0.255 network 192.168.2.0 0.0.0.255 而在配置ACL的时候可以使用不连续的1,只需对应的位置匹配即可。 例:access-list 1 permit 198.78.46.0 0.0.11.255 正掩码和反掩码的区别: 正掩码必须是连续的,而反掩码可以不连续,例如: C类地址子网掩码中不可以出现 255.253.255.0(二进制为11111111
2、 11111101 11111111 00000000)这样的掩码; 而反掩码可以出现0.0.0.2(二进制为00000000 00000000 00000000 00000010)。 正掩码表示的路由条目,而反掩码表示的范围。 反掩码就是通配符掩码,通过标记0和1告诉设备应该匹配到哪位。 在反掩码中,相应位为1的地址在比较中忽略,为0的必须被检查. IP地址与反掩码都是32位的数 例如掩码是 255.255.255.0 wildcard-mask 就是0.0.0.255 255.255.255.248 反掩就是0.0.0.7 通配符掩码(wildca
3、rd-mask) 路由器使用的通配符掩码(或反掩码)与源或目标地址一起来分辨匹配的地址范围,它跟子网掩码刚好相反。它像子网掩码告诉路由器IP地址的哪一位属于网络号一样,通配符掩码告诉路由器为了判断出匹配,它需要检查IP地址中的多少位。这个地址掩码对使我们可以只使用两个32位的号码来确定IP地址的范围。这是十分方便的,因为如果没有掩码的话,你不得不对每个匹配的IP客户地址加入一个单独的访问列表语句。这将造成很多额外的输入和路由器大量额外的处理过程。所以地址掩码对相当有用。 在子网掩码中,将掩码的一位设成1表示IP地址对应的位属于网络地址部分。相反,在访问列表中将通配
4、符掩码中的一位设成1表示I P地址中对应的位既可以是1又可以是0。有时,可将其称作“无关”位,因为路由器在判断是否匹配时并不关心它们。掩码位设成0则表示IP地址中相对应的位必须精确匹配。 通配符掩码表 CIDR 子网掩码 反掩码 /30 255.255.255.252 0.0.0.3 /29 255.255.255.248 0.0.0.7 /28 255.255.255.240 0.0.0.15 /27 255.255.255.224 0.0.0.31 /26 255.255.255.192 0.0.0.63 /25 255.25
5、5.255.128 0.0.0.127 /24 255.255.255.0 0.0.0.255 /23 255.255.254.0 0.0.1.255 /22 255.255.252.0 0.0.3.255 /21 255.255.248.0 0.0.7.255 /20 255.255.240.0 0.0.15.255 /19 255.255.224.0 0.0.31.255 /18 255.255.192.0 0.0.63.255 /17 255.255.128.0 0.0.127.255 /16 255.255.0.0 0.0.255.
6、255 /15 255.254.0.0 0.1.255.255 /14 255.252.0.0 0.3.255.255 /13 255.248.0.0 0.7.255.255 /12 255.240.0.0 0.15.255.255 /11 255.224.0.0 0.31.255.255 /10 255.192.0.0 0.63.255.255 /9 255.128.0.0 0.127.255.255 /8 255.0.0.0 0.255.255.255 十进制通配符掩码 计算方法 用二进制来表示子网掩码值,再用广播地
7、址求其差值,然后再算回十进制。 即,推出公式:通配符掩码=255-掩码.255-掩码.255-掩码.255-掩码 举例一 求子网掩码255.255.255.248通配符掩码(反掩码) (1)、把子网掩码255.255.255.248转换成二进制为: 11111111.11111111.11111111.11111000 通配符掩码值为:广播全1(二进制)地址 减去 子网掩码二制制值,即: 11111111.11111111.11111111.11111111 - 11111111.11111111.11111111.11111000 得到结果
8、为: 00000000.00000000.00000000.00000111 转换为十进制: 0.0.0.7 (2)、通配符掩码=255-掩码.255-掩码.255-掩码.255-掩码,即: 255-255.255-255.255-255.255-248=0.0.0.7 举例二 求子网掩码255.255.128.0通配符掩码(反掩码) (1)、把子网掩码255.255.128.0转换成二进制为: 11111111.11111111.10000000.0000000 通配符掩码值为:广播全1(二进制)地址 减去
9、子网掩码二制制值,即: 11111111.11111111.11111111.11111111 - 11111111.11111111.10000000.0000000 得到结果为: 00000000.00000000.01111111.11111111 转换为十进制: 0.0.127.255 (2)、通配符掩码=255-掩码.255-掩码.255-掩码.255-掩码,即: 255-255.255-255.255-128.255-0=0.0.127.255 Configuring IP Access List
10、 IP访问控制列表(access control list,ACL)用于过滤IP流量,其中RFC 1700定义了知名(well-known)端口号,RFC 1918定义了私有IP地址空间 Pt.2 Understanding ACL Concepts Using Masks ACL里的掩码也叫inverse mask(反掩码)或wildcard mask(通配符掩码),由32位长的2进制数字组成,4个八位位组.其中0代表必须精确匹配,1代表任意匹配(即不关心) 反掩码可以通过使用255.255.255.255减去正常的子网掩码得到,比如要决定子网掩
11、码为255.255.255.0的IP地址172.16.1.0的反掩码: 255.255.255.255-255.255.255.0=0.0.0.255 即172.16.1.0的反掩码为0.0.0.255 注意: 反掩码为255.255.255.255的0.0.0.0代表any,即任意地址 反掩码为0.0.0.0的10.1.1.2代表主机地址10.1.1.2 Summarizing ACLs 下面描述的是如何汇总(summarization)一组网络地址,来达到优化ACL的目的: 192.168.32.0/24 192
12、168.33.0/24 192.168.34.0/24 192.168.35.0/24 192.168.36.0/24 192.168.37.0/24 192.168.38.0/24 192.168.39.0/24 这组IP地址的前2个和最后1个八位位组是一样的,再看第3个八位位组,把它们写成2进制的形式: 32:00 10 00 00 33:00 10 00 01 34:00 10 00 10 35:00 10 00 11 36:00 10 01 00 37:00 10 01 01 38:00 10 01 10 39:00 10 01 11
13、 注意这组范围里的前5位都是一样的,所以这组IP地址范围可以汇总为192.168.32.0/21 255.255.248.0,那么这组IP地址范围的反掩码为255.255.255.255-255.255.248.0=0.0.7.255 比如在做IP standard ACL的时候,就可以: access-list 10 permit 192.168.32.0 0.0.7.255 再来看另一组IP地范围: 192.168.146.0/24 192.168.147.0/24 192.168.148.0/24 192.168.149.0/24
14、 照之前的方法,把第3个八位位组写成2进制形式: 146:10 01 00 10 147:10 01 00 11 148:10 01 01 00 149:10 01 01 01 是不是可以写成192.168.146.0/21呢?不是.因为采用/21的话将有8个子网将被考虑进去,如果在用ACL拒绝上述1组地址的时候,就有可能把另外4个地址给封杀掉.一定要考虑到精确匹配,上述地址就只能汇总成下面这2条地址: 对于192.168.146.x-192.168.147.x为:192.168.146.0/23(192.168.146.0 255.255.254.
15、0) 对于192.168.146.8-192.168.149.x为:192.168.148.0/23(192.168.148.0 255.255.254.0) 所以反掩码分别为:0.0.1.255和0.0.1.255 比如在做IP standard ACL的时候,就可以: access−list 10 permit 192.168.146.0 0.0.1.255 access−list 10 permit 192.168.148.0 0.0.1.255 Processing ACLs 当流量经过了配置的有ACL的路由器的时候,将和ACL
16、里的条目从上往下的进行比较,直到找到匹配的语句为止,如果没有任何匹配的语句,流量将被拒绝(deny)掉.一般在设置ACL的时候,尽可能的把permit语句放在ACL的最上部.并且要记住的是,ACL在结尾处默认隐含的有1条拒绝所有流量的deny语句,如下2个ACL,ACL 101和ACL 102是有相同的效果的: access-list 101 permit ip 10.1.1.0 0.0.0.255 172.16.1.0 0.0.0.255 access-list 102 permit ip 10.1.1.0 0.0.0.255 172.16.1.0 0.0.0.255 acce
17、ss-list 102 deny ip any any ACL例子如下: access-list 101 permit tcp host 10.1.1.2 host 172.16.1.1 eq telnet access-list 101 permit tcp host 10.1.1.2 host 172.16.1.1 access-list 101 permit udp host 10.1.1.2 host 172.16.1.1 access-list 101 permit ip 10.1.1.0 0.0.0.255 172.16.1.0 0.0.0.255
18、 最后1条语句就足够了,前3条语句可以不用配置.因为TCP就包括了telnet,并且IP包括了TCP和UDP.所以只需要写最后1条语句即可 Defining Ports and Message Types 在设置ACL的时候,可能不光要设置源地址和目标地址,还要设置端口号(参阅RFC 1700)或ICMP信息类型(参阅RFC 792).当然可以在设置的时候输入?来查看提示,如下: access-list 102 permit tcp host 10.1.1.1 host 172.16.1.1 eq ? bgp Border Gateway Proto
19、col (179) chargen Character generator (19) cmd Remote commands (rcmd, 514) 在配置的时候,路由器同样可以把数字转化为人性化的值,比如在设置下面的ICMP类型14的时候: access-list 102 permit icmp host 10.1.1.1 host 172.16.1.1 14 就成了: access-list 102 permit icmp host 10.1.1.1 host 172.16.1.1 timestamp-reply Applying
20、ACLs 当你配置了ACL的时候,不在路由器上应用它,是将不会生效的.如下图: 当你要阻断从source到destination的流量的时候,尽可能的把ACL设置在离源地址近的地方,即在路由器A上的E0接口(inbound) Defining in and out in和out是相对于路由器来说的.离开路由器接口的流量即为out;进入这个路由器的接口的流量即为in.在配置ACL的时候,in和out并不是绝对的.比如上面那个例子,在路由器A上设置ACL,方向就要用in,因为站在路由器A的角度上看,流量是进入路由器A的.但是同样可以把ACL设
21、置在路由器C上的E1接口,方向为out,因为流量是离开路由器C Editing ACLs 在对ACL进行编辑的时候要特别的注意.如果你删除了ACL中某条语句,那么整个ACL也随之被删除掉了.如下: router#config t router(config)#access-list 101 deny icmp any any router(config)#access-list 101 permit ip any any router(config)#^Z router#show access-list Extended IP access list
22、 101 deny icmp any any permit ip any any router# *Mar 9 00:43:12.784: %SYS-5-CONFIG_I: Configured from console by console router#config t router(config)#no access-list 101 deny icmp any any router(config)#^Z router#show access-list router# *Mar 9 00:43:29.832: %SYS-5-CONFIG_I: Configured
23、 from console by console 所以如果你要修改ACL的语句的时候,可以把路由器的配置拷贝到TFTP服务器上,用文本编辑器比如notepad.exe进行编辑后,在拷贝回路由器上 当然也可以用命名访问列表的方式进行修改(稍后讲解),如下: router#config t router(config)#ip access-list extended test router(config-ext-nacl)#permit ip host 2.2.2.2 host 3.3.3.3 router(config-ext-nacl)#permit
24、tcp host 1.1.1.1 host 5.5.5.5 eq www router(config-ext-nacl)#permit icmp any any router(config-ext-nacl)#permit udp host 6.6.6.6 10.10.10.0 0.0.0.255 eq domain 验证下ACL的设置,如下: router#show access-list Extended IP access list test permit ip host 2.2.2.2 host 3.3.3.3 permit tcp host 1.1.1.
25、1 host 5.5.5.5 eq www permit icmp any any permit udp host 6.6.6.6 10.10.10.0 0.0.0.255 eq domain 设置好ACL,进行删除和增加语句,如下: router(config)#ip access-list extended test router(config-ext-nacl)#no permit icmp any any /---------------删除1条语句---------/ router(config-ext-nacl)#permit gre host 4.4.
26、4.4 host 8.8.8.8 /---------------增加1条语句---------/ 修改后进行验证,如下: router#show access-list Extended IP access list test permit ip host 2.2.2.2 host 3.3.3.3 permit tcp host 1.1.1.1 host 5.5.5.5 eq www permit udp host 6.6.6.6 10.10.10.0 0.0.0.255 eq domain permit gre host 4.4.4.4 host 8.8.8.
27、8
可以看到新增的语句位于ACL的结尾
当要删除整个ACL的时候,使用如下命令:
interface
28、6 access-list 101 permit ip host 10.2.6.6 any 2.在卷入debug过程中的接口的fast-switching功能要关闭,如果不关闭的话,将只看的到第一个经过该接口的包.在接口配置模式下使用如下命令: no ip route-cache 3.在特权模式下使用terminal monitor命令,这样debug输出的信息将被显示 4.使用debug ip packet 101 [detail]命令开始debug 5.debug完成以后,在特权模式下使用no debug all命令关闭
29、debug.并且进入接口配置模式使用ip route-cache命令打开fast-switching功能
Pt.3 Types of IP ACLs
Standard ACLs
标准ACL是比较古老的ACL,可以追溯到Cisco IOS Release 8.3.标准ACL(以IP访问列表为例)通过比较IP包的源地址和ACL中设置的地址来做转发或者丢弃的决定.语法如下:
access-list






