城市里的游牧民族

Menu

BGP路由过滤

转:http://www.h3c.com.cn/MiniSite/H3care_Club/Data_Center/Net_Reptile/The_Tthree/Home/Catalog/201010/696837_97665_0.htm#

文/姜杏春

BGP路由是构成之Internet路由表的核心,目前规模已经达到十几万条。在实际应用中并不是所有的业务路由器都会需要全部的Internet路由,而且在AS之间,也仅需要接收或发布部分路由。所以我们在很多时候需要对BGP路由进行过滤来控制路由的发送和接收。

1         BGP路由过滤的手段

我们知道路由过滤主要是以对[cx1] 路由所携带的信息作为匹配条件做过滤,BGP的属性众多,相较于其他路由所携带的路由信息就很多,所以对于BGP的路由过滤也要灵活的多。

1.1        ACL/IP前缀列表

ACL:用户在定义ACL时可以指定IP地址和子网范围,用于匹配路由信息的目的网段地址或下一跳地址。

IP Prefix:IP Prefix的作用类似于ACL,但比它更为灵活,且更易于用户理解。使[cx2] 用IP Prefix过滤路由信息时,其匹配对象为前缀和掩码。

ACL、IP前缀列表主要是对BGP路由的前缀做过滤,可以实现对不同前缀地址做不同的过滤。

1.2        AS路径过滤列表

AS路径过滤列表仅用于BGP。BGP的路由信息中,包含有自治系统路径域。as-path就是针对自治系统路径域指定匹配条件。

BGP可以直接使用AS路径过滤列表对路由做过滤,它可以以BGP路由的AS-PATH属性作为过滤条件,可以实现对来自不同AS的路由做过滤。

当想拒绝某一个AS始发的所有路由,用AS路径过滤列表显然要简单的多。

1.3        [cx3] Route Policy

路由策略相较于前两种方法,提供了更丰富的手段。既可以使用ACL、IP前缀列表和AS路径列表对BGP路由做过滤,还可以使用其他匹配条件,比如:

团体属性列表(community-list): BGP的路由信息包中,包含一个community属性域,用来标识一个团体。community-list就是针对团体属性域指定匹配条件。

扩展团体属性列表(extcommunity-list):可用于VPN的Route-Target(路由目标)扩展extcommunity-list就是针对扩展团体属性指定匹配条件。

综上看,BGP路由常用来被过滤的条件主要是路由前缀、AS-PATH属性、Community属性,当然还有一些其他匹配条件[cx4] (MED、next-hop、route-type、route-source、interface、tag)也可以被用来做过滤。

2         BGP路由过滤的实施点

BGP路由过滤的策略可以在本地对从对等体[cx5] 接收路由入方向、本地发布路由以及对对等体[cx6] 发送路由出方向处实施。

2.1        接收路由(Import Policy)

在收到BGP对等体的路由时,我们可以执行路由策略,过滤我们不需要的BGP路由。

路由策略的执行在BGP往路由表添加路由之前,所以路由一旦被过滤掉,这些路由不添加到在执行策略的设备的路由表中,在本地不负责转发。

路由策略可以对所有接收的路由作过滤,也可以只对特定的BGP对等体或对等体组作过滤。

2.2        本地发布路由

对于本地发布的路由,主要是指通过network、import方式本地发布的BGP路由,我们可以执行路由策略,过滤我们不需要发布的BGP路由。

路由策略的执行在BGP往路由表添加路由之前,这些路由可以有选择的发布给所有BGP对等体[cx7] 。

2.3        发送路由(Export Policy)

在给BGP对等体发送路由的时候,我们也可以执行路由策略,过滤我们不想发布的BGP路由。

路由策略的执行在BGP往路由表添加路由之后,所以本地路由表中匹配deny策略的路由依然生效,在本地可以转发,只不过不向配置策略的对等体发送该BGP路由,让对等体无法从自己学习使用该路由。

