• BGP进阶:BGP 基础实验配置


    实验拓扑

    实验需求

    1. R1、R2、R3属于AS123,R4属于AS 400;
    2. AS123内的R1、R2、R3运行OSPF,通告各自直连接口,注意OSPF域的工作范围;
    3. R3-R4之间建立eBGP邻居关系,R2暂时不运行BGP,R1-R3之间建立iBGP邻居关系,所有的BGP邻居关系基于直连接口建立;在R4上创建Loopback0接口并将接口IP地址设置为4.4.4.4/32,同时将该条直连路由通告到BGP,要求R1的路由表中能看到4.4.4.4/32;
    4. 修改BGP配置,使得R1、R3基于Loopback接口建立iBGP邻居关系,R1、R3的Loopback接口地址分别为1.1.1.1/32及3.3.3.3/32;
    5. 要求R1能够ping通4.4.4.4。

    实验步骤及配置

    1. 所有设备完成接口IP地址的配置(这部分配置不再贴出)
    2. R1、R2、R3运行OSPF;R1、R3建立IBGP邻居关系,R3、R4建立EBGP邻居关系

    R1的配置如下

    [R1] ospf 1 router-id 1.1.1.1
    [R1-ospf-1] area 0
    [R1-ospf-1-area-0.0.0.0] network 10.1.12.0 0.0.0.255
    [R1-ospf-1-area-0.0.0.0] quit
    [R1-ospf-1] quit
    
    [R1] bgp 123 #进入BGP进程,AS号为123
    [R1-bgp] router-id 1.1.1.1 #配置BGP routerID
    [R1-bgp] peer 10.1.23.3 as-number 123 #配置BGP邻居,由于邻居的AS号与本地一致,因此两者之间为iBGP邻居关系
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    R2的配置如下(R2先不运行BGP

    [R2] ospf 1 router-id 2.2.2.2
    [R2-ospf-1] area 0
    [R2-ospf-1-area-0.0.0.0] network 10.1.12.0 0.0.0.255
    [R2-ospf-1-area-0.0.0.0] network 10.1.23.0 0.0.0.255
    [R2-ospf-1-area-0.0.0.0] quit
    [R2-ospf-1] quit
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    R3的配置如下:

    [R3] ospf 1 router-id 3.3.3.3
    [R3-ospf-1] area 0
    [R3-ospf-1-area-0.0.0.0] network 10.1.23.0 0.0.0.255
    [R3-ospf-1-area-0.0.0.0] quit
    [R3-ospf-1] quit
    
    [R3] bgp 123
    [R3-bgp] router-id 3.3.3.3
    [R3-bgp] peer 10.1.34.4 as-number 400 #配置eBGP邻居R4
    [R3-bgp] peer 10.1.12.1 as-number 123 #配置iBGP邻居R1
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    R4的配置如下:

    [R4] interface loopback 0
    [R4-loopback0] ip address 4.4.4.4 32
    
    [R4] bgp 400
    [R4-bgp] router-id 4.4.4.4
    [R4-bgp] peer 10.1.34.3 as-number 123
    [R4-bgp] network 4.4.4.4 32  #把本地直连路由network进BGP
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    [R3] display bgp routing-table
    BGP Local router ID is 10.1.23.3
    Status codes: * - valid, > - best, d - damped,
    h - history, i - internal, s - suppressed, S - Stale
    Origin : i - IGP, e - EGP, ? - incomplete
    Total Number of Routes: 1
    Network NextHop MED LocPrf PrefVal Path/Ogn
    *> 4.4.4.4/32 10.1.34.4 0 0 400 i
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    我们看到R3已经学习到了R4传递过来的BGP路由4.4.4.4/32。并且该条BGP路由的NextHop属性值为10.1.34.4,这个下一跳是可达的,因此该条路由在R3的BGP表里有标记“* >”,其中“*”号表示这条路由是可用(Valid)的,而“>”则表示这条路由是去往该目的地最优(Best)的路由。再到在R3上查看路由表

    [R3] display ip routing-table protocol bgp
    Destination/Mask Proto Pre Cost Flags NextHop Interface
    4.4.4.4/32 EBGP 255 0 D 10.1.34.4 GigabitEthernet0/0/1
    
    • 1
    • 2
    • 3

    该条BGP路由由于是best,因此被装载进了路由表。那么,既然在R3上,这条BGP路由是best的,它就会传递给自己的iBGP邻居R1,在R1上查看BGP表。

    [R1] display bgp routing-table
    Network NextHop MED LocPrf PrefVal Path/Ogn
    i 4.4.4.4/32 10.1.34.4 0 100 0 400i
    
    • 1
    • 2
    • 3

    我们看到,R1的BGP表里,已经有4.4.4.4/32的路由,而这条路由NextHop属性值是10.1.34.4,但是R1在本地路由表中没有到达10.1.34.0/24的路由,因此此时BGP路由4.4.4.4/32的下一跳不可达,该BGP条目则不可用(在BGP表中没有“ * ”星号标记),既然不可用,自然就不能装载进路由表中使用。那么怎么解决这个问题呢?一个最简单的方法是,为R1配置一条静态路由,ip route-static 10.1.34.0 24 10.1.23.3,这样一来R1的路由表里就有了到达10.1.34.0/24网段的路由,那么BGP路由4.4.4.4/32的下一跳就可达了,路由自然也就可用了。但是这种方法有点钻空子、取巧。另一种方法是,在R3上OSPF进程中将10.1.34.0/24网段也注入到OSPF,使得R1能够通过OSPF学习到10.1.34.0/24网段的路由,但是由于R3-R4之间的互联链路被视为AS外部链路,因此10.1.34.0/24作为外部网段往往不会被宣告进AS内的IGP。那么还有什么其他办法能解决这个问题?

    1. 修改下一跳为自身

    BGP是AS-by-AS的路由协议,而不是router-by-router的路由协议。在BGP中,next-hop并不意味着是下一台路由器,而是到达下一个AS的IP地址。当一台BGP路由器将路由传递给自己的eBGP邻居时,该路由的NextHop属性值为其BGP更新源地址。如下图,R4将4.4.4.4/24传递给R3时,下一跳为10.1.34.4,也就是R4的GE0/0/0口地址。

    当一台BGP路由器将eBGP路由传递给自己的iBGP邻居时,默认情况下这些eBGP路由的NextHop属性值保持不变。因此R3收到R4传递过来的eBGP路由,下一跳属性值为10.1.34.4,那么它将该条路由传递给iBGP邻居R1的时候,路由的下一跳属性值不会发生改变,仍然为10.1.34.4。

    这就造成了我们上面所述的问题,R1由于没有到达10.1.34.0/24的路由,因此下一跳地址10.1.34.4不可达,从而导致BGP路由4.4.4.4/32不可用。

    有一个方法可以解决这个问题:在R3上使用next-hop-local命令,可修改BGP路由的下一跳属性值为自身。在下图中,我们在R3上增加了peer 10.1.12.1 next-hop-local命令,这样一来当R3再更新eBGP路由给R1的时候,这些路由的下一跳属性值就会被修改为R3自己的更新源地址,而这个地址,R1能够通过OSPF学习到,因此是可达的。

    完成配置后,我们在R1上查看BGP表:

    [R1]display bgp routing-table
    Network NextHop MED LocPrf PrefVal Path/Ogn
    *>i 4.4.4.4/32 10.1.23.3 0 100 0 400i
    
    • 1
    • 2
    • 3

    R3将EBGP路由4.4.4.4/32传递给R1时,将路由的下一跳属性值改成了自身的IP(10.1.23.3),而这个IP对于R1来说是路由可达的,因此路由优化了,并被装载进了路由表。

    1. 指定更新源IP

    内部网关协议例如RIP、OSPF等,能够自动在接口上发现直连邻居,但是BGP在这点上却大不相同,BGP无法自动发现邻居,必须手工使用peer命令指定邻居。BGP路由器之间交互BGP报文时,报文的目的地址就是peer命令所配置的地址,而源地址默认则是数据包出接口的地址。iBGP邻居在一个AS内部被部署,一般而言,AS内部的网络是具有一定冗余性的,例如下图所示,我们在本实验拓扑的基础上做了一点小小的修改,在AS123中增加了一台路由器:R5。R1、R2、R3、R5运行了OSPF。现在设想一下,如果R1与R3之间的iBGP邻居关系使用物理接口来建,例如R1使用GE0/0/0接口,R3使用GE0/0/0接口的话,则一旦R2发生故障,R1、R3的GE0/0/0接口都会DOWN掉,于此同时R1、R3的BGP邻居也就DOWN掉了。但是仔细观察我们就会发现,其实R1、R3之间的IP连通性其实还是存在的,经过R5的这条冗余路径完全可以在R2发生故障时实现R1、R3之间的数据互通。因此为了保障iBGP邻居关系的稳定性,我们提倡在建立iBGP邻居关系时,使用Loopback来建立,而不是物理接口。

    思路很简单,就是在R1及R3上各开设一个Loopback接口并为这个接口配置IP地址,然后在各自的Loopback接口上激活OSPF,使得OSPF域能够获知这两条Loopback路由。接下来R1、R3之间部署iBGP邻居时,使用Loopback地址来建,如此一来,即使R2发生故障,由于R1、R3双方依然可以通过OSPF学习到对端的Loopback路由,所以故障发生时,R1、R3的BGP邻居关系不会DOWN。

    回到本实验,在上文的配置中,我们在R1-R3之间建立iBGP邻居关系时,使用的就是物理接口,现在我们将配置做些修改:

    在R1及R3上创建loopback0,地址分别为1.1.1.1/32及3.3.3.3/32,然后各自将loopback0宣告进OSPF,使得彼此都能通过OSPF学习到对方的Loopback0路由,再修改BGP的配置,使得R1-R3之间的iBGP邻居关系基于Loopback0来建立。

    peer x.x.x.x connect-interface intf [ ipv4-src-address ]
    
    • 1

    上面这条命令用于指定BGP的更新源地址或接口。

    R1增加的配置如下:

    [R1] interface loopback0
    [R1-LoopBack0] ip address 1.1.1.1 32
    [R1-LoopBack0] quit
    
    [R1] ospf 1
    [R1-ospf-1] area 0
    [R1-ospf-1-area-0.0.0.0] network 1.1.1.1 0.0.0.0
    [R1-ospf-1-area-0.0.0.0] quit
    [R1-ospf-1] quit
    
    [R1] bgp 123
    [R1-bgp] undo peer 10.1.23.3
    [R1-bgp] peer 3.3.3.3 as-number 123
    [R1-bgp] peer 3.3.3.3 connect-interface LoopBack 0
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    由于R1、R3现在是使用Loopback接口来建立邻居关系,因此在R1上使用peer命令指定邻居的时候,必须使用R3的Loopback地址作为邻居IP。同时使用connect-interface关键字指定本设备用于和对端建立邻居关系的接口,这个接口的地址将作为更新源。

    R3的关键性配置如下:

    [R3] interface loopback0
    [R3-LoopBack0] ip address 3.3.3.3 32
    [R3-LoopBack0] quit
    
    [R3] ospf 1
    [R3-ospf-1] area 0
    [R3-ospf-1-area-0.0.0.0] network 3.3.3.3 0.0.0.0
    [R3-ospf-1-area-0.0.0.0] quit
    [R3-ospf-1] quit
    
    [R3] bgp 123
    [R3-bgp] undo peer 10.1.12.1
    [R3-bgp] peer 1.1.1.1 as-number 123
    [R3-bgp] peer 1.1.1.1 connect-interface LoopBack 0
    [R3-bgp] peer 1.1.1.1 next-hop-local
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    完成上述配置后,R1与R3即会基于Loopback0接口建立邻居关系。

    1. 完成这个实验

    经过前面的讲解,我们的环境现在是这样的:R1-R3之间建立基于Loopback的iBGP邻居关系;R3对R1配置了next-hop-local;R3与R4之间仍然是建立基于直连的eBGP邻居关系;R4在BGP中network本地的4.4.4.4/32路由。

    现在R1是能够学习到BGP路由4.4.4.4/32的,并且该路由在BGP表中也是优化的,这条路由就会被装载进R1的路由表。那么是不是意味着R1就能够ping通4.4.4.4了呢?经过测试你可能会发现,R1虽然有了4.4.4.4/32网段的路由,但是无法ping通,为什么?因为数据包在R2这里就被丢弃了,还记得么,R2并没有运行BGP,因此它无法学习到BGP路由4.4.4.4/32,现在问题来了,怎么让R1 ping通R4呢?方法之一是在R3上将BGP路由重发布进OSPF,使得R2能够通过OSPF学习到BGP路由,但是这种方法存在一定的风险,因为我们知道BGP承载的前缀数量往往是非常庞大的;另一种方法是,让R2也运行BGP,并与R3建立iBGP邻居关系,这样一来问题就解决了。那么BGP邻居关系就变成了这样:

    R3增加如下配置:

    [R3] bgp 123
    [R3-bgp] peer 2.2.2.2 as-number 123
    [R3-bgp] peer 2.2.2.2 connect-interface LoopBack 0
    
    • 1
    • 2
    • 3

    R2增加如下配置:

    [R2] interface loopback0
    [R2-LoopBack0] ip address 2.2.2.2 32
    [R2-LoopBack0] quit
    
    [R2] ospf 1 router-id 2.2.2.2
    [R2-ospf-1] area 0
    [R2-ospf-1-area-0.0.0.0] network 2.2.2.2 0.0.0.0
    [R2-ospf-1-area-0.0.0.0] quit
    [R2-ospf-1] quit
    [R2] bgp 123
    [R2-bgp] peer 3.3.3.3 as-number 123
    [R2-bgp] peer 3.3.3.3 connect-interface LoopBack 0
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    完成上述配置后,R1、R2和R3就都学习到了4.4.4.4/32的BGP路由。最后要实现R1能够ping通4.4.4.4,则要求R4的路由表中也有10.1.12.0/24的路由,以保证数据包的回程。因此在R1上增加如下配置:

    [R1] bgp 123
    [R1-bgp] network 10.1.12.0 24
    
    • 1
    • 2

    也就是将10.1.12.0/24这条路由注入到BGP,如此一来R4就能通过BGP学习到这条哦路由,那么当R1去ping 4.4.4.4时,报文能够顺利到达4.4.4.4,并且回程的报文能顺利地回来。

    1. 学会看三张表

    查看BGP邻居表:

    查看BGP表:

    查看BGP路由条目的详细信息:

  • 相关阅读:
    k3s部署全过程
    Linux—进程管理
    GCP/临床试验基础知识集锦
    多平台比较,三代扩增子高度还原微生物群落结构
    spring的annotation-driven配置事务管理器详解
    金蝶云星空生产管理(冲刺学习)
    linux 夺命100问
    【打卡】21天学习挑战赛—RK3399平台开发入门到精通-day1
    2023 OceanBase 年度发布会:砥砺自研,为“关键业务负载”打造一体化数据库
    梯度下降优化算法综述,梯度下降法 神经网络
  • 原文地址:https://blog.csdn.net/weixin_43025343/article/details/128020635