一、Internet路由表中的BGP路由条目,目前规模已经达到十几万。
在面对庞大的Internet路由表时,我们免不了需要进行路由过滤。在处理如此大规模的路由表时,如果利用地址前缀去过滤BGP路由,那么一来有可能配置比较繁琐,二来且有新的路由加入不好维护,所以提出了利用AS_PATH进行BGP路由过滤的办法。
二、由于Internet核心AS的分布都是有记录的
所以利用AS的过滤更有针对性,例如可以使用AS_PATH作过滤,解决过滤从某个AS_PATH始发的全部路由,只需一个AS_PATH列表即可,当然利用AS_PATH过滤可以解决的问题远不仅如此,这还需要我们在下文中慢慢体会。
三、AS_PATH与正则表达式介绍,AS_PATH,公认必遵属性。这个属性在传递UPDATE报文中标识了到达一个目的地所经过的AS信息,AS_PATH有4种类型:
AS_SEQUENCE(用于路由AS路径记录);
AS_SET(用于聚合路由的明细路由AS集合);
AS_CONFED_SEQUENCE(用于联盟路由AS路径记录);
AS_CONFED_SET(用于联盟聚合路由)。
四、从AS_PATH的显示格式看出,AS_PATH可以看成一个由数字0-9,“()”,“[]”,“{}”和空格组成的字符串。
当然例子中是最复杂的格式,实际应用中并不是所有字段都有填充的,当我们想利用匹配AS_PATH做路由过滤的时候,怎么实现对AS_PATH匹配呢?根据之前分析过AS_PATH可以看作是字符串的'这一特点,我们找到了处理字符串的强大工具正则表达式这把利剑来帮我们实现匹配,这样正则表达式就在BGP的舞台登场了。
五、正则表达式是按照一定的模板来匹配字符串的公式。
在BGP中,正则表达式可以应用于基于AS_PATH的ACL,根据BGP路由的AS_PATH属性决定路由的接受与拒绝。利用介绍的符号来对AS_PATH进行匹配,看看这些符号能够给我们带来多么奇妙的效果。
1、^$表示匹配的字符串为空,即AS_PATH为空,表示只匹配本地路由。
2、.*表示匹配任意字符串,即AS_PATH为任意,表示匹配所有路由。
3、^100表示匹配字符串开始为100,即AS_PATH最左边AS前3位(最后一个AS)为100、1001、1002等,表示匹配AS100、1001、1002等邻居发送的路由。
4、^100_表示匹配字符串开始为100后面为符号,即AS_PATH最左边AS(最后一个AS)为100,表示匹配AS100邻居发送的路由,比较前一个表达式,”_”的好处就体现出来了,它可以和用来帮助我们限制匹配单独的一个AS。
5、_100$表示匹配字符串最后为100,即AS_PATH最右边AS(起始AS)为100,表示匹配AS100始发的路由。
6、_100_表示字符串中间有100,即AS_PATH中有100,表示匹配经过AS100的路由。
7、(65535_表示匹配字符串为(65535后面为符号,即AS_CONFED_SEQUENCE最左边AS(最后一个AS)为65535,表示匹配联盟AS65535邻居发送的路由,我们知道,AS_CONFED_SEQUENCE是用”(”、“)”表示的,”(”、“)在正则中是特殊字符,有特殊用处,所以对于这种特殊字符,可以使用””来去除其特殊意义进行匹配,同理AS_CONFED_SET使用的”[“、”]”,AS_SET使用的”{”、”}”都可以使用””符号来去除这些特殊符号的特殊意义,举例[65533_,{202_。
8、(.*_205_.*)表示字符串AS_CONFED_SEQUENCE中间有205,即AS_CONFED_SEQUENCE中有205,表示匹配经过联盟AS205的路由。
9、_207)表示匹配字符串最后为207),即AS_PATH最右边AS_CONFED_SEQUENCE(起始AS)为207,表示匹配联盟AS207始发的路由。
IBGP水平分割,从IBGP邻居学到的路由不会再通告给其他的IBGP邻居;
在一个大型的AS当中收到IBGP水平分割的影响,出现了BGP路由无法通过IBGP邻居接收的问题,解决办法有三种:
1、全互连的IBGP邻居
2、路由反射器RR
3、BGP联盟
一、全互连的IBGP邻居
建立全互连的IBGP邻居将会需要更多的资源,每建立一个BGP邻居就需要一个TCP连接,这样会极大地消耗CPU资源,TCP连接数计算公式:n(n-1)/2
在大型的BGP网络中,一般不采用全连接方式,通常会采用路由反射器RR和联盟来解决
二、路由反射器RR
多台路由器只与一台中心路由器建立邻居关系,不需要全互连的邻居,这台中心路由器允许从IBGP邻居学来的路由被反射出去,打破了IBGP水平分割限制的中心路由器就是路由反射器RR;
1、路由反射器RR的几种角色:
(1)路由反射器route reflector
允许把从IBGP邻居学到的路由反射给其他IBGP邻居的BGP设备;
(2)客户机client
与RR形成反射邻居关系的IBGP设备,由RR决定哪台设备作为客户机;
(3)非客户机non-client
既不是RR也不是客户机的IBGP设备;
在AS内部所有的非客户机与RR必须建立全互连的IBGP邻居;
(4)始发者Originator
在AS内部始发路由的设备,Originator-ID属性用于防止集群内产生路由环路;
(5)集群Cluster
路由反射器及其客户机集合,Cluster-List属性用于防止集群间产生路由环路;
2、路由反射原理
同一集群内的客户机只需要与该集群的RR交换路由信息,所以客户机只需要与RR之间建立IBGP连接,不需要与其他客户机建立IBGP连接,从而减少IBGP连接数量;
RR打破了IBGP水平分割的限制,并采用Originator-ID属性和Cluster-List属性防止路由环路;
RR向IBGP邻居发布路由规则:
(1)从非客户机学来的路由,反射给所有的客户机;
(2)从客户机学来的路由,反射给其他所有的客户机和非客户机;
(3)从EBGP学来的路由,反射给所有的客户机和非客户机;
3、Originator-ID属性和Cluster-List属性
当网络中只部署一台RR时,如果该RR设备发生故障,将会导致其他所有的路由器无法收到路由,因此部署多台RR可以提供更好的冗余;
在一个AS内部署了两台RR设备,都能够用于路由的反射,其他设备同时与两台RR建立IBGP邻居关系,及时一台出现故障,另外一台也可以工作;
但是部署过多的RR以及复杂的拓扑也可能带来环路的隐患,AS-Path无法检测到AS内的环路,因此在部署路由反射器时,BGP提供了两种属性,用于检测AS内的环路问题,分别是Originator-ID和Cluster-List属性,这两个属性仅存在当RR将从IBGP邻居收到的路由向另一个IBGP邻居通告时,用于防止环路而添加的仅在AS内起作用的属性,这两个属性不会出现在AS外;
(1)Originator-ID:可选非过渡属性,RR反射路由时,为该路由添加Originator-ID属性(内容是路由始发者客户机的RouterID),用于防止集群内路由环路;
集群内环路现象:
一个集群中部署两个RR(两个RR使用相同的Cluster-ID),每个RR和集群中每个客户机建立IBGP邻居关系,两个RR之间建立IBGP邻居关系(如果存在EBGP邻居的话需要建立IBGP邻居关系);
客户机Client1通告一条路由给RR1,RR1将该路由反射给RR2,RR2继续反射该路由给客户机Clent1,路由回到始发路由器,Client1如果使用该路由则环路产生;
在反射集群内使用Originator-ID属性解决环路过程如下:
客户机Client1通告一条路由给RR1
RR1反射该路由时为该路由添加Originator-ID属性,内容是路由始发者客户机Client1的RouterID,然后反射给RR2;
RR2反射该路由时,发现路由已经携带Originator-ID属性,继续反射给客户机Client1;
客户机Client1收到该路由后,发现路由携带OriginatorID属性且与自身RouterID一致,丢弃该路由;
说明:此场景仅用于阐述Originator-ID原理,实际上RR1反射路由给RR2时,除了添加Originator-ID属性外,还添加了Cluster-List属性,RR2发现路由携带Cluster-List属性且包含自身Cluster-ID(两个RR属于同一集群,Cluster-ID相同),就会丢弃该路由;
(2)Cluster-List:可选非过渡属性,RR使用该属性记录路由经过每个集群的Cluster-ID,用来在集群间避免环路;
AS内的每个集群都由唯一的Cluster-ID来标识,默认为BGP的RouterID,可以使用命令Cluster-ID来修改;
当一条路由被RR反射的时候,RR会把本地Cluster-ID添加到Cluster-List的前面;
当RR接收到一条路由时,会检查Cluster-List,如果Cluster-List中已经有本地Cluster-ID,丢弃该路由,否则把本地Cluster-ID添加到Cluster-List的前面,然后反射出去;
集群间环路现象:
RR1、RR2、RR3是三个反射集群中的路由反射器,假设任意两个RR都是另一个RR的客户机,并部署全互连的IBGP邻居关系;
客户机Client1通告一条路由给RR1,RR1反射给RR2,RR2反射给RR3,RR3重新将该路由反射给RR1,一旦RR1接收并使用该路由则产生环路;
在反射集群之间使用Cluster-List属性解决花露过程如下:
客户机Client1将一条路由通告给RR1;
RR1收到该路由发现没携带Cluster-List属性,为路由添加Cluster-List属性并把自身集群Cluster-ID添加进去,然后反射出去;
RR2收到该路由发现携带Cluster-List属性,不包含自身集群Cluster-ID,把自身集群Cluster-ID添加进去,然后反射出去;
RR3收到该路由发现携带Cluster-List属性,不包含自身集群Cluster-ID,把自身集群Cluster-ID添加进去,然后反射出去;
RR1收到该路由发现携带Cluster-List属性,包含自身集群Cluster-ID,丢弃该路由;
4、路由反射器的设计部署
(1)备份路由反射器方案
为增加网络的可靠性,避免单点故障,需要在一个集群中配置一个以上的RR,同一集群中的所有RR必须使用相同的Cluster-ID;
路由反射器RR1和RR2在同一个集群内,配置了相同的Cluster-ID;
客户机Client和相同Cluster-ID的RR都建立IBGP邻居关系,RR之间建立IBGP邻居关系;
客户机Client学到EBGP路由后,同时向RR1和RR2通告这条路由;
RR1和RR2收到该路由后,将本地Cluster-ID添加到Cluster-List前面,然后向其他客户机反射,同时相互反射;
RR1和RR2收到该反射路由后,检查Cluster-List发现包含自身的Cluster-ID,丢弃该路由,能避免同集群内路由反射器间互相学习源自同一客户机的路由,节省内存空间;
由于集群内RR之间不互相学习Client的路由,所以如果RR上没有EBGP邻居关系,则RR间可以没有IBGP邻居关系;
(2)同级路由反射器方案
一个骨干网被分成多个集群,各集群的RR之间互为非客户机关系,建立IBGP全连接;
每个客户机只与所在集群的RR建立IBGP连接,所有RR和客户机都能收到全部路由信息;
(3)分层路由反射器方案
一个AS内可以存在多个集群,各个集群的RR之间建立IBGP邻居;
当RR所处的网络层不同时,可以将较低网络层次的RR配成客户机,形成分级RR;
每个路由反射器既可以作为该集群的反射器角色,也可作为其他集群的客户机角色;
三、BGP联盟
1、联盟概念
在一个AS中,受IBGP水平分割的影响,如果IBGP会话数量较多,管理起来将会显得麻烦,为了解决该问题,除了使用路由反射器外,还可以使用BGP联盟Confederation;
联盟的概念就是将一个AS划分为若干个子AS,每个子AS内部建立IBGP全连接关系(联盟IBGP邻居),子AS之间建立EBGP连接关系(联盟EBGP邻居),但联盟外部AS仍认为联盟是一个AS;
AS100被分成三个子AS(65001、65002、65003),使用AS100作为联盟ID,此时不需要采用IBGP全互连,连接数从10条减少到4条,如果没有配置联盟,AS100内部都是IBGP邻居,配置联盟以后形成了联盟EBGP邻居和联盟IBGP邻居,在联盟子AS内部可以使用全互连或RR,而在联盟子AS之间使用联盟AS-Path来避免环路;
2、联盟的特点
配置联盟后,原AS号将作为每个路由器的联盟ID;
通告给联盟内的路由,MED属性在整个联盟范围内保留;
Local Preference属性在整个联盟范围内保留,而不只是在通告的成员AS内;
在联盟内保留联盟外部的next-hop属性;
在联盟内将子AS号加入AS-Path中,但不会将联盟内子AS号通告到联盟之外;
联盟内的子AS号在AS-Path属性中用单独的两种类型AS-CONFED-SEQUENCE和AS-CONFED-SET表示,默认联盟将子AS号以AS-CONFED-SEQUENCE的形式在AS-Path中列出,如果在联盟内配置了聚合,AS号将以AS-CONFED-SET形式列出;
AS-Path中的联盟子AS号用于避免环路,不计算在AS-Path长度中;
联盟EBGP邻居和联盟IBGP邻居都被看作IBGP类型邻居,不存在联盟EBGP路由优于联盟IBGP路由,即在其他条件相同的情况下,同时从EBGP邻居学到、联盟EBGP或联盟IBGP学到同一条路由,从EBGP邻居学到的路由更优;
联盟内相关属性传出联盟时将会自动删除,不用配置策略过滤子AS号等信息;
3、联盟配置举例
R1为AS100,R2/R3/R4拥有联盟ID为200,R2和R3在联盟子AS65001中,R4属于联盟子AS65002,R5属于AS300;
通过命令confederation id配置BGP联盟,指定联盟ID;
通过命令confederation peer-as指定联盟内子AS号;
R2配置:
bgp 65001
confederation id 200
peer 12.1.1.1 as-number 100
peer 23.1.1.3 as-number 65001
R3配置:
bgp 65001
confederation id 200
peer 23.1.1.2 as-number 65001
confederation peer-as 65002
peer 34.1.1.4 as-number 65002
BGP叫边界网关协议,是用于AS间的一种路由协议。ospf、rip、isis等,均是用来发现路由的。
而BGP的功能主要是用来管理路由,而非发现路由,用于isp之间。
报文有4种:open,keepalive,update,notification。用此4中报文,有6种状态机。
open用来建立bgp邻居关系,keepalive用来保持这种连接,update用来发送更新或撤销的路由条目,notification用来通告网络错误。
一个典型的过程为:Idle(启动消息)->Connect(TCP连接成功,发OPEN)->OpenSent(收到OPEN消息,协商成功)->OpenConfirm(收到KEEPALIVE消息)->Established(TCP连接关闭,有错误,或处理UPDATE消息失败,或收到NOTIFICATION消息)->Idle
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)