ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

HCNP Routing&Switching之BGP防环机制和路由聚合

2021-10-25 16:02:04  阅读:277  来源: 互联网

标签:聚合 R1 R2 R3 HCNP BGP Routing 路由


  前文我们了解了BGP路由宣告相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15440860.html;今天我们来聊一聊BGP防环机制和路由聚合相关话题;

  BGP防环机制

  我们知道BGP的邻居类型分IBGP和EBGP,对于不同类型邻居关系,它们宣告路由的规则各有不同,对于邻居类型为IBGP,它们宣告路由只会传递一跳;对于邻居类型为EBGP,它们宣告路由是可以传递多跳和IGP传递路由相似,同时IBGP传递路由时,它们不会更改更新源,即宣告者是谁,对应学习的路由下一跳就是谁,我们可以通过命令强制修改更新源为自己,即对端学习到相关路由的下一跳指向自己;对于EBGP来说,EBGP之间传递路由,会自动修改更新,即从哪里学习到对应路由,其下一跳会自动修改为对端;对于BGP防环来说,我们也是从两种邻居类型分别来讨论;

  AS内(IBGP)防环机制

  水平分割,从IBGP收到的更新不会发布给IBGP(IBGP更新只传递一跳)

  提示:如上图所示,对于在同一AS内的4个路由器,RTA,RTB,RTC,RTD,它们手拉手建立邻居,对于RTA发布的更新,对于RTD来说它是学习不到的,原因是IBGP邻居关系,对应更新只传一跳;同样的道理,RTD发布更新,RTA也是学习不到的,对于RTB和RTC来说,是能够正常学习到;

  解决水平分割带来的路由学习不完整方案

  1、IBGP邻居全互联

  提示:如上图所示,RTA,RTB,RTC,RTD两两相互建立邻居,这样实现邻居全互联,不管哪个路由器发布更新,对应其他路由器都能够收到更新;这样虽然理论上解决了水平分割带来的路由学习不完整,但同时这样也给管理员带来很多不便,比如我们要增加一台路由,对应所有路由器都要更改配置,这样配置和维护的开销太大;一般路由器众多的情况下不推荐使用这样方式;

  2、路由反射器(Route Reflector)

  提示:路由反射器(Route Reflector),这个技术有点类似ospf里的DR;即在一个AS内,其中一台路由器作为路由反射器RR(Route Reflector),其它路由器作为客户端(Client)与路由反射器之间建立IBGP连接。路由反射器在客户机之间传递(反射)路由信息,而客户端之间不需要建立BGP连接。这样一来相比全互联就大大简化了配置和维护上的开销;

  3、联盟(confederation)

  提示:联盟就是将一个大的AS分割成多个小的AS,AS之间建立EBGP邻居,从而实现一个路由器发布更新,能够传递个其他所有路由器(其他小AS之间建立EBGP);

  AS间(EBGP)防环机制

  AS间建立的都是EBGP邻居,它的防环机制主要依靠AS_PATH这个属性,as_path是BGP更新内的一个重要属性,它主要用来描述一条路由所经过的AS;如果接受路由器发现AS_PATH里有与本地AS号,则对应路由就会被丢弃;

  提示:如上图所示,RTB发送一条更新,对应AS_PATH就会记录对应的AS号,对应RTC收到RTB的更新,首先要看看AS_PATH里是否有自己as号,如果没有则接受此更新,如果有就丢弃;RTC接受了RTB的更新后,它会继续向它的其他EBGP发送此更新,即RTC会向RTA和RTB发送此更新;同样的道理RTA和RTB都会检查对应更新中as_path里是否有自己的as号,如有,则丢弃,如果没有则接收;这样一来发出去的路由就不可能回到发出更新路由器所在as,即环路也就无法产生;

  总结:BGP的防环机制主要从两种邻居类型来说,对于IBGP来说,主要依靠水平分割机制,即IBGP间,路由更新只传递一跳;对于EBGP来说,主要依靠AS_Path这个属性来防止环路,即收到路由更新的BGP路由器,发现AS_Path 里有自己的AS号,则对应路由会被丢弃;

  BGP路由聚合

  BGP的路由聚合有三种方式,分别是静态聚合、自动聚合和手动聚合;聚合的目的就是精简路由表,从而优化路由器的性能;

  BGP静态路由聚合

  所谓静态聚合是指我们手动在BGP路由器上手动配置一条聚合后的静态路由,其出接口指向NULL0口,然后在通过network在BGP里进行宣告;我们知道对于BGP路由宣告规则中,对应宣告的路由必须存在路由表才可以被宣告;为了解决这样的限制,我们手动配置一条聚合后的静态路由,这样一来就解决了路由不存在路由表的限制,然后通过network宣告聚合后的路由即可;其他路由器收到的更新就只有聚合后的路由,从而实现路由聚合;

  BGP自动路由聚合

  BGP自动路由聚合,只能对引入的IGP路由进行主类掩码聚合,而原引入的明细路由被抑制,不会被有选和发布给BGP邻居;开启自动聚合命令summary automatic;

  BGP手动路由聚合

  手动路由聚合是指通过命令对引入和本地路由进行聚合,聚合命令aggretage;优先级顺序是手动聚合大于自动聚合;

  实验:如下拓扑配置BGP,分别对明细路由进行静态路由聚合、自动路由聚合和手动路由聚合;

  R1的配置

