BGP简介

 

 

 

BGP在TCP/IP网中实现域间路由。BGP是一种外部网关协议(EGP),即它在多个自治系 统或域间执行路由、 与其它BGP系统交换路由和可达性信息。BGP有多个版本,目前在internet中应用的是BGP4版本,在RFC1711中进行了规定。BGP协议既 可以提供AS间(IBGP)也可以提供AS内部路由(EBGP)。为解决IBGP peer 全连接的问题, internet常采用路由反射器(Route Reflector)技术。

 

本文就IBGP、EBGP及常用的RR技术的相关注意事项进行描述,供工程或者运维人员参考。

 

 

 

一、SP中IBGP的注意事项

 

 

 

两个路由器之间的相邻连接称为对等体连接,它可以建立在同一AS内,在这种情况下,BGP称为内部BGP(IBGP)。

 

 

 

1.1 采用 loopback 0地址建立IBGP连接

 

 

 

IBGP中通常建议采用路由器的回环地址建立BGP对等,相对于物理接口地址,回环地址具有很好的稳定性,因为只要有任何一个物理接口连接正常能保证IGP的互通,BGP的连接就能够维持。

 

配置的示例如下:

 

 

 

interface loopback 0

 

ip address m.m.m.m 255.255.255.255

 

router bgp XX---------------------------/BGP AS域/

 

neighbor n.n.n.n remote-as XX------/n.n.n.n为对等路由器的Loopback 0地址/

 

neighbor update-source loopback 0

 

 

 

1.2 同步规则

 

BGP同步规则的定义: 在BGP同步打开的情况下,一个BGP路由器不会把那些通过IBGP邻居学到的BGP路由通告给自己的EBGP邻居;除非自己的IGP路由表中存在这些路 由,才可以向EBGP路由器通告。BGP同步规则的目的: 防止一个AS(不是所有的路由器都运行BGP)内部出现路由黑洞,即向外部通告了一个本AS不可达的虚假的路由. 如果一个AS内部存在非BGP路由器,那么就出现了BGP和IGP的边界,需要在边界路由器将BGP路由发布到IGP中,才能保证AS所通告到外部的 BGP路由在AS内部是连通的.实际上是要求BGP路由和IGP路由的同步. 如果将BGP路由发布到IGP中,由于BGP路由主要是来自AS外部的路由(来自internet),那么结果是IGP路由器要维护数以万计的外部路由, 对路由器的CPU和内存以及AS内部的链路带宽的占用将带来巨大的开销. 在通常情况下AS域内的路由器都启动了BGP协议,因此建议将同步规则关闭,配置的示例如下:

 

 

 

router bgp XX---------------------------/BGP AS域/

 

no synchronization

 

 

 

 

 

1.3 Neighbour Shutdown

 

 

 

BGP的配置通常需要大量的路由策略配置,特别建议在这些路由策略生效之前不要激活BGP Neighbour。否则,在BGP生效但是BGP策略没有生效之前的时间段内,引起意外的情况发生,比如,对端的路由器可能突然收到大量的BGP路由, 如果超过了其处理能力则有可能导致设备宕机或者重启。

 

配置的示例如下:

 

 

 

router bgp XX

 

neighbor n.n.n.n remote-as XX

 

neighbor n.n.n.n shutdown

 

 

 

当所有的路由策略配置完成以后激活BGP邻接:

 

no neighbor n.n.n.n shutdown

 

 

 

1.4 NO auto-summary

 

 

 

默认情况下,BGP会将地址前缀按照Class A、Class B、Class C地址的规定进行汇总,在目前的internet实际部署中,必须要求将地址的自动汇总关闭。

 

配置的示例如下:

 

 

 

router bgp XX

 

no auto-summary

 

 

 

1.5 BGP Neighbour Authentication

 

 

 

根据网络的具体情况,可以考虑在BGP对等之间采用MD5加密认证机制,对所有的BGP信息进行加密认证,要求两个Neighbor都要知道密码。MD5认证可以在Peer之间采用,也可以在Peer Group之间使用。

 

配置的示例如下:

 

 

 

router bgp XX

 

neighbor n.n.n.n password v61ne0qkel33&

 

 

 

1.6 Log-neighbor-change

 

 

 

对于BGP邻接的UP/Down事件及其原因进行记录非常有利于工程和运维人员对BGP及网络故障的处理,建议在BGP的配置将该功能打开。

 

配置的示例如下:

 

 

 

