第一节 BGP的基本概念
BGP(Border Gateway Protocol),边界网关协议
是运行在网络和网络之间的协议,是一款EGP(外部网关协议)
BGP基于TCP协议工作,目的端口号179。源端口随机,由路由器自行选择,一般来说在万以上(如20000)。
TCP可以基于不可靠的连接去建立一种可靠的连接关系,BGP需要跨越广域网,因此可靠就显得尤为重要。
BGP的AS域:
BGP的AS号: 公有AS号:0~64511 私有AS号:64512~65535
BGP的报文:
Open:用于建立BGP邻居关系 Keepalive:用于维护BGP邻居关系 Update:用于更新路由条目 Notification:用于差错控制,只要在BGP运行过程中发送了 Notification报文,BGP就会立马断开邻居关系,不再继续运行。 Route-Refresh:刷新路由,当路由出现变更时刷新路由(一般来说就是属性的改变)
BGP的邻居状态机:
Idle:该状态下,运行BGP的路由器会查找到达BGP邻居的路由,如果找到了就进入下一个状态(connect),如果找不到,没路由,就始终卡在Idle状态。 Connect:该状态下,运行BGP的路由会发送TCP报文,进行TCP的三次握手,如果握手成功进入Opensent状态,如果握手失败则进入Active状态。 Active:当TCP连接建立失败时置为该状态,且在该状态下一直重新尝试建立TCP连接关系,一直重新尝试进行TCP三次握手。 OpenSent:发送Open报文。该状态下等待对端的Open报文,如若能够收到对端邻居的Open报文则进入OpenConfirm状态;如若收不到对端的Open报文,则发送Notification报文并且断开邻居关系 OpenConfirm:发送Keepalive包欧文,收到对端Keepalive报文进入Established状态,否则回到Idle状态。此状态下可能会发生Keepalive时间的选举,默认为180s,如若遇到两端Keepalive时间不一致,则选择较小的。 Established:交换Update报文,互相传递路由信息。
第二节 BGP邻居的建立
BGP的邻居关系分为两种,即内部邻居关系(iBGP)和外部邻居关系(eBGP)
iBGP:内部BGP,即运行的BGP AS号相同的设备之间建立的邻居关系。
eBGP:外部BGP,即运行的BGP AS号不同的设备之间建立的邻居关系。
传统的IGP协议(EIGRP、OSPF)可以自动地发现网络中的其它设备,从而形成邻居关系。但BGP并不具备该功能,因此BGP所有的邻居都需要进行手工指定。
建立eBGP邻居:
(config)#router bgp AS号 (config-router)# bgp router-id x.x.x.x # 手动指定router-id (config-router)# neighbor 对端设备的物理接口的IP地址 remote-as 对端设备的AS号
在建立eBGP邻居关系时,建立eBGP邻居时发出的数据包,其TTL(Time To Live)值为1,当数据包每经过一台三层设备(路由器或三层交换机),其TTL值就会减去1,当TTL值为0时候,该数据包会被三层设备丢弃,不再继续转发。
而在建立iBGP邻居关系时候,建立iBGP邻居时发出的数据包,其TTL(Time To Live)值为255,为最大值,没有此顾虑。
因此,如果在建立eBGP邻居关系时,出现跨设备建立,而TTL值不满足条件,可修改TTL值。
(config)#router bgp AS号 (config-router)# neighbor 对端设备的物理接口的IP地址 ebgp-multihop a(1-255) # 调整eBGP报文的TTL值。
建立iBGP邻居关系:
(config)#router bgp AS号 (config-router)# bgp router-id x.x.x.x # 手动指定router-id (config-router)# neighbor 对端设备的环回口IP地址 remote-as 对端设备的AS号 # 在内部邻居时,往往推荐使用环回口地址,更加稳定。 (config-router)# neighbor 对端设备的环回口IP地址 update-source 接口编号,如lo0 # 修改更新源,确保TCP连接的正常建立。
查看BGP邻居表:
show ip bgp summary
其中字段State/PfxRcd:如果是State(邻居状态机中的状态中的任何一个),表明邻居建立的过程还没有完全结束。但如果是PfxRcd(数字),表明邻居已经建立完成。Tips:即便该数字是0都是正常的。
BGP报头:
Marker:全F Length:报文长度 Type:指明BGP的报文类型
OEPN报文:
Version:BGP的版本,现网运行的一般都是BGP-4的版本。 My AS:本地的AS号 Hold Time:协商keepalive的时间间隔,默认是180s。 BGP Identifier:BGP Router-id
第三节 BGP的路由传递
1.路由传递
BGP路由传递为两种方式:本地宣告和重分发,其中重分发较多。
(1)本地宣告
(config)# router bgp AS-Number (config-router)#network 网络号 mask 掩码
需要注意的是,BGP本地宣告中的网络号和掩码必须和现有的IP地址完全一致,如需要宣告1.1.1.1/32,则可以键入"network 1.1.1.1 mask 255.255.255.255"
(2)重分发
(config)# router bgp AS-Number (config-router)# redistribute 路由来源(static/rip/eigrp x /ospf y) # BGP协议无Metric值概念,BGP内部选路依靠BGP特有的选路原则。
2.查看BGP路由
查看BGP路由表:
#show ip route bgp
查看BGP数据表:
#show ip bgp
通过BGP传递来的路由会先被放进BGP的数据表中,由BGP进行判断,如果判断该路由为优选路由,再将其放入BGP路由表中。
3.eBGP和iBGP在传递路由时的区别:
eBGP在传递路由时,下一跳属性会自动进行改变。
iBGP在传递路由时,下一跳属性是不会改变的。所以,为了保证iBGP路由的正常传递,在同时拥有eBGP和iBGP邻居的路由器上在和iBGP邻居建立时需要加"next-hop-self"参数来调整下一跳。
(config)#router bgp 200 (config-router)# neighbor 4.4.4.4 next-hop-self
4.BGP路由黑洞解决方法:
(1)IBGP全互联
内部邻居每两两之间建立iBGP邻居关系
(config)#router bgp 200 (config-router)# neighbor 对端环回口地址 remot 200 (config-router)# neighbor 对端环回口地址update-source lo0 (config-router)# neighbor 对端环回口地址next-hop-self
(2)物理链路全互联
(3)MPLS(多协议标签交换,IE内容,暂不要求掌握)
(config)# ip cef # 开启思科快速转发,默认开启。 (config)# mpls label protocol ldp # 指定标签分发协议为LDP (config)# mpls ldp router-id lo0 force # 强制使用lo0地址建立LDP邻居 (config)# int eX/y (config-if)# mpls ip
(4)开启BGP同步(不推荐)
(config)# router bgp 300 (config-router)# synchronization # 开启BGP同步,默认关闭。
第四节 BGP的防环机制
BGP的防环分为eBGP防环和iBGP防环
1.eBGP防环
根据AS-Path属性,AS-Path属性描述了经过的AS,如 200 100,则代表先穿越100,再穿越200,最终来到本AS。
eBGP含有水平分割机制:
如果一条BGP路由中的AS-Path已经由本地的AS号,则拒绝接收该路由
打破eBGP防环规则:
1.allowas-in # 允许带有AS-Path属性和自己本地AS号相同的路由进入
部署位置:接收路由的设备上
(config)# router bgp 100 (config-router)# neighbor 对端物理接口地址/环回口地址 allowas-in
2.as-override # AS号覆盖,将不同于自己AS号的值用本地AS号进行覆盖
部署位置:发送路由的设备上
(config)# router bgp 100 (config-router)# neighbor 对端物理接口地址/环回口地址 as-override
2.iBGP防环
iBGP的水平分割机制:
从一个iBGP邻居收到的路由不会再发送给另一个iBGP邻居
打破iBGP防环机制:
1.iBGP邻居全互联
两两内部邻居建立邻居关系
(config)# router bgp 200 (config-router)# neighbor 对端环回口地址 remot-as 200 (config-router)# neighbor 对端环回口地址 update-source lo0 (config-router)# neighbor 对端环回口地址 next-hop-self
2.路由反射器
路由反射器会将收到的路由条目反射出去,具体情况如下:
如若是从非客户发来的路由,则RR(路由反射器)只会反射给客户,不会反射给其它的非客户;
如若是从客户发来的路由,则RR(路由反射器)是可以同时传递给客户和非客户的。
路由反射器的配置:
路由反射器的配置思路为在反射器上设置客户端,如需要将2.2.2.2这个邻居设置成客户端。
(config)# router bgp AS-Number (config-router)# neighbor 2.2.2.2 route-reflector-client # 将2.2.2.2这个邻居设置本台反射器的客户端
3.联盟
联盟的核心思想是在一个大的AS中划分若干个小的AS,每个小的AS之间独立开来,舍弃从前的iBGP邻居关系,改为eBGP邻居关系,就不会出现由于iBGP防环机制导致不发送路由的问题。
(config)# router bgp AS-Number # 此处写小AS号 (config-router)# bgp confederation identifier AS号 # 声明自己处于哪一个联盟(大AS)中 (config-router)# bgp confederation peers AS-Number # 此处如果要在联盟内部和别的小的AS建立eBGP邻居关系,则需要在此处声明自己和哪个AS相连
第五节 BGP的对等体组
对等体组
作用:用来简化邻居建立的配置命令。
(config)# router bgp AS-Number (config-router)# neighbor Name peer-group # 定义名为Name的对等体组
接下来可以开始定义对等体组内的语句
(config-router)# neighbor Name remote-as 200 (config-router)# neighbor Name update-source lo0 ……………… # 此处还可以有其它命令 (config-router)# neighbor 4.4.4.4 peer-group Name # 将名为Name的对等体组调用4.4.4.4邻居之上 / 将邻居4.4.4.4加入对等体组
第六节 BGP的聚合
BGP的聚合(汇总)部署思路和之前完全一致。
配置语法:
(config)# router bgp AS-Number (config-router)# aggregate-address 聚合后的网络号 聚合后网络号的掩码 # 发送聚合路由,但同时也会发送明细路由
要想只收到聚合路由,不收明细路由,则可以在后面加上参数"summary-only",意为只发送聚合路由
(config-router)# aggregate-address 聚合后的网络号 聚合后网络号的掩码 summary-only
第七节 BGP的属性
BGP属性分为四大类
1.公认必遵属性
指所有运行BGP的设备都必须能够支持和识别的属性,如Origin等
2.公认自决属性
指运行BGP的设备在发送Update报文时可以自由选择是否包含的属性,如本地优先级
3.可选可传递属性
指运行BGP的设备可以不支持此类属性,但必须原模原样的传递给其它运行BGP的设备
4.可选非传递属性
指运行BGP的设备若不支持该属性,则可以选择忽略掉这类属性
属性详解:
公认必遵属性
(1)Origin,起源属性
用于标识路由的来源。
起源属性属性值:
i:指通过network进BGP的路由 e:指来自EGP的路由 ?:Incomplete,指未知来源,常见于重分发进BGP的路由
起源属性的属性值是可以进行修改的,结合工具Route-map
(config)# ip prefix-list Origin permit 1.1.1.1/32 (config)# route-map Origin permit 10 (config-route-map)# match ip address prefix-list Origin (config-route-map)# set origin <igp/incomplete> (config)# route-map Origin permit 20 (config)# router bgp AS-Number (config-router)# neighbor x.x.x.x route-map Origin in/out #
在和x.x.x.x邻居关系下调用Route-map,注意进方向和出方向,如果该路由是要发送给邻居就是出方向,反之,如果是从邻居接收该路由,则是进方向。
其中neighbor x.x.x.x route-map Origin in/out #为部署方式的其中一种,还可以在宣告进BGP的时候顺带做配置
(config)# router bgp AS-Number (config-router)# network 1.1.1.1 mask 255.255.255.255 route-map Origin
(2)AS-Path,路径属性
路径属性代表一条路由条目从源AS到目的AS过程所经过的路径,切记从右至左观察
AS-Path属性值可以进行增加,依旧需要结合route-map
(config)# ip prefix-list AS-Path permit 1.1.1.1/32 (config)# route-map AS-Path permit 10 (config-route-map)# match ip address prefix-list AS-Path (config-route-map)# set as-path prepend AS1 AS2 # 添加AS号 (config)# route-map Origin permit 20 (config)# router bgp AS-Number (config-router)# neighbor x.x.x.x route-map AS-Path in/out
(3)Next-Hop,下一跳属性
下一跳属性的修改:
(config)# ip prefix-list NH permit 1.1.1.1/32 (config)# route-map NH permit 10 (config-route-map)# match ip address prefix-list NH (config-route-map)# set ip next-hop a.b.c.d # 设置下一跳地址为a.b.c.d (config)# route-map NH permit 20 (config)# router bgp AS-Number (config-router)# neighbor x.x.x.x route-map NH out/in
公认自决属性:
(1)本地优先级(Local-Preference)
衡量路由的优先程度,越高越优先。
本地优先级值的修改:
全局修改: (config)# router bgp AS-Number (config-router)# bgp default local-preference 150 # 将本地宣告进BGP的路由优先级设置为150 部分修改: (config)# ip prefix-list LPF permit 1.1.1.1/32 (config)# route-map LPF permit 10 (config-route-map)# match ip address prefix-list LPF (config-route-map)# set local-preference x # 设置本地优先级的值 (config)# route-map LPF permit 20 (config)# router bgp AS-Number (config-router)# neighbor x.x.x.x route-map LPF out/in
(2)原子聚合(atomic-aggregate):
是一个标志,表明该路由是否是聚合路由
可选可传递属性
(1)aggregator:聚合者,即聚合路由的起源路由器,是对公认自决属性中的原子聚合属性的补充说明
参数:
aggregator AS:聚合路由的起源AS
aggregator Origin:聚合者
(2)Community:团体属性
团体属性分为公有团体属性和私有团体属性
默认情况下,团体属性不会随着路由的传递而传递,如确需在传递路由时同时传递团体属性,则可以补充语句
(config)# router bgp AS-Number (config-router)# neighbor x.x.x.x send-community # 发送团体属性
公有Community:
Internet:默认属性,所有的路由都有此属性,同时不可变更。可随意传递给其它任何邻居(包括内部邻居和外部邻居) No-Export:不能传递给其它的AS,但是联盟内可以互传。 No-Advertise:不能传递给任何邻居。 Local-AS:路由只能在本AS内进行传递,但联盟内不可以互传。
公有团体属性的配置:
(config)# ip prefix-list A permit 8.8.8.8/32 (config)# route-map A permit 10 (config-route-map)# match ip address prefix-list A (config-route-map)# set community no-advertise / no-export / local-as (config)# route-map A permit 20 (config)# router bgp AS-Number (config-router)# neighbor x.x.x.x route-map A in/out
私有Community:
(1)纯数字,如:123456
(2)aa:nn,如1:1
注:即使配置成aa:nn格式,也会自动转换成纯数字形式,若想查看团体属性时看到aa:nn形式,则需要在全局下输入命令来转换
(config)# ip bgp new-format
私有团体属性的配置:
(config)# ip prefix-list A permit 8.8.8.8/32 (config)# route-map A permit 10 (config-route-map)# match ip address prefix-list A (config-route-map)# set community 1:1 (config)# route-map A permit 20 (config)# router bgp AS-Number (config-router)# neighbor x.x.x.x route-map A in/out
团体属性列表:
(config)# ip community-list 1 permit aa:nn (config)# route-map A permit 10 (config-route-map)# match community 1 (config)# router bgp AS-Number (config-bgp)# neighbor x.x.x.x route-map in/out
可选非传递属性
(1)MED,Multi-exit-discrimination,多出口鉴别
当某一条路由在进入BGP之前已经有Metric值,则进入BGP后,该Metric值=MED值
当某一条路由在进入BGP之前无Metric值,则MED=0
MED值是可以修改的
(config)# ip prefix-list MED permit 1.1.1.1/32 (config)# route-map MED permit 10 (config-route-map)# match ip address prefix-list MED (config-route-map)# set metric x # 设置MED的值 (config)# route-map MED permit 20 (config)# router bgp AS-Number (config-router)# neighbor x.x.x.x route-map MED out/in
(2)Originator_ID:起源者的标识,标识路由发送者和的Router-id,用于防环
(3)Cluster-List:集群列表,当路由每经过一台路由反射器,该反射器就会将自己的Router-id添加到集群列表中。
如果Cluster-List中已有本地的Router-id,则拒绝接收该路由,达到防环的效果。
第八节 BGP的选路原则
BGP选路将依据如下顺序进行选路
1.Weight(权重值,Cisco私有属性)
权重值越大,则该条路由越优先
权重值默认:
32768,始发于本地的路由 0,其它路由
修改权重值:
(config)# ip prefix-list 8 permit 8.8.8.8/32 (config)# route-map 8 permit 10 (config-route-map)# match ip address prefix-list 8 (config-route-map)# set weight x # 设置权重值 (config)# route-map 8 permit 20 (config)# router bgp AS-Number (config-router)# neighbor x.x.x.x route-map in # 权重值只有在in方向上调用才会生效。
2.本地优先级(Local Preference)
越大越优
修改本地优先级的方法:
全局修改:
(config)# router bgp AS-Number (config-router)# bgp default local-preference 200 # 将本地传递出去的路由优先级设置为200
部分修改:
(config)# ip prefix-list LPF permit 1.1.1.1/32 (config)# route-map LPF permit 10 (config-route-map)# match ip address prefix-list LPF (config-route-map)# set local-preference x # 设置本地优先级的值 (config)# route-map LPF permit 20 (config)# router bgp AS-Number (config-router)# neighbor x.x.x.x route-map LPF out/in
3.优选始发于本地的路由
当Next-hop字段内容为0.0.0.0的时候,代表下一跳是本身
如果同一目标网络前缀,有多个下一跳,且0.0.0.0存在时,则下一跳是0.0.0.0的路由会被优选。
4.AS-Path:越短越优
5.Origin:IGP>EGP>Incomplete
6.MED:越小越优
7.EBGP路由优先于IBGP路由
8.优选IGP路径最优的
9.优选配置了BGP的负载均衡(最大路径数)的
maximum-paths 2 # 针对EBGP路由(常用) maximum-paths ibgp 2 # 针对iBGP路由(不常用)
10.对于eBGP路由,优选最老的
11.Router-ID,越小越优
12.Cluster-List,越少越优
13.邻居的物理接口地址,越小越优
第九节 BGP的下放默认
BGP下放默认路由的方式:
前提是下发默认路由的设备本地路由表中有默认路由
1.重分发加下发
(config)# router bgp 100 (config-router)# redistribute static (config-router)# default-information originate
2.邻居上强制下发
(config)# router bgp 100 (config-router)# neighbor 1.1.1.1 default-originate