文章目录
路由原则
路由选择的三种情况
1)、BGP路由到达目的只有唯一的路由,直连路由;
2)、BGP路由对到达同一目的多条路由,优选优先级最高的;
3)、BGP路由到达同一目的的多条路由,优先级一样,需要更细的优选原则;
路由优先级规则
1)、丢弃下一跳不可达的路由;
2)、优选Preference_Value值最高的路由(私有属性,仅本地有效),默认值为0,值越大越优先;
3)、优选本地优先级(Local_Preference)最高的路由(仅在IBGP之间有效)用于判断流量离开AS时的最佳路由,一般用来控制我本区域流量怎么出去,默认情况下Local-Pref值为100,该数值越大,优先级越高;
4)、优选手动聚合>自动聚合>network>import>从对等体学到的;
5)、优选AS_Path短的路由;
6)、起源类型IGP>EGP>Incomplete;
7)、对于来自同一AS的路由,优选MED值小的;
8)、优选从EBGP学来的路由(EBGP>IBGP);
9)、优选AS内部IGP的Metric最小的路由;
10)、优选Cluster_List最短的路由;
11)、优选Orginator_ID最小的路由;
12)、优选Router_ID最小的路由器发布的路由;
13)、优选具有较小IP地址的邻居学来的路由;
Preference_Value属性
如图所示,AS 200内有一个200.0.0.0/24的用户网段,AS 100内的管理员希望通过高带宽链路访问AS 200内的200.0.0.0/24网段,并希望在RTA上的策略只能影响自己的选路,不能影响其他设备,如何实现?
解决办案:在RTA上设置ip-prefix匹配200.0.0.0/24的路由,再设置route-policy调用该ip-prefix,并设置Preference_Value为100,将策略应用在对RTC发布路由的 import方向。
验证:RTC上使用Tracert命令,查看访问200.0.0.0/24网段经过的路由器。
聚合方式对选路的影响
聚合方式的优先级:手动聚合 >> 自动聚合
如图所示,在AS 200内,RTB与RTC上存在200.0.0.0/24网段的用户,RTB与RTC将200.0.0.0/24的网段通过import方式变为BGP路由,在RTB上将路由聚合后发给RTA,同时开启自动聚合与手动聚合,RTB如何优选聚合路由?
如图所示,在RTB上同时使能自动聚合与手动聚合,使用命令查看,可以发现,手动聚合的路由条目被发送给RTA,自动聚合的路由条目则没有通告,说明手动聚合的优先级高于自动聚合。
在使用路由聚合时需要注意,自动聚合只能对引入的BGP路由进行聚合,手动聚合可以对存在于BGP路由表中的路由进行聚合,后续在BGP路由聚合中详细介绍。上述场景中,因为需要聚合的路由都是引入的路由,所以使用自动聚合与手动聚合都可以实现聚合的目的。如果BGP路由表中既有引入的路由又有network宣告的路由时,只能采用手动聚合实现
EBGP的邻居路由优先于IBGP的邻居路由
如图所示,在AS 200内有一个200.0.0.0/24的网段,通过EBGP邻居关系通告给RTA与RTB,RTB会通过IBGP邻居关系将200.0.0.0/24的网段通告给RTA,于是RTA会收到两条到达200.0.0.0/24的路由,RTA会如何优选?
根据选路原则,RTA会优选从EBGP邻居学来的路由。
AS内部IGP Metric
如图所示,AS 200内有一个200.0.0.0/24的用户网段,通过EBGP发布给RTB与RTC,RTB与RTC通过IBGP将路由发布给RTA。AS 100内的管理员希望通过高带宽链路访问AS 200内的200.0.0.0/24网段, RTA上该如何实现?
将RTA与RTB所连接口的OSPF Cost值调为100,RTA则将选择RTA->RTC->RTD的路径访问200.0.0.0/24网段:
原因是RTA访问200.0.0.0/24时,到Next_hop 10.1.34.4的Cost(2)小于到Next_hop 10.1.24.4 (101)的Cost。
Router-ID与IP地址对BGP选路的影响
如图所示,AS 200内有一个200.0.0.0/24的用户网段,通过EBGP发布给RTB和 RTC,RTB和RTC通过IBGP将路由发布给RTA。RTA和RTB之间通过2条链路相连,RTA会如何优选?
RTA会选择下一跳为10.1.12.2作为下一跳访问200.0.0.0/24的网段:
RTA选择RTA->RTB->RTD的路径访问200.0.0.0/24网段,原因是RTB的Router-ID比RTC小,BGP优选Router-ID较小的路由器发布的路由;
RTA选择下一跳为10.1.12.2地址所在的接口为出接口,原因是BGP优选IP地址较小的邻居学来的路由。
BGP路由策略控制实例
如图所示,AS 300内有两个用户网段,AS 100内用户访问这两个网段时,希望在RTB和RTC上实现流量分担。AS 200访问这两个网段时,希望在RTE和RTF上实现流量分担。请用尽可能多的方法来实现上述需求。
根据需求,在AS 100访问这两个网段时,希望在RTB和RTC上实现流量分担;在AS 200访问这两个网段时,希望在RTE和RTF上实现流量分担。假设RTA访问100.0.0.0/24时的路径为RTA->RTB->RTD->RTE->RTG,访问200.0.0.0/24时的路径为RTA->RTC->RTD->RTF->RTG,根据所学路径属性的知识,可供参考解决方案如下:
RTE和RTF向RTD通告携带团体属性的路由;
RTD收到携带团体属性的路由后,使用两个Community-filter分别匹配不同的团体属性,再使用两个route-policy分别调用Community-filter,将匹配团体属性300:100的路由的下一跳设为RTE上的出接口地址;将匹配团体属性300:200的路由的下一跳设为RTF上的出接口地址;
RTD上再设置两个route-policy,一个是将匹配团体属性为300:100的路由设置其MED值为100,在对RTC的export方向调用;另一个是匹配团体属性为300:200的路由并设置其MED值为100,在对RTB的export方向调用。
RTD上的配置:
bgp 200
peer 10.1.24.2 as-number 100
peer 10.1.34.3 as-number 100
peer 10.1.45.5 as-number 300
peer 10.1.46.6 as-number 300
#
ipv4-family unicast
undo synchronization
peer 10.1.24.2 enable
peer 10.1.24.2 route-policy MED-20 export
peer 10.1.24.2 advertise-community
peer 10.1.34.3 enable
peer 10.1.34.3 route-policy MED-10 export
peer 10.1.34.3 advertise-community
peer 10.1.45.5 enable
peer 10.1.45.5 route-policy 10 import
peer 10.1.46.6 enable
peer 10.1.46.6 route-policy 10 import
#
route-policy 10 permit node 10
if-match community-filter 10
apply ip-address next-hop 10.1.45.5
#
route-policy 10 permit node 20
if-match community-filter 20
apply ip-address next-hop 10.1.46.6
#
route-policy MED-10 permit node 10
if-match community-filter 300:100
apply cost 100
#
route-policy MED-20 permit node 10
if-match community-filter 20
apply cost 100
#
ip community-filter 10 permit 300:100
ip community-filter 20 permit 300:200
验证:在RTA上执行如下命令:
tracert 100.0.0.1,观察所经过的IP地址。
tracert 200.0.0.1,观察所经过的IP地址。
其他方法有待大家探索。
BGP路由聚合
BGP在AS之间传递路由信息,随着AS增加,BGP路由表将会变的十分庞大,因此就会引发两个问题:
1)、存储路由表会占用大量的内存资源,传递和理解路由需要耗费大量的带宽资源;
2)、如果传输的路由频繁的更换或撤销,对网络的稳定性会很大的影响;
BGP路由聚合的必要性
如图所示,AS 100内有4个用户网段,AS 200内有4个用户网段。AS 300连接了一个Client AS,该AS内的路由器比较低端,处理能力较低,因此既希望能访问AS 100与AS 200内的网段,又不希望接收过多的明细路由,如何解决该问题?
解决方案:
在RTC上将AS 100和AS 200内的明细路由聚合成10.1.8.0/21的一条路由,并将此聚合路由发布给Client AS。
现在Internet上的路由条目数量众多,处理这些路由时存在以下问题:
存储路由条目的路由表将占用大量的内存资源,传输路由信息需要占用大量的带宽资源;
明细路由频繁震荡造成网络不稳定。
因此,通过路由聚合来节省内存和带宽资源,减少路由震荡带来的影响成为必然。
BGP路由聚合-静态
如图所示,AS 100内有4个用户网段,RTA通过路由聚合屏蔽明细路由,只将一条聚合后的路由10.1.8.0/22发布给AS 200内的RTB。
使用静态路由配置路由聚合的思路:
使用静态路由将明细路由聚合成10.1.8.0/22,下一跳指向NULL 0,因为聚合路由并不是具体的地址,发送给AS 200时只是明细路由的替代,为了防止路由环路,所以将下一跳指向Null 0。
由于使用静态路由,路由表中产生了一条10.1.8.0/22的路由,下一跳为Null 0。使用network命令将IP路由表中的10.1.8.0/22路由变为BGP路由,并通告给对端BGP邻居,达到聚合的目的。
BGP路由聚合-自动聚合
如图所示,AS 100内有4个用户网段,通过import的方式变为BGP路由,AS 200连接了一个Client AS,该AS内的路由器处理能力较低,因此既希望能访问AS 100与AS 200内的网段,又不希望接收过多路由,如何解决该问题?
解决方案:自动聚合只对引入BGP的路由进行聚合,聚合到自然网段后发送给邻居。
BGP路由聚合-手动聚合
如图所示,AS 100内有4个用户网段,既有通过import的方式引入BGP的路由,又有通过network方式引入BGP的路由。AS 200连接了一个Client AS,该AS内的路由器处理能力较低,因此既希望能访问AS 100与AS 200内的网段,又不希望接收过多路由,如何解决该问题?
解决方案:手动聚合对BGP本地路由表里存在的路由进行聚合,并且能指定聚合路由的掩码。
解决BGP路由聚合带来的问题
1)问题1:路由器选路问题;
2)问题2:环路问题;
为了解决BGP路由聚合带来的问题,设置了两个AS_Path属性:
Atomic-Aggregate:公认任意属性,用于警告下游路由器出现了信息丢失,如图所示,AS 200内设置了路由聚合的路由器在聚合后发生了路径丢失的现象,此时该路由器通过Update报文携带该属性通知自己的邻居发生了路径丢失。
Aggregator:可选过度属性,该属性包含发起聚合的路由器的AS号和Router-ID,表明发生聚合的位置。
AS_Path属性有两种类型:
AS_Sequence:表示AS_Path内的AS号是一个有序的列表。
AS_Set:表示AS_Path内的AS号是一个无序的列表。
AS_Path本身是一个有序的列表,因为AS_Path每经过一个AS都会将AS号添加到AS_Path中,并且按经过的顺序从左到右排列。
如图所示,AS 400向AS 300通告聚合路由时,AS_Path属性(大括号的除外)表示该聚合路由依次经过了AS 200和AS 400。
当发生聚合后,如果需要聚合路由携带所有明细路由经过的AS号来防止环路,则在配置聚合的命令后添加as-set参数。
如图所示,AS 200内发生了聚合并配置了as-set参数,则聚合路由会将明细路由的AS_Path信息用一个AS-Set集表示(放在中括号里的AS号信息,该集合的AS号没有先后顺序),携带在聚合路由后用以防止环路。
讨论:
路由聚合解决了两类问题,一是减轻了设备传输和计算路由所需资源的负担,二是隐藏了具体的路由信息,减少了路由震荡的影响。但是路由聚合后,AS_Path属性丢失,存在产生环路的风险。
如果路由聚合后携带所有明细路由经过的AS信息,当明细路由发生频繁震荡时,聚合路由也可能受其影响频繁刷新。
因此,聚合路由是否携带丢失的AS_Path信息,需要设计者综合考虑网络环境。