文/陈磊
BGP协议将路由学习和路由策略很好的融合在了一起。团体属性的引入就是为了更好的使用路由策略功能。
团体属性的定义很简单,但是要想将之应用到真实的网络中,却是一个需要创造力和有着无限可能性的工作。本文是对于团体属性应用的一个简单介绍。
Ø 团体属性
团体属性可以添加在每一个路由前缀中,由RFC1997定义,是一个transitive optional属性。包含有团体属性的路由,表示该路由是一个路由团体中的一员,该路由团体具有某种或多种相同的特征。根据这些特征区分不同的路由,可以大大简化路由策略的配置工作,同时也增强路由策略的能力。
例如,一个ISP可以给自己所有的customer路由指定一个具体的团体属性,这样,学习到该路由的路由器要想给这些路由指定MED或者LOCAL_PREF等属性时,直接基于该团体属性进行操作,而不需要一条路由一条路由的去指定。
团体属性的Type code是8,32个bites长。可以解析为一个10进制的数,也可以解析为AA:NN的格式。RFC中规定,16个bites作为AS number,后16个bites由该AS自己使用。同时,这32个bites开头的部分0x00000000――0x0000FFFF和结尾的部分0xFFFF0000――0xFFFFFFFF被保留。
RFC1997还规定了几种公认的团体属性:
INTERNET:默认的团体属性,所有路由都属于该团体。
NO_EXPORT(4294967041,or 0xFFFFFF01):含有该属性的路由不向任何联盟外的EBGP邻居发送,如果没有定义联盟,则认为该AS是一个独立的联盟。例如,大量的没有必要透传到internet的IP子网路由,可以标记该团体属性,以控制一些不需要的路由的规模。
NO_ADVERTISE(4294967042,or 0xFFFFFF02):含有该属性的路由不向任何BGP邻居发送,包括EBGP和IBGP。
Local-AS(4294967043,or 0xFFFFFF03):也称作NO-ADVERTISE-SUBCONFED:含有该属性的路由,不向任何EBGP邻居发送,包括联盟内的EBGP邻居。
设备收到带有这几个公认的团体属性的路由,是自动按照RFC规定来执行的,不需要再配置路由策略。
Ø 扩展团体属性
因为团体属性的使用越来越丰富,原有的32bite定义已经不能满足各种应用。应运而生的就是扩展团体属性。使用了新的Type code和格式,在RFC4360中定义。比起原来的团体属性,扩展团体属性提供了更长的取值范围,以减少冲突的可能;同时,还增加了一个Type字段,可以使得路由策略直接基于扩展团体属性的type字段进行操作。相当于将一些原来需要通过复杂的团体属性配置才能实现的功能,直接添加到了扩展团体属性的结构中。
扩展团体属性也是transitive optional,Type code是16,64个bites长,结构如下:
- Type Field:1 or 2 octets
- Value Field:Remaining octets
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type high | Type low(*) | |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Value |
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Type字段使得团体属性的应用更为灵活:
Type high字段的bit 0,表示该扩展团体属性是否是在IANA注册过的公认属性;
Type high字段的bit 1,表示该扩展团体属性的转发范围,0表示可以跨AS;1表示不能,只能在本地AS中使用。
扩展团体属性分为两种:regular type和extend type:regular type的type字段8bites长(只包含type high),extend type的type字段16bites长(type high和type low都包含)
RFC4360中给出了具体的扩展团体属性各字段的定义以及若干种应用模板,这里着重要注意的是已经得到了广泛应用的Route Target Community:在MPLS VPN应用中,RT团体属性来区分不同VRF的路由,路由器通过RT中的内容,判断该路由是否需要添加到相应的VRF中。
虽然RFC中规定了部分公认的团体属性,但是大部分情况下,团体属性都是由每个网络运营者自己定义规则和应用方法,然后供自己或者自己的客户使用。
一般情况下,团体属性承载了如下两方面的内容:
第一种是针对路由发送者,添加了一些路由的相关信息:例如路由是怎么学习到的,从哪里学习到的。这类内容可以给网络中的路由的使用者提供更多的信息进行路由选择;
第二种是针对路由接收者,通知接收者应该对该路由进行那些操作:例如接收者可以/不可以接收这些路由,接受者应该对这条路由的属性进行某些修改。
两方面的内容可以独立使用,也可以混合在一起。确定具体的承载内容和格式是一个很需要些创造力的工作,由网络运营商自行确定。
有时为了承载更多的不同类型的信息,会将多种含义融合到同一个团体属性中,匹配时会使用正则表达式。
下面是几个具体的应用举例:
图1
首先,看一个典型的团体属性作为路由信息补充的例子:团体属性用来标识每条路由的来源,用于帮助路由接收者进行选路。
图1中,AS 100作为供应商,与三个客户AS A,B,C分别建立BGP连接关系。其中,三个客户基于自己的应用,对供应商提供给自己的路由提出了要求:AS C希望学习到AS A和B的所有路由;AS A和B都只希望学习到AS C的路由。
供应商AS100通过使用团体属性,可以很容易的实现这点:
首先,在AS100内,使用团体属性的个位数表示路由是来自那个AS:所有从AS A收到的路由增加一个团体属性100:1,所有从AS B收到的路由增加一个团体属性100:2,所有从AS C收到的路由增加一个团体属性100:3;
之后,按照上面的要求,在与AS C邻接的设备上配置允许发送团体属性为100:1,100:2的路由,在与AS A邻接的设备和与AS B邻接的设备上配置允许发送团体属性为100:3的路由。
将上面的例子扩展一下,如果对于整个internet上的不同节点根据地理位置编号,再添加到路由的团体属性中,就可以知道每条路由来自何方了。
同时,在进行路由引入操作时,我们也可以用团体属性标记该路由是从那个IGP引入的。例如,使用团体属性的百位数表示引入路由的IGP:100:100表示是从OSPF引入的路由,100:200表示是从RIP学习到的路由。这样,路由接收者可以方便的根据路由的来源,作为选路的一个标准。
更进一步,将上面的两种团体属性在规则上进行一下组合,我们可以用100:101表示从A学习到的由OSPF引入的路由。对于这种相对比较复杂的团体属性的匹配,我们都可以通过正则表达式来实现。
在AS之间进行流量控制时,有多种方法,例如添加AS_path,使用MED,或者只是简单的发布掩码更长的路由。而团体属性,也可以很方便的告知邻接的AS,路由应该被如何如何处理。
这里我们看一个路由多归属网络的应用:用户同时在多个网络供应商处有出口,作为流量分担和备份。此时,为了实现用户流量的备份和流量分担,需要供应商和用户之间进行一系列的路由策略的交互。考虑一个供应商往往服务大量的用户,对于每个用户都需要若干路由策略的配置,这将是一个庞大复杂的工作,而且很容易引发问题。
为了更好的优化这个问题,RFC1998中定义了一种使用团体属性作为DPA(Destination Preference Attibute,目的优先级属性)的应用。也就是在团体属性中体现路由的优先级,然后路由器在给该路由分配Local_Pref时,依据这个DPA来分配。
RFC中的定义了如下的团体属性与Local_Pref的对应关系:
客户的路由 | Community | Local_Pref |
客户主用路由 | 供应商ASN:100 | 100 |
客户备份路由 | 供应商ASN:90 | 90 |
从其他ISP学习到的客户路由 | 供应商ASN:80 | 80 |
客户提供的其他客户的备份路由 | 供应商ASN:70 | 70 |
考虑如图2中的组网,AS99是用户,与两个供应商AS100和AS200相连。用户希望实现路由的分担和备份:1.1.1.0/24和2.2.2..0/24是用户的两个网段,AS100为1.1.1.0/24的主用路径,AS200为2.2.2.0/24的主用路径。
具体的实现方式,图2中已经标注:整个过程中,community作为一个路由的优先级使用,由客户主导。客户在向两个AS发送路由时,根据网络规划,分别给予1.1.1.0/24和2.2.2.0/24不同的community值。而两个供应商AS内,则根据不同的community值,指定该路由的Local_pref,从而实现流量分担和路由备份。
图3是一个community在安全方面的应用:
当用户的某一台主机(192.168.1.99)受到DOS攻击时,用户向供应商发布一条该受攻击设备的主机路由,community为与网络供应商事先协商好的值(200:111)。
供应商收到匹配该community的路由后,将路由的下一跳指向Null接口。
这样,供应商就可以在自己的边缘设备商直接丢弃所有指向192.168.1.99的报文。
图4中的应用中,用户有两条到达目的X的路径。当主用路径上的路由器发现自己到达X的链路可用带宽减小,或者处于拥塞状态时。他通过一个community值,将这个链路状态信息传递给用户。
用户收到带有该community值的路由后,自动降低其Local_pref,使得通往X的数据自动切换到备用AS上。从而实现了网络拥塞信息/带宽信息在设备之间的传递
图4
团体属性极大的强化了BGP,它使得BGP除了路由功能以外,还添加了信息传递和策略指定的功能。如果可以合理的进行团体属性的部署,不仅可以有效的管理网络,还提供无限的可能性,来满足用户不同的需求。
Ø 给网络选择一组内部使用的团体属性:可以合理的表现网络的拓扑和特征。因为网络供应商要么不提供团体属性,要么就是太简单,要么太繁琐,不适用于内部使用;
Ø 保证团体属性配置的简洁:过于复杂的团体属性结构,会要求在路由器上进行繁杂的路由策略配置。以至于很难进行问题定位;
Ø 避免将从自己的邻居收到的不认识的团体属性转发给其他AS:它可能给你的网络流量带来不可控和不可知的潜在危险;
Ø 所有内部和外部团体属性,都需要完整的文档记录。