• 文章搜索:
  • 目录

        • 分享到...

        • 新浪微博
        • 腾讯微博
        • 推荐到豆瓣 豆瓣空间
        • 分享到搜狐微博 搜狐微博
        • 分享到QQ空间 QQ空间
        • 分享到腾讯朋友 腾讯朋友
        • 网易微博分享 网易微博
        • 添加到百度搜藏 百度搜藏
        • 转贴到开心网 开心网
        • 转发好友 告诉聊友
    • 推荐
    • 打印
    • 收藏

    BGP路由过滤

    作者:  |  上传时间:2010-10-12  |  关键字:网络大爬虫,第三期,BGP专题

     

    /姜杏春

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

    1         BGP路由过滤的手段

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

    1.1        ACL/IP前缀列表

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

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

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

    1.2        AS路径过滤列表

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

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

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

    1.3        [cx3] Route Policy

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

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

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

    综上看,BGP路由常用来被过滤的条件主要是路由前缀、AS-PATH属性、Community属性,当然还有一些其他匹配条件[cx4] MEDnext-hoproute-typeroute-sourceinterfacetag)也可以被用来做过滤。

    2         BGP路由过滤的实施点

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

    2.1        接收路由(Import Policy

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

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

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

    2.2        本地发布路由

    对于本地发布的路由,主要是指通过networkimport方式本地发布的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/1610.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分别是1020,我们要使再配置的表项信息能在两者之间作匹配,只需配置的index在两者之间即可,例子中使用的index11

    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始发的路由。

                                                                                                                                                                        图1 AS PATH过滤应用

    可是查看H3C设备的BGP路由表,发现来自AS400的路由前缀和掩码几乎无规律可循,且从多个对等体可以学到,如果使用ACLIP 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 1AS 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

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

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

                                                                                                                                                                   图2 COMMUNITY属性应用

    没有部署路由策略过滤之前,我们查看RTAIP路由表,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/16120.1.0.0/16两条境外路由,满足了我们的需求,再有新的境外路由,也会因为COMMUNITY100: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这个协议,更类似一个管理协议,赋予网络工作者足够的权利去控制路由,能够将网络工作者的智慧充分体现,这正是该协议的独到之处。