通配符是什么
通配符掩码(反掩码、wildcard mask)是子网掩码按位取反的结果:255.255.255.255 减去掩码。它的语义与掩码相反——0 表示这一位必须精确匹配,1 表示忽略这一位。因此 /24 的通配符是 0.0.0.255,含义是前三段必须相同、最后一段随意。/26 对应 0.0.0.63,/27 对应 0.0.0.31。
为什么可以「不连续」
通配符是按位生效的,理论上允许不连续的位组合,例如只匹配所有偶数主机地址。这比子网掩码灵活,也更容易写错:一条不连续的 ACL 规则可能匹配到意料之外的地址。工程上除非明确知道要做什么,否则一律用连续取反得到的标准通配符,可读性与可维护性都更好。
基本信息
| 公式 | wildcard = 255.255.255.255 - 子网掩码 |
|---|---|
| 语义 | 0 = 必须匹配,1 = 忽略 |
| /24 | 0.0.0.255 |
| /26 | 0.0.0.63 |
| /12 | 0.15.255.255 |
| 主机关键字 | 等价 0.0.0.0,精确匹配单个 IP |
| 使用场景 | 思科/华为 ACL、OSPF network、EIGRP、ipset |
典型使用场景
- ACL 里放行或拒绝整个网段,用一条规则覆盖 256 个地址
- OSPF 的 network 语句要求写通配符,用于圈定参与路由的接口范围
- EIGRP 与部分 BGP 配置中声明匹配条件
- Linux ipset 与 firewalld rich rule 里表达地址范围
- 考试题中把 CIDR 换算成通配符,或反过来判断规则覆盖范围
思科 IOS ACL 用法
思科 IOS ACL 用法
! 匹配 192.168.1.0/24 整个网段:前三段锁定,末段任意
access-list 10 permit 192.168.1.0 0.0.0.255
! 精确匹配单个主机
access-list 10 permit host 192.168.1.10
! 匹配任意来源(等价 any)
access-list 10 permit any 255.255.255.255比对掩码与通配符
比对掩码与通配符
# 快照式核对:掩码段值 + 通配符段值 恒等于 255
# /26: 255.255.255.192 ↔ 0.0.0.63 (192 + 63 = 255)
# /27: 255.255.255.224 ↔ 0.0.0.31 (224 + 31 = 255)
python -c "import ipaddress as ip; n=ip.ip_network('192.168.1.0/27'); print(n.netmask, n.hostmask)"
# 255.255.255.224 0.0.0.31常用前缀与通配符
| 前缀 | 子网掩码 | 通配符 | 匹配范围 |
|---|---|---|---|
| /16 | 255.255.0.0 | 0.0.255.255 | 一整段 /16 |
| /22 | 255.255.252.0 | 0.0.3.255 | 4 个 /24 |
| /23 | 255.255.254.0 | 0.0.1.255 | 2 个 /24 |
| /24 | 255.255.255.0 | 0.0.0.255 | 整个 /24 |
| /26 | 255.255.255.192 | 0.0.0.63 | 整个 /26 |
| /30 | 255.255.255.252 | 0.0.0.3 | 2 个可用地址 |
| /32 | 255.255.255.255 | 0.0.0.0 | 单个主机 |
在思科设备上,主机部分的通配符写 0.0.0.0 表示精确匹配,写 255.255.255.255 表示忽略全部位(即 any);这两个极值最容易写反,写反的后果是规则从「只匹配一台主机」变成「匹配所有地址」。
ACL 条目顺序自上而下匹配,一旦命中即停止。汇总范围写宽了会把不该放行的流量放进来,写窄了会误拦业务;变更前先在测试环境用 show access-lists 的命中计数验证实际匹配情况。