6506的QACL工作比较特殊,配置起来有许多注意事项,随着6500系列产品在全球的展开,维护和技术支持任务会越来越重,有必要向广大用服兄弟解释芯片的工作原理,公布一些技术细节。
一、 规则匹配过程
首先介绍一下6506采用的芯片的结构:
1、 PT表项(Packet Type Table):用于设置报文的封装格式、以太网类型等;
其中几个常用的字段为:
Encapsulation: 报文的封装类型,包括Ethernet II, IEEE 802.2/802.3 SNAP, Netware 802.3 Raw,
IEEE 802.2/802.3;
Ethernet type: 以太网类型,只对Ethernet II, IEEE 802.2/802.3 SNAP有效;
Packet type ID: 如果所有字段匹配上后,就得到一个ID号,以与别的表项相区别;
表中除了ID字段的其他字段属于匹配字段,有相应Mask设置,如果Mask=0,则表示该字段是不关心的,即不参与比较/匹配过程。
ID字段的取值是由程序控制的,如果两个表项其他的字段完全相同,则他们的ID号就是相同的。
2、 SrHG表项(Source Host Group Table):用于设置源二、三层信息,如源IP, 源Mac, 源端口等;
3、 DstHG表项(Destination Host Group Table):用于设置目的二、三层信息,如目的IP,目的Mac,目的端口等;
SrHG表项与DstHG表项在CAM表中的表示是相同的,实际上是同一张表,当Source/Destination=0时,表示记录的是源信息,是SrHG表;当Source/Destination=1时,表示记录的是目的信息,是DstHG表。
其中几个常用的字段为:
Entry type: 表项类型,有IP, IPX, L2, L3四个类型,其中L3没有用到;类型不同对其后各
字段的解释就不同。还有一点要格外注意:我们的qacl mode有L2/L3(Link/IP)
两种模式,type=L2只在L2 Mode下有效,type=IP/IPX只在L3 Mode下有效。
有时配置的规则不起作用,可能是Mode没有设置正确;
IP Address: 报文的源或目的IP,只对type=IP有效;
DiffServ/IP Precedence: IP优先级,DSCP;
Physical Port Mask: 端口掩码,表示对从哪些端口进/出的报文,规则生效。我们配置IP
规则时,在多个端口下发,在底层只占用了一个SrHG表项,就是应为该字段
可以表示多个端口信息。这显然大大节约了表项资源;
Vlan ID: 我们当前只支持入Vlan设置,且只能在Link规则才可配;
Mac Address: 报文的源或目的Mac,只对type=L2有效;
Physical Port: 物理端口号,表示对从哪些端口进/出的报文,规则生效。
Host Group ID: 如果所有字段匹配上后,就得到一个ID号,以与别的表项相区别;
表中除了ID字段的其他字段属于匹配字段,有相应Mask设置,如果Mask=0,则表示该字段是不关心的,即不参与比较/匹配过程。
ID字段的取值是由程序控制的,如果两个表项除去Port外其他的字段完全相同,则他们的ID号就是相同的。
4、 SrL4表项(Source Layer 4 Table):用于设置协议类型、TCP Flag、L4源端口号、Socket等;
5、 DstL4表项(Destination Layer 4 Table):用于设置协议类型、TCP Flag、L4目的端口号、Socket等;
SrL4表项与DstL4表项在CAM表中的表示是相同的,实际上是同一张表,当Source/Destination=0时,表示记录的是源信息,是SrL4表;当Source/Destination=1时,表示记录的是目的信息,是DstL4表。
其中几个常用的字段为:
Type: 表项类型,有IP, IPX两个类型,类型不同对其后各字段的解释就不同。
L4 Protocol: 报文的Transport Layer协议号,如配置了Tcp规则,该字段=6;
Port Number: TCP/UDP报文的端口号;
L4 Layer Group ID: 如果所有字段匹配上后,就得到一个ID号,以与别的表项相区别;
表中除了ID字段的其他字段属于匹配字段,有相应Mask设置,如果Mask=0,则表示该字段是不关心的,即不参与比较/匹配过程。
ID字段的取值是由程序控制的,如果两个表项其他的字段完全相同,则他们的ID号就是相同的。
6、 MR表项(Main Rule Table):用于设置相应匹配动作。
有上述五张表,我们可以得到5个ID号;这5个ID就表示我们对该规则的匹配条件,现在就
可以来做相应动作了。MR表项就是匹配这几个ID号,然后做相应动作。
表中的这几个ID字段属于匹配字段,有相应Mask设置,如果Mask=0, 则表示该字段是不关心的,即不参与比较/匹配过程
配置一条规则时,要根据规则内容分散到不同的多个表项中去。即上层下发一条流规则,底层需要将其内容进行分解,设置到不同的硬件表项当中去。(我们首先要明确规则是如何进行分解,底层有哪些表项?)
例1:
acl name r1 advanced
rule 0 permit tcp soure 1.1.1.1 0 eq 10 destination 1.1.1.2 0 eq 20
int e2/0/1
packet-filter inbound ip r1 rule 0
底层将设置5个表项:
SrHG表项:包含信息source 1.1.1.1 0,int e2/0/1;
DstHG表项:包含信息destination 1.1.1.2 0;
SrL4表项:包含信息tcp, soureport eq 10;
DstL4表项:包含信息tcp, destination port eq 20;
MR表项:包含信息permit动作。
例2:
acl name r2 link
rule 0 deny rarp ingress 0-0-1 egress 0-0-3
int e2/0/1
packet-filter inbound link r2 rule 0
底层将设置4个表项:
PT表项:包含信息Ethernet type = 0835;
SrHG表项:包含信息SrMac 0-0-1, int e2/0/1;
DstHG表项:包含信息DstMac 0-0-3;
MR表项:包含信息deny动作。
每下发一条规则到芯片,都会设置相应表项,当然表项的个数是随着规则内容不同而变化的。(如例2中的规则只有PT, SrHG, DstHG三个表项)芯片的规则匹配要经过一系列的查找过程。前5张表都有一个ID号,芯片对前5张表,按表项在CAM中的位置一次匹配,匹配上第一个表项,记下其ID号;接着匹配下一张表,这样得到5个ID号;(如例2中的规则没有SrL4, DstL4表项,在匹配这两个表时,就匹配上缺省表项得到SrL4 ID=0和DstL4 ID=0)最后,在根据这5个ID号去匹配MR表(对例2中的规则,其MR表项的SrL4 ID和DstL4 ID字段,要设为不关心。),并执行相应的动作。
从该过程来看,每个报文进行匹配时,对每一张表只匹配了一次,这虽然大大提高了匹配速度,但显然是非穷举的方法,在某些情况下会造成规则匹配不上等情况。我们的规则之所以难配,都是这个原因造成的。以下对几个典型例子进行分析:
例3 :
rule1: protocol 6 1.1.1.1 0.0.0.0 eq 20 1.1.1.3 0.0.0.0
rule2: protocol 6 1.1.1.1 0.0.0.0 1.1.1.3 0.0.0.0 eq 30 precedence 4
PT SrHG DstHG SrL4 DstL4 MR
rule1 1.1.1.1 ,in: 3 (id=1) 1.1.1.3 (id=1) Tcp , port:20 (id=1) (-,1,1,1,-)
rule2 1.1.1.1, in: 3 precedence: 4 (id=2) 1.1.1.3 precedence: 4 (id=2) Tcp, port:30 (id=2) (-,2,2,-,2)
在端口3上,先下发rule1, 再下发rule2;
在处理这些表项时,对每个表项按“长度”(有多少个有效字段)进行排序,如 rule1的SrHG有2个有效字段,而rule2的SrHG有3个有效字段,所以匹配SrHG表项时,就先匹配rule2的SrHG表项(注意这里对IP地址的大小网段没有做区分)。MR的表项有效字段个数相同,就先匹配后下发的MR表项。
构造报文 1.1.1.1 (eq 20 ) ==> 1.1.1.3 ,该报文的tos域为0x10(precedence: 4)。
它的匹配情况是: (0,2,2,1,0),没有匹配上任何一条规则。
例4:
rule1: any 1.1.1.2 0.0.0.0
rule2: 1.1.1.1 0.0.0.0 1.1.1.3 0.0.0.0
PT SrHG DstHG SrL4 DstL4 MR
rule1 in: 2,5,6 (id=1) 1.1.1.2 (id=1) (-,1,1,-,-)
rule2 1.1.1.1, in: 2,3,4 (id=2) 1.1.1.3 (id=2) (-,2,2,-,-)
先在端口2,5,6上,下发rule2,
再在端口2,3,4上,下发rule1;
构造报文 1.1.1.1==> 1.1.1.3 ingress 2
匹配情况是(0,2,2,0,0),匹配上rule2。
但若构造报文 1.1.1.1==> 1.1.1.2 ingress 2
它的匹配情况是(0,2,1,0,0),没有匹配上任何一条规则。
从中可以看出,如果下发的配置比较相似,就比较容易出问题。这是芯片特性决定的,只能尽量减小其影响,不能完全规避。
其中心就是这是个不完全匹配的过程。我们的处理一般是,对规则做一些变通。既然本质是不完全匹配,我们就再构造出几个辅助规则,使之变为完全匹配。
如对例3,我们构造规则
rule3: protocol 6 1.1.1.1 0.0.0.0 eq 20 1.1.1.3 0.0.0.0 precedence 4
rule3与rule1的动作相同。
PT SrHG DstHG SrL4 DstL4 MR
rule1 1.1.1.1 ,in: 3 (id=1) 1.1.1.3 (id=1) Tcp , port:20 (id=1) (-,1,1,1,-)
rule2 1.1.1.1, in: 3 precedence: 4 (id=2) 1.1.1.3 precedence: 4 (id=2) Tcp, port:30 (id=2) (-,2,2,-,2)
rule3 1.1.1.1, in: 3 precedence: 4 (id=2) 1.1.1.3 precedence: 4 (id=2) Tcp , port:20 (id=1) (-,2,2,1,-)
这样对报文 1.1.1.1 (eq 20 ) ==> 1.1.1.3 precedence 4
它的匹配情况是: (0,2,2,1,0),匹配上rule3, 由于rule3与rule1的动作相同,也就相当于匹配上rule1。
与规则匹配有关的另一个关键点是表项的匹配次序。芯片在匹配每一张表时是按照从低地址向高地址的次序来匹配的,因此如何组织这些表项就是一个很重要的问题。同时我们也讨论一下下发ACL规则个数的问题。
CAM表中的表项个数是有限的,固定不变的。PT表项个数为64个,但由于PT ID只有5位,其实可用的只有32项;HG表项有128项,而SrHG ID和DstHG ID各占6位,相当于SrHG表项有64项,DstHG也有64项;L4表项与HG的情况相同,SrL4与DstL4表项也是各有64项;而MR表项有512条,可谓非常多了。
在下发规则时,我们对每张表从高地址开始分配,因此后下发的往往排在下面,优先级会高一些。为了使匹配过程更合理一些,在处理这些表项时,对每个表项按“长度”(有多少个有效字段)进行排序,长度大的放在低地址处,长度小的放在高地址处。 (注意这里对IP地址的大小网段没有做区分)。MR的表项有效字段个数相同,就先匹配后下发的MR表项。因此,配置了许多ACL规则,下发次序是非常重要的,这决定了哪些表项被匹配,哪些没有被匹配。
经常有人问这样的问题:6506能够下发多少条ACL规则?为什么我下发了60条就不能再下发了?准确的数目谁也不能确定,因为每一条规则下发时对应的底层表项个数不相同,而下发的个数就是受底层表项资源的限制;资源耗尽了,就不能再下发了。一般来说,也就是60条左右。因为下发规则时,总要在端口上下发,就要占用一个SrHG ID,而总共只有64个这种ID,在初始化时,我们又占去了几条,可用的大约在60条左右。当然,如果深究,就麻烦的多。其中一点就是not-carefor-interface。
Not-carefor-interface是一个非常重要的参数,用在packet-filter命令当中。虽然也是在端口上下发,但其不设置端口信息,相当于该规则在这个芯片上全局有效。它对于节约表项资源有重大价值有重要意义,也使得组网配置更加灵活,有时少了它,甚至都不能满足组网需求。
二、案例部分
以上我们分析了S6506芯片的工作原理,以及可能遇到的问题。本节通过一些实例来进一步详细解释。
例5、6506上配置4个网段,每个网段包含一个服务器的小网段。
要求:任何一台PC可以访问每一个服务器网段,相同网段可以互访,而不同网段的PC机不能互访。
举例如下:
假设4个网段分别为:
10.1.0.0/16
10.2.0.0/16
10.3.0.0/16
10.4.0.0/16
而4个服务器小网段分别为:
10.1.1.0/24
10.2.1.0/24
10.3.1.0/24
10.4.1.0/24
6506上配置了FT48和GB8U两块业务板。
具体配置如下:
/* 任何一台PC可以访问每一个服务器网段 */
acl name AccessServer advanced
rule 0 permit ip destination 10.1.1.0 0.0.0.255
rule 1 permit ip destination 10.2.1.0 0.0.0.255
rule 2 permit ip destination 10.3.1.0 0.0.0.255
rule 3 permit ip destination 10.4.1.0 0.0.0.255
rule 4 permit ip source 10.1.1.0 0.0.0.255
rule 5 permit ip source 10.2.1.0 0.0.0.255
rule 6 permit ip source 10.3.1.0 0.0.0.255
rule 7 permit ip source 10.4.1.0 0.0.0.255
/* 相同网段可以互访 */
acl name AccessInside advanced
rule 0 permit ip source 10.1.0.0 0.0.255.255 destination 10.1.0.0 0.0.255.255
rule 1 permit ip source 10.2.0.0 0.0.255.255 destination 10.2.0.0 0.0.255.255
rule 2 permit ip source 10.3.0.0 0.0.255.255 destination 10.3.0.0 0.0.255.255
rule 3 permit ip source 10.4.0.0 0.0.255.255 destination 10.4.0.0 0.0.255.255
/* 不同网段的PC机不能互访 */
acl name DenyInter advanced
rule 0 deny ip
/* 接下来,要在相关芯片上全局下发, 假设在slot 1上插有GB8U, slot3上插有FT48,要把上述规则在这两块板子的所有芯片全局下发 */
/* 在GB8U上全局下发 */
int g1/0/1
packet-filter inbound ip DenyInter not-carefor-interface
packet-filter inbound ip AccessInside not-carefor-interface
packet-filter inbound ip AccessServer not-carefor-interface
/* 在FT48上全局下发*/
/* 先在第一个芯片上下发 */
int e3/0/1
packet-filter inbound ip DenyInter not-carefor-interface
packet-filter inbound ip AccessInside not-carefor-interface
packet-filter inbound ip AccessServer not-carefor-interface
/* 再在第二个芯片上下发 */
int e3/0/48
packet-filter inbound ip DenyInter not-carefor-interface
packet-filter inbound ip AccessInside not-carefor-interface
packet-filter inbound ip AccessServer not-carefor-interface
为什么要这样做?还是列表来分析吧。
PT SrHG DstHG SrL4 DstL4 MR
AccessServee_0 10.1.10/24 (id=1) (-,-,1,-,-)
AccessServee_1 10.2.10/24 (id=2) (-,-,2,-,-)
AccessServee_2 10.3.10/24 (id=3) (-,-,3,-,-)
AccessServee_3 10.4.10/24 (id=4) (-,-,4,-,-)
AccessServee_4 10.1.10/24 (id=1) (-,1,-,-,-)
AccessServee_5 10.2.10/24 (id=2) (-,2,-,-,-)
AccessServee_6 10.3.10/24 (id=3) (-,3,-,-,-)
AccessServee_7 10.4.10/24 (id=4) (-,4,-,-,-)
AccessInside_0 10.1.0.0/16 (id=5) 10.1.0.0/16(id=5) (-,5,5,-,-)
AccessInside_1 10.2.0.0/16(id=6) 10.2.0.0/16(id=6) (-,6,6,-,-)
AccessInside_2 10.3.0.0/16(id=7) 10.3.0.0/16(id=7) (-,7,7,-,-)
AccessInside_3 10.4.0.0/16(id=8) 10.4.0.0/16(id=8) (-,8,8,-,-)
DedyInter_3 (-,-,-,-,-)
按我们的下发次序,对各表项的匹配次序为从上到下进行。
大家可以构造几个报文来验证一下其正确性。
如果再要求只有网段10.1.0.0/16可以访问外部网络。
acl name AccessOutside advanced
rule 0 permit ip source 10.1.0.0 0.0.255.255 destination 0.0.0.0 127.255.255.255
rule 1 permit ip source 10.1.0.0 0.0.255.255 destination 128.0.0.0 127.255.255.255
rule 2 permit ip source 0.0.0.0 127.255.255.255 destination 1 0.1.0.0 0.0.255.255
rule 3 permit ip source 128.0.0.0 127.255.255.255 destination 10.1.0.0 0.0.255.255
rule 4 permit ip source 10.1.1.0 0.0.0.255 destination 0.0.0.0 127.255.255.255
rule 5 permit ip source 10.1.1.0 0.0.0.255 destination 128.0.0.0 127.255.255.255
rule 6 permit ip source 0.0.0.0 127.255.255.255 destination 10.1.1.0 0.0.0.255
rule 7 permit ip source 128.0.0.0 127.255.255.255 destination 10.1.1.0 0.0.0.255
在接口上按如下次序下发:
packet-filter inbound ip DenyInter not-carefor-interface
packet-filter inbound ip AccessOutside not-carefor-interface
packet-filter inbound ip AccessInside not-carefor-interface
packet-filter inbound ip AccessServer not-carefor-interface
上例中有大小网段的嵌套关系,因此规则的下发次序至观重要,我们总是把大网段先下发,而小网段后下发。否则,将先匹配大网段,而永远不会匹配到小网段。
例6:
VLAN2:10.42.12.129-10.42.12.190 255.255.255.192
VLAN3:10.42.12.193-10.42.12.254 255.255.255.192
VLAN4:10.42.13.1-10.42.13.30 255.255.255.224
VLAN5:10.42.13.33-10.42.13.62 255.255.255.224
VLAN6:10.42.13.65-10.42.13.126 255.255.255.192
VLAN7:10.42.13.129-10.42.13.190 255.255.255.192
VLAN8:10.42.13.193-10.42.13.254 255.255.255.192
VLAN9:10.42.12.1-10.42.12.126 255.255.255.128
( A: 10.42.12.1-10.42.12.63
B: 10.42.12.64-10.42.12.95
C: 10.42.12.96-10.42.12.126
)
VLAN 10: 10.41.10.253/24 (电信出口)
VLAN 11: 10.42.16.253/24 (移动出口)
一、 VLAN间权限控制:
1、 VLAN2只能访问 VLAN 5和VLAN 9
2、 VLAN3 只能访问VLAN 9
3、 VLAN4 只能访问VLAN 9的B和C部分
4、 VLAN5 不允许访问任何资源
5、 VLAN6 只能访问VLAN 9的B和C部分
6、 VLAN7 只能访问VLAN9的C部分
7、 VLAN8 只能访问VLAN 9的C部分
8、 VLAN10 只允许VLAN 9的A部分进行访问
9、 VLAN11 只允许VLAN 9的A部分进行访问
10、 除VLAN 9的A部分之外其他网段都不能访问外网(本来想在对端的路由器上通过做路由来解决,但是对端设备是电信与移动公司的,所以此办法行不通)
大的方面就是这样了。由于所有的IP都进行变化了,所以对具体主机的IP进行限制,暂时还没做限定
如下是我写的一个方案,供大家参考:
网段规定:
ip2: vlan 2 10.42.12.129/26;
ip3: vlan 3 10.42.12.193/26;
ip4: vlan 4 10.42.13.1/27;
ip5: vlan 5 10.42.13.33/27;
ip6: vlan 6 10.42.13.65/26;
ip7: vlan 7 10.42.13.129/26;
ip8: vlan 8 10.42.13.193/26;
ip9a: vlan 9 a 10.42.12.1/27;
ip9b: vlan 9 b 10.42.12.64/27;
ip9c: vlan 9 c 10.42.12.96/27;
ip10: vlan 10 10.41.10.253/24;
ip11: vlan 11 10.41.16.253/24
以上各网段两两不交。
首先,各网段内互通:
permit ip2 ==> ip1
permit ip3 ==> ip2
...
permit ip9c ==> ip9c
permit ip10 ==> ip10
permit ip11 ==> ip11
其次,一些要求:
(1. VLAN2只能访问 VLAN 5和VLAN 9 )
permit ip2 ==> ip5
permit ip2 ==> ip9a
permit ip2 ==> ip9b
permit ip2 ==> ip9c
(2.) (3.) 如上构造;
(4.) 不用管它;
(5-9.)如上改造;
特别的:
(10. 除VLAN 9的A部分之外其他网段都不能访问外网)
permit ip9a ==> 0.0.0.0 127.255.255.255
permit ip9a ==> 128.0.0.0 127.255.255.255
permit 0.0.0.0 127.255.255.255 ==> ip9a
permit 128.0.0.0 127.255.255.255 ==> ip9a
最后,网段两两不通:
deny any ==> ip2
...
deny any ==> ip9c
deny any ==> ip10
deny any ==> ip11
将上述规则,按从后到前的次序以not-carefor-interface方式在端口下发:
int g2/0/1
下发(最后)
下发(特别的)
下发(其次)
下发(首先)
对于这种Vlan间互禁的需求,一般是先将各网段分解为两两不交的小网段(如ip9要分解为ip9a,ip9b,ip9c),这样可以减少匹配时的麻烦;对于某网段访问外网,这是一个技巧,大家记住就行,其下发次序要尽量放在高地址的地方,但要在Deny规则之前;这里的Deny规则没有用Deny any any,因为那样打击面太大,这样做只是把网内的流量Deny了,对网外之间的流量没有影响。
例7:
6506的5/0/10接1.1.1.0/24网段,5/0/20接1.1.2.0/24网段,网关各为.1。现在想让两个网段互相禁止,但是两个网段的前31台主机可以互相访问。
于是我们的配置思路就是配一个ACL,其中两个rule,先deny 1.1.1.0/24 to 1.1.2.0/24,再permit 1.1.1.0/27 to 1.1.2.0/27。下发到端口5/0/10(源IP网段是1.1.1.0/24)
可是配完了之后的结果是:两个网段前31台主机可以访问对方网段的任意一台主机,并没有禁止掉对后224台的访问。后224台主机可以互相禁止。
后来我又试着配两个ACL,每个ACL一个rule,可是结果是一样的。
我又试着把deny变成any to any,这样倒是达到希望的效果了,可是pc又ping不通自己的网关了,所以也不符合要求。
请问6506象这样的要求该如何去配置ACL呢?我觉得我已经把可能想到的配置方法都用过了。很头疼。请指点。谢谢!
如下配置应该是不错的:
rule1: deny 1.1.1.0/24 to 1.1.2.0/24
rule2: permit 1.1.1.0/27 to 1.1.2.0/27
但由于芯片特性,实际的情况如下:
PT SrHG DstHG SrL4 DstL4 MR
rule1 1.1.1.0/24 in: e5/0/10 (id=1) 1.1.2.0/24 (id=1) (-,1,1,-,-)
rule2 1.1.1.1/27 in: e5/0/10 (id=2) 1.1.2.0/27 (id=2) (-,2,2,-,-)
构造报文 1.1.1.20 ==> 1.1.2.40 他的匹配情况是 ( 0, 2, 1, 0 ,0 )。规则1、2都没有匹配上,而最底层有一条缺省的Permit规则,就匹配该规则通过了。
如何避免这种情况呢?就需要做一下变通,在增加一条规则:
rule3: deny 1.1.1.0/27 to 1.1.2.0/24
考虑规则优先级关系,我们按rule1, rule3, rule1的次序下发。
PT SrHG DstHG SrL4 DstL4 MR
rule1 1.1.1.0/24 in: e5/0/10 (id=1) 1.1.2.0/24 (id=1) (-,1,1,-,-)
Rule3 1.1.1.0/27 in: e5/0/10 (id=2) 1.1.2.0/24 (id=1) (-,2,1,-,-)
rule2 1.1.1.1/27 in: e5/0/10 (id=2) 1.1.2.0/27 (id=2) (-,2,2,-,-)
这样,报文就可以匹配上rule3,被deny了。
对于报文 1.1.1.40 ==> 1.1.2.20 情况也是一样的,需要增加一条规则:
rule3: deny 1.1.1.0/24 to 1.1.2.0/27
综上所述,配置如下:
acl name r1 advanced
rule 0 deny ip 1.1.1.0/24 ==> 1.1.2.0/24
rule 1 deny ip 1.1.1.0/27 ==> 1.1.2.0/24
rule 2 deny ip 1.1.1.0/24 ==> 1.1.2.0/27
rule 3 permit ip 1.1.1.0/27 ==> 1.1.2.0/27
在5/0/10下发
再配一个反向的,在5/0/20下发
acl name r2 advanced
rule 0 deny ip 1.1.2.0/24 ==> 1.1.1.0/24
rule 1 deny ip 1.1.2.0/27 ==> 1.1.1.0/24
rule 2 deny ip 1.1.2.0/24 ==> 1.1.1.0/27
rule 3 permit ip 1.1.2.0/27 ==> 1.1.1.0/27
例8:更进一步,考虑如下需求:
工作站VLAN使用IP地址为192.168.0.1/24网络段,服务器VLAN使用的IP地址为192.168.1.1/24,限定工作站VLAN中的192.168.0.1-192.168.0.31的工作站有权限访问服务器VLAN 192.168.1.1-192.168.1.31的设备。其余工作站电脑是不能访问服务器VLAN的。
另外有工作站电脑192.168.0.100只可以访问服务器192.168.1.32,其他都不能访问。
同一VLAN内的PC都可以互通。
acl name r1 advanced
rule 0 deny ip 192.168.0.1/24 ==> 192.168.1.1/24
rule 1 deny ip 192.168.0.1/27 ==> 192.168.1.1/24
rule 2 deny ip 192.168.0.1/24 ==> 192.168.1.1/27
rule 3 permit ip ip 192.168.0.1/27 ==> 192.168.1.1/27
对于需求工作站电脑192.168.0.100只可以访问服务器192.168.1.32,其他都不能访问。
可以有:
rule 4 permit ip ip 192.168.0.100/32 ==> 192.168.1.32/32
但只有这样是不行的,需要:
rule 4 deny ip ip 192.168.0.100/32 ==> 192.168.1.1/24
rule 5 deny ip ip 192.168.0.100/32 ==> 192.168.1.1/27
rule 6 permit ip ip 192.168.0.100/32 ==> 192.168.1.32/32
最后,做好配置后,如何检验配置的正确性呢?
1、 可以列出表格,构造各种报文看看其匹配情况,这适用于分析设计和排错阶段;
2、 可以实际下发规则,以构造各种报文做测试,看结果是否符合预期,这适用于验证检验阶段。
这两种方法是缺一不可的,对于前一种方法,更好的做法是得到规则表项在芯片中的实际情况(如表项位置,ID号等),这样更可靠一些。我们提供了这样一条命令:
(EN_) debug qss node
显示在某个芯片中的规则表项的使用情况。
下发例7中的规则:
acl name r1 advanced
rule 0 deny ip source 1.1.1.0 0.0.0.255 destination 1.1.2.0 0.0.0.255
rule 1 permit ip source 1.1.1.0 0.0.0.32 destination 1.1.2.0 0.0.0.32
[SW7700-testdiag]debugging qss node 4 0
================================
Infomation of node 0:
================================
ulRuleIndex 0
ulPTID 0
ulSrHGID 1
ulDstHGID 1
ulSrL4ID 0
ulDstL4ID 0
ulTCID 0
ulTC_PortNo 0
ulCounterID 0
ulREDCurveID 0
PT Entry
Entry 0 RawEntry: 0, 0, 0
Entry 0 RawMask: 0, 0, 0
SrHG Entry
Entry 114 RawEntry: 80000001, 1000000, 1010100
Entry 114 RawMask: e0008000, 1fffe00, ffffff00
ExtSrHG Entry
Entry 0 RawEntry: 0, 0, 0
Entry 0 RawMask: 0, 0, 0
DstHG Entry
Entry 116 RawEntry: 80008001, 0, 1010200
Entry 116 RawMask: e0008000, 0, ffffff00
ExtDstHG Entry
Entry 0 RawEntry: 0, 0, 0
Entry 0 RawMask: 0, 0, 0
SrL4 Entry
Entry 0 RawEntry: 0, 0, 0
Entry 0 RawMask: 0, 0, 0
DstL4 Entry
Entry 0 RawEntry: 0, 0, 0
Entry 0 RawMask: 0, 0, 0
MR Entry
Entry 500 RawEntry: 18000000, 0, 80104000
Entry 500 RawMask: 0, 0, 83ffc002
================================
Infomation of node 1:
================================
ulRuleIndex 1
ulPTID 0
ulSrHGID 2
ulDstHGID 2
ulSrL4ID 0
ulDstL4ID 0
ulTCID 0
ulTC_PortNo 0
ulCounterID 0
ulREDCurveID 0
PT Entry
Entry 0 RawEntry: 0, 0, 0
Entry 0 RawMask: 0, 0, 0
SrHG Entry
Entry 113 RawEntry: 80000002, 1000000, 1010100
Entry 113 RawMask: e0008000, 1fffe00, ffffffdf
ExtSrHG Entry
Entry 0 RawEntry: 0, 0, 0
Entry 0 RawMask: 0, 0, 0
DstHG Entry
Entry 115 RawEntry: 80008002, 0, 1010200
Entry 115 RawMask: e0008000, 0, ffffffdf
ExtDstHG Entry
Entry 0 RawEntry: 0, 0, 0
Entry 0 RawMask: 0, 0, 0
SrL4 Entry
Entry 0 RawEntry: 0, 0, 0
Entry 0 RawMask: 0, 0, 0
DstL4 Entry
Entry 0 RawEntry: 0, 0, 0
Entry 0 RawMask: 0, 0, 0
MR Entry
Entry 499 RawEntry: 8000000, 0, 80208000
Entry 499 RawMask: 0, 0, 83ffc002
[SW7700-testdiag]
可以得到下表:
PT SrHG DstHG SrL4 DstL4 MR
rule1 1.1.1.0/24 in: e5/0/10 (id=1)
Entry Place=114 1.1.2.0/24 (id=1)
Entry Place=116 (-,1,1,-,-)
Entry Place=500
rule2 1.1.1.1/27 in: e5/0/10 (id=2)
Entry Place=113 1.1.2.0/27 (id=2)
Entry Place=115 (-,2,2,-,-)
Entry Place=499
这样实际的表项匹配次序和表项ID就一目了然了。只是ACL规则和底层表项的对应关系,不是很容易对应上的,特别是在下发规则很多的情况下。