BGP基础配置实验总结

一、实验拓扑与背景介绍

最近在复习 BGP 多自治域组网,搭了一套包含 3 个 AS 的拓扑,目标是实现 AS100、AS200、AS300 的全网互通,同时在 AS200 内部通过 OSPF 实现 IGP 打通,让 iBGP 邻居能正常建立。

拓扑结构概览

表格

设备 AS 号 关键接口与地址
R1 AS100 GE0/0/0:12.1.1.1/24,LoopBack0:1.1.1.1/32
R2 AS200 GE0/0/0:12.1.1.2/24,GE0/0/1:23.1.1.2/24,LoopBack0:2.2.2.2/32
R3 AS200 GE0/0/0:23.1.1.3/24,GE0/0/1:34.1.1.3/24,LoopBack0:3.3.3.3/32
R4 AS200 GE0/0/0:34.1.1.4/24,GE0/0/1:45.1.1.4/24,LoopBack0:4.4.4.4/32、LoopBack1:10.4.4.4/32
R5 AS300 GE0/0/0:45.1.1.5/24,LoopBack0:5.5.5.5/32、LoopBack1:10.5.5.5/32

核心设计思路

  1. AS 间路由 :R1 与 R2 建立 eBGP 邻居,R4 与 R5 建立基于环回口的 eBGP 邻居(需要ebgp-max-hop支持);
  2. AS 内路由:AS200 内通过 OSPF 实现所有直连网段和环回口的 IGP 打通,同时把 BGP 路由引入 OSPF,保障内部路由可达;
  3. 默认路由兜底:R1 配置默认路由指向 R2,R5 配置默认路由指向 R4,保证非直连网段的流量转发。

二、初始配置与问题初现

按照拓扑完成所有基础配置后,发现了几个典型问题:

  1. R1 ping 不通 R5 的 5.5.5.5,也无法 ping 通 R4 的 4.4.4.4;
  2. R4 与 R5 的 BGP 邻居建立失败,一直处于 Idle/Connect 状态;
  3. AS200 内部 R2 无法 ping 通 R4 的 LoopBack0,iBGP 邻居虽然配置了,但状态异常。

三、分步排错与解决过程

1. 先解决 AS200 内部 OSPF 路由问题

首先排查 IGP,因为 iBGP 的建立依赖 AS 内路由可达。

  • 检查 R3 的配置,发现 R3 的 OSPF 没有配置router-id,虽然华为设备会自动选举,但还是建议手动配置,避免选举异常;
  • 检查 R2 的 OSPF 配置,ospf 1 router-id 2.2.2.2import-route bgp是正确的,但network命令没有宣告 GE0/0/0 的 12.1.1.2 网段?不,这里是对的,因为 12.1.1.0/24 是 AS 间链路,不需要在 OSPF 里宣告,R2 和 R1 建立 eBGP,只需要保证 R2 到 R4 的路由可达即可。
  • 关键问题:R4 的 OSPF 配置中,network 45.1.1.4 0.0.0.0宣告了,但 R3 和 R4 的 OSPF 邻居已经建立,但 R4 的 LoopBack0 4.4.4.4 在 R2 的路由表中是否存在?排查发现 R3 的 OSPF 配置中,ospf 1没有配置router-id,而且 R4 的 OSPF 配置中,import-route bgp已经配置,但 R2 和 R4 的 iBGP 邻居是否正常?

2. 解决 R2 与 R4 的 iBGP 邻居问题

R2 配置了peer 4.4.4.4 as-number 200connect-interface LoopBack0,R4 也配置了peer 2.2.2.2 as-number 200connect-interface LoopBack0,但邻居一直无法建立。

  • 第一步:检查 R2 到 4.4.4.4 的路由,display ip routing-table 4.4.4.4,发现 R2 通过 OSPF 学到了 4.4.4.4/32,下一跳是 23.1.1.3(R3),路由是通的;
  • 第二步:检查 BGP 的peer 4.4.4.4 enable是否配置,两边都配置了,没问题;
  • 第三步:检查 R2 的 BGP 配置,peer 4.4.4.4 next-hop-local,这个配置是正确的,用来把 eBGP 路由的下一跳改为自己,发给 iBGP 邻居;
  • 关键问题:R4 的 OSPF 配置中,import-route bgp是正确的,但 R2 的 BGP 配置中,network 1.1.1.1 255.255.255.255是 R1 的路由,R2 从 R1 学到后,会通过 iBGP 发给 R4,R4 会收到,但是 R4 的 OSPF 引入 BGP,会把这些路由发布到 AS200 内部,R2 也会收到,不影响,但问题不在这;
  • 最终发现:R3 的 OSPF 配置中,没有宣告34.1.1.3?不,配置里写了network 34.1.1.3 0.0.0.0,是对的。哦,原来 R2 和 R4 的 iBGP 邻居是建立成功的,只是因为没有收到足够的路由,一开始误以为不通,实际是 R1 的路由在 R4 的 BGP 表中,只是需要确认。

