BGP Session Types and Behaviors
- Internal BGP ASN一致,AD值200
- External BGP 两边ASN不一样,AD值20
Why iBGP
- 在1个AS的内部,也需要以BGP协议传递信息
- 例如:1个公司,有2个Router,从ISP拉2条线(2个AS),2条线路互为备份。其中1个RouterA到ISP的线路断掉后,,另1个RouterB 就可以通过iBGP 宣告路由给RouterA。 这样原有走RouterA的通信不需要调整
Problem for iBGP
- 可能会导致路由黑洞,中间的路由不知道如何去往右侧路由(10.45.1.0)的右侧
- R2 通过iBGP 学到了如何去往10.45.1.0 (需要经过直连网段10.23.1.3 去到10.34.1.4),但是默认情况下 R3 上没有去到10.45.1.0的路由,所以将其Drop掉
- 如何避免这种情况
- 原因1:这条路由加载到了R2的路由表,解决方案开启BGP Sync,检查IGP 底层链路(通过其他协议或静态)是否存在去往10.45.1.0的路由
解决方案0:BGP Synchronization + Redistribute BGP into IGP,不推荐
- 如果你的AS 要为两个不同的AS pass traffic,在你的AS内部所有Router都能知道目的路由前,BGP不能宣告这个路由
- BGP Synchronization 是旧的解决办法,目前默认是 disabled
- 互联网大概有80W+的路由条目,并且在不断增加。扩展性差,IGP无法承受
- 链路状态协议 和 距离矢量协议使用 Metric 作为路由选择的主考量。而BGP 使用很多步骤来确认最佳路径,而且允许使用PA来操控特定的Prefix
- IGP 协议无法维护BGP中的PA
解决方案1:Build iBGP between Routers —— 理想
- 理想情况是在所有的Router之间都创建IGP,但IGP不允许这么做,因为这样可能会导致环路
- eBGP 通过AS_PATH 来防环
- iBGP 都在同1个AS内部,无法使用AS_PATH。
- 同时,RFC4271 规定,通过eBGP 学到的路由,可以继续宣告给IGP邻居。通过iBGP学到的路由,在BGP AS内部不可以继续传播。
解决方案2:iBGP Full mesh —— 正确的解决方案
- 1个AS 内部的BGP Router 必须相互Fully Mesh,以提供防环路由表
- Router 之间全部通过 iBGP 宣告路由 —— 有了FullMesh,就不再需要BGP Sync。所以Cisco 默认关闭BGP Sync,因为Cisco 认为做设计的人应该知道要用 Full Mesh
Peering Using Loopback Address
- 使用Loopback 来建立 iBGP,而不是出站物理接口
- 避免物理接口/线路挂掉后,2端不可达。因为实际上可以通过另1侧中转(前提就是通过LoopBack建联