BGP

BGP(border gateway protocol)边界网关路由协议

通过是否工作在同一个as(自治系统)进行划分的

AS(autonomous systems):运行同一种选路策略,由统一管理者管理

RFC文档:对于as定义,一组被统一管理的路由器,它们使用同一个内部网关协议,并且使用外部网关协议到其他AS

IANA(英特网地址授权委员会)分配ip和as号

AS号范围:0-65535

其中0,65535都被保留的,1-64511是公有as64512-65534私有as

现在ios系统支持4字节的as号(2^32)个as

IGP: RIP EIGRP OSPF ISIS IGRP

EGP: BGPv4 EGP(EGP是BGP前身)

BGP属于路径向量路由协议

使用BGP的原因:

1.一个数据包从一个AS到另一个的时候,必须使用BGP

2.当多条链路从一个as到另一个as时候,必须使用BGP

3.当离开as部署路由策略和路由选择,建议使用BGP

BGP使用触发更新和增量更新


BGP特点

1.BGP基于tcp,并且是唯一一个基于tcp的路径选择协议,源端口大于1024的随机端口,(1024以下的是比较重要的端口),目标端口是179,基于tcp,由于也是端到端的,所以要主动 指neighbor才能建立邻居

2.BGP只支持触发更新

3.通过keep alive消息维持tcp会话

4.BGP有丰富的度量值(丰富的属性)

5.给大型网络设计的(比如英特网)


BGP三张表

1.邻居表

记录了BGP的邻居,BGP邻居可以非直连,需要手工指定,BGP是没有组播地址,都是单播

2.BGP表

记录了从邻居那里学来的所有路由,可以有多条路径去往目标,携带BGP属性

3.路由表

BGP默认不负载均衡,总会通过BGP表选出一条最佳的路径


BGP的AD 20 200


BGP的4个消息

1.open

发现邻居,包括hold time(默认180s)和router-id

2.keep alive

维系邻居,维系tcp邻居,每60s发送一次,3倍时间没收到对面的,就表示邻居挂了

3.update

通过报文,通告从邻居那里知道的路径,并携带了丰富的网络属性,只通告最优的的给邻居

4.notification

当配置出现错误时候的消息,当BGP死了的时候也会出现


BGP的5个状态

1.idle

找路由表看看是否有去邻居的路由,如果找不到就卡在idle状态,这个时候需要检查底层IGP

2.connect

路由器知道去邻居的路径,并且在这个状态完成tcp三次握手

3.open sent

向邻居发送open消息

4.open confirm

作为一种response响应,如果没有响应,会卡在active状态(活动非正常状态),这个时候需要检查对端

(一般常见问题:)

1.对端没有路由达到我的更新源2.邻居neighbor地址错了3.对端没指neighbor4.as号错误

5.established

最终BGP状态


BGP的neighbor

BGP的neighbor又被称为BGP的peers,也就是BGP对等体

BGP的speaker指运行BGP的路由器

EBGP:运行在as与as之间的设备

IBGP: 运行在同一个as之内的设备

EBGP建议使用直连,IBGP建议使用环回口

EBGP管理距离20

IBGP管理距离200

本地路由也是200


配置

(config)

router bgp [as] 这里as表示整个路由器属于某个as

bgp router-id [rid] 这里必须要写rid

nei [对端ip] remote-as [对端as]

nei [对端ip] up [接口] 给对端指定自己的更新源

注意:

BGP默认更新源是自己的出接口,如果要用环回口建立邻居,需要修改自己的更新源(两边都要做)

(config -router)

nei 2.2.2.2 remote 64511

nei 2.2.2.2 up lo0

EBGP建立邻居也可以用环回口,但是不会通,因为EBGP之间的ttl=1,所以需要更改EBGP跳数

(config-router)

nei 4.4.4.4 remote 64512

nei 4.4.4.4 up lo0

nei 4.4.4.4 ebgp-mul 更改默认跳数

[nei 4.4.4.4 ebgp-mul 255==nei 4.4.4.4 ebgp-mul]

sh ip bgp sum 查看bgp邻居信息

sh ip bgp nei 查看bgp邻居细节信息

clear ip bgp * 重置bgp进程(硬重启)

