您的位置:首页 > 其它

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

2021-10-25 15:48 621 查看

  前文我们了解了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更新只传递一跳)

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,而非本地其他路由器;

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: