ip-prefix(IP前缀列表)

1. 核心思想

ip-prefix 是一个专门用来"匹配路由"的筛子,它能同时检查"网络号"和"掩码长度"两个要素。

设计初衷:ACL只能匹配IP地址,管不了掩码长度,导致路由过滤经常出错;ip-prefix 把掩码长度也作为匹配条件,解决了这个痛点。

生活类比:你要从一堆快递中挑出"所有寄往北京市朝阳区、并且箱子是中等尺寸(高20-30cm)的"。

  • ACL:只看地址"北京市朝阳区",不看箱子尺寸。

  • ip-prefix:既看地址"北京市朝阳区",又看箱子尺寸"20-30cm"。


2. 底层原理 & 设计逻辑

2.1 为什么ACL做不到精确匹配路由?

路由条目包含两个关键信息:目的网络 (如192.168.1.0)和掩码长度 (如24)。

ACL在匹配时,只看目的网络的前多少位是否符合,完全不关心掩码长度

举个例子

  • 路由A:192.168.1.0/24

  • 路由B:192.168.1.0/16

你用ACL:rule permit source 192.168.1.0 0.0.0.255(通配符表示前24位固定)。

结果:路由A和路由B的前24位都是192.168.1.0,所以两条都被匹配。你无法用ACL说"只要掩码长度=24的"。

这就是现网故障的根源:工程师想放行/24,却因为ACL的局限,把/16也放行了,导致路由器学到大网段,流量被错误吸引。

2.2 ip-prefix 如何解决?

ip-prefix 的每条规则有三个核心参数:

  • 网络号 (如 192.168.1.0

  • 掩码长度 (如 24)------ 这个就是"精确匹配掩码"

  • 掩码范围 (可选,如 greater-equal 16 less-equal 24)------ 允许一个区间

匹配规则:网络号匹配 + 掩码长度在指定范围内,才算命中。

所以:

bash 复制代码
ip ip-prefix TEST permit 192.168.1.0 24
  • 路由A(/24):掩码长度=24 → 匹配 → 允许

  • 路由B(/16):掩码长度=16 ≠ 24 → 不匹配 → 拒绝

一句话:ip-prefix 把"掩码长度"变成了可比较的条件。

2.3 掩码范围的写法(考试重点)

写法 含义
permit 10.0.0.0 8 掩码长度必须等于8(只匹配/8)
permit 10.0.0.0 8 ge 16 掩码长度16~32(ge 16表示最小16,le不写则默认32)
permit 10.0.0.0 8 le 24 掩码长度8~24(ge不写则默认等于前面的8)
permit 10.0.0.0 8 ge 16 le 24 掩码长度16~24

关键限制 :必须满足 前面的掩码长度 <= ge <= le <= 32

例如 8 ge 16 le 24 是合法的;8 ge 4 会报错(因为4<8)。

注意 :前面的网络号 10.0.0.0 8 表示"只考虑属于10.0.0.0/8这个大网内的路由",然后再从里面挑出掩码长度在指定范围的。不属于10.0.0.0/8的(如192.168.1.0/24)根本不进入比较。

2.4 多条规则顺序(隐含拒绝)

ip-prefix 可以有多个条目,每个有条目号(index,默认步长10)。按index从小到大匹配,一旦匹配就停止,不再往下看

如果所有条目都不匹配,结果就是 deny(隐含拒绝)。

这和ACL完全一样。不同的是,ip-prefix 没有"最后默认允许所有"的尾巴。


3. 深度辨析 & 常见误解

误解 真相
"ip-prefix 可以匹配数据包" 错。它只能匹配路由条目。过滤数据包用ACL。
"ip-prefix 匹配时,网络号必须完全一样" 不完全是。permit 10.0.0.0 8 可以匹配 10.1.0.0/16,因为 10.1.0.0 属于 10.0.0.0/8 内。网络号比较是按前面的掩码长度截取的。
"permit 0.0.0.0 0 只匹配默认路由" 对。掩码长度=0就是默认路由。
"permit 0.0.0.0 0 ge 0 le 32 会匹配所有路由" 对。因为网络号0.0.0.0与任何路由的与运算都得0,且掩码范围0-32包含所有。这是"匹配任意路由"的常用写法。
"ip-prefix 和 route-policy 是一回事" 错。ip-prefix 只能匹配,不能修改属性;route-policy 可以调用 ip-prefix 来做匹配,还能执行 apply 修改属性。

对比表:ACL vs ip-prefix vs route-policy(只保留最核心区别)

工具 匹配对象 能否控制掩码长度 能否修改路由属性
ACL 数据包 或 路由(但路由只看IP,不看掩码) 不能 不能
ip-prefix 路由(网络号+掩码长度) 不能
route-policy 路由(可调用ip-prefix等) 能(通过调用ip-prefix)

4. 基础安全风险 & 最简防护(基础期)

风险 场景 最简防护
误放私有路由 本应拒绝10.0.0.0/8,但ip-prefix写成了 permit 0.0.0.0 0 ge 0 le 32 明确写 deny 10.0.0.0 8 ge 8 le 32 放在前面
掩码范围过大 本想放行/24,却写了 ge 16 le 24,导致/16也被放行 严格限定范围:ge 24 le 24 或直接不写ge/le
隐含拒绝导致断网 忘记写permit条目,所有路由被拒绝 配置后先用 display ip ip-prefix 检查,必要时加一条 permit 0.0.0.0 0 ge 0 le 32 兜底(谨慎)
相关推荐
qq_589568105 小时前
springbootweb案例,出现访问 http://localhost:8080/list 一直处于浏览器运转阶段
java·网络协议·http·list·springboot
暴力求解5 小时前
Linux---线程基础
linux·运维·服务器
JAVA面经实录9176 小时前
计算机基础(完整版·超详细可背诵)
java·linux·数据结构·算法
晚风_END6 小时前
Linux|操作系统|最新版openzfs编译记录
linux·运维·服务器·数据库·spring·中间件·个人开发
GanGanGanGan_6 小时前
Rocky Linux 9 + XFCE 编译安装 fcitx5 + Rime 教程
linux·centos
代码中介商6 小时前
Linux TCP 网络编程完全指南:从三次握手到高并发服务器
服务器·网络·tcp/ip
咖喱o6 小时前
QinQ/VLAN Stacking
linux·运维·服务器·网络
xiaoye-duck6 小时前
《Linux系统编程》Linux指令 (二):从零开始理解Linux基础指令
linux
月白风清江有声7 小时前
安装mingw 版 cmake
linux
sduwcgg7 小时前
IQ-Learn 在 RTX 3090 服务器上的环境配置与踩坑记录
运维·服务器