clear ip bgp * so 软重启

sh tcp bri查看自己和对方开放的端口,ESTAB才算真的通信

sh ip bgp 查看bgp表

必须* + > 才可以载入路由表中!!!!

* 代表路由可用 > 代表最优路由(同一条路由理论上永远只有一个)

r 代表本地路由装载失败,因为BGP的ad大于其他协议,但是该路由最优,还是会传给BGP对等体 sh ip bgp rib-fail

next-hop 如果是0.0.0.0代表myself,本地宣告

> 的路由一定会传递给bgp对等体,但不一定载入本地路由表

*> 该路由最优,一定会被装到路由表

打>的条件: 1.下一跳可达 下一跳不可达解决方案:

写静态路由

在EBGP条件下可以考虑nei 4.4.4.4 next-hop-self

2.如果“同步”开启,就要满足“同步”原则 “同步规则”从IBGP邻居学到的路由,不能使用也不能传给EBGP邻居,直到从IGP也学到该路由 一般情况关闭同步

(config-router)

no syn

3.选路


bgp宣告:

bgp宣告的是路由!!!!不是接口,只要路由表存在的路由,都可以宣告进bgp

(config-router)

net 11.1.1.0 mask 255.255.255.0 要和路由表完全一致

EBGP传给自己内部as信息的时候,下一跳不会改变,可能造成自己内部其他对等体的下一跳不可达问题,导致没有>

所以需要在边界路由器对内部

(config-router)

nei 2.2.2.2 next-hop-self 告诉自己对等体把自己当作下一跳


【ospf宣告环回口会把环回口变成32位子网,影响选路,所以需要进入lo接口中,ip os net point-to-point,这样可以让环回口恢复24位子网】


IBGP的水平分割

从IBGP邻居学到的路由不会传给其他的IBGP邻居(BGP防环用的)

所以可以考虑建立全互联关系


在防环的情况下打破水平分割

1.路由反射器(RR:router-reflector)

RRC(路由反射器用户)

non-RRC

配置RRC发命令会发生在中间路由器上

(config-router)

nei [邻居rid] router-reflactor-client 把目标配置成RRC,自己就成为RR

路由反射器只能反射路由,不能对路由属性(比如next-hop)进行修改,是爱没办法只能用静态路由解决

路由反射防环方法:

1.ogrinator 起源者属性

如果起源者的rid是自己的rid,就不能接受该路由

使用sh ip bgp x.x.x.0 查看路由的属性

默认情况起源者是开启的

2.cluster-list簇列表属性,罗列了路由器所有经过的RR的rid

收到的路由簇列表中如果有本地的RID,就deny该路由


配置联盟

联盟里的EBGP是不受水平分割影响的,联盟只对内部有效,对于别的as的设备来说是透明的

配置

(config)

router bgp 12 进入小as

bgp router-id 2.2.2.2

nei 1.1.1.1 remote 12

nei 1.1.1.1 up lo0

nei 23.23.23.3 remote 3

bgp conf id 123 声明自己所在的大as号叫123

!!!在联盟与联盟之间的边界路由要配置bgp conf peers [对方as号] ,让路由器知道实际上对方as也和自己一样属于同一个大as中


配置peer group

配置模版

nei [peer group名:TEST] peer-group 定义一个模版

nei TEST remote 123

nei TEST up lo0

nei TEST route-ref

nei 1.1.1.1 peer TEST


BGP认证

BGP只支持md5认证,没有明文认证

(config-router)

nei [邻居] pass [0-7加密类型] [密码]

0明文显示,7是cisco私有密文显示


BGP路由属性

公认vs任选

公认:所有厂商都支持

任选:不是所有厂商都支持

必须遵守vs任意遵守

可传输vs非可传输


公认必尊属性

所有厂商都识别,必须选择使用,一定携带在路由更新消息中

公认任意遵守属性

所有厂商都识别,不一定用它,有可能出现在更新消息中

任选属性

-任选可传输:如果识别,本地生效后传给邻居,如果不识别,也是可以传给邻居的

-任选非可传输:如果不识别,就忽略它,不会传给邻居


打*号的是公认必遵:

as path*

next-hop*

origin*

