最近把BGP实验从头到尾又刷了一遍,从AS之间的邻居建立,到路由聚合、路由反射器,再到容器网络里Calico的BGP会话排查,一圈下来最大的感受是:BGP这个协议本身不难,难的是把每个环节的“为什么”想清楚。很多人把邻居配出来、路由也通了,就觉得会了,但一旦遇到聚合路由黑洞、RR反射不出来、peer状态始终为0这种问题,马上卡住。这篇文章把我这次实验的完整过程、踩过的坑、以及排查思路写下来,给准备做BGP实验或者正在被BGP折腾的人一个参照。
实验环境我用的是华为eNSP模拟器,设备选AR2220,系统版本是VRP8。拓扑里覆盖了EBGP、IBGP、network宣告、聚合路由、BGP路由反射器这几个最常见的考点。不夸张地说,把这张拓扑吃透,BGP的日常配置和排错基本就过关了。
1. 实验拓扑与地址规划:先把环境搭明白
做BGP实验最忌讳的事情,不是命令记不住,而是拓扑和地址规划一塌糊涂。很多人在实验里配来配去发现路由不通,最后查了半天,发现是接口IP敲错了或者对端AS号抄错了。所以这一节先把环境彻底交代清楚。
1.1 实验拓扑与设备角色划分
这次的拓扑一共六台路由器,跨三个AS。
code复制AS 100 AS 200 AS 300
R1 --------------- R2 ---------------- R3 ---------------- R4
| | \
| R5 R6
- R1属于AS 100,模拟客户侧设备,后面挂三个业务网段。
- R2和R3都属于AS 200,R2是AS 200的入口边界,R3是AS 200的出口边界,两者之间跑IBGP。
- R4、R5、R6都属于AS 300,其中R4是IBGP核心节点,R5和R6是它的客户机,用于做路由反射器实验。
R1和R2之间是EBGP,R3和R4之间是EBGP,R2和R3之间是IBGP,R4与R5、R4与R6之间也是IBGP。这样设计的用意很明显:EBGP跨AS建立,IBGP在AS内部建立,两种关键会话类型都能练到;同时R2和R3这一对IBGP还能顺便验证路由聚合,R4、R5、R6这一组能验证反射器。
R2和R3之间、R4和R5/R6之间的内部互通,我用OSPF做底层IGP。原因是IBGP会话建议用Loopback接口建立,而Loopback接口之间的可达性靠IGP来保证。这个选择不是强迫症,是为了模拟真实网络里的稳定性需求,后面细说。
1.2 地址规划背后的小心思
地址规划这里有一点经验想分享:互联地址尽量用10.0.x.y/24这种一眼能看出对端的格式,Loopback地址则直接和路由器编号挂钩。别看只是命名习惯,排错的时候能省大量时间。
| 设备 | AS号 | Loopback0 | 接口与地址 | 对端 |
|------
