BGP 路由控制:正则表达式,AS_Path Filter , Community Filter
一:AS_Path Filter(正则表达式对路由条目的匹配)
1,正则表达式
!-----什么是正则表达式:正则表达式是按照一定的模板来匹配字符串的公式,由普通字符(如字符 a 到 z )和特殊字符组成。
@-----普通字符:匹配的对象是普通字符本身。
1 包括所有的大写和小写字母、数字、标点符号以及一些特殊符号。
2 例如: a 匹配 abc 中的 a , 10 匹配 10.113.25.155 中的 10 , @ 匹配 xxx@xxx.com 中的 @ 。
#----特殊字符(有限的规定好了的就那么几个):配合普通字符匹配复杂或特殊的字符串组合。
1 位于普通字符之前或之后用来限制或扩充普通字符的独立控制字符或占位符。
2 用来描述它前面的字符的重复使用方式。
3 限定一个完整的范围。
%---特殊字符举例
1 . 匹配任意单个的字符,包括空格.(识别点:任意的单个字符,只要是占有一位的符号都可以匹配,特殊字符自己都可以) 0.0 匹配 0x0 、 020、0 2
2 ^ 匹配行首的位置,即一个字符串的开始 (识别点:一个字符串的第一个字符) ^ 10(10整体) 匹配 10.1.1.1(该ip地址就是一个字符串,视为整体) ,不匹配 20.1.1.1
3 $ 匹配行尾的位置,即一个字符串的结束 (识别点:一个字符串的最后一个字符) 1$ 匹配 10.1.1.1(该ip地址就是一个字符串,视为整体) ,不匹配 10.1.1.2
4 _下划线,匹配任意的一个分隔符(识别点:注意是匹配分隔符,数字一般都不是分隔符)
匹配一个逗号( , )、左花括号( { )、右花括号( } )、左圆括号、右圆括号
匹配输入字符串的开始位置(同 ^ )
匹配输入字符串的结束位置(同 $ ) _10 匹配(10 、[10 、空格10等
匹配一个空格 10_匹配 10)、10}、10 空格等
5 | 管道字符,逻辑或。如: x|y ,匹配 x 或 y 100|200 匹配 100 或者 200,都成立
6 \ 转义字符,用来将下一个字符(特殊字符或普通字符)标记为普通字符 \* 匹配 *,想将特殊字符变为特殊普通字符来使用
7 *匹配前面的子正则表达式 0 次或多次 (什么是子正则表达式:若是10*,则对应的子正则表达式为0) 10* 匹配1(一次都不匹配)、10 (匹配一次)、100(二次) 、1000(三次) 、... (多次) (10)* 匹配空、10、1010、101010...
8 + 匹配前面的子正则表达式1次或多次 10+ 匹配10、100、1000、... (10)+(将10看为整体) 匹配10(一次整体)、1010(二次整体)、101010... (多次整体)
9 ? 匹配前面的子正则表达式 0次或1次 10?匹配1(匹配0次的情况)或10 (匹配1次的情况) (10)?匹配空或10
10 [xyz] 匹配正则表达式中包含的任意一个字符 [123] 匹配255中的2
11 [^xyz] 匹配正则表达式中未包含的字符 [^123]匹配123之外的任何字符,如:100 987 4556
12 [a-z) 匹配正则表达式指定范围内的任意字符 [0-9] 匹配o到9之间的所有数字
13 [^a-z] 匹配正则表达式指定范围外的任意字符 [^0-9] 匹配所有非数字字符(即匹配到9之外的任何字符)
14,思考参考题
2,AS_Path Filter
!-----作用:专门对BGP的AS号来进行匹配的,可将BGP的AS看作为一个字符串,来使用正则表达式对AS号进行匹配。如:100 200 300 这个字符串
(专门解释:AS_Path Filter 是将 BGP 中的 AS_Path 属性作为匹配条件的过滤器,利用 BGP 路由携带的AS_Path 列表对路由进行过滤。 在不希望接收某些 AS 的路由时,可以利用 AS_Path Filter 对携带这些 AS 号的路由进行过滤,从而实现拒绝某些路由。)
@----使用正则表达式的风险:不好将一个正则表达式的所有匹配情况都考虑完整。当网络拓扑发生变化时,所配置正则表达式可能匹配到其他的刚加入的或者已经加入的AS号了。一般三个以上就很危险了。哪怕是对着AS号照抄,都会有一些没有考虑完整的AS号被误匹配到的情况。
#----AS_Path Filter的相关命令:
1 [AR1]ip as-path-filter iaa-a permit (正则表达式).* //创建一个叫iaa-a的as-path-filter来对路由的AS号进行匹配,目前的动作为允许,匹配的路由是any。注意: AS_Path Filter 的默认行为是 deny 所有。
2 [AR1-bgp]peer 12.1.1.2 as-path-filter iaa-a export //在对12.1.1.2邻居发送路由时,对发送的流量进行iaa-a的as-path-filter的AS的过滤对应路由是否发送出去。
3 [AR1-route-policy]if-match as-path-filter iaa //在router-poilcy里面使用if-macth匹配具有AS的属性的路由条目。之后在使用appylxxx
4 [AR1-route-policy]apply as-path 5 34 65000 additive //匹配对应的路由后,进行AS属性的修改
5 <AR2>dis bgp routing-table regular-expression ?(正则表达式) //查看左侧配置正则表达式所匹配到的本地BGP表中的哪些路由信息。
6 [AR2-bgp] peer 12.1.1.1 route-policy iaa-com import //对发送路由条目时,进行一些对应属性的修改.
¥------上诉命令的课件展示
4,使用正则表达式匹配 AS_Path的实验
实验配置:
1,前提配置:ebgp邻居配置通,ar1配置三个loop接口,将其宣告到,as100里面
2,在ar1上配置acl 对对应loop接口ip地址流量的抓取
#
acl number 2000
rule 5 permit source 1.1.1.1 0
#
acl number 2001
rule 5 permit source 1.1.1.2 0
#
acl number 2002
rule 5 permit source 1.1.1.3 0
#
3,在ar1配置对应的路由策略
[AR1-route-policy]dis th
#
route-policy iaa permit node 10
if-match acl 2000
apply as-path 3 5 24 700 additive
#
route-policy iaa permit node 20
if-match acl 2001
apply as-path 5 34 65000 additive
#
route-policy iaa permit node 30
if-match acl 2002
apply as-path 1 2 3 additive
#
return
3,在ar1的出接口调用iaa策略
[AR1-bgp]peer 12.1.1.2 route-policy iaa export //将iaa策略调用在对12.1.1.2邻居发送路由时的出接口来进行过滤,(注意,是在
bgp的AS下调用的)
4,在ar2上查看ar1的iaa策略调用的结果
[AR2]dis bgp routing-table //查看bgp的路由表
Network NextHop MED LocPrf PrefVal Path/Ogn
*> 1.1.1.1/32 12.1.1.1 0 0 1000 3 5 2
4 700i
*> 1.1.1.2/32 12.1.1.1 0 0 1000 5 34
65000i
*> 1.1.1.3/32 12.1.1.1 0 0 1000 1 2 3
i
结果:iaa策略调用成功
5,在ar2上创建一个as-path-filter iaa-a
[AR2]ip as-path-filter iaa-a permit _3_ //对路由的AS号进行匹配,为匹配any
TEXT A regular-expression of 1 to 255 characters for matching AS_Path
attributes
6,在bgp2000下面调用配置的iaa-a的as-path-filter
[AR2-bgp]peer 12.1.1.1 as-path-filter iaa-a import //在对12.1.1.1邻居发送来路由,对流量进行iaa-a的as-path-filter的AS的过滤对应路由
是否学习加载到全局路由表上
7,ar2的bgp路由表的学习情况
[AR2]dis bgp routing-table
Network NextHop MED LocPrf PrefVal Path/Ogn
*> 1.1.1.1/32 12.1.1.1 0 0 1000 3 5 2
4 700i
*> 1.1.1.3/32 12.1.1.1 0 0 1000 1 2 3
i
结果:只有被as-path-filter iaa-a 匹配到且允许的路才会bpg加表
8,使用正则表达式匹配bgp路由表里面所存在的路由的AS号,有的话,看是否可自己想的一样,避免翻车。
<AR2>dis bgp routing-table regular-expression ?(正则表达式) //查看左侧配置正则表达式匹配的本地BGP表中的哪些路由
TEXT A regular-expression of 1 to 255 characters for matching AS_Path
attributes
<AR2>dis bgp routing-table regular-expression 5 //匹配所有带5的bgp路由
Network NextHop MED LocPrf PrefVal Path/Ogn
*> 1.1.1.1/32 12.1.1.1 0 0 1000 3 5 2
4 700i
*> 1.1.1.2/32 12.1.1.1 0 0 1000 5 34
65000i
<AR2>dis bgp routing-table regular-expression _3_ //_3_匹配AS号唯一的AS为3的路由
Network Ne xtHop MED LocPrf PrefVal Path/Ogn
*> 1.1.1.1/32 12.1.1.1 0 0 1000 3 5 2
4 700i
*> 1.1.1.3/32 12.1.1.1 0 0 1000 1 2 3
i
二:Community Filter
1,公认 Community 属性
!-----Internet:设备在收到具有此属性的路由后,可以向任何 BGP 对等体发送该路由。缺省情况下,所有的路由都属于Internet 团体。
@-----No Advertise:设备收到具有此属性的路由后,将不向任何 BGP 对等体发送该路由
#------No Export:设备收到具有此属性的路由后,将不向 AS 外发送该路由。
¥------No Export Subconfed:设备收到具有此属性的路由后,将不向 AS 外发送该路由。如果使用了联盟也不向联盟内其他子 AS 发布此路由。
2,自定义Community 属性
!-----十进制整数格式
@-----AA : NN 格式,其中 AA 表示 AS 号, NN 是自定义的编号
3,igp的tag和bgp的Community属性(tag)的区别:
!----igp的tag只可以携带一个tag标签
@----bgp的Community 属性可以一次携带多个tag标签。如:100.1.1.1 100:1 200:1 300:1。Community 属性可以限制路由的传播范围
4,ip community-filter 1命令的使用说明(团体属性过滤器有两种类型:)
!-----基本 Community Filter :匹配团体号或公认 Community 属性
基本 Community Filter 举例
ip community-filter 1 permit 100:1 200:1 300:1 //匹配同时携带Community值[100:1,200:1,300:1]的路由。(多个Community值之间是"与”的关系。)
ip community-filter 1 permit 100:1 //匹配携带100:1的路由。有100:1就可匹配上。(模糊匹配)
[AR2-route-policy]if-match community-filter 1 whole-match // 只有唯一携带100:1的路由条目才可以取匹配上。(精确匹配)
ip community-filter 1 permit 100:1
ip community-filter 1 permit 200:1 300:1//匹配携带Community值[100:1]或[200:1,300:1]的路由。(多组Community值之间是"或”的关系。)
@-----高级 Community Filter :使用正则表达式匹配团体号。
高级Community Filter举例:
ip community-filter 100 permit ^10 //匹配携带以10开头的Community值的路由。
5,ip community-filter 相关的配置命令(创建了Community Filter 1 等价于acl)
[AR1]ip community-filter ?
INTEGER<1-99> Community-filter number (basic)
INTEGER<100-199> Community-filter number (advanced)
advanced Advanced community-filter
basic Basic community-filter
!------创建基本的 Community Filter
[AR2]ip community-filter 1 permit ? //可以匹配的 community属性有哪些
INTEGER<0-4294967295> Specify community number //自定义的Community 属性里的,十进制整数格式
STRING<3-11> Specify aa<0-65535>:nn<0-65535> //自定义的Community 属性里的,AA : NN 格式
internet
no-advertise
no-export
no-export-subconfed
<cr>
[AR2]ip community-filter 1 permit 100:1 200:1
@-----创建高级的 Community Filter
[AR1]ip community-filter 100(100为高级的序列号) permit ? //可以匹配的 community属性有哪些
TEXT A regular-expression of 1 to 255 characters for matching community
attributes //高级的只可以输入正则表达式
[AR1]ip community-filter 100 permit ^100
#-----community-filter相关的其他命令:
[AR2-route-policy] if-match community-filter 1 //匹配对应community值得路由来进行一些策略的修改
[AR2-route-policy]apply community 100:1 200:1 //可以使用acl或者前缀列表等,匹配的对应的路由条目,来进行community 属性的赋值或修改。
[AR2-route-policy]if-match community-filter 1 whole-match // 只有唯一携带100:1的路由条目才可以取匹配上。
[AR2-bgp] peer 12.1.1.1 route-policy iaa-com import //对发送路由条目时,进行一些修改,只可以使用router -poilcy来进行的哦。
[AR2-bgp] peer 12.1.1.2 advertise-community //配置允许通告Community 属性,因为Community 属性的通告功能默认是关闭的。
5,Community 属性的实验配置
AR1的Community 属性的配置
route-policy iaa permit node 10
if-match acl 2000
apply community 100:1
#
route-policy iaa permit node 20
if-match acl 2001
apply community 100:1 200:1
#
route-policy iaa permit node 30
if-match acl 2002
apply community 300:1
#
route-policy iaa permit node 100
bgp 1000
peer 12.1.1.2 route-policy iaa export //老规矩,调用策略,打上Community 属性
peer 12.1.1.2 advertise-community //配置允许通告Community 属性,因为Community 属性的通告功能默认时关闭的。
AR2上的查看Community 属性的结果(以下以network的1.1.1.1的路由来分析,其他的都是一样的 )
基于AR2的peer发的路由进行 community-filter 的限制 1 。
[AR2] ip community-filter 1 permit 100:1 200:1 //匹配同时携带Community值100:1 200:1的路由
[AR2-route-policy]dis th
#
route-policy iaa-com permit node 10
if-match community-filter 1
apply cost 250
#
route-policy iaa-com permit node 120
#
[AR2-bgp]peer 12.1.1.1 route-policy iaa-com import
[AR2-bgp]dis bgp routing-table
结果2:匹配成功。
基于AR2的peer发的路由进行 community-filter 的限制 2 。
ip community-filter 1 permit 100:1 //匹配携带100:1的路由。有100:1就可匹配上。
[AR2-route-policy]if-match community-filter 1
[AR2-bgp]dis bgp routing-table
[AR2-route-policy]if-match community-filter 1 whole-match // 只有唯一携带100:1的路由条目才可以取匹配上。
[AR2-bgp]dis bgp routing-table
![](https://img2023.cnblogs.com/blog/3122122/202311/3122122-20231109094333400-902901463.png)