BGP笔记及综合大实验报告册

一、BGP 基础概念解析​

  1. 产生背景​

BGP(Border Gateway Protocol,边界网关协议)作为自治系统(AS)之间的动态路由协议,属于外部网关协议(EGP)的范畴。它的主要功能是在不同的自治系统之间传递路由信息,从而实现跨 AS 的网络通信。​

  1. 自治系统(AS)​
  • 定义:自治系统是由一组被统一管理的路由器构成的集合,这些路由器运行相同的内部网关协议(IGP),并且通常采用相同的路由策略。
  • AS 编号:
  • 2 字节编号:范围在 0-65535 之间,其中 0 和 65535 为保留编号。公有 AS 编号为 1-64511,私有 AS 编号为 64512-65535。
  • 4 字节编号:公有 AS 编号范围是 65536--4199999999,私有 AS 编号范围是 4200000000--4294967294。

二、路由协议分类情况​

  • IGP(内部网关协议):主要用于自治系统内部的路由管理,常见的有 RIP、OSPF、IS-IS 等协议。
  • EGP(外部网关协议):用于不同自治系统之间的路由交互,目前在实际应用中,BGP 是唯一被广泛使用的 EGP 协议。

三、BGP 协议特性说明​

  • 路由传递范围:BGP 仅负责在自治系统之间传递路由信息,而自治系统内部的路由扩散则依赖于 IGP 协议。
  • 路径矢量协议:在 BGP 中,一跳代表一个自治系统。当路由传入某个 AS 时,下一跳会变为上个 AS 的出接口 IP;而在 AS 内部传递时,下一跳保持不变。
  • AS 防环机制:借助 AS_PATH 属性来防止环路。路由每经过一个 AS,该 AS 的编号会按 "右到左" 的顺序加入 AS_PATH。如果收到的路由的 AS_PATH 中包含本地 AS 编号,路由器则不会学习该路由。
  • 传输层依赖:BGP 基于 TCP 协议运行,使用的端口号为 179,并且需要手动配置邻居关系。
  • 更新方式:在首次收敛时,BGP 会发送完整的路由表;后续的更新则仅进行增量更新,即只发送变化的路由信息。
  • 路由控制:BGP 支持通过多种属性来控制路由选择,同时也支持路由聚合、过滤和策略配置等功能。

四、BGP 基本术语解释​

  • BGP Speaker:指运行 BGP 协议的路由器。
  • BGP Peer(对等体):通过 TCP 连接交换路由信息的 BGP Speaker,可分为以下两种:
  • EBGP 对等体:处于不同 AS 的邻居,通常物理上直接连接。从 EBGP 学到的路由会通告给所有对等体,包括 EBGP 和 IBGP 对等体。
  • IBGP 对等体:位于同一 AS 内的邻居,可以非直接连接。但受 "水平分割" 限制,即从 IBGP 学到的路由不会传递给其他 IBGP 对等体。

五、路由黑洞及解决方法​

  • 产生原因:当 IBGP 邻居之间存在未运行 BGP 的路由器时,这些路由器无法获取 BGP 路由,从而导致数据包被丢弃,形成路由黑洞。
  • 解决方法:
  • 将 BGP 路由引入 IGP。
  • 在黑洞路由器上配置静态路由。
  • 实现 IBGP 全连接,即所有 IBGP 路由器之间互相建立邻居关系,这种方法适用于小规模网络。
  • 使用路由反射器(RR),它可以无视 IBGP 水平分割,减少邻居数量。
  • 采用 BGP 联盟,将一个 AS 划分为多个子 AS,子 AS 之间通过 EBGP 连接,以减少 IBGP 邻居数量。

六、BGP 环路问题(水平分割)​

  • EBGP 水平分割:通过 AS_PATH 属性来实现,若收到的路由包含本地 AS 编号,则拒绝学习该路由。
  • IBGP 水平分割:从 IBGP 对等体学到的路由,不会向其他 IBGP 对等体通告,以此避免环路。

七、BGP 消息种类介绍​

|-----------------|-------------------------------------------------------------|
| 消息类型​ | 作用​ |
| Open​ | 用于建立对等体连接,携带 router-id、Hold Time(默认 180s)等参数。​ |
| Keepalive​ | 周期性发送(默认每 60s 发送一次),用于维持连接的有效性。​ |
| Update​ | 携带路由更新信息,包括新增和删除的路由,包含 Withdrawn Routes(撤销路由)和 NLRI(新增路由)。​ |
| Notification​ | 当检测到错误时发送,随后会关闭连接。​ |
| Router-refresh​ | 在更改路由策略后,请求对等体重发指定地址族的完整路由表。​ |

