HCNP Routing&Switching之BGP路由宣告
前文我们了解了BGP报文结构、类型以及邻居状态相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15422924.html;今天我们来聊一聊BGP路由宣告相关话题;
BGP路由宣告和IGP路由宣告区别
我们知道IGP路由协议,在宣告路由时,不同IGP路由协议,对应宣告路由的方式都各有不同;比如RIP宣告路由,只需要宣告对应网络主类地址即可;ospf宣告网络,只需要对应宣告的网络能够包含对应网络即可;只有宣告了网络,对应邻居关系才会建立,然后自动学习对端宣告和学习到的网络;对于BGP来说,它和IGP不一样;首先BGP的邻居关系建立和宣告网络是手动分开实现的,它不像IGP那么智能;IGP只要邻居关系正常建立,对应网络就会自动从对方那里学习到;而BGP只有明确、精确宣告了以后,对端才能学习到对应网络;其次BGP不同类型的邻居,对应路由传递规则也有所不同;再其次BGP宣告网络,后面直接跟子网掩码或者掩码位数;而IGP里ospf宣告网络,对应后面是跟的反掩码;RIP不需要跟掩码,直接宣告对应主类地址;
BGP数据库
BGP路由信息处理过程
提示:BGP路由处理过程如上图所示,首先当BGP从邻居收到一条新的更新,首先会将对应路由存入Adj-RIB-in(未经处理的路由信息)这个数据库中,然后再将对应信息传入输入策略引擎中进行匹配,看看是否有入站策略,只有满足对应入站策略的路由才会被存入LOC-RIB(本地路由路由信息)表中,然后再通过计算将对应路由最终存入ip路由表中;如果本端要将一条路由发送给邻居,首先会看对应ip路由表是否存在对应路由,如果有,就把对应路由与出站策略进行匹配,只有满足出站策略的路由才会被放置到adj-RIB-Out(即将要发出去的RIB信息)这张表中,然后在发送给邻居;总的处理流程是先进adj-rib-in,这张表类似缓冲区,它会存放邻居发送到所有更新,然后根据入站策略进行过滤,把满足入站策略的路由存入Loc-RIB表中,这张表类似缓存表,然后根据loc-RIB中的内容进行计算,最终将路由存入ip路由表;对于发送给邻居的更新,首先它会从loc-RIB这张表中检索对应路由信息,通过出站策略过滤,将符合出站策略的路由存入adj-RIB-out表中,这张表类似缓存表,即这种表中的所有路由都是满足出站策略的路由,都是即将可以发送给邻居的路由;
BGP路由宣告规则
1、只有明确宣告的网络才会发送给邻居;
2、宣告的网络必须能精确地在路由表中找到;
3、多条路径时,只选最优的给自己使用;
4、只把自己使用的最优路由宣告给邻居;
5、从EBGP学习到的路由会宣告给所有邻居;
6、从IBGP学习到的路由只传一跳;
7、从IBGP学习到的路由会宣告给EBGP;
实验:如下拓扑,分别使用回环口建立邻居
分析:使用回环口建立BGP邻居,首先对应回环口的路由必须可达;在同一个AS内部,我们可以使用IGP路由协议,对应不再同一AS我们只能使用静态路由,让对应回环接口的路由互通;其次IBGP需要更改更新源为对应回环接口;EBGP除了要更改更新源以外,对应还要修改TTL值,原因是EBGP之间建立邻居,对应数据包的TTL值为1,所以为了能够正常建立邻居,我们需要将对应数据包的TTL值;
·R1的配置


sys
sys R1
int g0/0/0
ip add 12.0.0.1 24
int lo 1
ip add 1.1.1.1 32 ospf 1 router-id 1.1.1.1
area 0
net 12.0.0.1 0.0.0.0
net 1.1.1.1 0.0.0.0 bgp 123
router-id 1.1.1.1
peer 2.2.2.2 as 123
peer 2.2.2.2 con lo 1
R2的配置


sys
sys R2
int g0/0/0
ip add 12.0.0.2 24
int lo 2
ip add 2.2.2.2 32
int g0/0/1
ip add 23.0.0.2 24 ospf 1 router-id 2.2.2.2
area 0
net 12.0.0.2 0.0.0.0
net 2.2.2.2 0.0.0.0
net 23.0.0.2 0.0.0.0 bgp 123
router-id 2.2.2.2
peer 1.1.1.1 as 123
peer 1.1.1.1 con lo 2
peer 3.3.3.3 as 123
peer 3.3.3.3 con lo 2
R3的配置


