天天看点

路由基础之BGP邻居

BGP邻居

原理概述:

       路由信息协议分为内部网关协议(IGP:Interior Gateway Protocol)和外部网关协议(EGP:Exterior Gateway Protocol)两大类。IGP用于自治系统AS(Autonomous System)内部,EGP用于AS之间。最早的IGP是一种称为GGP(Gateway-to-Gateway Protocol)的路由协议,而最早的EGP是一种EGP(Exterior-Gateway protocol,注意,它与类别名EGP同名,现已被废除)的路由协议。目前,常见的IGP包括RIP、OSPF、IS-IS等,而常见的EGP只有BGP(Border Gateway Protocol)。

      早期发布的BGP3个版本分别是BGP-1、BGP-2和BGP-3,这3个版本目前已停止使用,当前使用的版本是BGP-4(RFC4271)。BGP-4作为事实上的互联网外部路由协议标准,已被广泛应用于ISP(Internet

Service Provider)之间。

      BGP虽然是一种动态路由协议,但它实际上本身并不产生路由、不发现路由、不计算路由,其主要功能是完成最佳路由的选择并在BGP邻居之间进行最佳路由的传递。BGP选择了TCP作为其传输协议,端口号为179。

      BGP支持无类域间路由CIDR(Classless Inter-Domain Routing),并且采用了触发增量更新方式,这大大地减少了BGP在传播路由信息时所占用的带宽,特别适用于在互联网上传播大量的路由信息。

      BGP提供了丰富的路由属性(Attribute),通过对这些属性的操作和控制,BGP能够非常容易地实现丰富而灵活的路由策略。BGP还具有良好的扩展性,支持Multicast、VPN、IPv6等多种特性。

      BGP的邻居关系分为IBGP(Internal BGP)和EBGP(External BGP)两种:当两台BGP路由器位于同一AS时(AS编号相同),它们的邻居关系为IBGP邻居关系;当两台BGP路由器位于不同的AS时(AS编号不同),它们的邻居关系为EBGP邻居关系。BGP没有自动建立邻居关系的能力,邻居关系必须通过手动配置来建立。

IGP:内部网关协议(Interior Gateway Protocol)

内部网关协议(IGP)是一种专用于一个自治网络系统(比如:某个当地社区范围内的一个自治网络系统)中网关间交换数据流转通道信息的协议。网络IP协议或者其他的网络协议常常通过这些通道信息来决断怎样传送数据流。目前最常用的两种内部网关协议分别是:路由信息协议(RIP)和最短路径优先路由协议(OSPF)。

EGP:外部网关协议(Exterior Gateway Protocol)

外部网关协议(EGP)是一种在自治系统的相邻两个网关主机间交换路由信息的协议。

EGP 通常用于在因特网主机间交换路由表信息。它是一个轮询协议,利用 Hello 和 I-Heard-You消息的转换,能让每个网关控制和接收网络可达性信息的速率,允许每个系统控制它自己的开销,同时发出命令请求更新响应。路由表包含一组已知路由器及这些路由器的可达地址以及路径开销,从而可以选择最佳路由。每个路由器每间隔120 秒或 480 秒会访问其邻居一次,邻居通过发送完整的路由表以示响应。

实验目的:

理解BGP协议的应用场景

理解IBGP和EBGP邻居的概念

配置IBGP与EBGP邻居关系

实验拓扑:

路由基础之BGP邻居

1:基础配置:

将在R1和R2上使用直连物理接口来配置IBGP邻居关系,为了实现链路冗余,R1和 R2之间部署了两条链路,当其中一条链路出现故障时,另一条物理链路可以提供连通性。

R1:

#
interface GigabitEthernet0/0/0
 ip address 10.0.12.1 255.255.255.0 
#
interface GigabitEthernet0/0/1
 ip address 10.0.21.1 255.255.255.0 
#
interface GigabitEthernet0/0/2
#
interface NULL0
#
interface LoopBack0
 ip address 10.0.1.1 255.255.255.255 
#
bgp 100
 router-id 10.0.1.1
 peer 10.0.12.2 as-number 100 
 peer 10.0.21.2 as-number 100 
 #
 ipv4-family unicast
  undo synchronization
  network 10.0.1.1 255.255.255.255 
  peer 10.0.12.2 enable
  peer 10.0.21.2 enable      

R2:

#
interface GigabitEthernet0/0/0
 ip address 10.0.12.2 255.255.255.0 
#
interface GigabitEthernet0/0/1
 ip address 10.0.21.2 255.255.255.0 
#
interface GigabitEthernet0/0/2
 ip address 10.0.23.2 255.255.255.0 
#
interface GigabitEthernet4/0/0
 ip address 10.0.32.2 255.255.255.0 
#
interface NULL0
#
interface LoopBack0
 ip address 10.0.2.2 255.255.255.255 
#
bgp 100
 router-id 10.0.2.2
 peer 10.0.12.1 as-number 100 
 peer 10.0.12.2 as-number 100 
 peer 10.0.21.1 as-number 100 
 #
 ipv4-family unicast
  undo synchronization
  peer 10.0.12.1 enable
  undo peer 10.0.12.2 enable
  peer 10.0.21.1 enable      

R3:

#
interface GigabitEthernet0/0/0
 ip address 10.0.23.3 255.255.255.0 
#
interface GigabitEthernet0/0/1
 ip address 10.0.32.3 255.255.255.0 
