反掩码详解
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
反掩码详解
在配置路由协议的时候(如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 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
通配符掩码(wildcard—mask)
路由器使用的通配符掩码(或反掩码)与源或目标地址一起来分辨匹配的地址范围,它跟子网掩码刚好相反。
它像子网掩码告诉路由器IP地址的哪一位属于网络号一样,通配符掩码告诉路由器为了判断出匹配,它需要检查IP 地址中的多少位。
这个地址掩码对使我们可以只使用两个32位的号码来确定IP地址的范围。
这是十分方便的,因为如果没有掩码的话,你不得不对每个匹配的IP客户地址加入一个单独的访问列表语句。
这将造成很多额外的输入
和路由器大量额外的处理过程.所以地址掩码对相当有用。
在子网掩码中,将掩码的一位设成1表示IP地址对应的位属于网络地址部分。
相反,在访问列表中将通配符掩
码中的一位设成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
/26 255。
255。
255。
192 0。
0。
0。
63
/25 255。
255。
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.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
十进制通配符掩码计算方法
用二进制来表示子网掩码值,再用广播地址求其差值,然后再算回十进制。
即,推出公式:通配符掩码=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 得到结果为:
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通配符掩码(反掩码)
11111111.11111111.10000000。
0000000
通配符掩码值为:广播全1(二进制)地址减去子网掩码二制制值,即:
11111111。
11111111。
11111111。
11111111 - 11111111。
11111111。
10000000.0000000 得到结果为:
00000000.00000000.01111111.11111111
转换为十进制:
0.0。
127。
255
(2)、通配符掩码=255—掩码.255—掩码.255-掩码。
255-掩码,即:
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减去正常的子网掩码得到,比如要决定子网掩码为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。
168.33。
0/24
192.168。
34。
0/24
192。
168.35.0/24
192.168.36.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
注意这组范围里的前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
照之前的方法,把第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。
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
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里的条目从上往下的进行比较,直到找到匹配的语句为止,如果没有任何匹配的语句,流量将被拒绝(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
access—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
最后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 Protocol (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 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设置在路由器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 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 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 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.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。
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。
8
可以看到新增的语句位于ACL的结尾
当要删除整个ACL的时候,使用如下命令:
interface 〈interface〉
no ip access-group <acl number> in|out
Troubleshooting
当要对流量进行debug的时候,首先要确认,当前设置的有ACL,但是没有应用它,并且路由器的fast-switching要关闭,步骤如下:
1。
使用access—list命令捕捉需要监测的数据,比如:
access-list 101 permit ip any host 10。
2.6.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命令关闭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 <access—list—number> {permit|deny} {host |source wildcard—mask | any}
在一般的IOS版本中,access—list-number的范围是1到99.在Cisco IOS Release 12.0。
1中,还可以使用额外的一段1300到1999
当定义了标准ACL以后,进入接口配置模式使用如下命令进行应用:
ip access-group 〈access-list-number〉{in|out}
Extended ACLs
扩展ACL是在Cisco IOS Release 8.3中引入的。
顾名思义,它和之前那种古老的比较方式,增加了许多额外的比较。
命令如下:
对于IP:
access—list <access—list—number> [dynamic dynamic—name [timeout minutes]]{deny | permit}protocol source wildcard—mask destination wildcard-mask [precedence precedence] [tos tos] [log | log-
对于ICMP:
access-list <access—list—number〉[dynamic dynamic-name [timeout minutes]]{deny | permit}
icmp source wildcard—mask destination wildcard-mask [icmp—type |[[icmp-type icmp-code] | [icmp—message]] [precedenceprecedence] [tos tos][log | log—input] [time—range time—range—name]
对于UDP:
access—list <access-list—number〉 [dynamic dynamic—name [timeout minutes]] {deny | permit} udp source wildcard-mask [operator [port]] destination wildcard—mask [operator [port]] [precedence precedence] [tos tos] [log | log-input] [time—range time-range—name]
对于TCP:
access-list 〈access-list—number〉[dynamic dynamic—name [timeout minutes]] {deny | permit} tcp source wildcard-mask [operator [port]] destination wildcard—mask [operator [port]] [precedence precedence][tos tos] [log | log—input] [time—range time—range—name]
在一般的IOS版本里,access—list—number可以为101到199.在Cisco IOS Release 12。
0。
1以后,还可以额外的使用2000到2699
再接下来就要将定义好的ACL应用在接口上,命令如下(接口配置模式下):
ip access-group {acl-number | acl—name}{in|out}
Lock and Key (Dynamic ACLs)
Lock and Key(也叫动态ACL)是在Cisco IOS Release 11。
1引入的。
这个特性是依靠于telnet,验证(authentication,本地和远程)还有扩展ACL的
Lock and Key的配置是在应用ACL的时候进行设置的,当验证通过以后,才允许telnet,语法如下:
username <username〉 password <password>
interface 〈interface〉
ip access-group {number|name}{in|out}
验证之后将动态的往现有ACL里增加1条语句,语法如下:
access—list 〈access—list-number〉 dynamic <name> {permit|deny} [protocol] {source wildcard—
mask|any} {destination wildcard-mask|any} [precedence precedence] [tos tos] [established] [log|log—input] [operator destination-port|destination port]
接下来:
line vty 〈line_range〉
login local
如下就是一个Lock and Key的配置例子:
username test password 0 test
username test autocommand access—enable host timeout 10 /----—定义空闲超时时间为10分钟———/ interface Ethernet0/0
ip address 10.1.1。
1 255。
255。
255.0
ip access-group 101 in
access—list 101 permit tcp any host 10.1.1。
1 eq telnet
access-list 101 dynamic testlist timeout 15 permit ip 10。
1.1。
0 0.0。
0。
255 172.16.1.0 0。
0。
0。
255
line vty 0 4
login local
当10。
1.1。
2要telnet到10。
1。
1。
1的时候,动态ACL将被应用.当telnet连接断开以后,用户就可以访问172。
16。
1。
x网络
IP Named ACLs
命名ACL是在Cisco IOS Release 11。
2引入的,它允许用命名的方式取代数字,IP命名ACL语法如下:
ip access-list {extended|standard}〈name〉
如下是一个使用命名ACL来阻断除telnet以外10。
1。
1。
2到172。
16。
1。
1的流量的例子
interface Ethernet0/0
ip address 10。
1.1.1 255.255。
255.0
ip access—group in_to_out in
ip access—list extended in_to_out
permit tcp host 10.1.1.2 host 172.16。
1。
1 eq telnet:
Reflexive ACLs
反身ACL是在Cisco IOS Release 11.3引入的.它只能和扩展的命名IP ACL一起定义而不能和基于数字的或标准ACL,以及其他协议的ACL一起.语法如下:
ip access—list extended 〈name〉 permit 〈protocol> any any reflect name [timeout <seconds>]
ip access—list extended <name〉 evaluate <name〉
interface 〈interface〉
ip access-group {number|name} {in|out}
下面引用一个例子(原作者: alienguo 出处:雨声论坛
现在还余下一个问题:路由器既然已经deny了外网进来的所有流量,那么它是怎么允许内网出去的返回流量进来呢?
它是通过创建动态生成的ACL来允许返回流量的,下面看看show access-list的结果:
……
Reflexive IP access list icmp_traffic
permit icmp host 192.1.1。
2 host 10。
1。
1.2 (24 matches) (time left 196)
……
这些动态ACL可通过TCP的FIN/RST包来动态自动消除,对ICMP这样stateless的包来说,是通过内置的timer来消除的,这点可通过上述show access-list结果中的(time left 196)来核实。
最后再说说那另一个测试,也就是两个ACL中加的多余的东西:
ip access-list extended outbound_filter
permit ip any any
ip access—list extended inbound_filter
deny ip any any log
我在10。
1.1。
2上发起一个到192。
1.1。
2的TELNET连接,这个流量到了S0口后由ACL outbound_filter中的permit ip any any检测后放行。
到了RouterB后,RouterB进行处理然后返回流量,这个流量到了S0口后由inbound_filter检测,因为evaluate icmp_traffic中并没有包含对TCP类型流量的检测,这个包由deny ip any any log 一句处理后丢弃并生成日志:
00:24:28: %SEC-6—IPACCESSLOGP: list inbound_filter denied tcp 192.1。
1.2(23) -〉 10。
1.1.2(1483), 1 packet
Time-Based ACLs Using Time Ranges
基于时间的ACL是在Cisco IOS 12。
0。
1T中引入的,顾名思义,它对流量的控制可以是基于时间的。
命令如下:
1。
定义time range(时间范围):
time-range 〈time-range-name>
2.定义时间周期:
periodic [days—of-the—week] hh:mm to [days—of-the—week] hh:mm
或,定义绝对时间:
absolute [start time date] [end time date]
3。
把time range使用在ACL中:
ip access-list <name|number> <extended_definition〉 time—range 〈name_of_time-range〉
例子如下:
time-range EVERYOTHERDAY
periodic Monday Wednesday Friday 8:00 to 17:00
access—list 101 permit tcp 10.1。
1。
0 0。
0.0.255 172。
16.1。
0 0。
0.0.255 eq telnet time—range EVERYOTHERDAY
interface Ethernet0/0
ip address 10。
1。
1.1 255。
255。
255。
0
ip access—group 101 in
Commented IP ACL Entries
为ACL语句标记注释这个特性是在Cisco IOS Release 12.0。
2.T中引入的。
为命名ACL添加注释的语法为:
ip access—list {standard|extended} 〈name〉 remark <remark>
为基于数字的ACL添加注释的语法为:
access-list <access—list-number> remark <remark>
例子如下:
access-list 101 permit tcp host 10。
1.1。
2 host 172.16.1.1 eq telnet
access—list 101 remark permit_telnet
interface Ethernet0/0
ip address 10。
1.1。
1 255.255。
255.0
ip access—group 101 in。