• 文章搜索:
  • 目录

        • 分享到...

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

    BGP新特性介绍

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

    /杨默寒

    BGPBorder Gateway Protocol, 边界网关协议)是目前Internet骨干网上运行的核心路由协议,也是部署最广泛的路由协议之一。在过去的几十年里,Internet的发展日新月异,新兴应用的不断涌现,对Internet网络的可靠性、扩展性提出了更高的要求。作为整个Internet稳定运行的基础,BGP为了适应Internet的发展趋势,也推出了许多高级特性,本文列举了其中一些较为实用的BGP新特性,与读者分享。

    1         FAKE-AS

    运行BGP的路由器一般情况下只能属于一个AS,某些情况下,比如AS需要迁移或者和其他AS进行合并,要用新的AS替代原有的AS号码。

                                                                                                                                                                     图1 FAKE-AS迁移前拓扑

    迁移前网络拓扑如图1所示, RA属于AS100RB属于AS200,相互之间建立EBGP邻居。由于某些原因,用户要将AS200替换成AS2000,迁移后网络拓扑如图2所示:

                                                                                                                                                                     图2 FAKE-AS迁移后拓扑

    AS200迁移为AS2000后,AS100中的RA需要将邻居RBAS号修改为2000,但是由于某种原因RA的管理机构不愿意修改自己的配置,引入FAKE-AS就可以解决这个问题。

    由于RA不修改自己的配置,所以至少需要解决以下2个问题:

    l         BGP在建立邻居的过程中会互相发送OPEN报文,要让RA认为RB发送过来的OPEN报文里面关于AS的记录是200,而不是2000

    l         RB在发送给RA的路由,在AS PATH属性里面记录的第一个AS必须是200,而不是2000

    我们通过在RB上配置FAKE-AS功能可以完美的解决上述的2个问题,实现RB迁移AS的时候,RA不需要修改任何BGP相关配置。

    2         条件通告

    在实际环境中一台BGP路由器经常会保存多条相同前缀的路由,这样可以起到备份的作用,如图3所示:

                                                                                                                                                                 图3 条件通告功能描述拓扑图

    RA通过AS200去访问目的为N.n.n.n的网络,由于有备份的需求RARBRC都建立BGP邻居关系,并且优选了从RB来的路由,这样当RB出现故障或者RARB之间的链路出现故障,RA可以通过从RC学习到的路由访问网络N.n.n.n

    假设RBRC各向RA通告100000条路由,RA共需要存储200000BGP路由,如果RA配置的内存较少,无法存储全部200000条路由,就会导致部分网络无法访问,或者BGP邻居关系重新建立。

    BGP的条件通告特性可以解决上面这个问题,以下为BGP条件通告的具体实现:

    l         首先在RA上配置一个LOOKBACK接口(假设为1.1.1.1/32,把该地址发布到BGP,并且只发送给RB

    l         RC会通过与RBIBGP邻居关系学习到该路由;

    l         RC上启用条件通告,判断条件为:是否存在1.1.1.1/32BGP路由,如果存在,则不发送任何路由给RA;如果不存在,则发送路由给RA

    l         这样当网络正常的时候,RA只能从RB学习到路由,当RB或者RARB之间的链路出现故障时,RA就可以从RC学习到路由。

    3         动态RT

    RFC2547里定义了MPLS-L3VPN的网络模型,该RFC具体描述了在MPLS-L3VPN里设备的角色分类、数据封装传输的过程,以及BGP需要的相应扩展。

    BGP为了支持MPLS-L3VPN,除了增加了VPNv4的能力之外,还增加了扩展团体属性Route-Target(RT)RT属性的TYPE值为16,属于任选可传递属性,该属性决定了VPNv4路由的VPN归属。

                                                                                                                                                                     图4 未配置动态RT前拓扑

    如图4所示,RAVPN1学习到的路由以VPNV4的形式发送给RBRC同时携带RT属性。在RBRC上有相关VPN的配置,可能在开始部署的时候VPN2并不想接受VPN1的路由,所以当路由N.n.n.n/32到达RC的时候,因为RT的值和本地的配置值不匹配,该路由被丢弃掉;当路由N.n.n.n/32到达RB的时候,因为RT的值和本地的配置值匹配,路由被接收。

    现在用户有这么一个需求,VPN1虽然与VPN2是隔离的,但是VPN2需要访问部分VPN1的网络资源,解决办法有以下两个:

    l         VPN1重新配置相关的RT规则,所有路由的RT属性都被修改,并且都被VPN2接收;

    l         VPN2VPN1融合,无法保障两个VPN的路由隔离,还需要配置ACL控制两个VPN的互访。

    如果使用动态RT特性,就可以很好的满足VPN1VPN2部分互访的需求,具体实现如下:

    l         RA发送路由的时候,可以利用动态RT的特性来区分发送的路由,不同的路由附加上不同的RT属性,假设VPN2需要访问VPN1内部的M.m.m.m/32服务,如5所示;

                                                                                                                                                                        图5 配置动态RT后拓扑

    l         动态RTM.m.m.m/32这条路由附加了两个RT属性:100:1 200:1,由于VPN2默认配置是可以接受200:1的路由的,所以这条路由会被导入VPN2的路由表。对于其他路由,由于动态RT对其不感兴趣,所以不作修改依然只有100:1这一个RT值;

    l         RB上的处理和以前一样,只要路由的RT列表里面存在100:1就可以被接受;

    4         邻居动态建立

    通常情况下,配置BGP的时候需要指定邻居的ASIP地址,这主要是为了保证邻居建立的可靠性和安全性。随着BGP的广泛部署,可能有时候不能确定邻居的具体地址,或者需要建立多少个邻居,因为这些邻居可能是通过ADSL或者DHCP等动态方式动态获得的IP地址,尤其在Hub&Spoke组网中这种问题更为常见。

    邻居动态建立特性可以解决动态IP的问题,该特性的实现机制及注意事项如下:

    l         至少需要有一个邻居设备有固定的IP地址和AS号码,我们称它为RA

    l         RA上需要配置一个邻居的地址池,来确定邻居的IP地址范围;

    l         RA上需要配置一个AS的号码池,来确定邻居的AS范围;

    l         当建立邻居的时候RA需要检测邻居的IP地址与AS号码是否在相应的范围内;

    l         邻居的安全可以通过TCPMD5保障;

    l         实现上需要把RABGP的状态机停留在ACTIVE比较合理。

    5         TTL安全检测

    BGP存在2种邻居关系:内部邻居关系(IBGP),外部邻居关系(EBGP)。建立这两种邻居关系的时候IBGP是不检测TTL的,EBGP在缺省是发送个TTL等于1的协议报文。但是当网络存在安全威胁的时候,通过TTL安全检测可以防止潜在的安全隐患。

                                                                                                                                                              图6 TTL安全检测功能描述拓扑

    如图6所示,RARB建立EBGP邻居关系,默认RB发送给RATTL1。如果攻击者模拟RBRA发送BGP报文,可能会影响RA的邻居关系,甚至RA的路由选路。如果RARB开启了TTL安全检测功能,那么RA可以设定RB发过来的BGP协议报文的TTL必须为255。即使存在攻击者,当攻击报文被RB转发给RA的时候TTL必然减1,这样RA接受到一个TTL255的协议报文会自动丢弃,从而达到防攻击的效果。

    6         4字节AS

    AS (Autonomous System number,自治域系统号)是指拥有同一选路策略,在同一技术管理部门下运行的一组路由器的集合。BGPRFC1771里留给AS的范围是2个字节,所以AS的取值范围为1-65535,其中64512以上的为私有AS。但是鉴于IPv4地址空间不够这个前车之鉴,在RFC4893里定义了一个BGP的新功能——4字节ASBGP Support for Four-octet AS Number,一般用M.N来描述)。

    由于BGP在邻居协商以及路由发送接受的时候都需要使用AS属性,所以RFC4893里也对相应的属性的扩展变化做出了解释。为了便于读者理解,下面列出了RFC4893定义的相关属性变化及说明。

    l         AS4_SEQUENCE:记录了该路由传递过程中所经过的AS

    l         AS4_SET:当出现聚合的时候,记录了聚合路由所合并的AS

    l         AS4_CONFED_SEQUENCE:在联盟中使用,作用和AS4_SEQUENCE类似;

    l         AS4_CONFED_SET:在联盟中使用,作用和AS4_SET类似;

    l         AS4_AGGREGATOR:记录了聚合者的AS号码;

    上面所描述的属性与2字节的AS_PATH相关属性具有相同的作用,所以对于熟悉标准BGP协议的使用者来说很好理解。

    如果在网络迁移的过程中,存在部分路由器只支持2字节AS,应该如何过渡呢?

                                                                                                                                                                                图7 迁移组网拓扑

    如图7所示,RARC为支持4字节的AS功能的路由器,RB为只支持2字节的AS功能的路由器。如果出现上图这种情况,我们需要解决以下这些问题:

    l         RFC4893给了一种建议,里面定义了一个公用2字节AS号码AS_TRANS,也就是说需要一个单独的2字节AS为专门用于衔接4字节AS BGP路由器与2字节AS BGP路由器,并且AS_TRANS不能被其他路由器或者组织使用;

    l         如上图RA收到一条四字节AS的路由,AS号码为1.1;

    l         RARB建立邻居,需要令RB认为RAAS号为AS_TRANS

    l         RA发送路由给RB的时候把AS_TRANS记录在AS_SEQUENCE里面,把1.1与自己的AS号码100.1按照BGP要求的顺序记录在AS4_SEQUENCE

    l         RB对于不识别的属性AS4_SEQUENCE不作处理依然保留,它只按照BGP的规则来发送路由给RC。当然它认为RCAS号码也是AS_TRANS,这样路由发送的过程如图8(我们假设AS_TRANS23456):

                                                                                                                                                                                图8 路由发布说明

    l         这样当RC收到从RB来的路由会把AS_TRANS按照顺序来替换为AS4_SEQUENCE里所记录的相应的地址,在RC上把AS4_PATH属性还原为0.200 100.1 1.1

    7         正则表达式过滤团体属性

    团体属性是一个可选传递的属性,由RFC1997具体定义。该属性为一个32BIT的字段,从0x00000000x0000FFFF为可分配值,从0xFFFF00000xFFFFFFFF为预留值。

    目前,网络规划者和路由器厂商都习惯把团体属性一分为二:前16位一部分,后16位一部分。我们知道AS号的取值范围为2个字节,所以可以用前16位来代表AS,后16位一般为用户自定义的数值,比如定义一个团体属性值1111:1。团体属性主要用于路由标示和过滤,比如用户可以定义一些业务与团体属性的后16位对应,比如在一个SP网络里定义101代表WWW服务器路由,102代表MAIL服务器路由,103代表VOIP设备路由。AS100发布这些路由的时候,根据路由的业务类型设置团体属性值(100:101,100:102,100:103)。当然,对于其他AS来说,可能不需要VOIP的服务,所以在AS边界过滤团体属性为100:103的路由。

    8         保存多条相同前缀的标签路由

    保存多条相同前缀的标签路由这个特性从字面上看有些令人费解,我们还是从实际网络中遇到的问题来说明这个特性的具体作用,如图9所示:

                                                                                                                                                                             图9 路由发布的方向

      RAAS100的两个EBGP邻居收到了到1.1.1.1/32的路由。如果RA上配置了负载分担功能,那么RA访问1.1.1.1/32的时候可以同时利用两条路径。当RA把路由发送给RB的时候,虽然RABGP路由表里有两条最优的BGP路由,但是RA会认为他们是同一条路由。所以RA只会发送一条路由给RB。当RB需要访问1.1.1.1/32的时候,会先把数据发给RA,再由RA负载分担。这样依然可以到达有效利用带宽的效果。但是在MPSL组网中,问题就没那么简单了。我们以标签路由为例(该标签路由可以是IPv4路由,也可以是VPNv4路由),如图10所示:

                                                                                                                    图10 未支持保存多条相同前缀的标签路由功能前路由发布说明

      RA依然从AS100的两个EBGP邻居学到了1.1.1.1/32的标签路由,标签值分别为101102,当RA访问1.1.1.1/32的时候,会通过标签转发报文。如果RA上配置了负载分担功能,依然可以实现负载分担,与普通IP转发的情况一样。但是RB会有点小问题,因为RA只会发送一条最佳标签路由给RB,假设最佳路由的标签值为101,这样当RB访问1.1.1.1/32的时候,也是通过标签将报文转发给RA,当数据到达RA的时候,RA根据入标签201查找出标签,假设RAMPLS转发表如下:

    OUT LABEL

    IN LABEL

    101

    201

                                                                                                                                                                    表1 标签映射表1

    这样当RB访问1.1.1.1/32的时候,在RA上无法实现负载分担。

    保存多条相同前缀的标签路由就是为了解决这种问题,该特性在RFC3107后半部分描述,属于BGP的一种新能力,代码为4RFC上原文描述如下:“A BGP speaker that is capable of handling multiple routes to a destination (as described above) should use the Capabilities Optional Parameter, as defined in [BGP-CAP], to inform its peers about this capability. The value of this capability is 4.” [1]

    该特性要求,BGP在区分路由的时候,不能只根据前缀判断还要根据标签值。我们可以重新回顾以下刚才的那个问题,请看图11

                                                                                                                       图11 支持保存多条相同前缀的标签路由功能前路由发布说明

     RARB都支持该特性时,RA认为1.1.1.1/32 LABEL 1011.1.1.1/32 LABEL 102是两条不同的路由,都发送给RBRB收到两条标签路由后,由于RB启用了负载分担功能,所以形成了等价标签路由,RB访问1.1.1.1/32时可以封装上不同的标签(201202),然后发送标签数据给RARA接受到数据后,根据入标签查找出标签,这个时候RA上的MPLS转发表如下:

    OUT LABEL

    IN LABEL

    101

    201

    102

    202

                                                                                                                                                                    表2 标签映射表3

    通过保存多条相同前缀的标签路由特性,实现端到端的负载分担,提高网络带宽的利用率。还需要补充一点,标准BGP实现中,BGP发送路由撤销的时候是不携带任何属性的,但是启用这个特性后,需要在撤销路由的时候携带标签值,来告诉邻居具体要撤销掉哪条路由。

    9         动态更新邻居能力

    传统BGP在变更能力配置的时候,需要断掉邻居关系重新建立。举个例子:一台正在转发数据的BGP路由器,增加VPLS配置后,会导致相关BGP邻居关系的复位,BGP路由重新计算,数据转发受到影响。而动态更新邻居能力特性,可以在配置新的能力地址族的时候,发送新的OPEN报文,同时BGP邻居动态地把新增加的能力记录下来。这样可以保证在邻居关系不会重新建立的前提下,提供了更多的业务支持,但是目前该特性还没有标准的RFC定义。