sys
sys R3
int g0/0/0
ip add 23.0.0.3 24
int lo 3
ip add 3.3.3.3 32
int g0/0/1
ip add 34.0.0.3 24 ospf 1 router-id 3.3.3.3
area 0
net 23.0.0.3 0.0.0.0
net 3.3.3.3 0.0.0.0 ip route-s 4.4.4.4 32 34.0.0.4 bgp 123
router-id 3.3.3.3
peer 2.2.2.2 as 123
peer 2.2.2.2 con lo 3
peer 4.4.4.4 as 4
peer 4.4.4.4 con lo 3
peer 4.4.4.4 ebgp-max-hop
R4的配置


sys
sys R4
int g0/0/0
ip add 34.0.0.4 24
int lo 4
ip add 4.4.4.4 32 ip route-s 3.3.3.3 32 34.0.0.3 bgp 4
router-id 4.4.4.4
peer 3.3.3.3 as 123
peer 3.3.3.3 con lo 4
peer 3.3.3.3 ebgp-max-hop
验证:查看所有路由器,看看是否是两两建立起BGP邻居?
提示:可以看到对应邻居关系都established,邻居关系正常;
BGP路由宣告--->本地宣告
在R1上宣告8.8.8.8 32的网络,看看是否能够正常宣告?
提示:BGP宣告网络的方式有两种,一种是network本地宣告,另外一种是引入宣告,即引入外部路由进bgp;从上面的实验可以看到,我们本地没有8.8.8.8/32网络的路由,对应在bgp里也是无法正常宣告;即在bgp里宣告网络,首先对应网络要存在自己的ip路由表;
在R1上添加Lo 2 接口,并配置ip地址为8.8.8.8/32
在bgp里宣告8.8.8.8网络
提示:可以看到对应宣告网络,默认不跟掩码,它会按对应网络的主类掩码进行宣告;但它会提示我们对应网络不存在;如果后面的掩码和路由表中的掩码不匹配,也会提示我们对应网络不存在;这也意味着bgp宣告网络不能像ospf那样,只要宣告的网络能够包含对应网络即可;在bgp里必须精确宣告;所谓精确宣告就是指路由表中的路由掩码是多少对应在bgp里宣告时掩码就必须是对应的掩码;其次bgp的掩码是正掩码或者掩码的位数;这是和ospf不一样的地方;
查看R2是否能够正常学习到R1宣告的网络呢?
提示:可以看到只要R1精确宣告对应网络以后,R2是能够正常学习到对应路由;
验证:查看R3是否能够正常学习到R1发布的路由呢?
提示:可以看到R3并没有通过BGP学习到任何路由;说明R1宣告的路由R3没有学习到;这是因为R1和R2建立的是IBGP类型邻居,IBGP路由只传一跳;
在R1上查看宣告的8.8.8.8路由传递给那些路由器学习过?
提示:可以看到R1只把8.8.8.8宣告给R2,并没有宣告给R3,所以对应R3是肯定收不到对应R1的宣告;解决办法是R1和R3建立邻居;
在R2上新建lo22接口,并配置ip地址为192.168.22.22/24 ,然后宣告进bgp,看看对应那些路由器能够正常学习到?
在R2查看192.168.22.22/24的路由宣告给那些路由器了呢?
提示:可以看到对应R2宣告的网络,对应R1和R3都能正常学习到;
验证:查看R1和R3是否学习到R2宣告的网络?
提示:可以看到对应R2宣告的网络,R1和R3都能正常学习到,对应下一跳都是2.2.2.2;这是因为R2和R1和R3建立的是IBGP类型邻居,对应路由只传一跳;
验证:查看R4的路由,看看是否能够正常学习到R2发布的路由呢?
提示:可以看到在R4上能够正常学习到R2发布的路由,对应路由的下一跳为3.3.3.3;这是因为R2发布的路由被R3学习到;而R3和R4建立的是EBGP类型邻居;在BGP里EBGP类型邻居,它是可以互传路由的;并且也会自动修改下一跳地址;所有R4能够正常学习到R2发布的路由,对应下一跳为R3;
验证:在R4上新建lo44 ,并将接口地址配置为44.44.44.44/32,在bgp里宣告
验证:在R3上查看是否学习到R4发布的路由呢?
提示:在R3上查看bgp路由表,对应R3能够正常学习到R4发布的路由;其下一跳为4.4.4.4;
验证:在R2上查看bgp路由表,看看是否能够学习到R4发布的路由呢?
提示:可以看到虽然R2能够正常学习到R4发布的路由,但是对应路由是不可用的(没有星号,表示路由不可用);R2之所以能够学习到R4发布的路由,是因为R4发布的路由被R3学习到(EBGP间路由可以互传);而R2和R3由属于IBGP邻居(IBGP邻居关系,路由只传一跳),所以R2能够学习到R4发布的路由;在R2上看到R4发布的路由之所以不可用,原因是IBGP类型邻居,传递路由时不会自动修改下一跳地址为自己;所以在R3上学习到的路由下一跳是多少,对应R2学习到的下一跳地址就是多少;不可用的原因是R2没有去往4.4.4.4的路由;所以它不知道怎么去往下一跳,当然对应路由也就无法正常使用;解决办法,在R3上强制更改下一跳为自己;
在R3上修改传递给2.2.2.2的路由,下一跳修改为自己
验证:再次在R2上查看对应bgp路由表,看看44.44.44.44/32的路由是否可用了?
提示:可以看到现在R2学习到的路由,其下一条为R3,对应路由也从原来的不可用变为可用(有星号了);
总结:通过上述实验我们可以看到bgp宣告路由,首先宣告的路由在本地路由表中可以查看到,即对于宣告者来说,宣告的路由必须是最优的路由(存放在ip路由表中的路由对于本地路由器来说就是最优路由),其次默认情况下BGP建立起邻居不会宣告任何网络,只有宣告者手动明确、精确宣告以后,对应路由才会被邻居学习到;邻居类型为IBGP,对应路由只传一跳(为了防止环路);EBGP邻居类型,是可以正常互相传递路由;EBGP类型邻居,在互传路由时会自动修改路由为自己,然后再宣告给对端邻居;而IBGP类型邻居,不会自动修改下一跳为自己,只有手动使用命令强制将对应路由修改为自己,然后传递给邻居;
BGP路由宣告--->引入宣告
引入宣告其实就是将外部路由引入只BGP,其命令为import-route
示例:在R1上新建静态路由,然后将对应静态路由引入至bgp
提示:引入路由通常结合路由策略使用;
查看R1引入的5.5.5.5的路由
提示:引入路由至BGP对应在bgp路由表中表现的为OGN为问号,表示引入的路由;其下一跳为0.0.0.0表示下一跳为自己;
验证:查看R2是否学习到R1引入宣告的5.5.5.5的路由呢?
提示:可以看到对应R2能够正常学习到R1引入的路由;其下一跳为1.1.1.1;引入宣告和本地宣告只是宣告的方式不同,两者都遵循上述的路由宣告规则和传递规则;
BGP宣告缺省路由
BGP和ospf一样,默认情况下都不会引入缺省路由,只有手动使用命令允许
示例:在R2上新建一条缺省路由,然后在bgp里发布
提示:上述命令只是表示允许将缺省路由引入至BGP;默认是不允许引入缺省路由;
在R2上引入静态至bgp
验证:在R1或R3上查看,是否学习到R2发布的缺省路由呢?
提示:可以看到R1和R3都能正常学习到R2发布的缺省路由;其实R4也能正常学习到R2的缺省路由;是因为R3学习到的路由会传递给R4(EBGP),并且还会将下一跳修改为自己再传递给R4;如下
除了上述通过命令允许引入缺省路由的方式发布缺省路由,还可以直接向邻居宣告一条缺省路由,不管本地是否存在缺省路由
验证:在R2上取消缺省路由发布,删除缺省路由,然后直接使用命令向R3发布一条缺省路由
验证:查看R3是否学习到一条缺省路由?
提示:可以看到R3学习到一条缺省路由,其学习到的方式是通过IGP内部学习到的;和上面引入的方式不同;这条命令是向指定路由发送缺省路由,不管本地是否有缺省路由,对应邻居收到都会生成一条缺省路由,将下一跳指向对端;
HCNP Routing&Switching之BGP路由宣告的更多相关文章
- HCNP Routing&Switching之BGP路由属性和优选规则
前文我们了解了BGP防环机制和路由聚合相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15458110.html:今天我们来聊一聊BGP路由属性和选路规 ...
- HCNP Routing&Switching之BGP路由控制
前文我们了解了BGP的路由属性和优选规则相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15489497.html:今天我们来聊一聊BGP路由控制相关话 ...
- HCNP Routing&Switching之BGP路由过滤和AS-Path-Filter
前文我们聊了下通过修改BGP路由属性来影响路由,从而达到控制BGP路由的目的:回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15495585.html:今天我们 ...
- HCNP Routing&Switching之BGP防环机制和路由聚合
前文我们了解了BGP路由宣告相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15440860.html:今天我们来聊一聊BGP防环机制和路由聚合相关话题 ...
- HCNP Routing&Switching之BGP团体属性和团体属性过滤器
前文我们了解了BGP的路由过滤已经as-path过滤器的使用相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15542559.html:今天我们来聊一聊 ...
- HCNP Routing&Switching之BGP基础
前文我们了解了路由注入带来的问题以及解决方案相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15362604.html:今天我们来学习下新的路由协议BG ...
- HCNP Routing&Switching之BGP邻居建立条件、优化和认证
前文我们了解了BGP相关概念.AS相关概念以及BGP邻居类型.基础配置等,相关回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15370838.html:今天我们 ...
- HCNP Routing&Switching之IS-IS路由聚合和认证
前文我们了解了IS-IS路由渗透和开销相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15302382.html:今天我们来聊一聊IS-IS路由聚合和认 ...
- HCNP Routing&Switching之BGP报文结构、类型和状态
前文我们了解了BGP的邻居建立条件.优化以及BGP认证相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15395723.html:今天我们来聊一聊BGP ...
随机推荐
- 【CSS】计数器
抄自B站Up主CodingStartup起码课 <!DOCTYPE html> <html lang="en"> <head> <meta ...
- Mybatis源码解析4——SqlSession
上一篇文章中,我们介绍了 SqlSessionFactory 的创建过程,忘记了的,可以回顾一下,或者看下下面这张图也行. 接下来,可乐讲给大家介绍 Mybatis 中另一个重量级嘉宾--SqlSes ...
- AFL++ Fuzz一个libexif例子
CVE-2009-3895 首先在NVD找到漏洞描述如下: 大致意思是说:libexif 0.6.18 中的 libexif/exif-entry.c 中的 exif_entry_fix 函数中基于堆 ...
- python 修改图像大小和分辨率
1 概念: 分辨率,指的是图像或者显示屏在长和宽上各拥有的像素个数.比如一张照片分辨率为1920x1080,意思是这张照片是由横向1920个像素点和纵向1080个像素点构成,一共包含了1920x108 ...
- Merchant
\(get\)二分新用法. 每道题都有答案范围提示,以前只是以为是用来提示用什么类型输出的. 从来没想过直接用它来二分. 这道题真的刷新了我的认知啊...... 整道题的复杂度是\ ...
- Identity角色管理二(显示角色)
需要将目前所有角色名显示出来,方法同用户管理 一.创建Index acction public async Task<ActionResult> Index() { var roles = ...
- Fastjson 1.2.22-24 反序列化漏洞分析(2)
Fastjson 1.2.22-24 反序列化漏洞分析(2) 1.环境搭建 我们以ubuntu作为被攻击的服务器,本机电脑作为攻击者 本机地址:192.168.202.1 ubuntu地址:192.1 ...
- 使用python快速搭建http服务
python2语法:python -m SimpleHTTPServer python3语法:python -m http.server 在局域网中使用web去访问http:/IP:8000即可 可以 ...
- kubectl工具的windows\linux安装方法
kubectl 安装 下载kubectl二进制文件 curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.10.0 ...
- Windows Server 2022 OVF(SLIC 2.6)
请访问原文链接:https://sysin.org/blog/windows-server-2022-ovf/,查看最新版.原创作品,转载请保留出处. 作者:gc(at)sysin.org,主页:ww ...