通配符掩码不是子网掩码
三厂 ACL 都使用通配符掩码而不是子网掩码。规则是位级比较:通配符中为 0 的位要求地址必须匹配,为 1 的位表示忽略。对常见的连续掩码来说,通配符恰好等于子网掩码按位取反,例如 /24 对应 0.0.0.255。把 0.0.0.255 写成 255.255.255.0 会让匹配范围彻底错乱,是 ACL 排障里最典型的低级错误。
基本信息
| 适用平台 | 华为 VRP、思科 IOS、H3C Comware 的 ACL 与路由策略 |
|---|---|
| 换算关系 | 通配符等于 255.255.255.255 减去子网掩码(仅连续掩码成立) |
| 单位主机写法 | 华为与 H3C 写地址加 0,思科写 host 加地址 |
| 任意地址写法 | 思科写 any,华为与 H3C 可写 source any 或省略 |
典型使用场景
- 写 ACL 规则时确定要匹配的地址范围
- 核对历史配置,确认现有规则覆盖的网段是否符合规划
- 把思科配置迁移到华为或 H3C 设备时逐条换算
- 排查规则不命中问题,反推通配符是否写错
- 配置路由策略的匹配条件,筛选特定网段的明细路由
常用掩码与通配符对照
| 掩码 | 通配符 | 能匹配的范围 |
|---|---|---|
| 255.255.255.0 即 /24 | 0.0.0.255 | 整个 C 类网段内的全部地址 |
| 255.255.255.240 即 /28 | 0.0.0.15 | 十六个地址的小网段 |
| 255.255.255.255 即 /32 | 0,华为与 H3C 可简写 | 单个主机 |
| 255.255.0.0 即 /16 | 0.0.255.255 | 整个 B 类网段 |
| 0.0.0.0 即 /0 | 255.255.255.255 或 any | 所有地址 |
华为 VRP
华为 VRP
acl number 2000
rule 5 permit source 192.168.0.0 0.0.255.255 # 匹配 192.168.0.0/16
rule 10 permit source 192.168.1.10 0 # 单个主机写 0
rule 15 permit source 10.0.0.0 0.255.255.255 # 匹配 10.0.0.0/8
display acl 2000思科 IOS
思科 IOS
access-list 10 permit 192.168.0.0 0.0.255.255
access-list 10 permit host 192.168.1.10
access-list 10 permit any # 等价于 0.0.0.0 255.255.255.255
show ip access-lists 10H3C Comware
H3C Comware
acl basic 2000
rule 5 permit source 192.168.0.0 0.0.255.255
rule 10 permit source 192.168.1.10 0
rule 15 permit source any
<H3C> display acl 2000换算与核对方法
- 先确认掩码是否连续:只有连续子网掩码,通配符才等于掩码按位取反的写法的十进制结果
- 从掩码位数推通配符:位数越少的掩码对应越大的通配符,先数位再换算不容易错
- 写单位主机时不要照抄子网掩码,直接写地址加 0 或用 host 关键字
- 核对历史规则:把通配符换算回网段范围,与规划表逐条比对
- 遇到不命中问题先做数学验证,再去查规则顺序与引用关系
常见疑问
- 为什么通配符看起来像倒过来的掩码:因为它是按位比较的忽略标记,0 表示这一位必须一致、1 表示这一位忽略,语义与掩码正好互补
- 任意地址的两种写法怎么选:思科写 any 最直观,华为与 H3C 可省略或写 source any,迁配置时按目标平台改写
- 能不能用通配符匹配一批不连续的地址:可以,忽略位允许任意组合,但可读性差且容易误伤,建议拆成多条规则逐段匹配
- 源与目的能否同时用通配符:可以,两边各自独立换算,注意不要一边用掩码一边用通配符
- 能不能直接填子网掩码:三厂 ACL 都不接受掩码写法,填错会报错或匹配范围出错
- 换算完怎么复核:把通配符还原成地址范围与规划表逐条比对,再用测试来源验证是否命中
通配符不等于掩码取反这一说法的适用边界:只有连续掩码时才成立。通配符可以是不连续的位组合,用来匹配一批不具备连续网段特征的地址,这种写法威力大但也极易误伤,非必要不用。
三厂写法一致的部分值得记牢:0.0.0.255 这类通配符在华为、思科、H3C 上含义完全相同,只有单位主机与任意地址的简写方式有区别,迁移时只需调整这两处的写法。