八、BGP 状态机流程​

  • Idle:初始化状态,准备建立 TCP 连接,在此状态停留 30 秒。
  • Connect:TCP 连接建立过程中,若失败则进入 Active 状态。
  • Active:主动尝试建立 TCP 连接,若失败则会重试。
  • OpenSent:TCP 连接建立后,发送 Open 报文,等待对方响应。
  • OpenConfirm:收到对方的 Open 报文后,发送 Keepalive 报文,等待对方的 Keepalive 报文。
  • Established:收到对方的 Keepalive 报文,邻居关系建立,开始交换路由信息。

九、BGP 邻居建立条件​

  1. IBGP 邻居​
  • 物理口建邻:建议使用直连接口的地址。
  • 环回口建邻:需要保证 TCP 可达(即路由可达),同时要修改更新源为环回口(使用命令 peer connect-interface LoopBack 0),默认的 TTL 为 255。
  1. EBGP 邻居​
  • 物理口建邻:建议使用直连接口的地址。
  • 环回口建邻:需要保证 TCP 可达,并且要修改最大跳数(使用命令 ebgp-max-hop),默认的 TTL 为 1(需改为更大的值,如 2)。

注意事项​

若路由器同时存在 EBGP 和 IBGP 邻居,需要修改 IBGP 邻居的下一跳为本机(使用命令 next-hop-local),否则可能导致路由不可达。​

十、BGP 基本配置步骤​

  1. 启动 BGP 并创建连接​

TypeScript取消自动换行复制

huawei bgp <as-number> # 启动BGP,指定AS编号​

huawei-bgp router-id <router-id> # 配置Router-id(可选,建议配置)​

huawei-bgp peer <ip-address> as-number <as-number> # 指定对等体及AS​

huawei-bgp address-family ipv4 unicast # 进入IPv4地址族(华三设备)​

huawei-bgp-ipv4 peer <ip-address> enable # 使能对等体路由交换​

  1. 优化配置​

TypeScript取消自动换行复制

huawei-bgp peer <ip-address> connect-interface <interface> # 指定TCP连接源接口​

huawei-bgp peer <ip-address> ebgp-max-hop <hop-count> # 修改EBGP最大跳数​

  1. 发布路由​

TypeScript取消自动换行复制

宣告本地路由​

router-bgp network <ip-address> mask \ route-policy \

引入其他协议路由​

router-bgp import-route <protocol> process-id route-policy \

  1. 查看命令​

TypeScript取消自动换行复制

display bgp peer # 查看BGP邻居状态​

display bgp routing-table # 查看BGP路由表​

十一、BGP 选路原则(13 条)​

  1. 丢弃下一跳不可达的路由。
  1. 优选 Preferred-value(首选项)最大的路由(默认 0,华为 / H3C 私有属性)。
  1. 优选 Local_Pref(本地优先级)最高的路由(默认 100,仅 IBGP 传递)。
  1. 依次选择 network 生成、import-route 引入、聚合的路由。
  1. 优选 AS_PATH 最短的路由。
  1. 依次选择 ORIGIN 为 IGP(i)、EGP(e)、Incomplete(?)的路由。
  1. 优选 MED(多出口鉴别器)最小的路由(默认 0,相邻 AS 间传递)。
  1. 依次选择从 EBGP、联盟 EBGP、联盟 IBGP、IBGP 学到的路由。
  1. 优选下一跳 IGP 度量值最低的路由。
  1. 优选 CLUSTER_LIST 最短的路由。
  1. 优选 ORIGINATOR_ID 最小的路由。
  1. 优选 Router ID 最小的路由器发布的路由。
  1. 优选 IP 地址最小的对等体发布的路由。

十二、BGP 属性分类​

  1. 公认必遵属性(所有路由必须携带)​
  • AS_PATH:记录路由经过的 AS 编号,用于防环和选路(短路径优先)。
  • Next-hop:路由的下一跳 IP,EBGP 邻居间传递时更新,IBGP 邻居间传递时不变(需手动修改为本地)。
  • ORIGIN:路由来源,优先级:IGP(i)> EGP(e)> Incomplete(?)。
  1. 公认可选属性(所有路由器识别,非必须携带)​
  • Local_Pref:本地优先级,仅 IBGP 传递,值越大越优先(默认 100)。
  • Atomic-aggregate:自动聚合标记。
  1. 可选传递属性(可不识别,但会传递)​
  • Community(团体属性):标记路由,用于批量控制,如 no-export(不传出 AS)、no-advertise(不向任何对等体通告)。
  1. 可选非传递属性(可不识别,不传递)​
  • MED:多出口鉴别器,用于相邻 AS 间选路,值越小越优先。
  • Cluster_list:路由反射器集群列表,用于防环。
  • Originator_ID:路由反射器中路由的始发者 ID,用于防环。

