BGP为Border Gateway protocol 边界网关路由协议(路径矢量)
主要作用是在AS之间传递路由信息
• 分类:EGP
• 工作机制:路径矢量协议
• 无类路由协议:支持VLSM和CIDR
• 应用层协议/7层,TCP封装,179端口号
• IGP使用networks通告路由,用度量值标识路径好坏
• BGP通告整条路径,并使用属性标识路径好坏
• BGP可通过各种路由策略实现路由控制
• 什么时候可以使用BGP
1、当一个AS允许其他AS的数据流量通过该AS的时候(例如运营商AS)
2、当一个AS连接多个点连接外网的时候
3、当需要对进入及离开该AS的数据做多种多样的路由策略的时候
• 什么时候不用BGP
1、不了解BGP协议或对BGP协议知之甚少的时候
2、只有一个接入点连接外网的时候
3、该路由器内存较小,CPU性能较差的时候
• 可靠更新,使用TCP179端口号,使用单播
• 触发更新,增量更新(只更新出现问题的路由条目)
• 周期发送keepalive报文,使用OPEN(60秒发送一次)(三次握手)报文建立邻居关系。Hold time 180秒
• BGP属性描述路由好坏
• BGP用于超巨型网络
邻居表(adjancy table)
BGP表(forwarding database):BGP默认不做负载均衡,会选出一条最优的,放入路由表
路由表(routing table)
使用OPEN报文建立邻居关系,将邻居信息存放于邻居表中,建立完成邻居关系后将邻居发送的更新存放于BGP表中,再将最优路由提取存放于路由表
1、 BGP的发言者:发送BGP消息的路由器叫做BGP的发言者。
2、 BGP对等体:相互交换BGP消息的路由器叫做BGP的对等体。
3、 IBGP对等体:同一个自治系统内的对等体关系。
• 建立IBGP邻接关系,满足的条件
(1)自治系统号相同
(2)定义邻居建立TCP会话
(3)IBGP邻居可达
4、 EBGP对等体:不同自治系统间的对等体关系。
• 建立EBGP邻接关系,满足的条件
(1)EBGP之间自制系统号不同
(2)定义邻居建立TCP会话
(3)neighbor中指定的IP地址要可达
• 1:对于一条BGP路由,如果一台路由器是该路由的始发路由器,该路由器会将该路由传递给其他所有IBGP对等体以及所有EBGP对等体
• 2:对于一条BGP路由,如果一台路由器不是该路由的始发路由器
1)如果对于该路由器而言该路由条目是一条EBGP路由,则该路由器会将该路由条目转发给所有IBGP对等体以及所有其他EBGP对等体
2)如果对于该路由器而言路由条目是一条IBGP路由,则该路由器会将该路由条目转发给所有EBGP对等体,而不会转发给任何IBGP对等体
• 一台BGP会话者收到一条IBGP路由,该路由器只可能将该路由传递给其EBGP对等体,而不会将该路由传递给任何其他的IBGP
• 一台BGP会话者收到一条EBGP路由,只要该EBGP路由内包含的接收者所在的AS号,则该路由会立即被丢弃
注:收到EBGP能发给所有路由,收到IBGP只能发给外部
1、 公认必遵属性:所有BGP路由器都能够识别这种属性,并且这种属性必须存在于update报文中,如果缺少这种属性,路由会出错,主要包括:origin属性、as-path属性、next-hop属性。
2、 公认可选属性:所有的BGP路由都能够识别这种属性,但是这种属性不要求一定存在于update消息中,主要包括:Local_pref属性等。
3、 可选传递:在AS之间具有可传递的属性,BGP路由器都可以不支持此属性,但它仍会接受有此属性的路由,并通告给其他的路由器,主要包括:commutity属性等。
4、 可选非传递属性:如果BGP路由器不支持此属性,则此属性可以被忽略,主要包括MED、CLUESTER_LIST属性。
Origin属性:路由的源属性,BGP路由的来源主要有三种,第一:通过引入IGP路由实现,即Incomeplete,第二:通过network方式注入BGP,即IGP,通过EGP协议学习,这个可以忽略了。
As-path:指示出了该路由信息经过了哪些AS路径,主要作用是保证AS间无环路,一般当本自治系统的路由离开自治系统的时候会添加本自治系统的号码,BGP路由选路的时候,会优先选择AS-PATH短的路由。
Next-hop属性:下一跳属性,需要注意的是当边界设备学习到EGP对等体发布的路由的时候,传递给IBGP对等体的时候,不会修改路由的下一跳。
5、 local_pref:本地优先级,当一个AS有多条到达外部AS的路径的时候,BGP会优先选择本地优先级高的路由,本地优先级只在本AS内有效,只能影响进入本AS的流量,不会影响离开本AS的流量。
6、 MED属性:BGP的MED属性相当于IGP协议的度量值,当有多条路由进入本AS的时候,用来告知EBGP对等体哪条路由最优,默认的MED值为100,值越小越优。
需要注意的是med值仅在两个AS之间传递,不会传递到第三个AS。
7、 preferred-value值:首选值,为从不同对等体接收的路由分配不同的preferred-value值,从而可以改变指定对等体学到路由的优先级,这是h3c的私有属性,改属性仅在本地有效,不随路由信息传播。
• 解决BGP数据层面路由黑洞的方式
• 1、在AS内使用物理链路全互连
• 2、在AS内对IBGP对等体邻接关系的全互连
• 3、将AS内部的边缘路由上的BGP路由重分发进IGP中
• 4、在AS内部的边缘路由器之间建立TUNNEL
• 5、在AS内所有路由器使用MPLS(推荐)
• 当一台路由器通过一个接口收到了一个报文,该路由器查表发现转发这个报文需要将其通过接收接口再次转发出去
1)将该报文转发出去
2)给该报文的发送者发送ICMP重定向报文告知该报文发送者以后发送报文直接发送给谁
• 当一台BGP speaker将一条BGP路由传递给同MA网段的下一跳EBGP邻居时,该路由器如果发现该路由条目的上一跳邻居传递该路由的接口的IP地址和下一跳邻居接收该路由的接口IP地址在同一个IP子网段,此时该路由器会主动将该路由条目的下一跳地址改写为上一跳邻居的发送路由接口的IP地址
• 1、路由器将其本地路由通告进BGP进程,则对该被通告路由,该路由器本地BGP表中关于这些路由的下一跳为0.0.0.0
• 2、路由器将通过IGP获悉的路由通告进BGP进程,则该路由在该路由器的BGP表中下一跳将继承相应的IGP路由的下一跳地址
• 3、路由器将其本地通告的本地路由传递给其任何BGP对等体,该路由条目下一跳改为本地对于这些邻居的更新源
• 4、路由器通过EBGP学习到路由,则该路由在传递给IBGP对等体时,默认情况下一跳不变(next除外)
• 5、路由器将任何BGP路由通告给其EBGP对等体,则路由的下一跳会变成该路由器对于该邻居的BGP更新源地址
R4:
neighbor 24.1.1.2 remote-as 123 指定R2邻居地址及AS号
R2:
neighbor 24.1.1.4 remote-as 4 //指定R4邻居地址及AS号
neighbor 3.3.3.3 remote-as 123 //指定R3邻居地址及AS号
neighbor 3.3.3.3 update-source Loopback0 //强行更改OPEN包源地址为环回口
neighbor 3.3.3.3 next-hop-self //告知邻居接收到本地发送的路由下一跳指定为本地
R3:
neighbor 2.2.2.2 remote-as 123
neighbor 2.2.2.2 update-source Loopback0
neighbor 5.5.5.5 remote-as 5
neighbor 5.5.5.5 ebgp-emultihop 255 //默认在EBGP邻居关系中报文只专一跳,强行更改为255跳
neighbor 5.5.5.5 update-source Loopback0 //修改更新源地址
• show ip bgp summary查看BGP邻居表
• show ip bgp neighbors查看邻居详细信息
• sho tcp brief查看BGP路由所使用端口
• 如果BGP表中的一条BGP路由没有标识>,则该路由不是最优的,不是最优的路由没有资格加入路由表并且没有资格被传递给任何其他的邻居路由器。
• 导致BGP路由不优的原因
• 1:BGP路由的下一跳不可达
• 2:同步原则未关闭
• 当一台路由器通过一个IBGP对等体收到了一条IBGP路由,该路由条目不能被放入路由表也不能被传递给任何邻居,除非该路由器同时通过某种IGP获悉了该路由条目
1、Weight-权重属性
• weight(权重属性)
• 1、本地有效,发送路由不携带
• 2、下一跳地址为0.0.0.0,默认值为32768.邻居通告的无论IBGP或EBGP都为0,本地通告来源于IGP的路由也为0
• 3、属性值越大越优先
• 4、该属性思科私有
• R3(config-router)#neighbor 1.1.1.1 weight 1从该邻居收到的BGP路由权重置1后加表
• ip prefix-list 10(前缀列表名字) permit 4.4.4.0/24
• R3(config)#route-map WEI(路由map的名字) permit 10(序号)
• match ip address prefix-list 10(引用的前缀列表)
• set weight 2
• R3(config)#route-map WEI permit 20
• R3(config-router)#Router bgp 1
• neighbor 1.1.1.1 route-map WEI in
2、本地优先级
• local preference(本地优先级)
• 1、只能在一个AS内传递(只能在传递IBGP路由时生效)
• 2、无论什么路由缺省都为100
• 3、属性值越大越优先
使用原因:
当一个AS内有多台出口路由器时,在边界路由器修改本地优先级告知AS内部路由器访问外部AS网络时优先从哪个出口路由器出去。
• R1(config-router)#bgp default local-preference 101全局配置,影响范围较大
• 建议在R1边界上入(出)站接口方向修改
• ip prefix-list 10 seq 5 permit 4.4.4.0/24
• route-map LP permit 10
• match ip address prefix-list 10
• set local-preference 101
• route-map LP permit 20
• neighbor 3.3.3.3 route-map LP out
• (OR)neighbor 14.1.1.4 route-map local in
3、优先本地路由-下一跳全0
• 如上图,R5通告了5网段路由,R6拥有静态5网段且在BGP中通告该路由,那么R6的BGP表中会优选R6,因为下一跳全0,且无法更改。
• 一般情况不会出现此类现象,若发现有此现象应考虑是否出现路由环路。
4、AS path
• 1、全网传递,在AS之间可配置增加长度
• 2、比较长度,与AS值大小无关
• 3、越长越差,越短越好
• 4、出方向修改AS长度,下游邻居收到的路由修改后的AS在右,即是路由条目先加入了要修改的AS,然后加入原属的AS号再发送给邻居,入方向则相反。
• neighbor 24.1.1.2 allowas-in该命令为不管收到的路由有没有包含本地AS都收入
• bgp maxas-limit 10接收的路由包含最大AS长度为10
• bgp bestpath as-path ignore隐藏命令,不比较AS长度
• R4上修改:
• access-list 10 permit 4.4.4.0
• route-map AP permit 10
match ip address 10
set as-path prepend 4 4 4 4增加4个4
• route-map AP permit 20
• neighbor 24.1.1.2 route-map AP out
• 增加AS长度建议增加本地的AS号,因为路由传递携带的AS号边界路由收到后如果查到该路由所携带的AS内有本地AS号会拒收,影响路由传递
5、起源属性
• 1、公认强制属性,全网传递
• 2、 IGP优于EGP优于 incomplete
• R4上修改:
• ip prefix-list 10 seq 5 permit 4.4.4.0/24
• route-map OR permit 10
match ip address prefix-list 10
set origin incomplete 修改为?
• route-map OR permit 20
• neighbor 24.1.1.2 route-map OR out调用
6、MED多出口鉴别器
• 1、在邻居AS内传递(EBGP邻居之间)
• 2、IETF公认值默认最大,思科默认为0
• 3、越小越好
• 4、给EBGP邻居传递路由的时候,通过设置MED值来告知邻居发包到本AS的时候使用哪条路径进入(与本地优先级相反)
• 5、经过EBGP路由器之后MED值恢复默认值,仅存在EBGP邻居之间
• 6、思科设备认为metric就是MED
• R3通告环回口路由,查看R4的BGP表,假定R4为运营商设备不能动,要达到R4去往3网段走R2
• R1上修改MED值,默认都为0,将R1改大走R2
• access-list 10 permit 3.3.3.0
• route-map MED permit 10
match ip address 10
set metric 100
• route-map MED permit 20
• neighbor 14.1.1.4 route-map MED out
MED属性
• 思科与公认标准所定制MED值各不相同,如果思科与其他厂商一起使用,该如何保证MED属性相同?
• R4(config-router)#bgp bestpath med missing-as-worst
• 使用该命令需要在AS之间的所有思科路由器上启用,调整MED默认值为最大值4294967295
• 路由器通过同一个AS的多个EBGP邻居传递的同一路由携带MED会比小,如果是通过不同AS的多个邻居收到同一网段的路由不会比较
• bgp always-compare-med此命令强制比较不同AS传递过来的相同路由的MED值
路由反射器router reflector
1、RR收到了一条EBGP路由,会将其转发给所有其他EBGP对等体以及所有IBGP对等体(包含client以及non-client)
2、RR收到了一条IBGP路由(client发的),RR会将其转发给所有其他的RRC以及所有IBGP的non-client以及所有的EBGP对等体
3、RR收到了一条IBGP路由(non-client发的),RR会将其转发给所有client以及所有EBGP对等体,但不会传递给non-client
路由反射器配置
• 使用BGP选路拓扑,R2与R4断开EBGP邻接关系,此时R2收不到R4的所有路由,通过配置路由反射器让R2学习到R4通告的路由。
• R3配置为RR,R2配置为RRC
• R3(config-router)#neighbor 2.2.2.2 route-reflector-client
RR反射的路由在转发给邻居的时候不改变任何参数
1、所有联邦路由器启用BGP进程的AS号都是子AS号,联邦建邻居指的是对方的子AS号,外部路由指联邦内BGP邻居指的是主AS号
2、所有联邦内路由器都要宣称自己属于主AS
3、联邦内路由器要建立联邦内EBGP连接时需要指定本地和什么子AS邻接
联邦配置-R1
• R1配置:
• router bgp 65001
• bgp router-id 1.1.1.1
• bgp confederation identifier 1宣称所属主AS
• neighbor 3.3.3.3 remote-as 65001
• neighbor 3.3.3.3 update-source Loopback0
• neighbor 3.3.3.3 next-hop-self
• neighbor 14.1.1.4 remote-as 4
联邦配置-R2
• router bgp 65002
• bgp router-id 2.2.2.2
• bgp confederation identifier 1宣称所属主AS
• bgp confederation peers 65001 //写对端AS号
该命令为与R3所在AS建立逻辑EBGP关系
• network 2.2.2.0 mask 255.255.255.0
• neighbor 3.3.3.3 remote-as 65001
• neighbor 3.3.3.3 ebgp-multihop 255多跳
• neighbor 3.3.3.3 update-source Loopback0
联邦配置-R3
• router bgp 65001
• bgp router-id 3.3.3.3
• bgp confederation identifier 1宣称所属主AS
• bgp confederation peers 65002 //写对端AS号
该命令为与R2所在AS建立逻辑EBGP关系
• neighbor 1.1.1.1 remote-as 65001
• neighbor 1.1.1.1 update-source Loopback0
• neighbor 2.2.2.2 remote-as 65002
• neighbor 2.2.2.2 ebgp-multihop 255多跳
• neighbor 2.2.2.2 update-source Loopback0