router bgp XX

 

[no] log-neighbor-changes

 

 

 

记录示例如:

 

%BGP-6-ADJCHANGE: neighbor x.x.x.x Up

 

%BGP-6-RESET: neighbor x.x.x.x reset

 

 

 

 

 

 

 

1.7 BGP Router-id

 

 

 

 

 

BGP采用TCP协议作为传输层协议,利用IP地址建立TCP Session,建议明确指定路由器的BGP Router-id,提高稳定性,而且便于运维人员的管理和维护。

 

配置示例如下:

 

 

 

router bgp XX

 

 

 

bgp router-id m.m.m.m-----------------------/本机的loopback地址/

 

 

 

1.8 BGP Peer-group

 

 

 

建议在有大量的BGP peer 链接时,尤其时RR的配置时,推荐使用Peer Group 命令来简化配置,并方便管理。通过Peer-Group,BGP在路由传递时对组内的对等进行一次的路由整理,然后复制到各个对等进行分发,可以有效的降 低CPU的负载和内存的消耗。

 

 

 

配置的示例如下:

 

 

 

router bgp XX

 

neighbor internal peer-group

 

neighbor internal remote-as 109

 

neighbor internal update-source loopback 0

 

neighbor m.m.m.m peer-group internal

 

neighbor l.l.l.l peer-group internal

 

 

 

 

 

 

 

二.SP EBGP配置注意事项

 

 

 

2.1 BGP peer Group

 

采用此命令可以有效的降低CPU的负载和内存的消耗。在配置上也做到了简化。

 

以下是一个配置模板的情况

 

router bgp XX

 

neighbor internal peer-group

 

neighbor internal remote-as 109

 

neighbor internal update-source loopback 0

 

neighbor m.m.m.m peer-group internal

 

neighbor l.l.l.l peer-group internal

 

建议在有大量的BGP peer 链接时,尤其时RR的配置时,推荐使用Peer Group 命令来简化配置,并方便管理。

 

 

 

2.2限制从远端BGP邻居收到的路由数量
 
    neighbor ip-address maximum-prefix maximum [threshold] [warning-only]  
    
 
    

 

 

 

在BGP协议受到***的网络***、网络振荡和配置错误时会使得本机的BGP收到大量的路由信 息,BGP需要占用大量的内存存储和处理这些路由。如果路由器存在内存不足或性能缺陷等问题,极易产生内存使用错误,从而导致路由器运行不稳定,严重的情 况下会导致路由器重启,类似案例在互联网上屡见不鲜。因此几乎所有的ISP都会限制从远端BGP邻居收到的路由数量,从而保障网络设备的稳定运行。

 

 

 

当BGP收到超过maximum所配置的路由数量时,该命令有两种行为模式:

 

 

 