local preference

MED

weight


as path

作用:用来描述一条路由经过的as的,EBGP用来放环的

选路:优选短的as path,代表经历了少的as,距离本地近

分类:公认必遵

next-hop

作用:0.0.0.0代表路由是本地产生的

选路:优选起源于本地的路由0.0.0.0

分类:公认必遵

origin

作用:描述路由起源的

i 通过network命令宣告进来的

e 通过EGP协议重发布进来的

?通过其他协议重发布进来的

选路:优选起源代码小的

​ 代码i<e<?

分类:公认必遵

weight

作用:只影响本地路由选择

选路:优选大的weight值

默认32768和0,起源本地的路由都是32768,邻居来的都是0

分类:cisco私有的,最安全的属性,因为影响范围小

local-preference

作用:适用于数据包出站选路(数据包从as出去)

选路:

越大越优先,默认100

分类:公认任意遵守属性,但是影响整个as的设备,适用于影响本as的IBGP邻居的出站

MED(metric)

作用:影响其他as的EBGP设备,影响入站选路

选路:越小越优先,默认值0

分类:任选非可传输属性


BGP的最终选路原则:

1.优选高的weight值

2.优选高的local preference值

3.优选起源于本地的路由(next-hop)

4.优选最短的as-path

5.优选最小的origin code(i,e,?)

6.优选最小的MED值

7.EBGP路由优于IBGP路由

8.优选最近的IGP邻居

9.优选最老的EBGP路由

10.优选最小邻居的router-id

11.优选最小邻居的ip地址

(理论上前6条就搞定了)


注意!!!!

所有路由属性的修改,最后清进程!!!全部在数据发出方清!!!!!!


weight:

本地有效,只在这个路由器起作用

配置

1.

(config-router)

nei [邻居] wei [weight值] 修改针对某个邻居传来的所有路由的weight值

之后没反应,要用clear ip bgp * so在数据发出方清理

2.

acce 1 per 33.3.3.0

route-map kinmfer per 10

mat ip add 1

set weight 99

route-map kinmfer per 20 一定要写空语句,放过其他路由

(config-router)

nei 4.4.4.4 route-map kinmfer in


local-preference(本地优先级)

不能传出as,可以本as内所有设备生效

告诉自己的IBGP邻居如何离开本as

默认值=100

设置方法:通常在本as的边界路由器设置

配置

1.

bgp def local-pre [本地优先级值]

自己身上清理就可以看到结果

2.

ip pre 100 per 33.3.3.0/24

route-map kinmfer per 10

mat ip add pre 100

set local-pre 101

route-map kinmfer per 20

(config-router)

nei 1.1.1.1 route-map kinmfer out


next-hop

配置

ip pre 100 per 33.3.3.0/24

route-map kinmfer per 10

mat ip add pre 100

set next-hop 0.0.0.0

route-map kinmfer per 20


as-path

只能增长不能减少

配置

acce 1 per 33.3.3.0

route-map kinmfer per 10

mat ip add 1

set as-path prepend 10 20 30 40

route-map kinmfer per 20

(config-router)

nei 32.32.23.3 route-map kinmfer in

之后要在R3上面清

如果是in方向,就是 10 20 30 40 3 i,如果是out就是3 10 20 30 40 i

set的as号最好写重复的,不然会造成环路


origin code

i=IGP 是network

e=EGP 早期EGP协议重发布进来

?=incomplete 重发布进BGP的路由或者静态路由

配置

R1

acce 1 per 3.3.3.0

acce 2 per 33.3.3.0

route-map kinmfer per 10

mat ip add 1

set origin egp 999

route-map kinmfer per 20

mat ip add 2

set origin incomplete

route-map kinmfer per 30

(config-router)

nei 4.4.4.4 route-map kinmfer in


MED选路适用于EBGP邻居进站的选路

1.

(config-router)

default-metric [med值] 大规模修改metric

修改这个只对从邻居发出的路由有效,但是对邻居转发的路由无效

2.

R2

acce 1 per 3.3.3.0

route-map kinmfer per 10

mat ip add 1

set metric 11

route-map kinmfer per 20

(config-router)

nei 1.1.1.1 route-map kinmfer out