BGP进阶:BGP 基础实验配置

news2024/12/22 15:52:53

实验拓扑

实验需求

  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邻居关系

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

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

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

[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

我们看到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

该条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

我们看到,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

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 ]

上面这条命令用于指定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

由于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

完成上述配置后,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

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

完成上述配置后,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

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

  1. 学会看三张表

查看BGP邻居表:

查看BGP表:

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/32468.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MCE | D-萤光素 Protocol 在手,生物发光检测无忧!

■ Q: D-萤光素的作用原理 D-萤光素 (D-Luciferin) 是萤火虫萤光素酶 (Firefly Luciferase) 的化学发光底物。在ATP 和萤光素酶存在下,萤光素能够被氧化发光 (图 1)。当萤光素过量时,发光亮度与萤光素酶浓度呈正相关。通过萤光素/萤光素酶生物发光体系&…

小程序容器技术加快推动国产操作系统“上车”

计算机是当前乃至未来的基础工具,而负责管理计算机硬件与软件资源、提供必须的人机交互机制的操作系统无疑是整个计算机的核心系统软件。 可以说,操作系统是当前一个国家提升综合实力过程中必须要攻克、掌握的核心技术之一。 国产操作系统多为以Linux为…

猫狗肠道菌群—“主子们”的健康新领域

随着生活水平提升,我国养宠人士逐年增多。数据显示,我国城镇养宠人士达到6844万多人,且仍在不断增长。 其中养猫人群数占比59.5%,养狗人群数占比51.7%,养水族类占比8.3%,养爬行类宠物的占比为5.8%&#xff…

Linux 文件操作(三) —— 获取并打印某个文件的属性(文件类型、执行权限、文件大小)

目录 1、获取文件属性 stat / lstat / fstat (1) 参数 path (2) 参数 buf (3) 返回值 2、获取并打印某个文件的属性 (1) 获取文件类型 (2) 获取文件权限 (3) 获取文件大小 (4) 获取上一次的访问时间 (5) 最终代码 1、获取文件属性 stat / lstat / fstat stat / lsta…

[附源码]java毕业设计疫情防控期间网上教学管理

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

数据分析可视化之模型介绍

一 前言 “数据分析可视化”这条术语实现了成熟的科学可视化领域与较年轻的信息可视化领域的统一。 数据分析可视化:是指将大型数据集中的数据以图形图像形式表示,并利用数据分析和开发工具发现其中未知信息的处理过程。 数据可视化已经提出了许多方法&…

【软件工程导论】1.软件过程模型

软件过程模型什么是软件过程模型包括瀑布模型特点演化模型特点增量模型特点原型模型类型使用策略废弃策略追加策略螺旋模型特点什么是软件过程模型 又叫作软件开发模型、软件生存周期模型 包括 瀑布模型 每一阶段都会生成文档 特点 缺乏灵活性在交互使用时才能发现问题&…

用HTML+CSS仿网易云音乐网站(6个页面)_实训素材

⛵ 源码获取 文末联系 ✈ Web前端开发技术 描述 网页设计题材,DIVCSS 布局制作,HTMLCSS网页设计期末课程大作业 | 音乐网页设计 | 仿网易云音乐 | 各大音乐官网网页 | 明星音乐演唱会主题 | 爵士乐音乐 | 民族音乐 | 等网站的设计与制作 | HTML期末大学生网页设计作…

ubuntu 安装 k8s 记录 2 初始化

ubuntu 安装 k8s 记录 2 初始化初ubuntu 安装 k8s 记录初始化初始化前置条件查询本机 ip需要docker初始化报错禁止 Swap 分区禁用 CRI重启 containerd重置节点初始化初始化报错设置驱动向 docker 看齐如果遇到出错要重新初始化,先执行下面两个步骤关闭 swap 并重新设…

业务增长遇到瓶颈?这些用大数据驱动业务增长的方法你一定要看看

目录 前言 一、海量数据处理方案 1.1 大数据存储 1.1.1 传统数据存储 1.1.2 云大数据仓库 1.2 数据BI快速展示 1.2.1大数据BI产业链结构分析 1.2.2 华为一站式大数据BI方案 前言 随着大数据与云原生的快速发展融汇交互,各技术领域又将来临新一波迅雷之势的挑…

数据增强

在训练数据拆分上评估数据增强,以增加高质量训练样本的数量。 Intuition 通常希望通过数据扩充来增加训练数据的规模和多样性。它涉及使用现有样本生成合成但真实的示例。 拆分数据集。想首先拆分数据集,因为如果允许将生成的样本放置在不同的数据拆分中…

HTML+CSS+JS环境保护网页设计期末课程大作业 web前端开发技术 web课程设计 网页规划与设计

🎀 精彩专栏推荐👇🏻👇🏻👇🏻 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业…

FEDformer 代码分析(2)

首先总结一下FEDformer里面这些这些东西, mean的尺寸是:(1,96,7) seasonal_init的尺寸是:(1,144,7) trend_init的尺寸是:(1,144,7) zeros的尺寸是&#x…

[附源码]java毕业设计疫苗接种管理系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

四、图片特效

目录一、灰度处理二、颜色反转三、马赛克四、毛玻璃五、图片融合六、边缘检测与浮雕效果1 - 边缘检测2 - 浮雕效果七、颜色映射八、油画效果一、灰度处理 使用openCV的imread方法实现 import cv2img0 cv2.imread(image0.jpg, 0) img1 cv2.imread(image0.jpg, 1) print(img0…

嵌入式学习笔记(1)基本知识、C语言常用关键字、OLED

STM32是ST公司基于ARM Cortex-M内核开发的32位微控制器 STM32常应用在嵌入式领域,如智能车、无人机、机器人、无线通信、物联网、工业控制、娱乐电子产品等 STM32功能强大、性能优异、片上资源丰富、功耗低,是一款经典的嵌入式微控制器 STM32F103C8T6 系…

windows + anaconda 安装PySpark3.0.1

1、背景 Spark作为分布式内存计算框架,可以广泛应用在数据处理、分析等应用场景。因此,希望借助Spark高性能的处理项目中的数据,搭建此开发环境,深入了解Spark的处理能力与实现机制。 2、开发环境 在windows10上使用Anaconda作为…

微信小程序使用github协作

微信小程序github协作所需相关设置 1.点击开发工具右上角的版本管理初识化本地仓库: 2.去github新建一个仓库,复制仓库的ssh的url添加到仓库设置中的远程连接中: 3.在仓库设置中的通用里设置好自己的用户名和邮箱 4.生成ssh key 由于我们使…

web前端网页制作课作业——用DIV+CSS技术设计的家乡旅游主题网站

家乡旅游景点网页作业制作 网页代码运用了DIV盒子的使用方法,如盒子的嵌套、浮动、margin、border、background等属性的使用,外部大盒子设定居中,内部左中右布局,下方横向浮动排列,大学学习的前端知识点和布局方式都有…

Metabase学习教程:视图-3

掌握条形图可视化 创建条形图并使用可视化设置对其进行自定义。 我们看看创建条形图和编辑条形图的设置,然后谈谈堆积条形图。 创建条形图 您可以使用元数据库的示例数据库。选择新的>问题>原始数据>示例数据库。选择示例数据库的Orders表作为您的数据…