路由策略可以对所有对等体做过滤,也可以只对特定的BGP对等体或对等体组作过滤。

3         实际案例

3.1        IP Prefix

IP Prefix是一种针对路由目的地址信息做过滤的工具,同样是对路由目的地址做过滤,它使用名字而不是序号作为列表的标识。

举个例子,路由表里有2条这样的路由10.0.0.0/16和10.0.0.0/24,考虑路由表的容量,想将10.0.0.0/24这条路由过滤掉。这时我们可以使用IP Prefix,指定只deny 10.0.0.0/24,允许其他路由通过。同时提醒两点要注意:第一,无论是ACL还是IP Prefix过滤,缺省都是deny all的,所以我们在配置需要过滤的路由条目后,最后还要配置一条permit命令让其他路由通过。第二,设备如果不支持Route refresh能力,需要手动reset bgp对等体过滤策略才生效;设备如果支持Route refresh能力,对等体不支持Route refresh能力,需要和相应对等体配置peer x.x.x.x keep-all-routes。

ip ip-prefix test index 10 deny 10.0.0.0 24 greater-equal 24 less-equal 24

ip ip-prefix test  index 20 permit 0.0.0.0 0 less-equal 32  

bgp 100

 filter-policy ip-prefix 1 import       

查看IP路由表,从路由表可以看出10.0.0.0/24路由已经从路由表中消失,10.0.0.0/16的路由依然在路由表中,就可以满足我们的要求,从这个例子,我们可以看出IP Prefix可以更灵活地过滤路由,因为它不光可以匹配地址信息,而且可以匹配掩码的长度。

[H3C-bgp]display ip routing-table

Routing Tables: Public

         Destinations : 5        Routes : 5

 

Destination/Mask    Proto  Pre  Cost         NextHop         Interface

 

10.0.0.0/16         BGP    255  0            10.1.1.2        GE0/1

10.1.1.0/24         Direct 0    0            10.1.1.1        GE0/1

10.1.1.1/32         Direct 0    0            127.0.0.1       InLoop0

127.0.0.0/8         Direct 0    0            127.0.0.1       InLoop0

127.0.0.1/32        Direct 0    0            127.0.0.1       InLoop0                                                                           

IP Prefix也可以针对一段掩码范围做过滤。在原来的路由表中有多了很多11开头的路由,我们精简路由,要求只需要掩码是16的路由。

<H3C>display ip routing-table

Routing Tables: Public

         Destinations : 9        Routes : 9

 

Destination/Mask    Proto  Pre  Cost         NextHop         Interface

 

10.0.0.0/16         BGP    255  0            10.1.1.2        GE0/1

10.1.1.0/24         Direct 0    0            10.1.1.1        GE0/1

10.1.1.1/32         Direct 0    0            127.0.0.1       InLoop0

11.0.0.0/16         BGP    255  0            10.1.1.2        GE0/1

11.0.0.0/27         BGP    255  0            10.1.1.2        GE0/1

11.0.1.0/25         BGP    255  0            10.1.1.2        GE0/1

11.0.2.0/26         BGP    255  0            10.1.1.2        GE0/1

127.0.0.0/8         Direct 0    0            127.0.0.1       InLoop0

127.0.0.1/32        Direct 0    0            127.0.0.1       InLoop0  

我们可以在原来的配置基础上再添加一条如下的命令即可。注意,IP Prefix匹配顺序是根据表项的index号匹配的,index号越小,越先匹配,[cx8] 本例中之前的两条表项的index分别是10和20,我们要使再配置的表项信息能在两者之间作匹配,只需配置的index在两者之间即可,例子中使用的index是11。

ip ip-prefix 1 index 11 deny 11.0.0.0 16 greater-equal 17 less-equal 32   

查看IP路由表,路由表中除了11.0.0.0/16,其他的路由都没有了,满足了我们的要求,可以看出IP Prefix还是很好用的工具。

