BGP 基础与概述-2


说明:该篇笔记作为 BGP 基础-1 的补充,以及 BGP Border Gateway Protocol,边界网关路由协议的一些更为重要的基础理论。

参考视频:红茶三杯)

 
 

0x01 中转 AS 中的 IBGP 路由传递

参考该图:

image.png

上图,我们模拟一个 1.0 的路由通过 AS 65101 来传递

1:通过图可知,A 与 B 之间的 Peer 为 EBGP,B 与 E 之间为 Peer IBGP,E 与 F 之间为 Peer EBGP 邻接

2:A 通告 1.0 路由给 EBGP 邻居 B,那么 B 则跨 OSPF 路由 TCP 通信传递给 E,E再通过 EBGP 邻接关系传递给 F 注意:该路由为 AS 65101 update 通告给邻接的一个消息,而不是通信

3:F 已知去往 A 1.0 的路由,如果 AS F 要去往 1.0 路由,需要通过 EBGP E 转发

2:而当 E 转发该路由的时候,只有扔给 D,C 二者之中的一个,当转发到该非 BGP 路由器上的时候,D,C 二者是不知道如何操作该 BGP 路由的,会被直接丢弃,==我们将其称作路由黑洞==

这里我就叫它 AS 中转 IGP 黑洞

 
 

0x02 BGP 同步

既然出现了路由黑洞,那么就会有解决方法,如 RIP 一样,RIP 拥有水平分割来防环,那么 BGP 就有同步规则来防止路由黑洞

 
 
BGP 同步规则:

BGP 的同步规则指出,一台 BGP 的路由器,你不能将通过 IBGP 获取到的 BPG 路由,通告给你的 EBGP 邻居,除非你通过 IGP,又一次获取到这条路由的更新

该同步规则的着重点在于 IGP 路由拥有 BGP 路由跟新过来的路由条目,能够识别 BGP 路由,同时转发给 AS 边界 BGP 路由器这里可能有理解错误,但是大致是这种情况

需要注意的一点是该规则是有点鸡肋的,因为随时可像 ARP 那样欺骗

==Cisco IOS 默认关闭同步规则==

既然又默认关闭,开启又鸡肋可欺骗,那么前辈们就总结出如下几个方法,来解决路由黑洞的问题

 

解决办法 1

该方案不是最优建议,因为 BGP 承载大量路由,重发布可能导致 IGP 跑死

参考图:


image.png
                     **在 B、E 上将 BGP 路由重发布进 IGP (OSPF) 路由中,可解决路由黑洞问题**

 

解决方法 2

该方案是采取 ==AS 边界路由全起 BGP 来达到无死角==,即 AS 路由器全跑 BGP 路由,从而使得 B peer E D C,邻接,那么这个时候,就不会存在路由黑洞的问题,BGP 同步规则也没必要开启 [ BGP 同步规则,Cisco 默认关闭]

参考图:


image.png

该方案缺点:

IBGP 全互联虽然能结局 Transit AS 内的路由黑洞问题,但是却造成 BGP 路由器需耗费大量资源维护 BGP 连接的新问题。

以下为两个资源损耗过大的解决方案:

  • 路由反射器
  • 联邦

 
 

0x03 IBGP 水平分割原则

我们在 RIP 中有水平分割原则,那么视野扩到 IBGP ,其维护的 Peer IBGP 的邻接关系所处的 水平分割原则又是什么样的?

IBGP 水平分割原则:

**当我的一台路由器从我的某一个 IBGP 邻居收到一条 BGP 路由的时候,我将不能够再传递给其他任何一个 IBGP 邻居 **

以下为讲解过程:

BGP 防环是通过 AS-PATH 实现的,而 AS-PATH 仅仅再路由离开 AS 才会被更改,因此在 AS 内, IBGP 就没有 EBGP 的防环能力,为了防止环路的出现,BGP 路由器不会将从 IBGP 邻居学习过来的路由再通告给自己其他 IBGP 邻居。——BGP 的水平分割原则。

==由于水分分割原则的存在,BGP 要求 AS 内,需保证 IBGP 全互联 ( neighbor 命令指定)。==

( 根本原因是再 AS 内部,AS-PATH 不会改变,无法使用 AS-PATH 防环,因此会导致出现环路)

 
 

0x04 BGP 路由通告规则

  • 当存在多条路径时,BGP Router 只选取最优的路由 ( BEST ) 来使用 (没有负载均衡的情况下)
  • BGP 只把自己使用的路由,也就是自己认为 BEST 的路由传递给 BGP peer
  • BGP Speaker 从 EBGP 获得的路由会向他所有的 BGP peer 通告 包括 EBGP 和 IBGP
  • BGP Speaker 从 IBGP 获得的路由不向它的 IBGP 相邻体通告 (水平分割原则:避免环路,存在路由 RR 的情况除外)
  • BGP Speaker 从 IBGP 获得的路由是否通告给它的 EBGP peer 要看 IGP 和 BGP 的同步情况来决定

 
 

0x05 BGP 路由表

  • BGP 邻居表:Peer 对等体列表
  • BGP 表:包含了所有从邻居 Peer 对等体那学来的路由条目,以及到达目的的网段的多个路径和属性
  • 路由表:列出了到达目的网段的==最佳路径==
  • AD:EBGP = 20 ,IBGP = 200

 
 

0x06 BGP Next-hop 属性

该特征下一跳与其他下一跳不同,具体看以下解析

BGP 路由器从一个 EBGP 邻居收到一条路由的时候,BGP 路由器会将该 EBGP 邻居的接口 IP 作为我这条路由的下一跳 Next-hop,通告给我的 IBGP 邻居

该 Next-hop 属性只会在 不同 AS 之间发生改变,而 AS 内部是不会发生改变的

参考图如下:


image.png

其他参考:

  • BGP 是 AS-by-AS 的路由协议,而不是 router-by-router 的路由协议
  • 在 BGP中,next-hop 并不意味着是下一台路由器,而是到达下一个 AS 的 IP 地址
  • EBGP 中, 默认 next-hop 为发送更新的理解路由器的 IP 的地址
  • IGBP 中,从 EBGP 传来的 Next-hop 属性是在 IBGP 中保持不变的被传递

 
 

0x07 BGP 更新源

==跟新源在于声明 loopback 基础上==

在没有学习 BGP 跟新源的时候,我们使用直连接口建立 BGP peer 邻居关系

如果任何一个直连接口 down 掉,或者任何一个链路 down 掉都将直接导致 BGP 邻居 down,或者 BGP 路由之间的连接消失

==如果我们使用 loopback 口来建立 Peer 关系==,如果链路 down 了,只要我们有冗余链路,那么该链路会借助 IGP 协议从而再次发现 Peer,使得 BGP 链路更加稳定,邻居关系起到稳定作用

一般而言,与 EBGP 之间仍然采用之间接口指定更新源

参考图如下:


image.png

 
 

0x08 EBGP 之间使用 Loopback 建立跟新源


如果通过 EBGP 建立邻居关系,其默认 next-hop 为 1

需要注意的是,我们通过 loopback 口建立更新源,其 next-hop 最小值为 2

==所以如果通过 loopback 建立更新源,我们需要调整该跳数==,同时需要指定 EBGP 邻居间的通信无碍

具体调整方式参考 BGP 基础配置.md

Q Q 群 : 网安技术交流

新浪微博:Perse工作室

哔哩哔哩:深蓝网络安全

微信公众号:深蓝网络安全

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容