3. 解决 R4 与 R5 的 eBGP 邻居问题

R4 配置了peer 10.5.5.5 as-number 300connect-interface LoopBack1ebgp-max-hop 255;R5 配置了peer 10.4.4.4 as-number 200connect-interface LoopBack1ebgp-max-hop 2,但邻居一直无法建立。

  • 第一步:检查 R4 到 10.5.5.5 的路由,R4 配置了ip route-static 10.5.5.5 255.255.255.255 45.1.1.5,R5 配置了ip route-static 10.4.4.4 255.255.255.255 45.1.1.4,静态路由是双向的,ping 一下:R4 ping 10.5.5.5,发现是通的,说明底层 IP 可达;
  • 第二步:检查 BGP 配置,两边的peer x.x.x.x enable都配置了,没问题;
  • 第三步:检查ebgp-max-hop,R4 配置了 255,足够大,R5 配置了 2,也足够,因为两个环回口之间只经过一跳物理链路,TTL 减 1,所以没问题;
  • 关键问题:R5 的 BGP 配置中,peer 10.4.4.4 as-number 200,这里的 AS 号写对了吗?R4 在 AS200,所以是对的;R4 的peer 10.5.5.5 as-number 300也是对的;
  • 哦!发现了!R4 的 LoopBack1 地址是 10.4.4.4/32,R5 的 LoopBack1 地址是 10.5.5.5/32,R4 的静态路由是10.5.5.5/32 45.1.1.5,R5 的静态路由是10.4.4.4/32 45.1.1.4,是对的。那为什么邻居建立不了?排查 BGP 的 debug 信息,发现 R4 发送的 BGP 报文,源地址是 LoopBack1 的 10.4.4.4,目的地址是 10.5.5.5,R5 收到后,会检查是否配置了peer 10.4.4.4,R5 确实配置了,那为什么?哦!R5 的peer 10.4.4.4 as-number 200,R4 的 BGP 进程号是 200,是对的,但是 R5 的 BGP 配置中,ipv4-family unicast下,peer 10.4.4.4 enable是配置了的,没问题。最后发现:R4 的peer 10.5.5.5 connect-interface LoopBack1,配置正确;R5 的peer 10.4.4.4 connect-interface LoopBack1,也正确。原来只是因为实验环境中设备反应慢,多等了一会,邻居就建立起来了,属于 "假故障"。

4. 解决全网互通问题

邻居都建立后,发现 R1 ping 不通 R5 的 5.5.5.5,排查路由:

  • R1 的路由表:默认路由指向 12.1.1.2(R2),BGP 学到了 R2 发来的路由,包括 R5 的 5.5.5.5;
  • R2 的路由表:BGP 学到了 R1 的 1.1.1.1 和 R4 发来的 R5 的 5.5.5.5,同时 OSPF 学到了 R4 的路由;
  • R4 的路由表:BGP 学到了 R2 发来的 R1 的 1.1.1.1 和 R5 的 5.5.5.5,OSPF 学到了 AS200 内的所有路由;
  • R5 的路由表:默认路由指向 45.1.1.4(R4),BGP 学到了 R4 发来的 R1 的 1.1.1.1;
  • 关键问题:R2 向 R1 发送 BGP 路由时,下一跳是自己,R1 收到后,会把下一跳设为 12.1.1.2,所以 R1 访问 5.5.5.5 时,会发给 R2,R2 发给 R4,R4 发给 R5,R5 返回时,根据默认路由发给 R4,R4 再发给 R2,R2 发给 R1,理论上是通的。但实际 ping 不通,排查发现 R1 的 BGP 配置中,network 1.1.1.1 255.255.255.255是正确的,R1 把自己的环回口宣告进 BGP,R2 收到后,会通过 iBGP 发给 R4,R4 发给 R5,R5 的路由表中会有 1.1.1.1 的 BGP 路由,下一跳是 10.4.4.4(R4 的 LoopBack1),R5 的静态路由里有 10.4.4.4/32 指向 45.1.1.4,所以路由是通的。最后发现是 R1 的默认路由配置正确,但 ping 的时候,R5 的返回流量,R4 发给 R2,R2 发给 R1,R1 收到后,会回复,只是因为实验中设备的 ARP 缓存问题,清一下 ARP 缓存就通了。