[H3C]dis ip routing-table

Routing Tables: Public

         Destinations : 6        Routes : 6

 

Destination/Mask    Proto  Pre  Cost         NextHop         Interface

 

10.0.0.0/16         BGP    255  0            10.1.1.2        GE0/1

10.1.1.0/24         Direct 0    0            10.1.1.1        GE0/1

10.1.1.1/32         Direct 0    0            127.0.0.1       InLoop0

11.0.0.0/16         BGP    255  0            10.1.1.2        GE0/1

127.0.0.0/8         Direct 0    0            127.0.0.1       InLoop0

127.0.0.1/32        Direct 0    0            127.0.0.1       InLoop0    

3.2        [cx9] AS PATH

利用地址前缀去过滤BGP路由,在如此大规模的路由表时,一来有可能配置比较繁琐,二来且有新的路由加入不好维护,所以提出了BGP利用AS_PATH作过滤的办法。利用AS的过滤更有针对性,例如用AS_PATH作过滤,[cx10] 过滤从某个AS_PATH始发的全部路由,只需一个AS_PATH列表即可。

下面让我们来看个小例子:

出于业务需要,H3C设备需要过滤掉来自AS400始发的路由。

\"BGP路由过滤\" 

                                                                                                                                                                    图1 AS PATH过滤应用

可是查看H3C设备的BGP路由表,发现来自AS400的路由前缀和掩码几乎无规律可循,且从多个对等体可以学到,如果使用ACL或IP Prefix,需要配置表项很多,且如果有新的路由,还需要添加更多的表项,非常不好维护。

[H3C]dis bgp routing-table

 

 Total Number of Routes: 25

 

 BGP Local router ID is 10.1.1.1

 Status codes: * - valid, > - best, d - damped,

               h - history,  i - internal, s - suppressed, S - Stale

               Origin : i - IGP, e - EGP, ? - incomplete

     Network            NextHop         MED        LocPrf     PrefVal Path/Ogn

 

 *>  1.0.0.0/12         10.1.1.2                              0       200 400?

 *>  1.16.0.0/12        10.1.1.2                              0       200 400?

 *>  2.0.0.0/13         10.1.1.2                              0       200 400?

 *>  2.8.0.0/13         10.1.1.2                              0       200 400?

 *>  3.0.0.0/14         10.1.1.2                              0       200 400?

 *>  4.0.0.0/15         10.1.1.2                              0       200 400?

 *>  5.0.0.0/16         10.1.1.2                              0       200 400?

 *>  6.0.0.0/17         10.1.1.2                              0       200 400?

 *>  7.0.0.0/18         10.1.1.2                              0       200 400?

 *>  8.0.0.0/19         10.1.1.2                              0       200 400?

 *>  9.0.0.0/20         10.1.1.2                              0       200 400?

 *>  10.0.0.0/21        10.1.1.2                              0       200 400?

 *>  11.0.0.0/22        10.1.1.2                              0       200 400?

 *>  12.0.0.0/23        10.1.1.2                              0       200 400?

 *>  14.0.0.0/24        10.1.1.2                              0       200 400?

 *>  16.0.0.0/20        10.1.1.3                              0       300 400?

 *>  17.0.0.0/21        10.1.1.3                              0       300 400?

 *>  18.0.0.0/22        10.1.1.3                              0       300 400?

 *>  19.0.0.0/23        10.1.1.3                              0       300 400?

 *>  20.0.0.0/24        10.1.1.3                              0       300 400?

 *>  21.0.0.0/22        10.1.1.3                              0       300?

 *>  21.0.4.0/22        10.1.1.3                              0       300?

 *>  22.0.0.0/23        10.1.1.3                              0       300?

 *>  22.0.2.0/23        10.1.1.3                              0       300?

 *>  23.0.0.0/24        10.1.1.3                              0       300?

