BGP基本配置
BGP建邻的基本配置
使用直连接口IP地址建立EBGP对等体关系
1、启动BGP协议 [r1]bgp 100 -----启动BGP进程,且标准本设备所在的AS号 2、设置Rid [r1-bgp]router-id 1.1.1.1 3、配置BGP对等体,并指定对等体所在的AS号 [r1-bgp]peer 12.0.0.2 as-number 200 [r1]display bgp peer ----查看BGP的邻居表
IBGP对等体的建立
由于直连接口建立对等体时,若链路终端,则会中断BGP会话。故在实际工程中,一个AS内部正常具有较为复杂的网络拓扑结构,设备到设备之间存在大量的备份和负载均衡路径,因此建立IBGP邻居关系时,建议使用双方的环回接口来作为源/目IP地址。
[r2]bgp 200 [r2-bgp]peer 3.3.3.3 as-number 200 [r3]bgp 200 [r3-bgp]router-id 3.3.3.3 [r3-bgp]peer 2.2.2.2 as-number 200
手工建立邻居关系时,所指定的建邻的IP地址必须和收到的数据包中的源IP地址相同才能正常建立邻居关系。否则,邻居关系建立失败。
[r2-bgp]peer 3.3.3.3 connect-interface LoopBack 0 ---将R2发送的数据包的源IP地址修改为loopback 0接口的IP地址
抓包后会发现一个问题,就是BGP此时仅建立了一次TCP连接,就完成了BGP会话的建立。这也就意味着,BGP会话的建立仅仅是依靠TCP会话,而并没有对这个TCP会话建立的方式有要求,该TCP会话是由谁发起的,谁是客户端,谁是服务端并不影响BGP对等体的建立。-------在BGP协议中,TCP会话建立两次完全是多余的,而建立两次的原因也是因为双方路由器均会指定对等体(均将自己看做是客户端),从而发起建立连接请求。
而在当下场景中,R3作为TCP会话的服务端,已经认知到了自己本地已经有接口3.3.3.3,与自己本地配置的对等体建立了连接,所以本地也不会在发送所谓的TCP连接建立请求。
一般情况下,双方均要修改本地数据包的源IP地址。
使用环回接口IP地址建立EBGP对等体关系
若EBGP对等体之间存在多条直连链路时,才可使用环回接口建立对等体关系。
1、实现路由可达 ip route-static 5.5.5.5 255.255.255.255 45.0.0.5 ip route-static 4.4.4.4 255.255.255.255 45.0.0.4 2、对等体配置 [r4]bgp 200 [r4-bgp]peer 5.5.5.5 as-number 300 [r4-bgp]peer 5.5.5.5 connect-interface LoopBack 0 [r5]bgp 300 [r5-bgp]router-id 5.5.5.5 [r5-bgp]peer 4.4.4.4 as-number 200 [r5-bgp]peer 4.4.4.4 connect-interface LoopBack 0
因为EBGP之间的数据包的TTL值为1,故此时虽然可以建立TCP连接和BGP会话,但是路由器会认为该连接和会话存在异常,在BGP对等体建立完成后,发送notification报文断开连接,从而会产生一个现象----状态机震荡。
解决方法:修改TTL值
[r4-bgp]peer 5.5.5.5 ebgp-max-hop 2 如果未标明参数值,则代表将TTL值修改为最大值255 [r5-bgp]peer 4.4.4.4 ebgp-max-hop 2 两边均要修改,不然无法建立对等体关系,还存在状态机震荡。
BGP的路由发布
通过network命令发布路由
路由发布----对于BGP而言,只要是路由表中存在的路由信息,都可以通过network命令发布。
[r1-bgp]network 1.1.1.1 32 目标网络号 路由表中的掩码信息
注意:BGP使用network命令宣告时,该路由信息必须与全局路由表中存在的路由项一致。
[r1-bgp]display bgp routing-table ---查看BGP表
network-----目标网络号及掩码
nexthop-----下一跳,谁发送的路由信息,则下一跳就写谁;如果是本地发布的路由,则下一跳写0.0.0.0
状态码
*
- 代表可用
- 所有设备收到路由条目后,首先会根据下一跳属性中的参数来查询本地路由表,查看该地址的可达性。如果本地路由表中可达,则代表该路由信息可用;若本地不可达,则代表该路由信息不可用。
- 如果该路由条目不可用,则将不会参与到路由信息的优选过程。
>
- 代表优选
- 当收到多条到达相同网段的路由信息时,并且都可用,则将依据属性在其中选择最优的路由信息进行加表及传递。
i
代表该路由信息是通过IBGP对等体学习到的
对于R3而言,R2传递来的路由信息是不可用且不优的,原因在于下一跳属性未修改,无法递归。
解决思路:
[r2-bgp]peer 3.3.3.3 next-hop-local 将路由传递给自己的3.3.3.3邻居时,将路由中的下一跳属性该为本地。
总结一下配置逻辑:
1. 完成所有路由器的IGP配置
2. 使用直连接口建立EBGP对等体关系
3. 使用环回接口建立IBGP对等体关系
4. 使用connect-interface命令修改IBGP建邻源IP地址,双方均修改
5. 使用next-hop-local命令修改路由传递的下一跳属性
6. 若存在使用环回接口建立EBGP对等体关系,则需要建立通讯条件,并且使用ebgp-max-hop命令修改TTL值
使用import命令引入路由
[r2-bgp]import-route ospf 1
ONG----起源码属性----标识一条路由信息的起源类型
- i----代表这条路由信息起源于AS内部使用network命令通告出来
-
- 不限于IGP、静态、直连
- e-----代表这条路有信息起源于EGP协议----现在几乎看不到该标识
- ?-----除了以上两种方式,其他方式获取的路由信息都是该标识
BGP路由通告原则
- 当一条BGP路由器发现了多条可以到达同一地址的路由条目,该设备会通过一个路由选择过程在这些路由条目中选择一条最优的路由,将这条路由加入到全局路由表中,并且在向其他BGP对等体通告该路由条目时,也只会通告最优的路由。
-
- 通常情况下,路由器只会将最优的路由加载到路由表中,除了激活了负载均衡情况外。
- 当一台路由器从EBGP邻居学习到了BGP路由时,缺省情况下,会将该路由条目通告给所有的IBGP对等体以及EBGP对等体。
- 当一台路由器从IBGP邻居学习到了BGP路由时,缺省情况下,不会将这条路由信息通告给其他的IBGP对等体。
-
- 因为IBGP水平分割原则
- 当一台路由器从自己的IBGP学习到BGP路由时,如果同步规则被激活,只有从IGP协议也学习到该路由条目后,才会将BGP路由激活,并学习到本地,以及通告到EBGP对等体。如果同步规则被关闭,即使没有从IGP学习到该路由,也会将BGP路由通告给EBGP对等体。