sys
sys R1
int g0/0/0
ip add 12.0.0.1 24
int lo 1
ip add 172.16.0.1 24
int lo 2
ip add 172.16.1.1 24
int lo 3
ip add 172.16.2.1 24
int lo 4
ip add 172.16.3.1 24
int lo 11
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 12
router-id 1.1.1.1
peer 2.2.2.2 as 12
peer 2.2.2.2 con lo 11
View Code

  R2的配置

sys
sys R2
int g0/0/0
ip add 12.0.0.2 24
int g0/0/1
ip add 23.0.0.2 24
int lo 22
ip add 2.2.2.2 32

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

ip route-s 3.3.3.3 32 23.0.0.3

bgp 12
router-id 2.2.2.2
peer 1.1.1.1 as 12
peer 1.1.1.1 con lo 22
peer 3.3.3.3 as 3
peer 3.3.3.3 con lo 22
peer 3.3.3.3 ebgp-max-hop
View Code

  R3的配置

sys
sys R3
int g0/0/0
ip ad 23.0.0.3 24
int lo 33 
ip add 3.3.3.3 32
int lo 1
ip add 192.168.0.1 24
int lo 2
ip add 192.168.1.1 24
int lo 3
ip add 192.168.2.1 24
int lo 4
ip add 192.168.3.1 24

ip route-s 2.2.2.2 32 23.0.0.2

