BGP的基本知识点:
EBGP(外部网关协议)
DV(路径矢量协议)但跟RIP不同,会生成3张表
应用层协议,基于端口号179,基于TCP/IP协议
封装: 帧 IP TCP/IP BGP FCS
现今使用的主流BGP版本:
BGPv4 只能为IPv4提供路由
BGPv4 plus
使用BGP时必须是运营商双接入(多宿主连接方案)
AS号:向IANA购买
0-64511 公有AS号(唯一的,跟IP地址一样)
64512-65535 私有AS号
BGP路由在一个AS内传递的时候,吓一跳不会发生改变,不同AS之间传递才会改变
OSPF支持的最大路由条目为10000条,IS-IS支持的最大条目为20000条
BGP发送任何报文只能是单播,所以必须指定neighbors
BGP支持触发更新,不周期性更新
BGP没有度量值,用属性来衡量好坏
BGP主要用于超大型网络
BGP路由的传递原则:
对于一条BGP路由,如果一台路由器是该路由始发路由器,该路由器会将该路由传递给所有的IBGP对等体以及所有的EBGP对等体
对于一条BGP路由,如果一台路由器不是该路由的始发路由器,
BGP Database
neighbor table
BGP table (跟EIGRP拓扑表一样)
routing table
注意: IBGP AD=200
EBGP AD=20
BGP的报文:
Open 建立邻接关系(必须有RID)180s失效
Keepalive 维护邻接关系,60s一次,失效时间为180s
Update (前缀,掩码,下一跳,每条条目的所有BGP属性)
Notification 用来报错
BGP路由的传递原则:
对于一条BGP路由,如果一台路由器是该路由的始发路由器,该路由器会将该路由传递给所有的IBGP对等体以及所有的EBGP对等体
对于一条BGP路由,如果一台路由器不是该路由的始发路由器
如果对于该路由器而言该路由条目是一条EBGP路由,则该路由器会将该路由条目传递给所有的IBGP对等体以及所有的EBGP对等体。如果对于该路由器而言该路由条目是一条IBGP路由,则该路由器会将该路由条目转发给所有的EBGP对等体,而不会转发给任何IBGP对等体
注意:BGP邻接关系建立完毕也不会传递任何BGP路由,要么network要么重分发
一台路由器既运行了BGP又运行了OSPF,建议共享同一个路由器ID,show tcp brief 查看哪边的端口是179
如果BGP表中的一条BGP路由没有标识>,则该路由不是最优的,不是最优的路由没有资格被添加进路由表,并且没有资格传递给其他的邻居
导致BGP路由不优的原因:
BGP路由的下一跳不可达
同步原则:当一台路由器通过一个IBGP对等体收到了一条IBGP路由,该路由条目不能被放入路由表,也不能被传递给任何其他的邻居,除非该路由器同时通过某种IGP获悉了该路由条目。
一条路由条目如果打 >r,该路由条目是最优路由,但是由于管理距离的问题无法被加入路由表中,但是该路由可以传递给其他的BGP对等体
BGP的配置:
R1(config)#router bgp 1
R1(config-router)#no auto-summary
R1(config-router)#no synchronization
R1(config-router)#bgp router-id 91.1.1.1
R1(config-router)#neighbor 12.1.1.2 remote-as 1
修改BGP的更新源地址:
R1(config-router)#neighbor 12.1.1.2 update-source s1/0
建立对等体组:
router bgp 123
bgp rouete-id 1.1.1.1
neighbor CCIE peer-group
neighbor CCIE remote-as 123
neighbor CCIE update-source loopback 0
neighbor 2.2.2.2 peer-groupp CCIE
neighbor 3.3.3.3 peer-groupp CCIE
手工修改BGP路由的下一跳:
route-map NH permit 10
set ip next-hop 15.1.1.1 (自身的接口地址)
router bgp 1
neighbor 2.2.2.2 route-map NH out
注意:不需要route-map空语句,因为没有match,所有的路由都可以被匹配
重分发直连:
R1(config)#route-map L permit 10
R1(config-route-map)#match interface f0/0
R1(config)#router rip
R1(config-router)#redistribute connected route-map L
ORF(出战路由过滤)路由优化:
R1(config)#ip prefix-list 10 deny 4.4.4.0/24
R1(config)#ip prefix-list 10 permit 0.0.0.0/0 le 32
R1(config)#router bgp 1
R1(config-router)#address-family ipv4
R1(config-router-af)#neighbor 14.1.1.1 prefix-list 10 in
R1(config-router-af)#neighbor 14.1.1.1 activate
R1(config-router-af)#neighbor 14.1.1.4 capability orf prefix-list send (发送方为recive,停止发送该路由条目)
R1#clear ip bgp *(必须要硬重置)
注意:先把预配配好,要不命令会报错
原理:当路由器通过其对等体接收路由时,如果该路由器使用前缀列表过滤所有接收的路由,默认情况下邻居路由器不会知道路由传递被拒绝,该路由当拓扑变更的或软清进程的时候依旧会给本路由器发送这些被过滤的路由,从而浪费了邻居的CPU资源,为了优化需要的路由器双方启用该特性,路由过滤方面会通告ORF报文发送给路由传递放,告知其过滤情况,而路由发送方得知情况后无论何时都不会再将被过滤路由发送给过滤方。
ICMP重定向:(特列)
当一台路由器通过一个接口接收到了一个报文,该路由器查表发现转发这个报文需要将其通过接口再次转发出去,会先把报文发出去,并给报文源路由器发一个报文,指定下一次发报文可以直接发送到下一跳
总结: 当一台BGP对等体将一条BGP路由传递给同MA网段的下一跳EBGP邻居时,该路由器发现该路由条目的上一跳邻居传递该路由的接口的IP地址和下一跳邻居接受该路由的接口的IP地址在同一个IP子网段,此时,该路由器会主动将该路由条目的下一跳地址改写为上一跳邻居发送路由接口的IP地址(优化了数据层面的流量)
关于BGP的下一跳:
如果一台路由器将本地路由通告进BGP进程,则对于这些被通告的路由,该路由器本地BGP表中关于他们的下一跳都为0.0.0.0
注意:本地路由指:直连C 静态 S
如果一台路由器通过IGP获悉的路由通告进BGP进程,则这些路由在该路由器的BGP表中下一跳会继承相应的IGP路由的下一跳地址
如果一台路由器将本地通告的本地路由传递给其他的任何BGP对等体,则会将该路由条目的下一跳改为本地对于这些邻居的更新源地址
如果一台路由器通过EBGP学习到了一条路由,则该路由在传递给IBGP对等体时,默认情况下下一跳不变(除非做Next-Hop-Self)
如果一台路由器将任何的BGP路由通告给EBGP对等体时,则路由的下一跳会变成该路由器对于该邻居的BGP更新源地址
注意:BGP的Network通告,并不是通告接口,而是把路由表中已有的路由条目通过BGP通告出来,前缀跟掩码都跟路由表中一样
network 1.0.0.0 mask 255.0.0.0 (精确通告)
没有mask是汇总通告,只能通告主类网络
BGP的建立邻接:
Idle:指定邻居后,路由表正查找neighbor地址
Connect:TCP经过3次握手
Open Set:给邻居发送一个Open
Open Confirm:当邻居成功接收到Open,并查看属性合法,回复一个Open时
Active:当邻居接收到Open,但是自身认为不合法,没有任何回复
Established:对方都确认Open合法之后,进入Established状态,邻居关系建立
注意:邻居建立不起来只会卡在 Idle 和 Active 状态
Idle:路由表中找不到邻居路由
Active:路由不正确或命令配置错误(邻居指定错误)
解决方法:1. 查看IGP路由 2. 查看Neighbors配置 show ip bgp summary
BGP的认证:
BGP只支持MD5认证
R1(config)#router bgp 1
R1(config-router)#neighbor 12.1.1.2 password cisco
注意: 两端都要配置,配置完后需要重置,因为是触发更新
BGP的重置命令:
R1#clear ip bgp * soft 软重置,建议使用,让BGP对等体在发一次更新
R1#clear ip bgp * 硬重置,很彻底,但速度较慢,不建议使用
查看BGP发送和接收到的路由
R1#sh ip bgp neighbors 12.1.1.2 advertised-routes 查看路由器发送的路由
R1#sh ip bgp neighbors 12.1.1.2 received-routes 查看路由器接收到的路由
注意:在查看接收到的路由的时候需要先配置下面命令,先缓存
R1(config)#router bgp 1
R1(config-router)#neighbor 12.1.1.2 soft-reconfiguration inbound
BGP的auto-summary:
在早期的IOS版本中,默认情况下一台路由器的BGP进程的auto-summary是开启的,在后期的新版本中,IOS的auto-summary是自动关闭的
作用:无论在路由器上是否开启auto-summary都不会影响精确通告的BGP路由
该特性只有两个作用:
当路由器上使用汇总通告的时候,如果该路由器路由表中拥有汇总条目内的明细路由的时候,并且该路由器开启了自动汇总,则该路由器会将明细路由抑制,并且将其在主类网络边界汇总后发送给邻居
当在路由器的BGP进程中重分发外部路由时,如果开启了auto-summary,那么该路由器会将这些路由以主类的形式发生送给邻居(发送接口的IP地址和路由的前缀不在同一个主类地址段中),还会将重分发进入的路由的下一跳地址写为0.0.0.0,即便这些路由本身携带Metric,在BGP表中也不会继承
BGP的手工汇总(手工聚合):
在本地创建指向Null 0接口的聚合路由,并且在该路由器的BGP进程中使用Network语句通告该聚合路由,而不需要通告任何一条明细路由(不经常使用)
R1(config)#router bgp 1
R1(config-router)#network 192.168.8.0 mask 255.255.255.0 注意:要汇总的路由必须一条一条通告出来
R1(config-router)#network 192.168.9.0 mask 255.255.255.0
R1(config-router)#aggregate-address 192.168.8.0 255.255.254.0抑制明细路由:R1(config-router)#aggregate-address 192.168.8.0 255.255.254.0 summary-only
使用suppress-map来抑制路由:
R1(config)#ip prefix-list 10 seq 10 permit 192.168.8.0/23 ge 24 le 24
R1(config)#route-map CISCO permit 10
R1(config-route-map)#match ip add prefix-list 10
R1(config)#router bgp 1
R1(config-router)#aggregate-address 192.168.8.0 255.255.254.0 suppress-map CISCO注意:后面还可以加 as-set ,用来防止路由黑洞,和路由环路
unsuppress-map用来放行路由:
router bgp 1
neighbor 14.1.1.1 unsuppress-map CCIE
注意:需要先用route-map来抓取需要放行的路由,route-map不需要加空语句
BGP的属性:
公认属性:有官方定义,所有厂商都能识别
可选属性:反之
强制属性:任何厂商发送的BGP路由,路由中都必须携带的属性
自由属性:反之
可传输属性:可以发送邻居,并可以继续传递下去
不可传输属性:可以发送给邻居,但邻居不会继续传递下去
部分属性:由于产品不同,路由器有些属性不认识,但为了告知邻居所携带的属性
BGP的选路原则:(前提:路由有资格打大于号)
1.Weight(权重):只有思科才能识别
(1)传递范围:该属性只能在路由器本地有意义,路由器发送的任何BGP路由的时候都不会携带该属性
(2)缺省值:对于下一跳地址为0.0.0.0的BGP路由,在该路由器本地BGP表中该路由的缺省权重为32768
注意:如果该路由是邻居通告的,无论IBGP或者是EBGP,缺省都为0
如果该路由是本地通告的,但来源于IGP,则该路由的缺省也为0
取值范围:0-65535
(3)比较方式:Weight属性值越大,该路由条目越优
(4)修改方式:R1(config)#router bgp 1
R1(config-router)#neighbor 12.1.1.2 weight 2(从该邻居接收到的BGP路由,权重值都会加2之后加表)修改范围太大,一般不建议使用
2.Local preference (本地优先级)
(1)传递范围:只能在一个AS之内传递(只能在传递IBGP路由的时候修改)
(2)缺省值:只要是BGP路由,无论是否本地产生,无论是IBGP/EBGP,缺省都为100
(3)比较方式:越大越好
查看命令:R1#sh ip bgp 2.2.2.0 255.255.255.0
(4)修改命令:
R1(config)#router bgp 1
R1(config-router)#bgp default local-preference 110
注意:影响范围:本地产生的路由,EBGP路由,IBGP路由,聚合路由
3.本地产生的路由(下一跳为0.0.0.0)优先邻居传递(一般可以无视)
4.As path
(1)传递范围:整个Internet内
(2)缺省值:没有
(3)比较方式:越短越好,越长越差
R2(config)#router bgp 1
R2(config-router)#bgp bestpath as-path ignore
隐藏命令,输入会跳过AS path的选路
5.Origin code (起源属性,公认的强制属性)
(1)传递范围:整个Internet内
(2)缺省值:没有
(3)比较方式:i >e > ?
注意:network 通告为 i
EGP重分发为 e
IGP重分发为 ?
6.MED(多出口鉴别器)
(1)传递范围:在直连邻居的一跳AS内传递
(2)缺省值:IEIF max最小值 CISCO 0 (两个机构定义不同)
(3)比较方式:越小越好
修改MED值,该命令输入后MED默认为最大值
R2(config)#router bgp 1
R2(config-router)#bgp bestpath med missing-as-worst
注意:MED比较的前提是邻居来自相同的AS域内,而输入该命令不管是什么AS域,只要是相同的路由条目就能比较
7.EBGP路径优先于IBGP路径(跟AD无关系)
8.优先离自己最近的IBGP传递的路由(取决于度量值)
9.比较RID,越小越好
10.选更新源地址最小的邻居传递的路由
打破IBGP路由传递原则的两大方式:
1.路由反射器(Route Reflector)
2.联邦(Confederation)
详解:
1.路由反射器:
Cluster IBGP 创建域
RR Server 服务端
RRC Client 客户端
(1)RR收到一条EBGP路由,会将其转发给所有其他EBGP对等体以及所有IGP对等体(包含Client以及Non-Client)
(2)RR收到一条IBGP路由(该路由是Client传递的),RR会将其转发给所有其他的RR,以及所有IBGP的Non-Client,以及所有的EBGP对等体
(3)RR收到了一条IBGP路由(该路由是Non-Client传递的),RR会将其转发给所有Client以及所有的EBGP对等体,但是不会传递给任何其他的Non-Client
命令:
router bgp 1
neighbors 2.2.2.2 route-reflector-client
注意:不会改变任何其他的属性
2.联邦(创建子AS号,使用私有的AS)
R4(config)#router bgp 65002
R4(config-router)#no synchronization
R4(config-router)#bgp router-id 94.1.1.1
R4(config-router)#bgp confederation identifier 2
R4(config-router)#neighbor 3.3.3.3 remote-as 65001
R4(config-router)#neighbor 3.3.3.3 update-source loopback 0
R4(config-router)#neighbor 45.1.1.5 remote-as 3
注意:neighbor 2.2.2.2 ebgp-multihop 2 (EBGP只能在直连接口建立邻居,而在联邦内必须修改TTL值)
bgp coonfederation peers 65002