BGP高级特性之正则表达式
一、概述
AS_Path属性实际上可以看作是一个包含空格的字符串,所以可以通过正则表达式来 进行匹配。正则表达式就是用一个“字符串”来描述一个特征,然后去验证另一个“字符 串”是否符合这个特征。BGP的AS_Path过滤器主要是定义AS_Path正则表达式,然后去匹 配BGP路由的AS_Path属性信息,从而实现对BGP路由信息的过滤。
正则表达式描述了一种字符串匹配的模式,由普通字符(例如字符a~z)和特殊字符 (或称“元字符”)组成。正则表达式作为一个模板,将某个字符模式与所搜索的字符串进 行匹配。正则表达式一般具有以下功能。
① 检查字符串中符合某个规则的子字符串,并可以获取该子字符串。
② 根据匹配规则对字符串进行替换操作。
二、正则表达式的组成
正则表达式由普通字符和特殊字符组成。
① 普通字符匹配的对象是普通字符本身。包括所有的大写和小写字母、数字、标点 符号以及一些特殊符号。例如a匹配abc中的a,202匹配202.113.25.155中的202,@匹配 xxx@xxx.com中的@。
② 特殊字符配合普通字符匹配复杂或特殊的字符串组合。表15-7是对特殊字符及其 语法意义的使用描述。
具体的正则表达式特殊字符可见下表
下面是一些常用的AS路径正则表达式。
① ^$:表示匹配的字符串为空,即AS_PATH为空,表示只匹配本地路由。
② .* :表示匹配任意字符串,即AS_PATH为任意,表示匹配所有路由。
③ ^100:表示匹配的字符串开始为100,即AS_PATH最左边AS前3位(最后一个 AS)为100,后面可能还有AS,表示匹配由AS100发来的所有路由,包括从AS100始发和 由AS100转发的路由。
如果使用第三条表达式去匹配^200路由的话,则以下所有的路由都可以匹配到,因为AR2在传递给AR1的时候,AS_Path属性最开始的都为200。
④ ^100_:表示匹配的字符串开始为100,后面为符号,即AS_PATH最左边AS(最后 一个AS)为100,后面一定还有其他AS,表示匹配由AS100转发(路径中至少有两个 AS)的路由。比较前一个表达式^100可以看出,“_”可以用来限制仅匹配由某AS转发的路 由。
如果使用第四条表达式匹配200的路由的话,只能够匹配到下面两条路由,因为第一条只有一个AS
⑤ _100$:表示匹配的字符串最后为100,即AS_PATH最右边AS(起始AS)为100, 表示匹配AS100始发的路由。
如果使用第五条表达式去匹配_400$路由的话,只能够匹配到AS 200 300 400这条路由,因为只有这条在最后说明这条路由是由400产生的。
⑥ _100_:表示匹配的字符串中间有100,即AS_PATH中间有AS100,表示匹配经过 AS100,且在AS路径中,AS100既不是第一个AS,也不是最后一个AS的路由。
如果使用第六条表达式匹配200的路由的话,以下所有的路由都可以被匹配,如果匹配300的路由的话,只有下面两条被匹配。
示例:
^100_
起始符为 100 代表邻居的 AS 为 100. 后面跟着下划线,代表空格或者结束符 , 因此 也可以表示 ^100$ 。所以可以匹配出所有来自于邻居的 AS 为 100 的路由,或者只有的为 100 的路由。如 AS_PATH 为 (100200) 、 (100 200 300) 、 (100) 。
^100_.
与示例 1 类似,但是下划线后跟着小数点 , 这个点代表羊个字符或者空格, 仅能匹配 邻居的为 100 的路由 , 如 AS_PATH 为 (100200) 、 (100 200 300) 等,但走不能匹配出 AS PATH 中只有 100 的 AS 号 。
^100.
100 后面跟着小数点,则能够匹配前面三位为 100 的 AS 号 , 或者邻居为 100 的 AS 号 , 如:的_PATH 为 (100200) 、 (100 200 300) 等或者 (100 1)、 (10012) 等。
^100
与示例 3 不同的是 . 100 后面不合小数点 , 则能够匹配出所有前三位为 100 的 AS 号 , 范围更广,知的 PATH 为 (100 200) 、 (100 200 300) 等,或者 (100 1)、 (10012 ),也 可以匹配出邻居为 100 的的号。
100$
$代表结束符 , 这条匹配所有以 100 结束的 AS 号,因此匹配的是所有始发 AS 号为 100 的路由.如 AS PATH 为 (200 100) 、 (200 300 100) 等。
^$
一个起始符 紧跟着 一个结束符 ,代表的 PATH 列表为空 ,用来匹配所有本的产生的 路由,因为本的内传递的路由都不会携带 AS 号。
.*
^[0-9]+$
^代表起始,+代表前面的字符出现1次或多次$代表结束,所以这个表达式代表匹配所有始发AS传递的路由
代表所有路由,类似 ACL 中的 any 作用,任意的 AS_PATH 列表。
【示例1】创建序号为1的AS路径过滤器,允许AS路径中以10开始的路由通过。
<Huawei> system-view
[Huawei] ip as-path-filter 1 permit ^10
【示例2】创建序号为2的AS路径过滤器,允许AS路径中包含20的路由通过。
<Huawei> system-view
[Huawei] ip as-path-filter 2 permit [20]
【示例3】创建序号为3的AS路径过滤器,不允许AS路径中包含30的路由通过。
<Huawei> system-view
[Huawei] ip as-path-filter 3 deny [30]
[Huawei] ip as-path-filter 3 permit .*
以上就是本章的全部内容了,感谢大家的浏览观看!文章若有错误或疑问可联系博主删除更改。