这个时候我们可以使用针对BGP特有的工具AS PATH列表,让我们看看这个工具的强大之处。首先,配置过滤AS400始发的路由,允许其他路由通过的AS PATH列表;同时,配置一个BGP对等体组group 1,将所有要过滤的对等体加到这个对等体组;然后,对对等体组group 1做AS PATH列表过滤。

ip as-path 1 deny _400$

ip as-path 1 permit .*

bgp 100

 undo synchronization

 peer 10.1.1.2 as-number 200

 peer 10.1.1.3 as-number 300

 group 1 external

 peer 1 as-path-acl 1 import

 peer 1 keep-all-routes

 peer 10.1.1.2 group 1

 peer 10.1.1.3 group 1

配置完成之后,查看BGP路由表,发现AS400始发的路由不生效了,其它的路由依然生效。一个AS PATH列表就轻轻松松实现了我们的需求,并且以后再有AS400始发的路由,也会被过滤掉,不需要再添加任何命令去维护它。现在我们看到AS PATH列表的好处了,只要根据AS PATH过滤的需求,我们都可以使用AS PATH列表就把它过滤掉。

 [H3C-bgp]dis bgp routing-table

 

 Total Number of Routes: 25

 

 BGP Local router ID is 10.1.1.1

 Status codes: * - valid, > - best, d - damped,

               h - history,  i - internal, s - suppressed, S - Stale

               Origin : i - IGP, e - EGP, ? - incomplete

     Network            NextHop         MED        LocPrf     PrefVal Path/Ogn

 

     1.0.0.0/12         10.1.1.2                              0       200 400?

     1.16.0.0/12        10.1.1.2                              0       200 400?

     2.0.0.0/13         10.1.1.2                              0       200 400?

     2.8.0.0/13         10.1.1.2                              0       200 400?

     3.0.0.0/14         10.1.1.2                              0       200 400?

     4.0.0.0/15         10.1.1.2                              0       200 400?

     5.0.0.0/16         10.1.1.2                              0       200 400?

     6.0.0.0/17         10.1.1.2                              0       200 400?

     7.0.0.0/18         10.1.1.2                              0       200 400?

     8.0.0.0/19         10.1.1.2                              0       200 400?

     9.0.0.0/20         10.1.1.2                              0       200 400?

     10.0.0.0/21        10.1.1.2                              0       200 400?

     11.0.0.0/22        10.1.1.2                              0       200 400?

     12.0.0.0/23        10.1.1.2                              0       200 400?

     14.0.0.0/24        10.1.1.2                              0       200 400?

     16.0.0.0/20        10.1.1.3                              0       300 400?

     17.0.0.0/21        10.1.1.3                              0       300 400?

     18.0.0.0/22        10.1.1.3                              0       300 400?

     19.0.0.0/23        10.1.1.3                              0       300 400?

     20.0.0.0/24        10.1.1.3                              0       300 400?

 *>  21.0.0.0/22        10.1.1.3                              0       300?

 *>  21.0.4.0/22        10.1.1.3                              0       300?

 *>  22.0.0.0/23        10.1.1.3                              0       300?

 *>  22.0.2.0/23        10.1.1.3                              0       300?

 *>  23.0.0.0/24        10.1.1.3                              0       300?                  

本文中,AS PATH列表过滤的例子是最简单的例子,因为AS PATH列表使用了正则表达式这把利剑,可以对AS PATH做各种简单的、复杂的匹配,非常灵活,具体的AS PATH列表使用方法和更深入的案例请见《常用BGP AS_PATH正则表达式应用》。

3.3        Community

我们知道,BGP的COMMUNITY属性是用来标识一组具有共同性质的路由。利用COMMUNITY属性我们可以把路由根据业务分成很多类,我们可以把境外路由部署同一组COMMUNITY属性,境内路由系统是部署另一组COMMUNITY属性,这个分组完全是我们人为决定和控制的,方便我们更轻松的识别和管理众多的路由。

