文/高国义
BGP越来越多的在规模比较大的企业或运营商得到部署应用, BGP丰富的路由属性能够轻松的进行路由选路。但是,受到BGP横向隔离规则规定的限制,即IBGP邻居关系不会把它的路由从邻居学习过来的路由传递给其他的IBGP邻居,导致在这些网络中需要在运行BGP的网络设备进行全连接的IBGP对等体的配置。那么在这些较大网络中需要配置在IBGP对等体为N*N个BGP邻居关系,这样就加大了实施的难度和后期网络分析的难度。由此BGP运行而生的两个特性反射器和联盟。
路由反射器(RR)的作用主要是为了简化IBGP邻居配置,使用反射器后允许反射器将来自IBGP邻居的路由信息发给另一个或一组IBGP邻居。路由器让被配置为路由反射器的路由器向其他IBGP对等体传输由IBGP所学到的路由来修改BGP的横向隔离规则,也就不再需要全互连的IBGP对等体。
² 路由反射器:是被配置为允许它把通过IBGP所学到的路由通告(或反射)到其他IBGP对等体的路由器;
² 客户:是和路由反射器有IBGP对等关系并配置成反射邻居关系的路由器;
² 非客户:不是路由反射器的客户的其他IBGP的对等体;
² originator(始发者)ID:是被路由反射器创建,这个属性带有本AS内部路由始发者的路由ID;
² 集群:路由反射器及其客户集合;
² 路由反射器集群表:路由报经过的集群ID序列。
originator(始发者)ID、集群ID和集群表有助于在路由反射器配置中防止产生路由环路。
² 路由反射器会依次在客户机之间反射信息。路由反射器和它的所有客户机构成一个群。一个群内允许有多个路由反射器,一个路由反射器可以把别的路由反射器配置成它的客户机或非客户机。
² 路由反射器在它的客户机和非客户机之间传送路由更新的规则:
l 如果路由更新是从非客户机收到的,仅反射给客户机;
l 如果路由更新是从客户机收到的,反射给所有非客户机以及客户机,除了这个路由更新的始发者;
l 如果路由更新是从EBGP相邻体收到的,反射给所有的客户机和非客户机。
上图中如果没有配置反射器,由于有横向隔离原则,RTD收到IBGP邻居RTC的更新后不向别的IBGP邻居发送,结果导致RTB和RTA上就无法的到RTC的路由。那么如何解决这种问题呢?
方案一:
使AS域内的路由器进行物理上的全连接,在RTB和RTC之间增加一条物理链路,在RTC和RTB之间建一个IBGP邻居关系,使RTC能够直接把自己的路由传递给RTB路由器,由RTB路由器直接通过EBGP邻居关系,把路由传递给RTA。
这种全连接的网络部署方案,一方面组网成本高,另一方面BGP连接的数目增多相应的增加了系统的资源消耗,全连接的网络部署可扩展性差。
有没有简单一点的方法呢?
方案二:
使AS域内的路由器进行逻辑全连接,使RTB和RTC的IGP路由互相可达,在RTB和RTC之间建立一个IBGP邻居关系,使RTC能够直接把自己的路由传递给RTB路由器,由RTB路由器直接通过EBGP邻居关系,把路由传递给RTA。
这种方案也需要增加了BGP邻居关系的配置。
还有没有更加简单的方法呢?
终极方案:
不用增加物理链路、不用新增IBGP邻居关系――――――配置BGP路由反射器。
把RTD配置路由反射器,同时RTB和RTC配置反射器RTD的客户,这样根据反射器的路由反射原理,RTC就可以轻松的把自己的路由反射给RTB,并由RTB通过EBGP邻居关系。
修改后的应用组网图:
1、 公网路由BGP路由传递过程
从RTC经过路由反射器传递一条路由给RTA路由器,RTA的router id为1.1.1.1、RTB的router id为2.2.2.2、RTD的router id为3.3.3.3、RTC的router id为4.4.4.4.
RTC发布一条路由4.4.4.4/32给IBGP反射器。
反射器RTD学习到该条路由,并把这条路由4.4.4.4/32反射客户机RTB。
<RTD>dis bgp routing-table 4.4.4.4
BGP local router ID : 3.3.3.3
Local AS number : 100
Path: 1 available, 1 best
BGP routing table entry information of 4.4.4.4/32
RR-client route
From : 30.0.0.2 (4.4.4.4)
Relay Nexthop : 0.0.0.0
Original nexthop : 30.0.0.2
AS-path : (null)
Origin : incomplete
Attribute value : MED 0, localpref 100, pref-val 0, pre 255
State : valid, internal, best,
Advertised to such 1 peers:
20.0.0.1
客户机RTB学习到通过反射器反射的4.4.4.4/32的路由,该路由的Originator为4.4.4.4(即RTC路由器)、Cluster list为3.3.3.3(即该路由被反射器RTD路由器反射过来)、Original nexthop为30.0.0.2(该路由始发下一跳)、Relay Nexthop为20.0.0.2(该路由中继下一跳)。
<RTB>dis bgp routing-table 4.4.4.4
BGP local router ID : 2.2.2.2
Local AS number : 100
Path: 1 available, 1 best
BGP routing table entry information of 4.4.4.4/32
RR-client route
From : 20.0.0.2 (3.3.3.3)
Relay Nexthop : 20.0.0.2
Original nexthop : 30.0.0.2
AS-path : (null)
Origin : incomplete
Attribute value : MED 0, localpref 100, pref-val 0, pre 255
State : valid, internal, best,
Originator : 4.4.4.4
Cluster list : 3.3.3.3
Advertised to such 1 peers:
10.0.0.1
RTA路由器通过EBGP邻居关系学习到4.4.4.4/32这条路由。
<RTA>dis bgp routing-table 4.4.4.4
BGP local router ID : 1.1.1.1
Local AS number : 200
Path: 1 available, 1 best
BGP routing table entry information of 4.4.4.4/32
From : 10.0.0.2 (2.2.2.2)
Original nexthop : 10.0.0.2
AS-path : 100
Origin : incomplete
Attribute value :pref-val 0, pre 255
State : valid, external, best,
Not advertised to any peers yet
这样路由反射器成功屏蔽BGP的横向隔离规则,把路由传递给RTA路由器。
2、 公网路由BGP反射器嵌套路由传递过程
从RTE传递一条路由5.5.5.5/32给RTA路由器,RTA的router id为1.1.1.1、RTB
的router id为2.2.2.2、RTC的router id为3.3.3.3、RTD的router id为4.4.4.4、RTE的router id为5.5.5.5;其中RTB和RTD为一级反射器、RTC为二级反射器。
在RTE上在BGP中发布一条路由5.5.5.5/32。
在反射器RTD查看5.5.5.5/32的路由,发现路由已经学习到该条路由,并把该条路由5.5.5.5/32反射给反射器RTC。
<RTD>dis bgp routing-table 5.5.5.5 32
BGP local router ID : 4.4.4.4
Local AS number : 100
Path: 1 available, 1 best
BGP routing table entry information of 5.5.5.5/32
RR-client route
From : 40.0.0.2 (5.5.5.5)
Relay Nexthop : 0.0.0.0
Original nexthop : 40.0.0.2
AS-path : (null)
Origin : incomplete
Attribute value : MED 0, localpref 100, pref-val 0, pre 255
State : valid, internal, best,
Advertised to such 1 peers:
30.0.0.1
在RTC上查看5.5.5.5/32的路由,发现该路由已经被接受到。该路由的Originator为5.5.5.5、Cluster list为4.4.4.4(表明已经经过反射器4.4.4.4的反射)。
<RTC>dis bgp routing-table 5.5.5.5 32
BGP local router ID : 3.3.3.3
Local AS number : 100
Path: 1 available, 1 best
BGP routing table entry information of 5.5.5.5/32
RR-client route
From : 30.0.0.2 (4.4.4.4)
Relay Nexthop : 30.0.0.2
Original nexthop : 40.0.0.2
AS-path : (null)
Origin : incomplete
Attribute value : MED 0, localpref 100, pref-val 0, pre 255
State : valid, internal, best,
Originatror : 5.5.5.5
Cluster list : 4.4.4.4
Advertised to such 1 peers:
20.0.0.1
在RTB上查看5.5.5.5/32的路由,发现该路由已经被接受到。该路由的Originator为5.5.5.5、Cluster list为3.3.3.3,4.4.4.4(表明已经经过反射器4.4.4.4和反射器3.3.3.3的反射)。
<RTB>dis bgp routing-table 5.5.5.5 32
BGP local router ID : 2.2.2.2
Local AS number : 100
Path: 1 available, 1 best
BGP routing table entry information of 5.5.5.5/32
From : 20.0.0.2 (3.3.3.3)
Relay Nexthop :20.0.0.2
Original nexthop : 40.0.0.2
AS-path : (null)
Origin : incomplete
Attribute value : MED 0, localpref 100, pref-val 0, pre 255
State : valid, internal, best,
Originatror : 5.5.5.5
Cluster list : 3.3.3.3, 4.4.4.4
Advertised to such 1 peers:
10.0.0.1
在RTA上查看5.5.5.5/32的路由,发现该路由已经被接受到。该路由的Originator为5.5.5.5、Cluster list为2.2.2.2,3.3.3.3,4.4.4.4(表明已经经过反射器4.4.4.4、反射器3.3.3.3和反射器2.2.2.2的反射)。
<RTA>dis bgp routing-table 5.5.5.5 32
BGP local router ID : 1.1.1.1
Local AS number : 100
Path: 1 available, 1 best
BGP routing table entry information of 5.5.5.5/32
From : 10.0.0.2 (2.2.2.2)
Relay Nexthop :10.0.0.2
Original nexthop : 40.0.0.2
AS-path : (null)
Origin : incomplete
Attribute value : MED 0, localpref 100, pref-val 0, pre 255
State : valid, internal, best,
Originatror : 5.5.5.5
Cluster list : 2.2.2.2, 3.3.3.3, 4.4.4.4
Not advertised to any peers yet
在多反射器的存在或反射器嵌套的网络里,路由在被反射时,会添加反射器的ID,这样该路由经过的反射器就被有效的记录下来。这时当反射器收到一条路由的Cluster list中,包含自己的反射器ID时,反射器就不会反射该路由,这样就可以有效的防止路由环路。
3、私网路由BGP路由传递
RTB、RTD和RTC组网MPLS VPN网络,RTB和RTC为PE设备,使RTD配置成VPNv4
路由反射器。从RTC经过路由反射器传递一条VPN路由44.44.44.44/32给RTB路由器, RTB的router id为2.2.2.2、RTD的router id为3.3.3.3、RTC的router id为4.4.4.4。
RTC发布一条VPN路由44.44.44.44/32给MP-IBGP反射器。
反射器RTD学习到该条路由,并把这条路由44.44.44.44/32反射客户机RTB。
[RTD]dis bgp vpn vpn routing-table 44.44.44.44
BGP local router ID : 3.3.3.3
Local AS number : 100
Paths: 1 available, 1 best
BGP routing table entry information of 44.44.44.44/32:
RR-client route
From : 4.4.4.4 (4.4.4.4)
Relay Nexthop : 0.0.0.0
Original nexthop : 4.4.4.4
Ext-Community :<RT: 100:1>
AS-path : (null)
Origin : incomplete
Attribute value : MED 0, localpref 100, pref-val 0, pre 255
State : valid, internal, best,
Not advertised to any peers yet
客户机RTB学习到通过反射器反射的44.44.44.44/32的路由,该路由的Originator为4.4.4.4(即RTC路由器)、Cluster list为3.3.3.3(即该路由被反射器RTD路由器反射过来)、Original nexthop为4.4.4.4(该路由始发下一跳)、Relay Nexthop为0.0.0.0(该路由中继下一跳)(VPNv4路由为隧道迭代方式,故该项为全零)。
[RTD]dis bgp vpn vpn routing-table 44.44.44.44
BGP local router ID : 2.2.2.2
Local AS number : 100
Paths: 1 available, 1 best
BGP routing table entry information of 44.44.44.44/32:
From : 3.3.3.3 (3.3.3.3)
Relay Nexthop : 0.0.0.0
Original nexthop : 4.4.4.4
Ext-Community :<RT: 100:1>
AS-path : (null)
Origin : incomplete
Attribute value : MED 0, localpref 100, pref-val 0, pre 255
State : valid, internal, best,
Originatror : 4.4.4.4
Cluster list : 3.3.3.3
Not advertised to any peers yet
这样路由反射器成功屏蔽BGP的横向隔离规则,把路由传递给RTA路由器。
BGP另一个比较强的功能就是过滤功能了,那么这个功能是否因为配置BGP反射器后过滤功能不再强大那呢?可以肯定的告诉大家,反射器上的路由过滤功能依然强大。特别值得一提的就是反射器对VPNv4路由的过滤。公网BGP反射器上的路由过滤,一般情况下仅仅针对路由使用路由过滤策略即可完成。相对比较复杂的是VPNv4的路由过滤,这种过滤的在反射器上的过滤需要使用的参数一般会包括Ext-Community即RT。VPNv4的路由过滤功能一般均把RT和具体路由进行结合的过滤方式。下面以一个MPLS VPN的组网举例进行讲解。
RTB、RTD和RTC组网MPLS VPN网络,RTB和RTC为PE设备,使RTD配置成VPNv4
路由反射器。RTC和RTB上均配置两个VPN,并设置RT分别为100:1和200:1。从RTC经过路由反射器同一个VPN内传递两条VPN路由44.44.44.44/32、55.55.55.55/32和66.66.66.66/32、77.77.77.77/32给RTB路由器, RTB的router id为2.2.2.2、RTD的router id为3.3.3.3、RTC的router id为4.4.4.4。
1、 过滤VPN的全部路由
针对VPN路由的过滤,很多情况均需要在反射器上过滤掉VPN的配置的RT属性直接即可。本例在反射器上配置过滤RT=100:1的路由即可。
#
bgp 100
undo synchronization
peer 4.4.4.4 as-number 100
peer 2.2.2.2 as-number 100
peer 4.4.4.4 connect-interface LoopBack1
peer 2.2.2.2 connect-interface LoopBack1
#
ipv4-family vpnv4
peer 2.2.2.2 enable
peer 2.2.2.2 route-policy deny-vpn1 export
peer 2.2.2.2 reflect-client
peer 4.4.4.4 enable
peer 4.4.4.4 reflect-client
#
ospf 1
area 0.0.0.0
network 0.0.0.0 255.255.255.255
#
route-policy deny-vpn1 deny node 10
if-match extcommunity 1
route-policy deny-vpn1 permit node 20
#
ip extcommunity-list 1 permit rt 100:1
#
在RTB上仅仅能够收到VPN2的66.66.66.66/32、77.77.77.77/32,VPN1的路由被过滤掉了。
[RTB] dis bgp vpnv4 all routing-table
BGP Local router ID is 2.2.2.2
Status codes: * - valid, > - best, d - damped,
h - history, i - internal, s - suppressed, S - Stale
Origin : i - IGP, e - EGP, ? - incomplete
Total Number of Routes from all PE: 2
Route Distinguisher:200:1
Network NextHop In/Out Label MED LocPrf
*>i 66.66.66.66/32 4.4.4.4 Null/1027 0 100
*>i 77.77.77.77/32 4.4.4.4 Null/1027 0 100
Total Routes of vpn-instance vpn2: 2
Network NextHop In/Out Label MED LocPrf
*>i 66.66.66.66/32 4.4.4.4 Null/1027 0 100
*>i 77.77.77.77/32 4.4.4.4 Null/1027 0 100
2、 过滤VPN的某些路由
如果需要过滤某VPN的某些路由,只需要在反射器上配置RT和明细路由结合的过滤规则即可。本例以过滤VPN1的44.44.44.44/32和VPN2的66.66.66.66/32的过滤为例。
#
route-policy deny-vpn-mingxi deny node 10
if-match acl 2000
if-match extcommunity 1
route-policy deny-vpn-mingxi deny node 20
if-match acl 2001
if-match extcommunity 2
route-policy deny-vpn-mingxi permit node 30
#
ip extcommunity-list 1 permit rt 100:1
ip extcommunity-list 2 permit rt 200:1
#
#
acl number 2000
rule 0 permit source 44.44.44.44 0
acl number 2001
rule 0 permit source 66.66.66.66 0
#
在RTB上仅仅能够收到VPN1的55.55.55.55/32和VPN2的77.77.77.77/32,其他路由被过滤掉了。
[RTB] dis bgp vpnv4 all routing-table
BGP Local router ID is 2.2.2.2
Status codes: * - valid, > - best, d - damped,
h - history, i - internal, s - suppressed, S - Stale
Origin : i - IGP, e - EGP, ? - incomplete
Total Number of Routes from all PE: 2
Route Distinguisher:100:1
Network NextHop In/Out Label MED LocPrf
*>i 55.55.55.55/32 4.4.4.4 Null/1026 0 100
Route Distinguisher:200:1
Network NextHop In/Out Label MED LocPrf
*>i 77.77.77.77/32 4.4.4.4 Null/1027 0 100
Total Routes of vpn-instance vpn1: 1
Network NextHop In/Out Label MED LocPrf
*>i 55.55.55.55/32 4.4.4.4 Null/1026 0 100
Total Routes of vpn-instance vpn2: 2
Network NextHop In/Out Label MED LocPrf
*>i 77.77.77.77/32 4.4.4.4 Null/1027 0 100
说明:RR在反射VPNV4路由时,如果没有配置对应的vpn-instance,则需要配置undo vpn-target policy。
Originator ID属性:路由反射器的客户收到反射器发来的路由后自动携带Originator ID属性,在属性域指示出发布这条路由的始发者路由器ID,这样接收者就可以知道在反射器群内这条路由从哪个路由器始发,如果是自己始发则不接收,可以避免在路由反射器群内的环路。
Cluster ID List属性:路由反射器的客户收到反射器发来的路由后自动携带Cluster ID List属性,在属性域内指示出所经过的反射器群列表(反射器群ID缺省是反射器的路由器ID,可以配置),这样接收者就可以知道该路由在AS内部传播时经过了哪些反射器群,从而避免环路。具体实现方式请参考路由反射过程的范例2。
联盟也是为了解决大规模网络中IBGP全网连接的问题,是处理AS内部的IBGP网络连接激增的另一种方法。联盟是基于一个AS可以被分为多个子AS,子AS内使用IBGP全闭合网,子AS之间以及联盟本身与外部AS之间使用的EBGP连接的一种应用。虽然子AS之间的路由经EBGP交换,所有的IBGP规则仍然适用,因此对于AS外的路由器来看一个联盟就象一个单一的AS。联盟和反射器应用时的区别是当BGP应用于更大的AS,即AS内有很多BGP Speaker 的情况,这时反射器配置也很复杂的话就可以考虑使用联盟,联盟的设计思想也是主要基于这一点。
² 联盟ID:在不属于联盟的BGP发言者看来,属于同一个联盟的多个子自治系统是一个整体,外界不需要了解内部的子自治系统情况,联盟ID就是标识联盟这一整体的自治系统号。在不属于联盟的BGP发言者看来,属于同一个联盟的多个子自治系统是一个整体,外界不需要了解内部的子自治系统情况,联盟ID就是标识联盟这一整体的自治系统号。
² 子系统:是联盟的组成元素,该子系统是一个内部IBGP全闭合的系统;该子系统对联盟外不可见。
² 子系统AS号:子系统的AS号,该AS号仅在联盟内可见;联盟内子自治系统可以使用私有的AS号,范围为:64512-65535,一个联盟最多可配置32个子自治系统。
1、联盟新增的两个属性
在RFC3065中新增加了两个为联盟定制的属性,即:
² AS_CONFED_SEQUENCE: 有序的子系统号的序列集合。
² AS_CONFED_SET: 无序的子系统号的序列集合。
二则主要区别是后者主要用于存在路由聚合等情况时导致路由属性丢失时使用;增加这两种属性是为了防止联盟内部的环路。
2、属性传递及处理过程
对于同一个联盟内部路由属性NEXT_HOP、MED和LOCAL_PREFERENCE的传递,联盟并没有特殊处理,故NEXT_HOP、MED和LOCAL_PREFERENCE仍然在联盟内传递。
PATH参数在联盟中进行传递,对于AS_CONFED_SEQUENCE和AS_CONFED_SET,
联盟内处理方式大致AS_SEQUENCE和AS_SET相同,同时:
1) 当路由在联盟内子自治系统内传递时,不应修改AS_PATH属性。
2) 当路由在联盟内子自治系统间传递时:
a) 若第一个AS_PATH是AS_CONFED_SEQUENCE,BGP将自己的子自治系统AS号加在最左端。
b) 否则,创建一个AS_CONFED_SEQUENCE,包含自己的子自治系统AS号。
3) 当向联盟外EBGP传递路由时:
a) 若第一个AS_PATH是AS_CONFED_SEQUENCE,将后续的AS_CONFED_SEQUENCE和AS_CONFED_SET删除,至b)。
b) 若第一个AS_PATH是AS_SEQUENCE,则将联盟AS加在最左端。
c) 若第一个AS_PATH是AS_SET,增加一个AS_SEQUENCE,将联盟AS加在最左端。
4) 对于本地初始路由的传播:
a) 向本自治系统内IBGP发送,空的AS_PATH属性。
b) 向联盟内,本自治系统外EBGP发送,带有AS_CONFED_SEQUENCE属性。
c) 向联盟外EBGP发送,带有AS_SEQ属性。
使用联盟之前:
在上图中AS100域内台路由器都运行BGP,如果配置这4路由器的IBGP逻辑全互连的话会很麻烦,需要配置4×(4-1)/2=6个IBGP邻居关系。
使用联盟之后:
图10 应用图10
可以看到在使用联盟之前AS100内部配置IBGP邻居的工作将很麻烦,即使配置反射器也较复杂,在使用联盟后配置IBGP邻居的工作就相对简单了。配置联盟后AS100的EBGP邻居的配置没有变化,联盟对外仍然表现为一个AS,上图中的联盟ID为100,对外就表现为AS100,联盟外部的BGP Speaker 不了解联盟内子自治系统的情况。联盟内部有两个子自治系统分别为AS2001和AS2002,子自治系统之间为EBGP邻居,子自治系统内部和普通的自治系统相同。
环境描述:应用图11组网网所示,RTA在AS 100内,RTB、RTC、RTD和RTE均在AS 200内,RTB和RTE在子系统2001内,RTC和RTD在子系统2002内。RTA的router id为1.1.1.1、RTB的router id为2.2.2.2、RTD的router id为3.3.3.3、RTC的router id为4.4.4.4和RTE的router id5.5.5.5。
图11 应用图11
1、从RTC上发布一条4.4.4.4/32的主机路由,携带MED值为100。
[RTC]dis bgp routing-table 4.4.4.4
BGP local router ID : 4.4.4.4
Local AS number : 2002
Paths: 1 available, 1 best
BGP routing table entry information of 4.4.4.4/32:
Imported route.
From : 0.0.0.0 (0.0.0.0)
Original nexthop: 127.0.0.1
AS-path : (null)
Origin : incomplete
Attribute value : MED 100, pref-val 0, pre 0
State : valid, local, best,
Advertised to such 1 peers:
30.0.0.1
在RTD上查看该路由为子系统内路由,但还路由还未出子系统,故该路由还未附上自己的子系统号;该路由的MDE值为100,Localpref为100。
[RTD]dis bgp routing-table 4.4.4.4
BGP local router ID : 3.3.3.3
Local AS number : 2002
Paths: 1 available, 1 best
BGP routing table entry information of 4.4.4.4/32:
From : 30.0.0.2 (4.4.4.4)
Relay Nexthop : 0.0.0.0
Original nexthop : 30.0.0.2
AS-path : (null)
Origin : incomplete
Attribute value : MED 100, localpref 100, pref-val 0, pre 255
State : valid, internal-confed, best,
Advertised to such 1 peers:
20.0.0.1
在RTB上查看还路由已经进入到了子系统2001内,故该路由为子系统外路由且携带2002的子系统号;该路由的MDE值为100,Localpref为100,并未发生变化。
[RTB]dis bgp routing-table 4.4.4.4
BGP local router ID : 2.2.2.2
Local AS number : 2001
Paths: 1 available, 1 best
BGP routing table entry information of 4.4.4.4/32:
From : 20.0.0.2 (3.3.3.3)
Relay Nexthop : 20.0.0.2
Original nexthop : 30.0.0.2
AS-path : (null)
Origin : incomplete
Attribute value : MED 100, localpref 100, pref-val 0, pre 255
State : valid, external-confed, best,
Advertised to such 2 peers:
10.0.0.1
40.0.0.2
在RTE上参看该路由为子系统内路由且携带2002的子系统号;该路由的MDE值为100,Localpref为100,并未发生变化。
[RTE]dis bgp routing-table 4.4.4.4
BGP local router ID : 5.5.5.5
Local AS number : 2001
Paths: 1 available, 1 best
BGP routing table entry information of 4.4.4.4/32:
From : 40.0.0.2 (2.2.2.2)
Relay Nexthop : 0.0.0.0
Original nexthop : 40.0.0.2
AS-path : (2002)
Origin : incomplete
Attribute value : MED 100, localpref 100, pref-val 0, pre 255
State : valid, internal-confed, best,
Not advertised to any peers yet
在RTA上查看该路由为EBGP路由,并携带对段200的子系统号,2002的子系统号被删掉了,同时,MED和Localpef均已经被删掉。
[RTA]dis bgp routing-table 4.4.4.4
BGP local router ID : 5.5.5.5
Local AS number : 100
Paths: 1 available, 1 best
BGP routing table entry information of 4.4.4.4/32:
From : 10.0.0.2 (2.2.2.2)
Original nexthop: 10.0.0.2
AS-path : 200
Origin : incomplete
Attribute value : pref-val 0, pre 255
State : valid, external, best,
Not advertised to any peers yet
2、在RTA上发布一条1.1.1.1/32的主机路由,MED为200。
[RTA]dis bgp routing-table 1.1.1.1
BGP local router ID : 1.1.1.1
Local AS number : 100
Paths: 1 available, 1 best
BGP routing table entry information of 1.1.1.1/32:
From : 0.0.0.0 (0.0.0.0)
Original nexthop: 127.0.0.1
AS-path : (null)
Origin : incomplete
Attribute value : MED 200, pref-val 0, pre 0
State : valid, local, best,
Advertised to such 1 peers:
10.0.0.2
在RTB上查看该路由为EBGP路由,并携带100的AS号,MED为200,AS-path为100。
[RTB]dis bgp routing-table 1.1.1.1
BGP local router ID : 1.1.1.1
Local AS number : 2001
Paths: 1 available, 1 best
BGP routing table entry information of 1.1.1.1/32:
From : 10.0.0.1 (1.1.1.1)
Original nexthop: 10.0.0.1
AS-path : 100
Origin : incomplete
Attribute value : MED 200, pref-val 0, pre 255
State : valid, external, best,
Advertised to such 2 peers:
20.0.0.2
40.0.0.2
在RTE上查看该路由为子系统内路由,MED为200,Localpref为100,AS-path为100。
[RTE]dis bgp routing-table 1.1.1.1
BGP local router ID : 5.5.5.5
Local AS number : 2001
Paths: 1 available, 1 best
BGP routing table entry information of 1.1.1.1/32:
From : 40.0.0.1 (2.2.2.2)
Relay Nexthop : 0.0.0.0
Original nexthop: 40.0.0.1
AS-path : 100
Origin : incomplete
Attribute value : MED 200, localpref 100, pref-val 0, pre 255
State : valid, internal-confed, best,
Not advertised to any peers yet
在RTD上查看该路由为子系统外路由,路由MED为200、Localpref为100,并且携带始发AS号100和AS 200内子系统2001子系统号。
[RTD]dis bgp routing-table 1.1.1.1
BGP local router ID : 3.3.3.3
Local AS number : 2002
Paths: 1 available, 1 best
BGP routing table entry information of 1.1.1.1/32:
From : 20.0.0.1 (2.2.2.2)
Relay Nexthop : 0.0.0.0
Original nexthop: 20.0.0.1
AS-path : (2001)100
Origin : incomplete
Attribute value : MED 200, localpref 100, pref-val 0, pre 255
State : valid, external-confed, best,
Advertised to such 1 peers:
30.0.0.2
联盟可以很容易地检测到AS内的选路循环,因为子AS之间运行的是EBGP。AS路径列表用于检测离开一个子AS并想回到同一子AS的选路更新。这种想要回到它始发的子AS的选路更新被检测到是因为子AS会发现自己的子AS号码在这个更新的AS路径内。联盟的缺陷是:从非联盟向联盟方案转变时,要求路由器重新进行配置,逻辑拓扑基本上也要改变;而且,若没有手工设置的BGP策略,通过联盟的选路有可能选不到最佳的路径。
如果AS内部既没有配置全连接也没有配置RR/联盟时,就可能产生转发黑洞。那么如何来解决这样的问题呢?那我们就不得不提到BGP的同步功能了。
所谓“同步”,是指IGP和BGP之间的同步,亦即“BGP一直要等到IGP在本AS中传播了同一条路由后,再给其他各AS通告过渡路由”。也就是说:在通告给其他AS一条路由时,先要保证本AS内部的路由器(无论是否运行BGP协议)都要知道去往该条路由的路径。同步的目的是避免出现误导外部AS路由器的现象发生,防止一个AS(不是所有的路由器都运行BGP)内部出现路由黑洞,即向外部通告了一个本AS不可达的虚假的路由。
起用同步功能后在接收到IBGP邻居发过来的路由后都会查看该路由是否已经在IGP路由表中,如果IGP路由表中有这条路由,BGP路由表才会将这条路由置为有效;如果IGP路由表中没有该路由则BGP表中的该条路由是无效的。如果关闭同步功能,在收到IBGP邻居发来的路由更新后不检查IGP表是否有该路由,而直接将该路由置为有效。
但是还存在以下两种情况下可以安全地关闭同步:
1、本AS不是一个过渡的AS;
2、本AS内所有Transit路由器都运行BGP且全连接。
图12 应用图12
在上图中,RTD没有运行BGP,RTC关闭了同步功能。从RTA始发路由1.1.1.1/32,向RTE传递。RTB和RTC收到该路由后将其置为有效, RTC把该路由向RTE进行传递,在RTE上该路由为生效路由。但是在RTC上并未检查该路由在IGP中是否存在。如有在RTE上存在到1.1.1.1的流量,RTE把改流量转发给RTC,RTC把该流量转发给RTD,但是RTD上不存在1.1.1.1/32的IGP路由,故流量丢失。如RTC开启BGP同步功能,当RTC检测不到1.1.1.1/32的IGP路由时,RTC便不会把该路由传递给RTE,这时,RTE可能会把该流量转给给其他流量,也避免流量丢失的情况。
如果要解决该问题,需要在RTB上把1.1.1.1/32路由引入到IGP中,并在IGP中进行传递,这样并开启同步功能,就不会出现AS内路由黑洞的问题。
如果一个AS内部存在非BGP路由器,那么就出现了BGP和IGP的边界,需要在边界路由器将BGP路由发布到IGP中,才能保证AS所通告到外部的BGP路由在AS内部是连通的。实际上是要求BGP路由和IGP路由的同步。如果将BGP路由发布到IGP中,由于BGP路由量一般较大,那么结果是IGP路由器要维护大量的外部路由,对路由器的CPU和内存以及AS内部的链路带宽的占用将带来巨大的开销;同时会带来收敛延时增加。通常BGP协议的运行需要关闭同步。
联盟和反射两种技术都是为了解决大规模网络中IBGP必须全连接的问题,两种技术都有自己的特点,反射技术简单易理解,不需要更改现有的网络拓扑,兼容性好,反射器对于客户来说是透明的,群与群之间仍然需要全连接,适用于中到大规模网络;而联盟技术比较复杂,联盟内所有的路由器都需要支持联盟技术,但子自治系统之间是特殊的EBGP连接,因此不需要全连接,适用于大规模网络。二者需要根据实际需求进行部署。