我們通常習慣使用連續的子網掩碼(形如11111111.11111111.11111111.00000000),而對于不連續的子網掩碼(形如11111111.11111111.00000000.00001111)基本上沒有去關注過。
實際上,有時候巧妙地使用不連續的子網掩碼,還能解決一些常規方法不容易搞定的問題。
例如,某個公司的網絡及對網絡配置的要求如下圖所示,對于圖示的情況,我們就可以用不連續子網掩碼加路由策略來解決。

第一步:定義3條ACL,分別匹配上面三類客戶端:
cj-3560G#sh ip access-l
Standard IP access list acl_linux
10 permit 172.16.0.3, wildcard bits 0.0.255.252
Standard IP access list acl_isa
10 permit 172.16.0.2, wildcard bits 0.0.255.252
Standard IP access list acl_router
10 permit 172.16.0.1, wildcard bits 0.0.255.252
20 permit 172.16.0.0, wildcard bits 0.0.255.252
解釋:
反向掩碼: 0 .0 .255 .252
0000 0000.0000 0000.1111 1111.1111 1100 (不連續反向子網掩碼)
正向掩碼: 1111 1111 .1111 1111. 0000 0000.0000 0011 (不連續子網掩碼)
IP地址: 172 .16 .0 .0000 0011
172 .16 .0 .3
可以看出來,只要IP地址為172. 16. x. xxxxxx11(x表示0或者1當中的任何一個), 即以二進制表示的IP地址的最右邊兩(電腦沒聲音)位為11,就匹配ACL acl_linux,其它兩(電腦沒聲音)個ACL的解釋與此類似。
第二步:定義路由策略
cj-3560G#sh route-map rm-select-gw
route-map rm-select-gw, permit, sequence 10
Match clauses:
ip address (access-lists): acl-router
Set clauses:
ip next-hop 172.16.0.1
Policy routing matches: 0 packets, 0 bytes
route-map rm-select-gw, permit, sequence 20
Match clauses:
ip address (access-lists): acl-isa
Set clauses:
ip next-hop 172.16.0.2
Policy routing matches: 0 packets, 0 bytes
route-map rm-select-gw, permit, sequence 30
Match clauses:
ip address (access-lists): acl-linux
Set clauses:
ip next-hop 172.16.0.3
Policy routing matches: 0 packets, 0 bytes
第三步:應用定義的路由策略到每一個SVI,例如:
cj-3560G#sh run int vlan1
interface Vlan1
ip address 172.16.0.254 255.255.255.0
ip policy route-map rm-select-gw
end
巧用不連續子網掩碼解決非常規問題