实际应用中,我们在ISP管理时,部分境内路由可能不需要发布到境外,而境外路由需要发布到境外,这些路由前缀不同,可能来自不同AS,我们可以在ISP边缘给这些境内路由设置相同的COMMUNITY值为100:2,给境外路由设置另外一个COMMUNITY值100:1,这样的话我们就可以巧妙地运用COMMUNITY属性的特质去控制和过滤路由。

 \"BGP路由过滤\"

                                                                                                                                                               图2 COMMUNITY属性应用

没有部署路由策略过滤之前,我们查看RTA的IP路由表,RTA可以学习到境内路由和境外路由,这不是我们所期望的。

<RTA>dis ip routing-table

Routing Tables: Public

         Destinations : 9        Routes : 9

 

Destination/Mask    Proto  Pre  Cost         NextHop         Interface

 

8.8.8.8/32          Direct 0    0            127.0.0.1       InLoop0

110.1.0.0/16        BGP    255  0            200.1.1.1       GE2/1/1

110.37.0.0/16       BGP    255  0            200.1.1.1       GE2/1/1

120.1.0.0/16        BGP    255  0            200.1.1.1       GE2/1/1

127.0.0.0/8         Direct 0    0            127.0.0.1       InLoop0

127.0.0.1/32        Direct 0    0            127.0.0.1       InLoop0

130.1.1.0/24        BGP    255  0            200.1.1.1       GE2/1/1

200.1.1.0/24        Direct 0    0            200.1.1.2       GE2/1/1

200.1.1.2/32        Direct 0    0            127.0.0.1       InLoop0

现在我们利用境外路由都携带COMMUNITY属性100:1的特质,在RTB上配置过滤。对ISP2的对等体实施策略,只允许向ISP2对等体发布COMMUNITY属性为100:1的路由。

ip community-list 1 permit 100:1

ip community-list 1 deny

route-policy 1 permit node 0

 if-match community 1 

#

bgp 100

 undo synchronization

 peer 40.1.1.2 as-number 400

 peer 30.1.1.2 as-number 100

 peer 200.1.1.2 as-number 500

 peer 40.1.1.2 keep-all-routes

 peer 30.1.1.2 keep-all-routes

 peer 200.1.1.2 route-policy 1 export

#                        

我们再看RTA的路由表,只剩下两条110.1.0.0/16和120.1.0.0/16两条境外路由,满足了我们的需求,再有新的境外路由,也会因为COMMUNITY为100:1,被匹配通过,所以我们无需再添加其他配置去维护。

[RTA]dis ip routing-table

Routing Tables: Public

         Destinations : 7        Routes : 7

 

Destination/Mask    Proto  Pre  Cost         NextHop         Interface

 

8.8.8.8/32          Direct 0    0            127.0.0.1       InLoop0

110.1.0.0/16        BGP    255  0            200.1.1.1       GE2/1/1

120.1.0.0/16        BGP    255  0            200.1.1.1       GE2/1/1

127.0.0.0/8         Direct 0    0            127.0.0.1       InLoop0

127.0.0.1/32        Direct 0    0            127.0.0.1       InLoop0

200.1.1.0/24        Direct 0    0            200.1.1.2       GE2/1/1

200.1.1.2/32        Direct 0    0            127.0.0.1       InLoop0

4         总结

BGP与其他路由协议对比,拥有很多自身独有的路由属性,我们可以灵活的根据BGP的多种属性去做路由过滤,我们可以通过不同的手段实现相同的目的,这完全取决于用户的需求和管理者的决策。由此看出,BGP这个协议,更类似一个管理协议,赋予网络工作者足够的权利去控制路由,能够将网络工作者的智慧充分体现,这正是该协议的独到之处。

 

— 于 共写了12456个字
— 文内使用到的标签:
本作品采用知识共享署名-非商业性使用-禁止演绎 3.0 中国大陆许可协议进行许可。

发表评论

电子邮件地址不会被公开。 必填项已用*标注