AS_PATH 正则过滤的基本语法
AS_PATH 过滤器用正则表达式匹配 AS_PATH 字符串。最需要记住的是下划线 _:它代表分隔符,可匹配空格、逗号、大括号、行首与行尾。因此 ^65002_ 表示「路径以 65002 开头」,65002$ 表示「以 65002 结尾」,而 ^65002$ 表示整条路径只有 65002,也就是该前缀由 65002 直接始发。
基本信息
| 配置方式 | Cisco 用 ip as-path access-list,华为用 ip as-path-filter |
|---|---|
| 引用位置 | neighbor x filter-list <号> in|out 或 route-map 的 match as-path |
| 常用符号 | _ 表示分隔符,^ 行首,$ 行尾,[] 字符集合,| 或 |
| 华为引用 | peer x as-path-filter <号> import|export |
| 预验证 | show ip bgp regexp <表达式> 可直接看匹配到哪些路由 |
典型使用场景
- 只接收某客户始发的路由:以客户 AS 号做起源匹配
- 拒绝带私用 AS 号的路由,避免内部编号泄漏到公网
- 拒绝异常长路径,抑制路径伪造与路由震荡扩散
- 对等互联限定来源:只允许对端及其客户锥内 AS 出现
- 出方向限制:不向对端发送去往第三方对等的路由
模板集合
模板集合
# 1) 只收 AS 65002 始发的路由
ip as-path access-list 40 permit ^65002$
ip as-path access-list 40 deny .*
#
# 2) 拒绝 16 位私用 AS(64512-65534)
ip as-path access-list 30 deny _6451[2-9]_
ip as-path access-list 30 deny _645[2-9][0-9]_
ip as-path access-list 30 deny _64[6-9][0-9][0-9]_
ip as-path access-list 30 deny _65[0-3][0-9][0-9]_
ip as-path access-list 30 deny _654[0-9][0-9]_
ip as-path access-list 30 deny _655[0-2][0-9]_
ip as-path access-list 30 deny _6553[0-4]_
ip as-path access-list 30 permit .*
#
# 3) 拒绝超过 10 跳的异常长路径(按实际网络放宽)
ip as-path access-list 20 deny .{20,}
ip as-path access-list 20 permit .*表达式含义速查
| 表达式 | 匹配的路径 | 典型用途 |
|---|---|---|
| ^65002$ | 只有 65002,即对端直接始发 | 只收对端自有前缀 |
| ^65002_ | 以 65002 开头,长度不限 | 接收该 AS 及其下游客户的路由 |
| _65002$ | 以 65002 结尾 | 定向追溯起源为 65002 的多跳路由 |
| _(65002|65003)_ | 路径中出现其中之一 | 多个来源统一放行 |
| _6451[2-9]_ | 出现私用 AS 号 | 净化入向路由 |
上线前先验证表达式
上线前先验证表达式
# 先在设备上看表达式命中的真实路由,避免误伤
show ip bgp regexp ^65002$
show ip bgp regexp _6451[2-9]_
#
# 应用到邻居后核对收发表变化
show ip bgp neighbors 10.0.0.2 routes
show ip bgp summary正则写法在不同厂商平台存在差异,例如字符集合与量词的支持程度、括号内的或运算写法。跨厂商部署前先在目标设备上执行 show ip bgp regexp 验证一遍,不要直接照搬另一家的表达式。