#
interface GigabitEthernet0/0/2
#
interface NULL0
#
interface LoopBack0
 ip address 10.0.3.3 255.255.255.255      

2:配置IBGP邻居:

为了实现链路冗余,R1与R2之间部署了两条链路,当其中一条物理链路出现故障时,另一条物理链路可以提供连通性

我们在基础配置上已经配置完成了,接下来我们查看BGP邻居关系

路由基础之BGP邻居

可以看到,R2现在有两个BGP邻居,分别使用R1的G0/0/0和G0/0/1接口地址来表示,AS编号为100,与R2自己的AS编号相同,因此R2与R1为IBGP邻居,当前邻居状态为Established,表示邻居关系已完全建立。

在R1上将Loopback 0接口地址通告到BGP路由表

[R1]bgp 100
[R1-bgp]network 10.0.1.1 32      

配置完成后,在R2上查看BGP路由表

路由基础之BGP邻居

为了能使R1的Loopback 0 接口与R2的Loopback接口建立起TCP会话,需要在R1和R2上配置到达对方Loopback 0 接口的静态路由。

R1:Lo0的静态:

[R1]ip route-static 10.0.2.2 32 10.0.12.2
[R1]ip ro 
[R1]ip route-s  
[R1]ip route-static 10.0.2.2 32 10.0.21.2      

R2:Lo0的静态:

ip route-static 10.0.1.1 255.255.255.255 10.0.12.1
ip route-static 10.0.1.1 255.255.255.255 10.0.21.1      

删除之前采用物理接口的配置IBGP邻居的命令,并使用Loopback 0接口重新建立IBGP邻居关系。

[R1]bgp 100 
[R1-bgp]undo peer 10.0.12.2
[R1-bgp]un peer 10.0.21.2
[R1-bgp]peer 10.0.2.2 as-number 100      
[R2]bgp 100
[R2-bgp]un peer 10.0.12.1
[R2-bgp]un peer 10.0.21.1
[R2-bgp]peer 10.0.1.1 as-number 100      

上述配置完成后,在R1上查看BGP的邻居关系

路由基础之BGP邻居

可以看到,R1与R2的邻居关系停留在Active状态,而非Extablished,这说明R1与R2尚未正常建立起IBGP邻居关系。

在R1上指定使用自己的Loopback 0 接口地址作为发送BGP报文时的源IP地址,R2上也需使用类似的命令

[R1]bgp 100
[R1-bgp]peer 10.0.2.2 connect-interface lo 0      
[R2]bgp 100
[R2-bgp]peer 10.0.1.1 connect-interface lo 0      

上述配置完成后,在R2上查看BGP路由表

路由基础之BGP邻居

可以看到,R2的BGP路由表中只有一条去往10.0.1.1/32的路由,下一跳为10.0.1.1

再查看R2的IP路由表

路由基础之BGP邻居

3:配置EBGP邻居:

在R2和R3上使用Loopback 0 接口来建立EBGP邻居关系

[R2]bgp 100
[R2-bgp]peer 10.0.3.3 as-number 200      
[R3]bgp 200
[R3-bgp]router-id 10.0.3.3
[R3-bgp]peer 10.0.2.2 as-number 100      

上述配置完成后,在R3上查看BGP邻居关系

路由基础之BGP邻居

可以看到,R2与R3的邻居状态一直停留在IdIe状态,说明邻居关系未能正常建立。

我们知道,BGP邻居关系建立的前提条件是要能够建立起TCP会话,而目前R2和R3上都不存在去往对方Loopback 0 接口的路由,因此无法建立TCP会话,为了解决这个问题,可以在R2和R3上配置到达Loopback 0 接口的静态路由。

[R2]ip route-static 10.0.3.0 24 10.0.23.3
[R2]ip route-static 10.0.3.0 24 10.0.32.3
[R3]ip route-static 10.0.2.0 24 10.0.23.2
[R3]ip route-static 10.0.2.0 24 10.0.32.2      

上述配置完成后,在R3上查看BGP邻居关系

路由基础之BGP邻居

可以看到,R2与R3之间的邻居关系一直停留在Active状态,说明邻居关系还是未能正常建立起来

[R2-bgp]peer 10.0.3.3 connect-interface lo 0
[R3-bgp]peer 10.0.2.2 connect-interface lo 0      

配置完成后,在R3上查看BGP邻居关系

路由基础之BGP邻居

在R2和R3上配置BGP报文的TTL值为2

[R2-bgp]peer 10.0.3.3 ebgp-max-hop 2
[R3-bgp]peer 10.0.2.2 ebgp-max-hop 2      
在默认情况下,EBGP邻居之间在发送BGP报文时,TTL为1,所以EBGP默认要求邻居之间必须物理直连。但是当R2和R3使用Loopback 0 接口建立邻居关系时,由于使用的不是物理直连的接口,所以TTL值会被多减一次,成为0,最终使得BGP报文会丢弃;从而导致邻居关系无法建立,为了解决这一问题,可以修改EBGP邻居发送的BGP报文的TTL值,使报文的TTL值大于1

上述配置完成后,在R3上查看BGP邻居关系

路由基础之BGP邻居

可以看到,R2与R3之间已经建立起了EBGP邻居关系

需要说明的是,在实际场景中,通常使用Loopback接口来建立IBGP邻居关系,使用物理接口来建立EBGP邻居关系

实验结束;