在BGP的过滤路由机制里可以使用route-map,distribute-list,这些机制都需要我们定义好需要过滤的路由,如果现在需要过滤某一个AS的所有路由,而该AS又传递了大量的路由,那么使用以上工具来逐条定义路由再进行过滤的方法操作就十分繁杂,并且不便于管理。
BGP针对于上述情况设计了专门的解决方案:as-path access-list,专门针对于as-path来进行过滤。而匹配AS号的工具就是正则表达式。
在计算机科学中,是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串。
^ 表示一个表达式的开始,如果不用这个字符,那么默认就没有开始的限制了。
R4(config)#ip as-path access-list 1 permit ^300
R4(config)#router bgp 400
R4(config-router)#neighbor 34.1.1.3 filter-list 1 in
表示只允许接收经过相邻直连AS为300的路由,其余的全部过滤掉。正则表达式中的开始,只是查看bgp路由as-path列表的第一个AS,而不是真正经过AS路径的第一个AS(实际是相反的,as-path是从右往左算的)
查看R4的bgp路由
$ 表示一个表达式的结束,如果不用这个字符,那么默认就没有结束的限制了。
R4(config)#ip as-path access-list 1 permit 100$
R4(config)#router bgp 400
R4(config-router)#neighbor 34.1.1.3 filter-list 1 in
表示允许接收起源AS为100的路由(根据上面的描述,正则表达式的开始与结束和as-path记录的开始与结束是相反的)
查看R4的bgp路由
? 表示匹配前面的一个字符出现一次或者是空(零次)。Cisco路由器上使用trcl+v再?来输入问号
R4(config)#ip as-path access-list 1 permit 10?$
R4(config)#router bgp 400
R4(config-router)#neighbor 34.1.1.3 filter-list 1 in
表示允许接收起源AS为1或者10(10?代表前一个字符0出现零次,即为1,或者一次,即为10)的路由
R1(config)#no router bgp 100
R1(config)#router bgp 1
R1(config-router)#network 1.1.1.1 mask 255.255.255.255
R1(config-router)#neighbor 12.1.1.2 remote-as 200
查看R4的bgp路由
将R1的AS改为10
R1(config)#no router bgp 100
R1(config)#router bgp 10
R1(config-router)#network 1.1.1.1 mask 255.255.255.255
R1(config-router)#neighbor 12.1.1.2 remote-as 200
查看R4的bgp路由
* 表示匹配前面的一个字符出现多次或者是空,注意,和?不同的是?只允许匹配出现一次或者是空。
R4(config)#ip as-path access-list 1 permit 10*$
R4(config)#router bgp 400
R4(config-router)#neighbor 34.1.1.3 filter-list 1 in
表示允许接收起源AS为1,10,100,1000,10000……等路由
现在将R1的AS改为1000
R1(config)#router bgp 1000
R1(config-router)#neighbor 12.1.1.2 remote-as 200
R1(config-router)#network 1.1.1.1 mask 255.255.255.255
查看R4的bgp路由
+ 表示匹配前面的一个字符出现一次或者多次,但是不能是零次,而*可以出现零次。
R4(config)#ip as-path access-list 1 permit 10*$
R4(config)#router bgp 400
R4(config-router)#neighbor 34.1.1.3 filter-list 1 in
表示允许接收起源AS为10,100,1000,10000……等路由
. 表示任意单个字符,包括空格
.* 就可以表示任意字符
R4(config)#ip as-path access-list 1 deny 100$
R4(config)#ip as-path access-list 1 permit .*
R4(config)#router bgp 400
R4(config-router)#neighbor 34.1.1.3 filter-list 1 in
表示接收除了起源AS为100以外的所有路由
_ 表示逗号,左大括号,右大括号,左小括号,右小括号
R4(config)#ip as-path access-list 1 permit ^300_200$
R4(config)#router bgp 400
R4(config-router)#neighbor 34.1.1.3 filter-list 1 in
表示只允许接收起源AS为200,直连相邻AS为300的路由
^300$ 表示只经过AS300,不包括其他任何AS
R4(config)#ip as-path access-list 1 permit ^300$
R4(config)#router bgp 400
R4(config-router)#neighbor 34.1.1.3 filter-list 1 in
R4#show ip bgp
^$ 表示本地始发的路由
R3(config)#ip as-path access-list 1 deny ^$
R3(config)#ip as-path access-list 1 permit .*
R3(config)#router bgp 300
R3(config-router)#neighbor 34.1.1.4 filter-list 1 out
表示拒绝AS300本地始发的路由,允许其余所有路由
[Aa] 表示匹配单个字符A或者a
R4(config)#ip as-path access-list 1 permit [23]00$
R4(config)#router bgp 400
R4(config-router)#neighbor 34.1.1.3 filter-list 1 in
表示只允许接收起源AS为200或300的路由
[1-36-9] 表示匹配单字符1、2、3、6、7、8、9中的任意一个
R4(config)#ip as-path access-list 1 permit [1-3]00$
R4(config)#router bgp 400
R4(config-router)#neighbor 34.1.1.3 filter-list 1 in
表示允许接收起源AS为100或200或300的路由
[^1-3] 中括号中的^符号表示反转字符的意思
R4(config)#ip as-path access-list 1 permit [^04-9]00
R4(config)#router bgp 400
R4(config-router)#neighbor 34.1.1.3 filter-list 1 in
表示允许接收经过除了AS0,AS400,AS500,AS600,AS700,AS800,AS900以外的所有路由
{1 2} 表示使用as-path 选项聚合路由,从as 1和as 2来的路由形成聚合
(65530) 表示与对等体形式联盟,该对等体在as 65530
BGP的前缀告警门限
作用就是当路由器接收到了设置的前缀上限的时候,那么就应该停止接收前缀,并且发出告警等一系列的动作,是让邻居down还是其他动作。
R1(config-router)#neighbor 12.1.1.2 maximum-prefix 1000 75 restart 1
表示接收邻居12.1.1.2的路由条目超过了1000*75%=750条,即751条时发送告警消息,如果超过了1000条,即1001条则在1分钟后重置bgp连接。
R1(config-router)#neighbor 12.1.1.2 maximum-prefix 1000 75 warning-only
表示即使接收邻居12.1.1.2的路由条目超过了1000条,也只发送告警消息。
本文作者:Lee Xu
CCIE-R&S、CCIE-Security、HCIP
个人介绍:
具有丰富的企业实战项目经验及教学经验。
专业知识的学习以及系统实践,
使李老师在IE级别高级工程师项目经验和IE级别
教学经验方面积累了丰富扎实的工作经验。
讲授课程:
CCNA、CCNP、HCNA、HCNP、MCSE、RHCE
项目经验:
孝感市土地局项目实施
长江航道局宜昌分局项目实施
武汉市公路归费征稽处项目实施
湖北省劳动教养工作管理局项目实施
湖北省国土资源厅项目实施
教学理念:
致力于培养学员的个人技术、独立思考能力、
反应能力、工作及适应能力。
“知行合一,止于至善”是李老师的信条。