十三、大规模 BGP 网络优化手段​

  1. 对等体组(Peer Group)​
  • 定义:将具有相同属性的对等体分组,以简化配置操作。
  • 配置示例:

TypeScript取消自动换行复制

R2-bgp group <group-name> internal # 创建IBGP对等体组​

R2-bgp peer <ip1> group <group-name> # 加入对等体​

R2-bgp peer <group-name> connect-interface LoopBack 0 # 统一配置更新源​

  1. 路由聚合​
  • 自动聚合:仅对引入的 IGP 路由聚合到主类,这种方式可能产生黑洞,命令为 summary automatic。
  • 手动聚合:可以精确汇总,并且能够抑制明细路由,命令为:

TypeScript取消自动换行复制

router-bgp aggregate <network> <mask> detail-suppressed # 抑制明细路由​

  1. 路由反射器(RR)​
  • 作用:替代 IBGP 全连接,减少邻居数量,允许将从 IBGP 学到的路由反射给其他 IBGP 邻居。
  • 角色:包括 RR(反射器)、Client(客户机)、非客户机。
  • 反射规则:
  • 从非客户机学到的路由,仅反射给客户机。
  • 从客户机学到的路由,反射给所有客户机和非客户机(除始发者)。
  • 从 EBGP 学到的路由,反射给所有客户机和非客户机。
  • 防环机制:通过 Cluster_list(记录经过的 RR 集群 ID)和 Originator_ID(路由始发者 ID)来防止环路。
  • 配置示例:

TypeScript取消自动换行复制

R2-bgp peer <client-ip> reflect-client # 配置客户机​

R2-bgp reflector cluster-id <id> # 配置集群ID(可选)​

  1. BGP 联盟(Confederation)​
  • 作用:将一个 AS 划分为多个子 AS(使用私有 AS 编号),子 AS 之间通过 EBGP 连接,以减少 IBGP 邻居数量。
  • 配置示例:

TypeScript取消自动换行复制

R2 bgp <子AS编号>​

R2-bgp confederation id <主AS编号> # 声明主AS​

R2-bgp confederation peer-as <其他子AS编号> # 声明联盟内其他子AS​

  1. 团体属性(Community)​
  • 作用:对路由进行标记,以便批量控制路由的发布范围。
  • 公认团体属性:
  • Internet:默认属性,路由可通告给所有对等体。
  • no-advertise:路由不向任何对等体通告。
  • no-export:路由不传出 AS(但可在联盟内子 AS 间传递)。
  • 配置示例:

TypeScript取消自动换行复制

R1 route-policy <name> permit node 10​

R1-route-policy apply community no-export # 标记为no-export​

R1-bgp peer <ip> route-policy <name> export # 应用策略​

R1-bgp peer <ip> advertise-community # 允许传递团体属性​

  1. 路由衰减(Route Dampening)​
  • 作用:解决路由振荡(频繁上下线)问题,通过惩罚值来抑制不稳定的路由。
  • 参数:抑制阈值(默认 2000)、重用阈值(默认 750)、半衰期(默认 15 分钟)。
  • 配置示例:

TypeScript取消自动换行复制

router-bgp dampening # 启用默认参数​

十四、BGP 实验实例​

  1. 基本配置实验​
  • 目标:配置 EBGP 和 IBGP 邻居,宣告业务网段,解决路由黑洞问题。
  • 关键步骤:
  • 配置 IP 地址和 OSPF(实现 AS 内部互通)。
  • 建立 EBGP(直连)和 IBGP(环回口)邻居关系。
  • 宣告业务网段,通过 import-route bgp 将 BGP 路由引入 IGP,以解决路由黑洞问题。
  1. 路由控制实验​
  • 目标:通过修改属性来控制选路(如 MED、Preferred-value、AS_PATH、Local-pref)。
  • 示例:修改 MED 使路由优选某路径:

TypeScript取消自动换行复制

R2 acl 2000 # 抓取目标网段​

R2-route-policy apply cost 100 # 提高MED值​

R2-bgp peer <ip> route-policy <name> export # 应用策略​

  1. 路由反射器实验​
  • 目标:配置 RR 以减少 IBGP 邻居,实现路由反射功能。
  • 关键步骤:
  • 配置 OSPF 确保 TCP 可达。
  • 建立 IBGP 对等体组,配置 RR 及客户机。
  • 聚合业务网段,抑制明细路由。