符号速查
AS_PATH 正则与普通字符串处理的差别在于边界:AS 号之间以及路径两端都存在隐式分隔符,用下划线表示。掌握 ^、$、_ 与重复符号的含义,才能把「起源是某 AS」和「经过某 AS」这两类判断写准确,这也是路径过滤写错的主要原因。
基本信息
| 匹配对象 | AS_PATH 字符串,AS 号之间由分隔符连接 |
|---|---|
| 边界符 | _ 匹配 AS 号边界(空格、逗号、括号与首尾) |
| 锚点 | ^ 路径开头,$ 路径结尾 |
| 重复 | * 零次以上、+ 一次以上、? 零或一次 |
| 字符集 | [] 表示可选字符范围,如 [1-9] |
| 应用 | ip as-path access-list 定义后由 filter-list 挂到邻居 |
符号与示例
| 符号 | 含义 | 示例 |
|---|---|---|
| ^ | 路径开头 | ^65002 以 65002 开头 |
| $ | 路径结尾 | 65002$ 起源 AS 为 65002 |
| _ | AS 号边界(空格/逗号/括号等) | _65002_ 路径任意位置出现 65002 |
| . | 任意单字符 | 6500. 匹配 65000-65009 |
| * + ? | 0 次以上 / 1 次以上 / 0 或 1 次 | 64+ 连续多个 64 |
| [] | 字符集 | ^6500[1-9] 覆盖 65001-65009 |
| | | 或 | (65002|65003)$ 两个起源之一 |
| ^$ | 空路径 | 本 AS 自己起源的路由 |
组合示例
组合示例
ip as-path access-list 1 permit ^65002$ # 起源正是 65002
ip as-path access-list 1 permit ^65002_ # 从 65002 直接传来
ip as-path access-list 1 permit _65002_ # 路径中任意位置经过 65002
ip as-path access-list 1 permit ^6500[1-9]_ # 起源在 65001-65009 区间
ip as-path access-list 1 deny .* # 兜底拒绝
!
show ip bgp regexp _65002_ # 直接按正则筛选 BGP 表验证写复杂正则前先用 show ip bgp regexp <正则> 在不改配置的情况下验证命中的路由集合,比改完再看影响面安全得多。
不同实现的语法细节略有差别:大括号与问号的转义方式在部分平台上要求额外处理,跨厂商迁移策略时逐条验证。
先验证再上线
先验证再上线
show ip bgp regexp ^65002$ # 不改变配置,直接筛选命中的路由
show ip bgp regexp _65002_ # 核对经过该 AS 的路由集合
show ip bgp filter-list 10 # 查看已挂载列表的命中结果
# 确认集合符合预期后,再把正则应到 filter-list 上易混淆的写法对照
| 写法 | 匹配含义 | 注意点 |
|---|---|---|
| ^65002$ | 起源 AS 恰好为 65002 | 只匹配本 AS 起源且无中转的路由 |
| ^65002_ | 路径以 65002 开头 | 对端直连发来的路由 |
| _65002 | 路径以 65002 结尾 | 起源为 65002,但可能经过其他 AS 传递 |
| 65002 | 任意位置出现该数字串 | 会命中 650020 这类更长编号 |
| ^$ | 空路径 | 本机起源的路由 |
核对命中集合时建议同时用 show ip bgp regexp 与 show ip bgp filter-list 两条命令:前者看正则本身的语义,后者看它挂到邻居后的实际效果。