HCNP Routing&Switching之BGP路由过滤和AS-Path-Filter
前文我们聊了下通过修改BGP路由属性来影响路由,从而达到控制BGP路由的目的;回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15495585.html;今天我们来聊一聊BGP路由过滤和AS-Path-filter过滤器的使用;
BGP路由过滤
BGP路由过滤是指对特定的路由通过策略或者过滤器在出方向或入方向做允许或拒绝,从而来达到控制路由的收发;
示例:通过ip 前缀列表匹配要拒绝的路由,然后使用过滤工具过滤掉满足条件的路由
[R5-bgp]dis bg r BGP Local router ID is 5.5.5.5 Status codes: * - valid, > - best, d - damped, h - history, i - internal, s - suppressed, S - Stale Origin : i - IGP, e - EGP, ? - incomplete Total Number of Routes: 3 Network NextHop MED LocPrf PrefVal Path/Ogn *> 1.1.1.1/32 45.0.0.4 0 234 11i *> 7.7.7.7/32 45.0.0.4 0 234 11i *> 8.8.8.8/32 45.0.0.4 0 234 11i [R5-bgp]dis ip ip-prefix Prefix-list 1.1.1.1 Permitted 2 Denied 4 index: 10 deny 1.1.1.1/32 index: 20 permit 0.0.0.0/0 le 32 [R5-bgp]filter-policy ip-prefix 1.1.1.1 import [R5-bgp]d th [V200R003C00] # bgp 55 router-id 5.5.5.5 peer 45.0.0.4 as-number 234 # ipv4-family unicast undo synchronization filter-policy ip-prefix 1.1.1.1 import peer 45.0.0.4 enable # return [R5-bgp]dis bg r BGP Local router ID is 5.5.5.5 Status codes: * - valid, > - best, d - damped, h - history, i - internal, s - suppressed, S - Stale Origin : i - IGP, e - EGP, ? - incomplete Total Number of Routes: 2 Network NextHop MED LocPrf PrefVal Path/Ogn *> 7.7.7.7/32 45.0.0.4 0 234 11i *> 8.8.8.8/32 45.0.0.4 0 234 11i [R5-bgp]
提示:ip前缀列表、filter-policy工具使用请参考https://www.cnblogs.com/qiuhom-1874/p/15316188.html;这里我们需要注意一点就是ip前缀列表的默认规则是拒绝,所以对于没有被ip前缀列表匹配的路由,我们应该放行;所以前缀列表里最后要添加放行其他所有路由;所以我们在BGP路由表中能够看到7.7.7.7和8.8.8.8的路由;
示例:使用filter-policy 对某个邻居的出方向拒绝1.1.1.1的路由
在R2上未使用filter-policy对发送给R4的路由做过滤,对应R4上bgp路由表情况
提示:可以看到对应在R4上能够学习到1.1.1.1 /32的路由,对应下一跳分别有两个;
在R2的出方向对发送给R4的路由中,过滤掉1.1.1.1/32的路由,对应其他路由做放行操作
验证:在R4上查看BGP路由表,看看R2发送给R4的路由,对应1.1.1.1/32的路由是否被过滤掉了?
提示:可以看到R4上对于1.1.1.1/32的路由只有R3为下一跳,R2发送给R4的其他路由R4上正常可以学习到;
示例:使用前缀列表直接对某个邻居发送的路由进行过滤
在R4上使用前缀列表对R3发送到8.8.8.8/32的路由进行入方向过滤,其他路由不做过滤
[R4]dis ip ip-prefix Prefix-list 8.8.8.8 Permitted 0 Denied 0 index: 10 deny 8.8.8.8/32 index: 20 permit 0.0.0.0/0 le 32 [R4]bgp 234 [R4-bgp]peer 3.3.3.3 ip-prefix 8.8.8.8 imp [R4-bgp]peer 3.3.3.3 ip-prefix 8.8.8.8 import [R4-bgp]d th [V200R003C00] # bgp 234 router-id 4.4.4.4 peer 2.2.2.2 as-number 234 peer 2.2.2.2 connect-interface LoopBack4 peer 3.3.3.3 as-number 234 peer 3.3.3.3 connect-interface LoopBack4 peer 45.0.0.5 as-number 55 # ipv4-family unicast undo synchronization peer 2.2.2.2 enable peer 3.3.3.3 enable peer 3.3.3.3 ip-prefix 8.8.8.8 import peer 45.0.0.5 enable # return [R4-bgp]dis bg r BGP Local router ID is 4.4.4.4 Status codes: * - valid, > - best, d - damped, h - history, i - internal, s - suppressed, S - Stale Origin : i - IGP, e - EGP, ? - incomplete Total Number of Routes: 4 Network NextHop MED LocPrf PrefVal Path/Ogn *>i 1.1.1.1/32 13.0.0.1 0 100 0 11i *>i 7.7.7.7/32 12.0.0.1 0 100 0 11i * i 13.0.0.1 0 100 0 11i *>i 8.8.8.8/32 12.0.0.1 0 100 0 11i [R4-bgp]
提示:可以看到此时R4上对于8.8.8.8/32的路由只有R2发送的可以正常学习到;因为R3发送的8.8.8.8/32的路由在入方向就被过滤掉了;
示例:在R1上使用路由策略对7.7.7.7/32的路由在出方向过滤
提示:路由策略中如果条件中是允许操作,则路由的去留取决route-policy的模式,deny就是拒绝,permit就是允许;如果条件中是拒绝操作,则路由的去留取决route-policy的默认规则;如上所示,在条件中允许7.7.7.7/32,在模式中拒绝,最终7.7.7.7/32的路由去留看模式;对于条件中没有明确允许或拒绝其他路由,最终条件的默认规则是拒绝,所以对于其他没有被条件匹配的路由,最终的去留取决于route-policy默认模式;所以我们在route-policy后面添加一条允许所有路由,则放行其他未被前缀列表匹配到的路由;所以我们配置没有问题的话,在R2上就学习不到7.7.7.7/32的路由,其他路由可以正常学习到;
验证:在R2上查看BGP路由表,看看对应的7.7.7.7的路由它是否能够学习到?
提示:可以看到此时R2的bgp路由表中就没有7.7.7.7/32的路由,原因是R1并没有把7.7.7.7/32的路由发送给R2;
总结:通过上述实验可以看到BGP路由过滤主要是通过过滤器,前缀列表,路由策略等工具来进行的;都是在本地的出或入方向做过滤,最终是影响路由的收发;如果上述工具都在bgp里都使用了,则首先全局filter-policy进行过滤,然后再单个邻居使用filter-policy过滤,然后再单个邻居前缀列表,然后在路由策略的顺序进行过滤;
BGP AS-Path过滤器
AS-Path-Filter:从名字上就能知道该过滤器主要用于通过匹配AS-Path属性来进行路由过滤;对于满足过滤器的条件我们就做某种操作即可;对于as-path过滤器来说,它是通过正则表达式来匹配对应as-path;工作原理就是把对应路由的as-path当作字符串处理,满足正则表达式的路由进行拒绝或允许操作;
常用正则表达式符号作用
特殊正则表达式含义
提示:对于本地始发地路由,对应as-path属性是空,即匹配条件就是空,正则表达式就为^$; .*表示匹配所有路由,.*是表示匹配任意字符0次或多次,即任意字符可有可无,即任意as-path都能匹配,即所有路由的as-path都能满足该正则表达式;_10_表示匹配通过as10的路由,因为as-path只要通过一个as就会记录对应as号,所以只要as-path里包含10,则该路由一定是通过as 10的路由;如果是以10结尾的as-path,则一定是始发as10的路由;如果以10开头的,则一定是相邻邻居的as一定是10,即接受相邻as10的路由;
示例:匹配以12开头中间任意字符最后以74结尾的as-path的路由
提示:即满足上述as-path的路由都会被允许放行;
示例:匹配有23或43的as号的路由
提示:并不是3或4,而是23或43;
示例:匹配具有具有14,17,24,27,34,37的as号
提示:【1-3】表示连续的数字,即1、2、3;【47】表示4或7,即数字4或者数字7;组合其他就是14、17、24、27、34、37;
示例:匹配始发as170,且as34512和as170相邻且通过as34512的路由;
示例:匹配始发as170,并通过as621的路由
示例:使用as-path过滤器过滤掉本地始发as55路由
新建as-path过滤器
[R1]ip as [R1]ip as-path-filter 1 d [R1]ip as-path-filter 1 deny 55$ [R1]dis ip as As path filter number: 1 deny 55$ [R1]
提示:as-path-filter 后面的1我们可以理解为是as-path过滤器的匹配次序;多条as path是与的关系,即都要满足才能被匹配;
在BGP里调用as-path过滤器
提示:as-path过滤器也是有默认规则的,默认规则是拒绝操作,即没有被正则匹配到的路由,统统都是拒绝操作;所以我们看到的BGP路由表中,对应始发234的路由也一并被过滤掉;
在as-path里允许其他所有路由通过
再次查看BGP路由表,看看对应始发234的路由是否恢复?
提示:可以看到始发as55的路由被过滤掉了,始发234的路由恢复正常;这是因为我们只拒绝了始发as55的路由,允许了其他没有被始发as55的路由;