bgp 3
router-id 3.3.3.3
peer 2.2.2.2 as 12
peer 2.2.2.2 con lo 33
peer 2.2.2.2 ebgp-max-hop 
View Code

  验证BGP邻居状态

  提示:可以看到BGP邻居都正常建立起来;

  在R1上使用静态聚合的方法将172.16网段路由聚合后宣告

  1、创建聚合后的静态路由,出接口指向NULL 0 口

  2、通过network在bgp里宣告聚合后的路由

  验证:在R2和R3上查看bgp路由表,看看是否学习到R1聚合后的路由呢?

  提示:可以看到R2和R3上都能正常学习到R2聚合后的路由;不同的是R2学习聚合后的路由其下一跳指向R1,而R3学习到聚合后的路由下一跳指向R2,原因是R2和R3是EBGP类型邻居,在同步路由时会自动修改更新源为自己,即下一跳会自动修改为自己;

  在R1上使用自动聚合的方法将172.16网段路由聚合

  在R1上取消将172.16网段聚合后在bgp里宣告

  在R1上开启自动聚合

  提示:开启自动聚合时,系统会提示我们自动聚合只能对引入的路由进行聚合,本地宣告的路由是不能聚合的;

  验证:在R1上将172.16网段路由引入至BGP

  验证:在R1上查看引入的路由

  提示:可以看到开启自动聚合后,对应引入的172.16网段路由,自动被聚合为172.16.0.0/16,而明细路由被抑制;

  验证:在R2和R3上查看bgp路由表,看看是否学习到R1自动聚合后的路由呢?

  提示:可以看到R2和R3都能正常学习到R1自动聚合后的路由;

  在R3上使用手动聚合聚合192.168网段路由

  1、将直连路由引入只bgp

  验证:查看R3bgp路由表,看看192.168网段路由是否引入至BGP

  提示:可以看到192.168.网段路由已经引入至BGP;

  2、手动聚合192.168网段路由

  验证:查看bgp路由表,看看对应明细路由是否被聚合?

  提示:可以看到bgp路由表中多了一条被聚合后端路由;但明细路由没有被抑制;这是因为默认情况下,手动聚合明细路由不会被抑制;必须手动使用detail-suppressed参数来抑制明细路由;

  使用detail-suppressed参数来抑制明细路由

  验证:查看bgp路由表,看看明细路由是否被抑制?

  提示:可以看到加了detail-suppressed参数以后,对应明细路由就被抑制了;

  验证:在R2和R1上查看bgp路由表,看看是否学习到R3手动聚合的路由呢?

  提示:可以看到R1和R2都能正常学习到R3手动聚合后的路由,但R1上不可用,原因是R3没有去往3.3.3.3的路由;解决办法在R2上开启修改更新源为自己;

  在R2上开启修改更新源为自己

  验证:在R1上查看bgp路由表,看看对应路由是否可用?

  提示:可以看到现在R1学习到192.168.0.0/22的路由是可用最优状态;

  as-set参数:保留原有as号码属性;该参数主要用来防止环路产生;默认情况下手动聚合路由后,它会以本端为起始点向周围邻居宣告,对应as号码是本端bgp路由器所在as号,这样一来就可能产生环路;如上,我们不在R3上手动聚合路由,只是在R3上引入路由,然后在R2上做手动聚合,看看对应聚合后的路由是否会照常发送给R3呢?

  在R3上取消手动路由聚合

  在R2上验证看看是否正常学习到R3引入的直连路由呢?

  提示:可以看到R3引入的路由R2能够正常学习到;

  在R2上做手动路由聚合,并抑制明细路由

  验证:查看R2bgp路由表,看看是否生成了聚合后的路由?明细路由是否被抑制?

  提示:可以看到在R2上生成了一条聚合后的路由,对应明细路由也都抑制了;

  验证:在R1上查看bgp路由表,看看是否正常学习到R2聚合后的路由?

  提示:可以看到现在R1学习到底192.168.0.0/22这条路由,对应的没有记录as号,说明这条路由是有同一as内部的其他路由器发布;和刚才看到的不一样,刚才R3手动聚合,对应R1学习到的路由,对应as号为3,而现在没有了;很显然不应该这样;

  再来看看R3是否学习到R2手动聚合后的路由呢?

  提示:可以看到R3也正常学习到R2手动聚合后的路由;对应as号为12;本来是R3发布的明细路由,被R2聚合后变为了再次发给了R3,这很不合理呀,正常情况R3是始发地,就不应该收到R2聚合后的路由;解决办法,在R2上做路由聚合时,加上as-set参数,保留原有as号

  在R2上手动聚合加上as-set

  验证:在此在R3上查看bgp路由表,看看R2聚合后的路由是否会被收到呢?

  提示:可以看到R3现在就没有接收R2发布的聚合后的路由,原因是R2发布的聚合后的路由中as_path里包含R3的as号,所以对应路由会被R3丢弃;

  验证:在R2上查看192.168.0.0/22这条路由通告给那些路由器,是否有R3在内呢?

  提示:可以看到R2是通告给R3,只不过R3查看对应路由里as-path里包含自己所在as,所以R3拒绝接收R2发布的聚合后的路由;

  验证:在R1上查看对应路由,看看对应路由现在as号是多少?

  提示:现在可以看到R1学习到的路由和R3发布手动聚合的路由一样,对应path属性为3,这说明该条路由的始发地as号为3,而非本地其他路由器;

标签:聚合,R1,R2,R3,HCNP,BGP,Routing,路由
来源: https://www.cnblogs.com/qiuhom-1874/p/15458110.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有