BGP在数据中心的应用4——BGP配置再优化

news2024/11/16 11:36:41

注:

  • 本文根据《BGP in the Datacenter》整理,有兴趣和英文阅读能力的朋友可以直接看原文:https://www.oreilly.com/library/view/bgp-in-the/9781491983416/
  • 上一部分笔记请参考:https://blog.csdn.net/tushanpeipei/article/details/128531548

前要提示:

本篇内容与上一部分笔记连接紧密,在阅读本篇内容时请务必看已经阅读完了上一篇。在这里,我们依然使用的是下图中所显示的网络拓扑来结合阐述BGP配置的优化方案:
在这里插入图片描述

图1:演示Clos网络架构

一、接口IP和远端ASN在数据中心中的必要性

在上一章的笔记中,我们已经通过重分发+路由策略代替network,以接口名代替对等体IP的形式,极大的减少了BGP配置中的IP地址出现次数。但是,在BGP配置中依然有存在大量的远端ASN。并且,在BGP配置以外,每条链路的接口依需要配置IP地址。

首先我们来探讨一下这两个部分是否可以进行优化。首先,接口IP地址的配置目的是保证直连的两个节点之间能过TCP/IP协议栈通信。BGP的承载协议为TCP,只有双方的TCP能够通信,BGP的邻居关系才能建立起来。从这个角度来说,IP地址是必要的。但是,我们配置这个IP地址的唯一目的也只是帮助BGP建立邻居关系,它并不会被通告进入整个网络中。此外,Clos网络中存在着大量的链路连接,那么意味着大量的IP地址需要规划和管理,这会给数据中心建设以及自动化带来较大的工作负担。那么,有没有一种方式能够在我们不需要在接口配置IP地址的情况下,依然能够让双方建立BGP对等体关系?这似乎是一个悖论。

第二,我们的ASN在BGP中配置的主要目的标识对等体双方建立的BGP会话是iBGP还是eBGP。那么,我们能否用另外一种方式来替代ASN,但是依然能够标识这个会话是iBGP和eBGP?

二、接口IP带来的弊端

在这里,我们进一步探讨一下在数据中心中规模下,配置接口IP地址会带来的弊端。以帮助我们了解为什么值得解决这个问题。

我们可以想象一个简单的两层Clos网络,有4个Spine节点和和32个Leaf节点,这是一个相当常见的网络。在这种结构下,每个Spine节点有32条下连链路,每个Leaf一条。因此,这需要4 * 32 * 2 = 256个IP地址(4个Spine * 32个接口 * 每个接口2个地址,每端一个)。如果Leaf数为96个,而不是32个,那么我们需要的接口IP地址总数将是4 * 96 * 2 = 768。随着我们扩大规模,例如16个Spine节点,地址总数将上升到16 * 96 * 2 = 3,072。虽然算法推导出这些IP地址是可能的,但它可能很笨重,容易出错。此外,它也会自动化代码编写变得更加棘手。对自动化有一定了解的朋友们一定知道,目前我们通常采取的一种非常常见的方法,也就是将接口地址存储为一组列表,然后在自动化程序中,从这些变量中读取具体的IP地址,以便将地址分配给接口。

虽然看着这种方式不错,但是在巨大规模的网络中,这并不是非常可取的一种方式。因为在规划IP以及配置IP的过程中都容易出现错误,比如,创建该列表本身就是一件不容易的事情。

三、什么是Unnumbered接口?

早期的网络架构师在这项设计中还探索了另一个分支:不为同一个节点的每个接口分配唯一的IP地址。自己在本地不唯一的IP地址的接口被称为“无编号(unnumbered)”接口。Unnumbered接口并不是说明接口没有IP地址,只是没有唯一的IP地址。进一步说,该接口会借用本台设备上其他接口的IP地址。但是,如果借用IP地址的接口失败,其IP地址就不能被借来使用了。为了避免接口突然丢失其IP地址,Unnumbered接口通常从环回(Loopback)接口借用IP地址。

那么不同的路由协议如何处理Unnumbered接口?ISIS很好理解,ISIS运行在链路层,并且通告TLV(Type-Length-Value)字段将拓扑信息和路由信息进行了完全分离,能够在unnumbered接口的情况下很好的运行。OSPF虽然运行在IP之上,但是依然有相应的方式,在特定的场景(串口)下允许通过unnumbered接口建立邻居关系。那么对于BGP呢?

四、BGP中的Unnumbered接口使用原理