1.发出告警信息同时关闭和相关邻居的BGP连接并且需要人工手动启动BGP,才可以重新建立到相关邻居的BGP连接 (不配置 [warning-only]

 

 

 

2. 只发出告警信息而不关闭BGP连接(配置 [warning-only]

 

 

 

第一种模式为系统缺省模式,最大程度上保证本机的稳定性;第二种模式由于只发送报警信息不作任何处理,在一些情况下还是会对路由器的稳定性造成较大的影响。

 

 

 

2.3 BGP互连的安全设置

 

 

 

当必须和上级BGP设备接收路由条目时,需要非常小心,按照以下规则进行路由接收:

 

1. 不接收 RFC1918等私有地址。

 

2. 不接收自己网络的前缀。

 

3. 不接收缺省路由(除非你需要它)

 

4. 不接收长度大于24的前缀列表。

 

配置的典型配置如下:

 

router bgp 100

 

network 221.10.0.0 mask 255.255.224.0 (自身宣告的网络)

 

neighbor 221.5.7.1 remote-as 101

 

neighbor 221.5.7.1 prefix-list in-filter in

 

!

 

ip prefix-list in-filter deny 0.0.0.0/0 ! Block default

 

ip prefix-list in-filter deny 0.0.0.0/8 le 32

 

ip prefix-list in-filter deny 10.0.0.0/8 le 32

 

ip prefix-list in-filter deny 127.0.0.0/8 le 32

 

ip prefix-list in-filter deny 169.254.0.0/16 le 32

 

ip prefix-list in-filter deny 172.16.0.0/12 le 32

 

ip prefix-list in-filter deny 192.0.2.0/24 le 32

 

ip prefix-list in-filter deny 192.168.0.0/16 le 32

 

ip prefix-list in-filter deny 221.10.0.0/19 le 32 ! Block local prefix

 

ip prefix-list in-filter deny 224.0.0.0/3 le 32

 

ip prefix-list in-filter deny 0.0.0.0/0 ge 25 ! Block prefixes >/24

 

ip prefix-list in-filter permit 0.0.0.0/0 le 32

 

 

 

• 这个prefix-list 模板必须加载在和外界EBGP 的peer 配置上,并需要在 in 和out两个方向配置

 

参考链接如下:http://www.ietf.org/internet-drafts/draft-manning-dsua-01.txt

 

ip prefix-list rfc1918-dsua deny 0.0.0.0/8 le 32

 

ip prefix-list rfc1918-dsua deny 10.0.0.0/8 le 32

 

ip prefix-list rfc1918-dsua deny 127.0.0.0/8 le 32

 

ip prefix-list rfc1918-dsua deny 169.254.0.0/16 le 32

 

ip prefix-list rfc1918-dsua deny 172.16.0.0/12 le 32

 

ip prefix-list rfc1918-dsua deny 192.0.2.0/24 le 32

 

ip prefix-list rfc1918-dsua deny 192.168.0.0/16 le 32

 

ip prefix-list rfc1918-dsua deny 224.0.0.0/3 le 32

 

ip prefix-list rfc1918-dsua deny 0.0.0.0/0 ge 25

 

ip prefix-list rfc1918-dsua permit 0.0.0.0/0 le 32

 

 

 

2.4 根据AS路由过滤

 

过滤掉包含有私有AS号的路由;

 

过滤掉AS-Path中包含有本AS号的路由,防止路由循环;

 

过滤掉其他peering AS,防止transit;

 

下面以运营商A和运营商B互连的bgp策略作为参考:

 

 

 

配置示例如下:

 

!## The Following just example #############

 

 

 

 

 

ip as-path access-list 180 permit ^701$

 

ip as-path access-list 180 permit ^701_([0-9])+_$

 

ip as-path access-list 181 permit _6451[2-9]_

 

ip as-path access-list 181 permit _645[2-9][0-9]_

 

ip as-path access-list 181 permit _64[6-9][0-9][0-9]_

 

ip as-path access-list 181 permit _65[0-9][0-9][0-9]_

 

ip as-path access-list 181 permit _1239_

 

ip as-path access-list 181 permit _5511_

 

ip as-path access-list 182 permit _1239_

 

ip as-path access-list 183 permit ^701$

 

ip as-path access-list 183 permit ^701_([0-9])+_$

 

ip as-path access-list 183 permit ^701_([0-9])+_([0-9])+_$

 

ip as-path access-list 184 permit ^1239_701_

 

ip as-path access-list 185 permit ^1239_([0-9])+_$

 

ip as-path access-list 185 permit ^1239_([0-9])+_([0-9])+_$

 

ip as-path access-list 186 permit ^701_1239_

 

ip as-path access-list 187 permit ^5511_

 

ip as-path access-list 188 permit _1239_

 

ip as-path access-list 188 permit _701_

 

ip as-path access-list 188 permit _1668_

 

ip as-path access-list 190 permit _852_

 

ip as-path access-list 191 permit ^701_

 

ip as-path access-list 191 permit ^5511_

 

ip as-path access-list 192 deny ^5511_

 

ip as-path access-list 192 deny ^701_

 

ip as-path access-list 192 permit .*

 

ip as-path access-list 193 permit ^5511_702_

 

ip as-path access-list 199 permit ^7992_

 

 

 

 

 

2.5BGP Router-id

 

 

 

BGP采用TCP协议作为传输层协议,利用IP地址建立TCP Session,建议明确指定路由器的BGP Router-id,提高稳定性,而且便于运维人员的管理和维护。

 

配置示例如下:

 

 

 

router bgp XX

 

 

 

bgp router-id m.m.m.m-----------------------/本机的loopback 0地址/

 

 

 

2.6Log-neighbor-change

 

 

 

对于BGP邻接的UP/Down事件及其原因进行记录非常有利于工程和运维人员对BGP及网络故障的处理,建议在BGP的配置将该功能打开。

 

配置的示例如下:

 

 

 

router bgp XX

 

[no] log-neighbor-changes

 

 

 

记录示例如:

 

%BGP-6-ADJCHANGE: neighbor x.x.x.x Up

 

%BGP-6-RESET: neighbor x.x.x.x reset

 

 

 

2.7 BGP Neighbour Authentication

 

 

 

根据网络的具体情况,可以考虑在BGP对等之间采用MD5加密认证机制,对所有的BGP信息进行加密认证,要求两个Neighbor都要知道密码。MD5认证可以在Peer之间采用,也可以在Peer Group之间使用。

 

配置的示例如下:

 

 

 

router bgp XX

 

neighbor n.n.n.n password v61ne0qkel33&

 

2.8  Neighbour Shutdown

 

 

 

BGP的配置通常需要大量的路由策略配置,特别建议在这些路由策略生效之前不要激活BGP Neighbour。否则,在BGP生效但是BGP策略没有生效之前的时间段内,引起意外的情况发生,比如,对端的路由器可能突然收到大量的BGP路由, 如果超过了其处理能力则有可能导致设备宕机或者重启。

 

配置的示例如下:

 

 

 

router bgp XX

 

neighbor n.n.n.n remote-as XX

 

neighbor n.n.n.n shutdown

 

 

 

当所有的路由策略配置完成以后激活BGP邻接:

 

no neighbor n.n.n.n shutdown

 

2.9 同步规则

 

在通常情况下AS域内的路由器都启动了BGP协议,因此建议将同步规则关闭,配置的示例如下:

 

 

 

router bgp XX---------------------------/BGP AS域/

 

no synchronization

 

三、BGP的 RR配置原则

 

由于 IBGP协议需要做成全网状结构,因此在iBGP邻居数量较大的时候一般会采用IBGP的路由反射器(RR)来减少IBGP相邻关系的配置,提高IBGP的扩展性。

 

3.1 放置RR最关键的原则是:需要按照网络的物理结构来部署,这可以避免设置RR后路由器对数据包的转发造成影响;违反这一原则有可能造成数据包的死循环。

 

3.2 由于 RR 需要存储较多的路由信息,因此作为RR的路由器需要有较大的内存以及处理能力;对于用于反射互联网全路由的RR路由器,至少需要1G以上的内存;至少需要 配置7200+NPE-G1以上处理能力以上路由器;对于不需要反射互联网全路由的RR,至少需要配置512M的内存,7200+NEP400以上处理能 力的路由器。

 

3.3 BGP路由较多的情况下,需要将网络划分为一个或者多个RR clusters, 每个CLUSTER中至少有配置两个RR路由器;每个RR客户端必须建立到该CLUSTER中的每个RR反射器的IBGP连接;RR反射器间必须建立网状IBGP连接。

 

3.4在 RR路由反射器上应尽量避免修改iBGP路由的属性,如:next-hop等,否则容易形成路由循环。

 

3.5 作为 RR的路由器,尽量避免被作为传输业务数据的路由器使用。

 

3.6在属于同一个 cluster 内的RR路由器,如果有大于70%连续未用内存块(Largest Free Memory)的情况下可以不需要配置 cluster ID;在RR客户端使用物理端口IP地址和 RR建立IBGP连接时,不建议在RR上配置cluster ID,否则在RR客户端到冗余的RR路由器的IBGP会话中断时,可能造成路由信息的丢失。

 

3.7建议在 RR路由器的配置中使用peer-groups功能,提高RR路由器的可管理性以及提高BGP路由更新的效率。

 

3.8在 RR路由器上关闭“soft-reconfiguration”,由于soft-reconfiguration会保留从相邻IBGP收到的路由信息,会消耗较大的路由器内存,推荐关闭。

 

3.9  为提高RR路由器收敛的速度,建议在RR路由器的端口上增加端口Input hold queue的数量,使用IOS端口配置命令“hold-queue 1500 in”

 

 

 

3.10 RR路由器上使用全局配置命令关闭BGP和IGP的同步,”no synchronization”。

 

 

 

3.11 RR路由器上需要明确指定BGP的路由器ID,“bgp router-id x.x.x.x”, x.x.x.x一般为路由器的LOOPBACK地址。

 

 

 

3.12 RR路由器需要打开记录BGP相邻关系变化的配置,用于记录BGP相邻关系的稳定 性,在BGP的配置模式下使用如下IOS命令“bgp log-neighbor-changes”。

 

 

 

3.13 关闭BGP路由器上的自动聚合功能,在BGP的配置模式下使用如下IOS命令“no auto-summary