一、邻居建立条件
BGP 邻居建立前,先确认这些条件:
| 条件 | 说明 |
|---|---|
| IP 可达 | 双方邻居地址必须可达 |
| TCP 179 可通 | BGP 基于 TCP 建立会话 |
| AS 号正确 | eBGP 对端 AS 写对,iBGP 同 AS |
| Router ID 唯一 | 同一 BGP 域内不要冲突 |
| 源地址一致 | 使用 Loopback 建邻居时要指定源接口 |
| 多跳配置 | eBGP 使用 Loopback 或非直连时需要 ebgp-max-hop |
| 认证一致 | 如果配置 MD5,双方必须一致 |
二、eBGP 和 iBGP
| 对比项 | eBGP | iBGP |
|---|---|---|
| 邻居关系 | 不同 AS | 同一个 AS |
| 默认 TTL | 1,通常要求直连 | 较大,可跨设备 |
| 路由传递 | 收到 eBGP 路由可传给其他 eBGP/iBGP | 从 iBGP 学到的路由默认不再传给其他 iBGP |
| Next-Hop | 通告给 eBGP 时通常改为自己 | 通告给 iBGP 时默认不改 |
| 防环 | AS_Path 检查 | 水平分割、RR、联盟 |
三、BGP 报文类型
| 报文 | 作用 |
|---|---|
| Open | 建立邻居时协商参数 |
| Update | 发布或撤销路由 |
| Keepalive | 保持邻居关系 |
| Notification | 出错时通知并关闭连接 |
| Route-refresh | 请求对端重新发送路由,便于策略刷新 |
四、邻居状态机
常见状态:
Idle -> Connect -> Active -> OpenSent -> OpenConfirm -> Established
| 状态 | 含义 | 排查方向 |
|---|---|---|
| Idle | 初始状态或出错后回到初始 | 配置、路由、对端地址 |
| Connect | 正在尝试建立 TCP | TCP 179、IP 可达性 |
| Active | TCP 连接失败后反复尝试 | 地址、源接口、ACL、防火墙、AS |
| OpenSent | 已发送 Open | AS 号、Router ID、认证 |
| OpenConfirm | Open 通过,等待 Keepalive | Keepalive、参数协商 |
| Established | 邻居建立成功 | 开始收发路由 |
五、Loopback 建邻居
生产网络常用 Loopback 建 BGP 邻居,因为 Loopback 稳定,不随物理接口抖动。
iBGP 常见写法:
bgp 65001
peer 2.2.2.2 as-number 65001
peer 2.2.2.2 connect-interface LoopBack0
eBGP 如果使用 Loopback,通常还需要多跳:
bgp 65001
peer 2.2.2.2 as-number 65002
peer 2.2.2.2 connect-interface LoopBack0
peer 2.2.2.2 ebgp-max-hop 2
六、下一跳可达性
BGP 邻居 Established 不代表路由一定可用。
BGP 路由要进入 IP 路由表,还要满足:
BGP 路由的 Next-Hop 在本地路由表中可达。
iBGP 场景常见问题:
R1 从 eBGP 学到路由后传给 iBGP 邻居 R2;
默认 Next-Hop 仍是外部邻居地址;
R2 不知道这个 Next-Hop 怎么去,路由不可用。
常见解决:
peer x.x.x.x next-hop-local
七、排错速查
| 现象 | 重点检查 |
|---|---|
| 一直 Active | IP 可达、TCP 179、源地址、 |
| OpenSent 后失败 | AS 号、Router ID、认证 |
| Established 但没路由 | 对端是否发布、本端策略是否过滤 |
| 学到路由但不可用 | Next-Hop 是否可达 |
| iBGP 路由不继续传递 | iBGP 水平分割,需要 RR 或全互联 |

评论