四、关键配置与避坑总结

1. iBGP 邻居基于环回口建立的注意事项

  • 必须保证 AS 内 IGP(OSPF/IS-IS)能学到环回口的路由,R2 和 R4 的环回口都要宣告进 OSPF;
  • 必须配置peer x.x.x.x connect-interface LoopBack0,让 BGP 报文的源地址为环回口地址;
  • 必须配置peer x.x.x.x next-hop-local,R2 把从 R1 学到的 eBGP 路由发给 R4 时,下一跳改为自己,否则 R4 收到的路由下一跳是 R1 的 12.1.1.1,而 R4 没有到 12.1.1.1 的路由,会导致路由不可达。

2. eBGP 邻居基于环回口建立的注意事项

  • 必须配置静态路由,保证两个环回口之间的 IP 可达,R4 和 R5 的 LoopBack1 需要互相配置静态路由;
  • 必须配置ebgp-max-hop,因为 eBGP 默认使用直连物理接口建立邻居,TTL 为 1,环回口之间需要多跳,所以要增大 TTL,华为设备默认是 1,需要手动配置;
  • connect-interface必须指定为对应的环回口,保证 BGP 报文的源地址是环回口地址,否则对方会拒绝建立邻居。

3. OSPF 引入 BGP 的注意事项

  • AS200 内的 R2 和 R4 都需要配置ospf 1 import-route bgp,把 BGP 路由引入 OSPF,保证 AS 内的所有设备都能学到这些路由;
  • 注意 OSPF 的router-id配置,最好手动指定为环回口地址,避免自动选举导致的问题;
  • 不要把 AS 间的直连网段(如 12.1.1.0/24、45.1.1.0/24)宣告进 OSPF,避免路由环路。

五、最终验证结果

所有邻居状态正常,全网路由可达:

  1. R1 ping 1.1.1.1、2.2.2.2、3.3.3.3、4.4.4.4、5.5.5.5 都通;
  2. R5 ping 1.1.1.1、2.2.2.2、3.3.3.3、4.4.4.4、5.5.5.5 都通;
  3. 所有 BGP 邻居状态都为 Established,OSPF 邻居状态为 Full。
相关推荐
Wang's Blog几秒前
Vibe Coding一人即团队系列28: 前端、后端与数据库的概念解析
前端·数据库
zr5268554472 分钟前
光电交换机-三格电子
运维·服务器·网络
yunwei373 分钟前
CPU 噪声会拖慢 GPU 推理吗:用 eBPF 定量测量调度器与 IRQ 影响
linux·人工智能·性能优化
Dovis(誓平步青云)8 分钟前
模拟器横评:电脑上看小说、追短剧用什么模拟器?MuMu、雷电、腾讯手游助手实测
android·java·服务器·前端·javascript·电脑
踩蚂蚁9 分钟前
把自定义唤醒词部署到 ESP32-S3:ONNX 转 INT8 TFLite 的完整链路
前端
前端繁华如梦10 分钟前
用 Vite + Electron + React + Python 重造 3D 服装打版软件
前端
SDWAN_Cheap14 分钟前
什么是子网掩码?/24、/16这些数字代表什么?
运维·服务器
帷幕落秋17 分钟前
# 实验:Nginx 日志自动轮转(logrotate)
linux
豆沙沙包?18 分钟前
函数重载/类和对象(P14-P60)
前端·算法
Java.熵减码农25 分钟前
MySQL 远程连接故障排查全记录(Linux + Docker + Navicat)
linux·mysql·docker