BGP 笔记梳理
一、BGP 基本概念
- 定义:边界网关协议(Border Gateway Protocol),是一种外部网关协议(EGP),用于不同自治系统(AS)之间交换路由信息。
- 特点:
- 基于 TCP 协议,端口号 179,可靠性高。
- 路径矢量协议,通过 AS 路径(AS-Path)等属性避免环路。
- 支持 CIDR(无类域间路由),能携带大量路由信息。
- 策略性强,可通过路由属性灵活控制路由的选择和传播。
二、BGP 核心术语
- 自治系统(AS):由同一机构管理、使用统一路由策略的网络集合,用 AS 号标识(16 位:1-65535,其中 64512-65535 为私有 AS 号)。
- BGP 邻居:不同设备通过 TCP 建立连接后形成的对等体关系,分为:
- IBGP 邻居:同一 AS 内的 BGP 邻居,需遵循“水平分割”原则(不转发从 IBGP 邻居学到的路由)。
- EBGP 邻居:不同 AS 间的 BGP 邻居,默认 TTL 为 1(环回口建邻需修改 TTL)。
- Router-ID:标识 BGP 设备的唯一 ID,通常为设备环回口 IP,需全网唯一。
三、BGP 路由属性
- 必选属性:所有 BGP 路由必须携带。
- Origin:表示路由来源(IGP 为 i ,EGP 为 e ,重分发为 ? ,优先级: i > e > ? )。
- AS-Path:记录路由经过的 AS 号列表,用于防环(收到包含本地 AS 号的路由时丢弃)。
- Next-Hop:路由的下一跳地址(EBGP 邻居发布的路由,下一跳为邻居自身接口 IP;IBGP 邻居发布的路由,下一跳默认不变)。
- 可选属性:
- Local-Preference:仅在 IBGP 中传递,用于优选出 AS 的出口路由(值越大越优先,默认 100)。
- MED(Multi-Exit Discriminator):用于向 EBGP 邻居提示进入本 AS 的优选入口(值越小越优先,仅在相邻 AS 间有效)。
- Community:路由团体属性,用于标记路由,便于批量控制路由的接收、发布等策略。
四、BGP 工作过程
1. 建立邻居关系:通过 peer 命令配置邻居,交换 Open 报文协商参数(如 AS 号、Router-ID 等),成功后进入 Established 状态。
2. 交换路由信息:通过 Update 报文传递路由及属性,首次交换完整路由表,后续仅更新变化的路由。
3. 路由选路:根据 BGP 路由属性优先级(从高到低:Weight(思科私有)→ Local-Preference → 本地生成路由 → AS-Path 长度 → Origin → MED → EBGP 路由优于 IBGP 路由等)选择最优路由,加入路由表。
4. 维护邻居关系:通过 Keepalive 报文(默认 60s 发送一次,hold time 为 180s)保持连接,超时则断开邻居。
五、常见配置要点
- 环回口建邻:提高邻居关系稳定性,需配置 peer connect-interface 指定环回口,EBGP 邻居还需配置 peer ebgp-max-hop 调整 TTL(如 peer 1.1.1.1 ebgp-max-hop 2 )。
- 路由宣告:通过 network 命令宣告本地路由(需在路由表中存在精确匹配的路由),或通过 import-route 引入其他协议路由(如 OSPF、静态路由)。
- 路由反射器:解决 IBGP 水平分割问题,减少 IBGP 邻居数量。配置反射器( peer reflect-client )后,反射器会将从客户机学到的路由反射给其他客户机和非客户机。
- 防环与优化:
- 配置黑洞路由( ip route-static 网段 NULL 0 )防止路由泄露形成环路。
- 通过路由策略(如 route-policy 、 prefix-list )过滤不必要的路由,减少路由条目。
六、典型应用场景
- AS 间路由互通:不同 AS 网络通过 EBGP 邻居交换路由,实现跨 AS 通信。
- 路由策略控制:利用 Local-Preference、MED 等属性控制流量走向(如让流量优先从带宽大的链路进出)。
- 大规模网络路由管理:通过 Community 属性标记不同区域的路由,在骨干设备上统一控制路由的传播范围。
七、故障排查思路
1. 邻居关系未建立:检查接口是否通、AS 号是否配置正确、是否存在 ACL 过滤 BGP 报文、TTL 是否足够等。
2. 路由未学习到:检查是否配置路由宣告或引入、邻居是否配置 peer enable 、是否存在路由策略过滤路由、AS-Path 是否包含本地 AS 号等。
3. 路由选路不符合预期:查看路由属性( display bgp routing-table ),检查 Local-Preference、AS-Path 等属性是否按预期配置。