问题一:BGP 与 OSPF 的双点双向重分布如何配置?
一、拓扑
┌─────────── OSPF Area 0 ───────────┐
│ │
ASBR-1 (R1) ASBR-2 (R2)
│ │
└────────── BGP AS 100───────────────┘
二、风险
双点双向重分布的核心风险是 Tag 防回馈 + 优先级防次优。
其中Tag 解决路由引入的循环问题(路由回馈),调整 O_ASE 优先级解决 BGP 引入 OSPF 后优先级倒挂导致的次优路径问题。两者缺一不可。
三、方案
1、路由回馈方案:
使用四标签防回馈的方法,其本质是:每个引入方向产生一个唯一的 Tag,对端用这个 Tag 来拒绝反向引入,即每个引入方向 deny 的是对端生成的 tag。
R1 配置:
# OSPF 引入 BGP
route-policy OSPF_to_BGP deny node 5 // deny 在前!
if-match tag 400 // R1 不会把 R2 从 BGP 引入 OSPF 的路由再送回 BGP
route-policy OSPF_to_BGP permit node 10
apply tag 100 // OSPF 过来的路由打上 tag 100
# BGP 引入 OSPF
route-policy BGP_to_OSPF deny node 5 // deny 在前!
if-match tag 200 // R1 不会把 R2 从 OSPF 引入 BGP 的路由再送回 OSPF
route-policy BGP_to_OSPF permit node 10
apply tag 300 // BGP 过来的路由打上 tag 300
R2 配置:
# BGP → OSPF
route-policy BGP_to_OSPF deny node 5
if-match tag 100 // R2 不会把 R1 从 OSPF 引入 BGP 的路由再送回 OSPF
route-policy BGP_to_OSPF permit node 10
apply tag 400 // BGP 过来的路由打上 tag 400
# OSPF → BGP
route-policy OSPF_to_BGP deny node 5
if-match tag 300 // R2 不会把 R1 从 BGP 引入 OSPF 的路由再送回 BGP
route-policy OSPF_to_BGP permit node 10
apply tag 200 // OSPF 过来的路由打上 tag 200
2、优先级防次优
问题本质:低优先级协议向高优先级协议引入时的经典次优路径问题。
BGP(pref 255)引入 OSPF 后变成外部路由 O_ASE(pref 150),优先级反而更高了。
路由协议优先级(以华为示例):
直连 0
OSPF 10 ← 最高
静态 60
OSPF ASE 150 ← 引入后变成这种
BGP 255 ← 原始来源,优先级反而最低
具体场景推演
外部网络 10.1.1.0/24
│
┌───────────┴───────────┐
│ │
BGP Peer BGP Peer
│ │
┌──┴──┐ ┌──┴──┐
│ R1 │ │ R2 │
│ASBR │ │ASBR │
└──┬──┘ └──┬──┘
│ OSPF │
└─────────┬────────────┘
│
其他OSPF路由器
正常路径(理想):R2 通过自己的 BGP peer 直接访问 10.1.1.0/24。
实际发生(次优):流量凭空多走一跳,R2 绕到 R1 再出去。
四、解决方案
根本思路:让 BGP 原始路由的优先级 ≥ O_ASE。
# 方案一(推荐):把 O_ASE 优先级降到和 BGP 同级或更低
ospf 1
preference ase 255 # O_ASE 优先级和 BGP 拉平,不会抢 BGP 的路
# 方案二:引入时放大 cost,降低 O_ASE 吸引力
route-policy BGP_to_OSPF permit node 10
apply cost 10000
apply cost-type type-1
ospf 1
import-route bgp route-policy BGP_to_OSPF
问题二:如何让 RR 反射多条等价路由给客户端?
一、拓扑
┌───────────┐
│ 设备A │ ─── 路由 10.1.1.0/24, NEXT_HOP=A
│(Client) │
└─────┬─────┘
│ IBGP
▼
┌───────────┐ ┌───────────┐
│ RR │ ── 反射 ──→│ 设备C │
│ │ │(Client) │
└─────┬─────┘ └───────────┘
▲
│ IBGP
┌─────┴─────┐
│ 设备B │ ─── 路由 10.1.1.0/24, NEXT_HOP=B
│(Client) │
└───────────┘
RR 从 A 和 B 收到同一前缀 10.1.1.0/24 的两条 IBGP 路由,希望反射给 C 时, C 能收到两条等价路由做负载分担。
二、核心问题拆解
这个问题分两步:
| | |
| 第一步 | | maximum load-balancing ibgp |
| 第二步 | | peer advertise add-path |
两步缺一不可:RR 自己先得装两条,才有东西可发;光装了但不配 Add-Path,还是只发一条最优。
第一步:RR 上如何生成/安装等价路由?
BGP 默认行为:只装一条
BGP 选路算法在最后阶段有强制 IP地址 小者胜,所以即使两条路由 LOCAL_PREF、AS_PATH、MED、ORIGIN 全部相同,默认也只安装一条到路由表。
开启 BGP 负载分担让 RR 装多条
华为 VRP 需要显式开启 BGP 负载分担:
bgp 100
ipv4-family unicast
maximum load-balancing ibgp 2 # 安装最多 2 条 IBGP 等价路由
验证 RR 是否装了多条
display bgp routing-table 10.1.1.0
BGP local router ID : 3.3.3.3
Local AS number : 100
Paths: 2 available, 1 best ← Paths=2 说明装了两条
Network NextHop MED LocPrf PrefVal Path/Ogn
*>i 10.1.1.0/24 A的IP 0 100 0 i
* i B的IP 0 100 0 i
*>表示最佳路径,*表示等价备份路径。
第二步:使用Add-Path命令把两条都发给 C
RR 自己装了 2 条,但默认还是只反射最优那条(*>)给 C。需要 Add-Path 突破这个限制:
RR设备侧:
bgp 100
router-id 3.3.3.3
ipv4-family unicast
# 开启负载分担(先装多条)
maximum load-balancing ibgp 2
# 声明 Client
peer C的IP as-number 100
peer C的IP reflect-client
# 开启 Add-Path 双向协商能力
peer C的IP capability-advertise add-path both
# 反射策略:反射最优 2 条路径(即A和B的两条全部发给C)
peer C的IP advertise add-path best 2
C设备侧:
bgp 100
ipv4-family unicast
# 开启负载分担
maximum load-balancing ibgp 2
# 开启 Add-Path 接收能力
peer RR的IP as-number 100
peer RR的IP capability-advertise add-path both
第三步:完整验证
C设备 上查看路由表:
display bgp routing-table 10.1.1.0
Network NextHop MED LocPrf PrefVal Path/Ogn
*>i 10.1.1.0/24 A的IP 0 100 0 i
* i B的IP 0 100 0 i
两条等价路由,C 可以做 IBGP 负载分担。