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。
相关推荐
朝阳392 小时前
前端学习方法(含前端成神之路)
前端·学习方法
爱莉希雅&&&2 小时前
MySQL MGR 组复制 完整笔记
linux·数据库·笔记·mysql·mgr·数据库同步
遇见火星2 小时前
linux设置开启启动服务
linux·运维·服务器·nginx
张元清2 小时前
head.tsx 就是一个 React 组件:用 loader 数据动态生成 SEO meta
前端·javascript·面试
lemon_yyds2 小时前
Element UI 实践踩坑- date-picker 组件 定制化type="daterange"
前端·css
.柒宇.2 小时前
Python 运维实战:psutil 监控系统资源 + paramiko 远程管理服务器
运维·服务器·python
念恒123062 小时前
进程概念(1)
linux·c语言
Alice-YUE2 小时前
ai对话平台中的functioncalling+mcp
前端·笔记·学习·语言模型
峥无2 小时前
Linux进程控制完全笔记(fork→exec→wait→Shell)
linux·笔记·unix