BGP和OSPF虽然都运行在IP层上,但是OSPF建立邻居通常使用的是组播,也就是说它不需要直接了解去往邻居的IP路由,而是通过组播的Hello报文去发现邻居。相比之下,BGP则是通过TCP的方式单播与已知的邻居建立会话。这要求本端存在去往对端端路由。那么,如果本地和对端都是Unnumbered接口,由于不在同一个网段,是没有去往对端的路由的,因此是无法通过路由建立TCP连接。

目前看来,好像进入了无解的地步。这个时候我们就需要借用另外一个协议栈,来帮助我们完成目标(接口不配置IP地址,依然双方能够建立BGP邻居)。这个帮手就是IPv6。

首先,我们知道IPv6相比于IPv4来说,增加了链路本地地址(LLA)。该地址是链路自己生成,并且仅仅提供本链路的连通性。此外,为了了解链路对端的LLA,MAC地址,IPv6还提供了一种机制,被称为路由通告(Router Advertisement或RA)。一旦一个启用了IPv6的接口UP,就会周期性的向外通告RA报文,其中包含了自己的IPv6地址(包含LLA),以及MAC地址(如果需要)。那么,对端设备收到该RA报文之后,就会生成去往它邻居的LLA的路由,以及记录对应的MAC地址。因此,IPv6天然就能保证在无需手动配置IP的情况下,同一链路下的通信。

到这里,我们找到了正确的方向。也就是说,我们可以通过IPv6的LLA地址建立BGP邻居。那么,这个邻居关系是通过IPv6建立的,如果我们要在该邻居中传递IPv4报文可以吗?看似匪夷所思,但是实际上是可行的。具体的实现,在RFC5549中进行了定义,该能力被称为extended nexthop,需要对等体双方进行协商是否支持。注意,这和隧道没有任何关系。
在这里插入图片描述

图2:通过IPv6帮助建立BGP邻居并通告IPv4路由

图2展示了如何通过IPv6帮助建立BGP邻居并通告IPv4路由。详细来说,使用IPv6 LLA成功建立连接后,BGP会收到具有对等体通告的IPv4路由通告,例如10.1.1.0/24。如果BGP选择此路径作为达到10.1.1.0/24的最佳路径,它将此路由传递到路由信息数据库(RIB)进程,将下一跳设置为IPv6 LLA,此下一跳信息将在BGP UPDATE消息中标识。接下来,RIB进程发现该路由的下一跳是一个IPv6 LLA地址,将通过映射关系找到对应的MAC地址,例如是:00:00:01:02:03:04。接下来,RIB进程会添加一个ARP条目,169.254.0.1作为ip地址代替下一跳的IPv6 LLA(因为ARP仅仅适用于IPv4中),00:00:01:02:03:04是对应的MAC地址。其中169.254.0.1是默认的保留地址,不能更改。最终,路由和ARP表如下所示:

ROUTE: 10.1.1.0/24 via 169.254.0.1 dev swp1
ARP: 169.254.0.1 dev swp1 lladdr 00:00:01:02:03:04 PERMANENT

总结一下,我们如何在不配置接口IP的情况下依然可以传递BGP ipv4路由:

  1. BGP unnumbered使用接口的IPv6 LLA与对等体建立BGP会话;
  2. 本端通过IPv6的RA协议发现对端的IPv6 LLA和MAC;
  3. BGP使用RFC 5549定义的能力对IPv4路由进行编程,让其可通过LLA IPv6下一跳访问对端。
  4. RIB进程使用保留的IPv4 LLA(169.254.0.1)对静态ARP条目进行编程,MAC地址设置为通过RA学习的对端地址。
  5. BGP 将 IPv4 路由传递给 RIB,以 IPv6 LLA 作为下一跳。
  6. 在路由加载进入转发表之前,RIB进程将下一跳转换为169.254.0.1,并且添加出接口。

五、远端ASN的替代方式

当我们消除了接口IP地址后,目前唯一需要我们处理的就是在BGP的配置中替代远端的ASN。在这里,我们再来看看在BGP配置中设置远端ASN的目的是:

  1. 如果意外连接到错误的AS域可能会造成大规模的财务损失,因此我们需要验证对端的ASN。
  2. 确定BGP会话受iBGP规则还是eBGP规则的约束。

在数据中心网络中,由于使用的都是私有的ASN,所以不存在因为安全性而去验证对端ASN的情况。因此,我们不必担心第一个目的背后的安全性问题发生。那么,对于第二个目的,我们完全可以通过更简单的方式来解决,也就是将对端的AS号替换为External和Internal。如果是External,说明与对等体建立eBGP邻居关键,Intertal同理。需要注意的是,具体的AS号Open报文中依然会携带。最终,ASN替换后,我们的Leaf01和Spine01的BGP配置由如下所示:

Leaf01:

ip prefix-list DC_LOCAL_SUBNET 5 permit 10.1.0.0/16 le 26
ip prefix-list DC_LOCAL_SUBNET 10 permit 10.0.254.0/24 le 32

route-map ACCEPT_DC_LOCAL permit 10
	match ip-address DC_LOCAL_SUBNET
  
router bgp 65000
	bgp router-id 10.0.254.1
	bgp log-neighbor-changes
	bgp no default ipv4-unicast
	timers bgp 3 9
	neighbor peer-group ISL
	neighbor ISL remote-as external
	neighbor ISL advertisement-interval 0
	neighbor ISL timers connect 5
	neighbor swp51 peer-group ISL
	neighbor swp52 peer-group ISL
	address-family ipv4 unicast
		neighbor ISL activate
		redistribute connected route-map DC_LOCAL
		maximum-paths 64
	exit-address-family

Spine01:

ip prefix-list ACCRT 5 permit 10.1.0.0/16 le 26
ip prefix-list ACCRT 10 permit 10.0.254.0/24 le 32
    
route-map DC_LOCAL permit 10
	match ip-address ACCRT
    
router bgp 65500
	bgp router-id 10.0.254.254
	bgp log-neighbor-changes
	bgp no default ipv4-unicast
	timers bgp 3 9
	neighbor peer-group ISL
	neighbor ISL advertisement-interval 0
	neighbor ISL timers connect 5
	neighbor swp1 remote-as external
	neighbor swp1 peer-group ISL
	neighbor swp2 remote-as external
	neighbor swp2 peer-group ISL
	neighbor swp3 remote-as external
	neighbor swp3 peer-group ISL
	neighbor swp4 remote-as external
	neighbor swp4 peer-group ISL
	bgp bestpath as-path multipath-relax
	address-family ipv4 unicast
		neighbor ISL activate
		redistribute connected route-map DC_LOCAL
		maximum-paths 64
	exit-address-family

本篇笔记完成了BGP配置优化的所有内容整理,下一篇笔记将着重探讨BGP的生命周期管理。

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

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

相关文章

图论(3)单源最短路拓展

活动 - AcWing acw1137 如果我们确定了起点,那么就是一个模板题 选起点有两个办法:1.选取虚拟原点,连接家附近的所有车站。直接以虚拟原点作为我起点跑最短路即可。2.反向建图,取终点到家附近所有车站的dist,取min即…

JVM垃圾回收器-Serial回收器:串行回收

文章目录学习资料垃圾回收器Serial回收器:串行回收学习资料 【尚硅谷宋红康JVM全套教程(详解java虚拟机)】 【阿里巴巴Java开发手册】https://www.w3cschool.cn/alibaba_java JDK 8 JVM官方手册 垃圾回收器 Serial回收器:串行回…

JVM垃圾回收相关算法-垃圾清除阶段

