ibgp multipath 在 MPLS 环 境 下 等 价 路 由 负 载 不 均 衡 问 题 的 排 障 目 录 硬 件 平 台 软 件 版 本 案 例 简 介 故 障 诊 断 步 骤 解 决 方 案 经 验 总 结 其 他 相 关 文 档 硬 件 平 台 Cisco 10 系 列 路 由 器 软 件 版 本 12.0S,12.0SY 案 例 简 介 上 图 是 运 营 商 中 常 见 的 一 种 网 络 拓 扑, 可 见 于 城 域 网 或 省 网 以 上 图 为 例,AS100 为 城 域 网,AS 为 骨 干 网 AS100 与 AS 通 过 两 条 路 径 互 连, 设 计 上 希 望 从 AS100 去 往 AS 的 出 口 流 量 在 两 个 出 口 上 实 现 负 载 均 担 常 见 的 一 种 做 法 是 在 AS100 内 部 的 ibgp 上 配 置 ibgp multipath, 这 样 对 每 个 AS 广 播 过 来 的 路 由,AS100 内 部 的 ibgp 路 由 器 对 它 有 两 个 路 径, 分 别 指 向 两 个 出 口 路 由 器 以 上 图 为 例,AS 向 AS100 广 播 一 个 100.100.1.0/24 的 路 由,R1 上 的 BGP 表 显 示 这 个 路 由 的 两 条 路 径 都 被 选 中, 它 们 的 下 一 跳 分 别 指 向 R5 和 R6 的 loopback 地 址
R1#show ip bgp 100.100.1.0 BGP routing table entry for 100.100.1.0/24, version 43 Paths: (2 available, best #1) Multipath: ibgp Flag: 0x820 Not advertised to any peer 5.5.5.5 (metric 20) from 5.5.5.5 (5.5.5.5) Origin IGP, metric 0, localpref 100, valid, internal, multipath, best 6.6.6.6 (metric 20) from 6.6.6.6 (6.6.6.6) Origin IGP, metric 0, localpref 100, valid, internal, multipath 关 于 路 由 协 议 配 置 方 面,AS100 内 部 跑 IS-IS, R1,R5 和 R6 之 间 跑 ibgp R1 和 R5 上 主 要 的 BGP 配 置 情 况 如 下,R6 的 配 置 与 R5 类 似 : R1: bgp router-id 1.1.1.1 neighbor 5.5.5.5 remote-as 100 neighbor 5.5.5.5 update-source Loopback0 R5: bgp router-id 5.5.5.5 neighbor 1.1.1.1 remote-as 100 neighbor 1.1.1.1 update-source Loopback0 neighbor 1.1.1.1 next-hop-self neighbor 6.6.6.6 next-hop-self neighbor 9.9.57.7 remote-as 在 大 部 分 情 况 下, 城 域 网 内 部 都 开 启 了 MPLS, 以 提 供 MPLS L2/L3 VPN,MPLS TE 等 服 务 对 于 MPLS, 通 常 只 有 IGP 路 由 及 各 个 路 由 器 的 loopback 地 址 参 与 MPLS 标 签 分 发 这 种 情 况 下, 有 时 候 会 发 现 R5,R6 上 出 口 流 量 并 不 特 别 均 衡 的 现 象 R5,R6 上 的 出 口 流 量 均 分 是 基 于 流 的 per destination 的 统 计 上 的 平 均, 在 城 域 或 省 域 流 量 的 情 况 下, 两 边 的 出 流 量 不 应 相 差 很 大, 但 问 题 是 在 上 述 部 署 中 有 时 会 出 现 两 边 出 流 量 相 差 很 大 的 情 况, 最 坏 时 甚 至 只 有 一 个 出 口 有 流 量, 而 另 一 个 出 口 几 乎 没 有 流 量 如 上 图 的 例 子, 只 有 R5 上 有 去 往 AS 的 流 量, 而 R6 上 去 往 AS 的 流 量 几 乎 为 零 故 障 诊 断 步 骤 通 过 对 端 口 流 量 速 率 和 MPLS forwarding 转 发 表 的 观 察, 通 过 R1 去 往 AS 的 流 量 只 经 由 以 下 两 种 路 径 : R1--->R3--->R5--->R7 和 R1--->R4--->R5--->R7 路 由 器 转 发 所 用 的 hash 算 法, 以 及 流 量 的 内 容 和 特 性 等 本 身 的 原 因 基 本 可 以 排 除 首 先 检 查 CEF 表 : R1#show ip cef 100.100.1.0 255.255.255.0 100.100.1.0/24, version 86, epoch 0, per-destination sharing 0 packets, 0 bytes tag information from 5.5.5.5/32, shared, all rewrites owned local tag: 43 via 6.6.6.6, 0 dependencies, recursive next hop 9.9.14.4, Ethernet2/0 via 6.6.6.6/32 (Default) valid adjacency (0x0172F288) tag rewrite with Et2/0, 9.9.14.4, tags imposed {18} via 5.5.5.5, 0 dependencies, recursive next hop 9.9.14.4, Ethernet2/0 via 5.5.5.5/32 (Default) valid adjacency (0x0172F288) tag rewrite with Et1/0, 9.9.13.3, tags imposed {19} Multilevel loadinfo missing some IGP paths 0 packets, 0 bytes switched through the prefix tmstats: external 0 packets, 0 bytes internal 0 packets, 0 bytes 虽 然 CEF 表 显 示 100.100.1.0/24 有 分 别 经 过 R5 loopback0 5.5.5.5 和 R6 loopback0 6.6.6.6 两 条 递 归 路 由, 但 是 在 12.0S 和 12.0SY 系 列 的 IOS 中, 对 于 这 种 指 向 多 个 bgp nexthop 的 BGP 路 由, 如 果 只 是 CEF 转 发, 则 CEF 会 选 择 所 有 的 BGP nexthop 路 径, 然 后 为 每 个 BGP nexthop 选 取 一 个 IGP 路 径 ( 即 使 每 个 BGP nexthop 也 有 多 个 IGP 等 价 路 径 )
MPLS 与 CEF 不 同,MPLS forwarding 只 会 选 择 一 个 BGP nexthop, 然 后 在 这 个 nexthop 的 所 有 LSP 上 做 负 载 分 担, 这 也 是 上 面 "tag information from 5.5.5.5/32,shared" 所 表 示 的, 它 只 选 了 R5 5.5.5.5 由 于 AS100 内 部 的 所 有 路 由 器 都 开 启 了 MPLS, 通 过 以 下 的 MPLS forwarding 表 可 以 看 到, 去 往 100.100.1.0/24 的 流 量 会 分 别 从 E2/0 发 送 并 压 上 标 签 18 和 从 E1/0 发 送 并 压 上 标 签 19, 但 这 两 种 情 况 都 是 属 于 去 往 R5 loopback0 5.5.5.5 的 LSP 的 R1#show mpls forwarding 100.100.1.0 24 detail 43 18 100.100.1.0/24 0 Et2/0 9.9.14.4 MAC/Encaps=14/18, MRU=1500, Tag Stack{18} AABBCC00CC00AABBCC00C9028847 00010 Per-destination load-sharing, slots: 0 2 4 6 8 10 12 14 19 100.100.1.0/24 0 Et1/0 9.9.13.3 MAC/Encaps=14/18, MRU=1500, Tag Stack{19} AABBCC00CB00AABBCC00C9018847 00013000 R1#show mpls forwarding-table 41 Pop tag 3.3.3.3/32 0 Et1/0 9.9.13.3 42 Pop tag 4.4.4.4/32 0 Et2/0 9.9.14.4 43 18 5.5.5.5/32 0 Et2/0 9.9.14.4 19 5.5.5.5/32 0 Et1/0 9.9.13.3 44 19 6.6.6.6/32 0 Et2/0 9.9.14.4 20 6.6.6.6/32 0 Et1/0 9.9.13.3 解 决 方 案 由 于 Cisco 10 上 多 层 递 归 路 由 的 等 价 路 径 负 载 分 担 功 能 目 前 只 在 IOS XR 上 支 持, 而 IOS 上 并 不 支 持, 为 了 满 足 去 往 AS 的 流 量 分 担 于 R5 和 R6 出 口 的 需 求, 可 以 考 虑 在 AS100 内 部 的 BGP 路 由 器 上 启 动 BGP send label 功 能, 让 BGP 为 BGP 路 由 分 配 标 签, 这 样 MPLS forwarding 会 用 上 所 有 的 BGP nexthop 的 LSP 相 关 配 置 和 验 证 过 程 如 下 : R1,R5 和 R6 上 都 启 用 bgp neighbor send-label 以 下 仅 列 出 R1 和 R5 上 的 相 关 配 置,R6 与 R5 类 似 R1: bgp router-id 1.1.1.1 neighbor 5.5.5.5 remote-as 100 neighbor 5.5.5.5 update-source Loopback0 neighbor 5.5.5.5 send-label neighbor 6.6.6.6 send-label R5: bgp router-id 5.5.5.5 neighbor 1.1.1.1 remote-as 100 neighbor 1.1.1.1 update-source Loopback0 neighbor 1.1.1.1 next-hop-self neighbor 1.1.1.1 send-label neighbor 6.6.6.6 next-hop-self neighbor 9.9.57.7 remote-as 然 后 可 以 看 到 R5 和 R6 都 通 过 BGP 为 100.100.1.0/24 分 配 了 标 签 : R1#show ip bgp 100.100.1.0 BGP routing table entry for 100.100.1.0/24, version 31 Paths: (2 available, best #2) Multipath: ibgp Not advertised to any peer 6.6.6.6 (metric 20) from 6.6.6.6 (6.6.6.6)
Origin IGP, metric 0, localpref 100, valid, internal, multipath mpls labels in/out BGP-route(from LDP)/31 5.5.5.5 (metric 20) from 5.5.5.5 (5.5.5.5) Origin IGP, metric 0, localpref 100, valid, internal, multipath, best mpls labels in/out BGP-route(from LDP)/18 检 查 CEF 表 可 以 发 现 类 似 "tag information from 5.5.5.5/32, shared" 的 这 样 一 行 没 有 了,CEF 选 择 两 个 BGP nexthop 的 LSP: R1#show ip cef 100.100.1.0 255.255.255.0 100.100.1.0/24, version 95, epoch 0, per-destination sharing 0 packets, 0 bytes tag information set, all rewrites owned local tag: BGP route head via 5.5.5.5, 0 dependencies, recursive next hop 9.9.13.3, Ethernet1/0 via 5.5.5.5/32 (Default) valid adjacency tag rewrite with Recursive rewrite via 5.5.5.5/32, tags imposed {18} via 6.6.6.6, 0 dependencies, recursive next hop 9.9.14.4, Ethernet2/0 via 6.6.6.6/32 (Default) valid adjacency tag rewrite with Recursive rewrite via 6.6.6.6/32, tags imposed {31} 0 packets, 0 bytes switched through the prefix tmstats: external 0 packets, 0 bytes internal 0 packets, 0 bytes 再 从 MPLS forwarding 表 也 可 以 看 到 100.100.1.0/24 有 经 E2/0 和 E1/0 去 往 5.5.5.5 以 及 经 E2/0 和 E1/0 去 往 6.6.6.6 的 共 四 个 LSP 路 径, 在 R1 上 接 收 多 条 BGP 路 由 的 情 况 下, 通 过 Pagent 流 量 发 生 器 向 R1 注 入 模 拟 的 流 量, 可 以 观 察 到 流 量 均 分 在 下 述 的 路 径 上 : R1--->R3--->R5 R1--->R3--->R6 R1--->R4--->R5 R1--->R4--->R6 R1#show mpls for 100.100.1.0 24 detail None Recursive 100.100.1.0/24 0 Recursive rewrite via 5.5.5.5/32, Tag Stack{18} 00010 Per-destination load-sharing, slots: 0 2 4 6 8 10 12 14 Recursive 100.100.1.0/24 0 Recursive rewrite via 6.6.6.6/32, Tag Stack{31} 0001F000 Per-destination load-sharing, slots: 1 3 5 7 9 11 13 15 R1#show mpls forwarding-table 41 Pop tag 3.3.3.3/32 0 Et1/0 9.9.13.3 42 Pop tag 4.4.4.4/32 0 Et2/0 9.9.14.4 43 18 5.5.5.5/32 0 Et2/0 9.9.14.4 19 5.5.5.5/32 0 Et1/0 9.9.13.3 44 19 6.6.6.6/32 0 Et2/0 9.9.14.4 20 6.6.6.6/32 0 Et1/0 9.9.13.3 经 验 总 结 在 IOS 12.0 系 列 上, 对 于 BGP multipath, 在 没 有 启 用 MPLS 时, 路 由 器 会 在 所 有 BGP nexthop 上 做 负 载 分 担, 但 对 每 个 BGP nexthop 只 会 选 取 一 个 IGP 路 径 当 在 全 网 启 用 了 MPLS 之 后, 路 由 器 只 会 选 取 一 个 nexthop 做 转 发 以 上 图 为 例, 如 果 R1 分 别 只 直 连 到 R5 和 R6, 对 于 有 多 个 nexthop 的 BGP 路 由, 出 流 量 可 能 只 会 走 一 边, 比 如 只 走 R1---R5 而 不 走 R1---R6 Cisco 早 已 注 意 到 了 这 种 情 况, 从 12.0(33)S02 开 始, 如 果 路 由 器 上 同 时 配 置 了 ibgp multipath 和 MPLS, 则 IOS 会 给 出 如 下 提 示, 建 议 启 用 BGP send-label: %TFIB-4-UNSUPPORTED_CONFIG: WARNING: Using ibgp multipath feature with LDP or TE based LSPs towards the BGP nexthop, paths taken by forwarding may not be as expected. Please consider configuring BGP labeling (RFC 3107) for proper forwarding behavior 如 果 遵 照 IOS 给 出 的 建 议, 在 ibgp multipath 加 MPLS 的 环 境 中 启 用 BGP send-label, 则 可 以 实 现 BGP 路 由 在 所 有 ibgp nexthop 的 所 有
LSP 上 的 负 载 分 担 其 他 相 关 文 档 ibgp Multipath Load Sharing Load Sharing MPLS VPN Traffic RFC3107 版 权 所 有 1992-2015 思 科 系 统 文 件 创 建 日 期 : 2011 年 3 月 23 日 http://www.cisco.com/cisco/web/support/cn/110/1104/1104528_ibgpmultipathmplsloadbalancing.html