BGP 里的 distribute-list
distribute-list 是传统的路由过滤工具,在 BGP 场景下主要用入向:邻居学来的前缀先过一层列表,不在列表里的不进本地 BGP 表。被丢掉的条目不仅本机没有,也不会再对外发布,属于「源头截断」型过滤。它配置简单、生效直观,缺点是表达能力有限,前缀集合写复杂后不如 prefix-list 与 route-map 清晰。
基本信息
| 入向语法 | neighbor <ip> distribute-list <acl|prefix-list> in |
|---|---|
| 出向支持 | 多数平台对 BGP 出向支持有限或不支持,优先改用 prefix-list / route-map |
| 列表类型 | 标准 ACL、扩展 ACL、prefix-list 视平台而定 |
| 生效范围 | 按邻居生效,同一列表可被多个邻居引用 |
| 平台差异 | IOS 支持 neighbor distribute-list;FRR 等实现语法相近但能力有差别 |
典型使用场景
- 入向粗过滤:先挡掉明显不该出现的私有段或保留地址,作为第一道护栏
- 临时应急:对端误发大量前缀时快速收敛接收范围
- 教学与过渡环境:用简单列表替代完整策略,降低理解成本
- 与 route-map 配合:distribute-list 做数量与范围粗筛,route-map 做属性与优先级
- 老设备兼容:不支持某些高级过滤语法时用 ACL 实现基本过滤
配置与核对
配置与核对
# 仅接收 10.0.0.0/8 范围内的前缀
access-list 10 permit 10.0.0.0 0.255.255.255
router bgp 65001
neighbor 10.0.0.2 distribute-list 10 in
# 用 prefix-list 更直观
ip prefix-list PL-IN permit 10.0.0.0/8 le 24
router bgp 65001
neighbor 10.0.0.2 distribute-list prefix-list PL-IN in
# 核对:对比过滤前后从该邻居收到的前缀数
show ip bgp neighbors 10.0.0.2 | include prefix|accepted过滤工具对比
| 工具 | 表达能力 | 适用场景 |
|---|---|---|
| 标准 ACL | 按网络号与通配位匹配,掩码不直观 | 粗粒度范围过滤 |
| 扩展 ACL | 可同时匹配网络与掩码 | 需要控制掩码长度但不便改动配置时 |
| prefix-list | 按前缀与掩码长度区间精确表达 | 精确前缀集合,推荐首选 |
| route-map | 可组合匹配条件并改属性 | 需要同时改 LOCAL_PREF、MED、社区时 |
过滤生效后记得做一次软刷新或按需复位,已学的路由不会自动重新评估;核对时用收到前缀数与本地表条目数交叉验证。