文章目录学习资料垃圾回收相关算法垃圾清除阶段标记-清除(Mark - Sweep)算法复制算法标记-压缩(或标记-整理、Mark - Compact)算法分代收集算法增量收集算法分区算法学习资料 【尚硅谷宋红康JVM全套教程(详解java虚拟…

助力工业物联网,工业大数据项目介绍及环境构建【三】

01:业务系统结构 目标:了解一站制造中的业务系统结构 实施 数据来源 业务流程 油站站点联系呼叫中心,申请工单呼叫中心分派工单给工程师工程师完成工单工程师费用报销呼叫中心回访工单 ERP系统:企业资源管理系统,存…

RHCSE第一天(Linux的例行性工作)

文章目录Linux搭建服务器的准备工作第一章 Linux的例行性工作1.1 单一执行的例行性工作at1.1.1 at命令的实际工作过程1.1.2 at命令详解1.2 循环执行的例行性工作1.2.1 crontab命令的实际工作过程1.2.2 crontab命令详解1.3 实验实验一:定义三分钟之后显示hello实验二…

【前端】Vue项目:旅游App-(4)TabBar:Vant库实现功能与样式

文章目录目标代码和过程Vant库引入自定义样式初步修改样式修改修改active颜色icon调大实现路由跳转效果总代码修改的文件tab-bar.vuemain.js目标 前文手写了TabBar的样式和功能,本篇我们用vant库重新实现这些功能。 代码和过程 Vant库引入 Vant4 官方文档 安装&…

Servlet运行原理及生命周期

Servlet运行原理及生命周期一、Servlet 运行原理1.1 Tomcat 的定位1.2 Tomcat 的伪代码1.2.1 Tomcat 初始化流程1.2.2 Tomcat 处理请求流程1.2.3 Servlet 的 service 方法的实现二、Servlet生命周期一、Servlet 运行原理 承接 Servlet基础教程:https://blog.csdn.n…

spring oAuth2.0

会话 用户认证通过后,为了避免用户的每次操作都进行认证可将用户的信息保证在会话中。会话就是系统为了保持当前用户的登录状态所提供的机制,常见的有基于session方式,基于token方式等。 基于session的认证方式: 用户认证成功后&a…

Qt扫盲-QSS帮助手册使用

QSS帮助手册使用一、概述1. 查找 Qt Style Sheets Reference2. 收藏一下二、Qt Assistant 查阅帮助1. List of Stylable Widgets2. List of Properties3. List of Icons4. List of Property Types5. List of Pseudo-States6. List of Sub-Controls一、概述 导言:这…

基于信创运维平台,实现国产化网络自动巡检

近年来,以工业互联网、大数据、人工智能、5G技术等为代表的新一代信息技术飞速发展,推动国内企业向数字化经济的变革,数字化变成一股不可逆转的潮流,也是增强企业竞争力的关键所在。北京智和信通积极探索,把握新一轮数…

Pytorch模型转成onnx并可视化

文章目录转换模型前提转换方法模型可视化可能出现的报错信息ValueError: torch.nn.DataParallel is not supported by ONNX exporter, please use attribute module to unwrap model from torch.nn.DataParallel. Try torch.onnx.export(model.module, ...)RuntimeError: ONNX …

流媒体基础-RTP封装PS流

PS流格式 首条数据结构: RTP Header + PS Header +(System Header + PSM)+ PES(Header + Payload) 非首条数据结构: RTP Header + PS Header + PES(Header + Payload) 接下来记录侧重于找到 H.264 数据,所以会跳过一些暂时不关心的内容。 PS流有一个结束码 MPEG_progr…

信息学奥赛一本通 1916:【01NOIP普及组】求先序排列 | 洛谷 P1030 [NOIP2001 普及组] 求先序排列

【题目链接】 ybt 1916:【01NOIP普及组】求先序排列 洛谷 P1030 [NOIP2001 普及组] 求先序排列 【题目考点】 1. 二叉树 【解题思路】 已知中序、后序遍历序列,构建二叉树,而后对该二叉树做先序遍历,得到先序遍历序列。 该题…

质性分析软件nvivo的学习(二)

0、前言: 这部分内容是,质性分析软件nvivo的学习(一)的衔接内容,建议看完:质性分析软件nvivo的学习(一)再看这部分内容。这里的笔记都是以nvivo12作为学习案例的,其实不…

JVM垃圾回收的并行与并发

文章目录学习资料垃圾回收的并行与并发并发(Concurrent)并行(Parallel)并发 vs 并行总结学习资料 【尚硅谷宋红康JVM全套教程(详解java虚拟机)】 【阿里巴巴Java开发手册】https://www.w3cschool.cn/aliba…

RHCEansible 任务模块

文件操作模块 file模块 ansible-doc file -s path参数 :必须参数,用于指定要操作的文件或目录,在之前版本的ansible中,使用dest参数或者name参数指定要操作的文件或目录,为了兼容之前的版本,使用dest或n…

STM32的升级--ICP/ISP/IAP以及Ymodem协议分析

ICP/ISP/IAP 区别 ICP(In-Circuit Programing): 通过J-Link/SWD等下载器烧写程序,上位机需要借助其他硬件的参与才能更新固件,可以更新MCU的所有存储区域; ISP(In-System Programing): 通过MCU出厂时固化的一个bootloader升级程序&#xff0…

重点算法排序之快速排序、归并排序(上篇)

文章目录 一、排序的概念及常见的排序算法 二、快速排序的思想及代码详解 2、1 快速排序的思想 2、2 挖坑法 2、2、1 挖坑法实现思想 2、2、2 挖坑法举例 2、2、3 挖坑法代码实现 2、3 左右指针法 2、3、1 左右指针法实现思想 2、3、2 左右指针法举例 2、3、3 左右指针法代码…

类的成员之四:代码块

文章目录一、代码块静态代码块非静态代码块注意总结:由父及子,静态先行属性赋值总结一、代码块 1、代码块的作用:用来初始化类、对象 2、代码块如果有修饰的话,只能使用static 3、分类:静态代码块 vs 非静态代码块 静…

Ubuntu自动登录脚本

Ubuntu自动登录脚本一、!/usr/bin/expect -f的意义二、spawn命令行:三、send命令:四、expect五、interact命令:本人用xshell的SSH登录云服务器,需要从用户Ubuntu切换到root,再切换到lighthouse。编辑了一个自动切换用户…