华为H3C实战 | 第12章 BGP 协议配置详解
📚 本系列共 43 篇(第 12 / 43 篇) · 第二卷 路由与广域网篇 —— 让数据找到路
← 上一篇:第 11 章 OSPF 协议配置详解 下一篇:第 13 章 IS-IS 协议配置详解 →
本章导读:OSPF 管的是"村里怎么走",BGP 管的是"邻村之间怎么交换地址簿"。记住一句话:BGP 是策略协议,不是算法协议——它通了只是开始,选路对了才算交付。本章讲 EBGP 对接运营商、IBGP + RR,以及两家在策略调整上的写法差异。
本章结构:
- 12.1 功能原理与业务场景 —— “几个村子签快递协议"的比喻、AS 路径防环、TCP 三次握手 + Open/Update/Keepalive 的状态机、IGP 与 EGP 的分工
- 12.2 华为设备配置详解 —— 三个模板:EBGP 对接运营商、IBGP 全互联 + 路由反射器(RR)、联邦骨架;
connect-interface为什么必须配、next-hop-local在解决什么、import/export 的语义 - 12.3 H3C 设备配置详解 —— 先理清视图结构,再给 EBGP 与 RR 两套模板,最后是路由策略调整、四个关键差异,以及本章命令的官方核实结果
- 12.4 命令对照表 —— 两家并排
- 12.5 配置验证 —— 五层验证法:邻居 → 能力 → 路由 → 选路 → 策略,第一眼看
display bgp peer是不是全部 Established - 12.6 排错与故障树 —— 按状态机走:Idle(单向配置/路由不可达)、Active(179 端口被拦)、OpenSent 卡住(AS 号或 Router-ID)
- 12.7 新手踩坑 —— AS 号填错、EBGP 跨跳忘了
ebgp-max-hop - 12.8 本章小结 —— 要点清单 + 自测题
重点提示:邻居起不来,先查 TCP 再查 BGP——Active 表示 TCP 都打不通(链路/路由/179 端口),这是 12.6 的分水岭。邻居 Established 但路由不对,直接跳 12.5 的"路由"和"选路"两层,别在邻居上耗时间。AS 号填错永远是第一大原因。
关联章节:前置的路由基础见第 10 章、IGP 怎么把 Loopback 宣告出去见第 11 章;BGP 的属性调整、前缀列表与 route-policy 见第 17 章;出口 NAT 与 BGP 的配合见第 14 章。
12.1 功能原理与业务场景
12.1.1 这功能是干嘛的(通俗版)
前面几章讲的 OSPF、IS-IS 解决的都是「一个村子内部的路怎么走」。可互联网是几万个村子连在一起,各有各的规矩、各算各的路,要串门就得有人告诉邻村「我们村有哪些地址、从我家大门进来怎么走」。
边界网关协议(BGP,Border Gateway Protocol)[16] 干的就是这件事:它是两个村子之间签的快递协议,只负责把自家的地址簿发给邻村,并声明「这些地址交给我、我负责送过去」;至于村子内部从家门到门口这一段怎么走,BGP 不管,交给村里的 OSPF 去算。
这个比喻还能剥三层:
- 地址簿就是路由表:写着「目的地网段 + 从哪个门出去 + 路上经过几个村」。邻村抄走后不能把它原样抄回去——这就是靠「经过的村」(AS 路径)防环。
- 签约要有身份:邻居间先亮出自己属于哪个村(自治系统号,AS 号),对不上就不签——「AS 号填错」永远是邻居建不起来的第一大原因。
- 签约像打官司:先接通电话(TCP 三次握手),再互验身份(Open),再点清清单(Update),最后双方点头(Keepalive);中途一句话没对上就谈崩。
记住一句话:BGP 是「策略协议」,不是「算法协议」。OSPF 靠公式算路,BGP 靠一串可被人改写的规则选路,几乎每条路由都能被改掉、拦掉、偏袒掉——所以运维圈说「BGP 通了只是开始,选路对了才算交付」。
12.1.2 在网络里怎么落地(设计视角)
先分清楚 IGP 和 EGP
路由协议按作用范围分两类:跑在自治系统内部的是内部网关协议(IGP),跑在自治系统之间的是外部网关协议(EGP)。IGP 负责「把村里的路算对」,EGP 负责「把各村的地址簿交换好」。
自治系统(AS,Autonomous System) 是被同一机构管辖、对外采用统一路由策略的网络,用 AS 号标识:传统 2 字节号范围 165535,不够用后扩展出 4 字节号。公用号由注册机构分配,私有号范围 **6451265535**,用于内部实验与私有对接——本教材示例一律用这一段。
| 对比项 | IGP(OSPF / IS-IS) | EGP(BGP) |
|---|---|---|
| 作用范围 | 一个 AS 内部 | AS 之间(以及 AS 内部传递外部路由) |
| 目标 | 算出一条最优路径 | 按策略交换与筛选路由 |
| 规模 | 几十到几百台设备 | 全球几十万条路由 |
| 收敛方式 | 拓扑变化即重算 | 增量更新(Update) |
| 选路依据 | 最小 cost | 一组可被策略修改的属性 |
| 典型协议 | OSPF、IS-IS、RIP | BGP-4 |
为什么用 TCP
IGP 大多用组播互相发现,BGP 选的却是传输控制协议(TCP),端口 179,理由有三:
- 邻居可能隔着几十跳。要和几千公里外的运营商对等体建邻居,中间的链路替它扛不起「可靠传输 + 会话保持」,只能让 TCP 自己做。
- 报文大且需要可靠。一条路由带几十个属性,Update 报文还要分块传输,直接用 TCP 的重传与流控省掉了自研可靠传输的工作量。
- 断了之后有全量重传的兜底,且 TCP 之上可以再挂 MD5 摘要(BGP 的
password)做认证。
代价也来自 TCP:它带来了 TTL 限制与「路由依赖路由」的鸡生蛋问题。建会话本身需要到对端地址的路由,若这个地址又要靠 BGP 学回来,就永远建不起来——这正是「next-hop 要用 IGP 保证可达」的根因。
本章拓扑
本章所有模板都基于下面这张图:左侧是公司网络(AS 65001),右侧是运营商(AS 65002,用私有号模拟),中间两条对外链路:
AS 65002(运营商,模拟)
10.200.200.0/24 = 110.1.0.0/16 的下一跳
+---------------------------+
| ISP-R(MSR3610-X1) |
| Loopback0 10.200.200.2 |
+---------------------------+
| 172.16.12.0/30 | 172.16.13.0/30
| .1 (ISP 侧) | .1 (ISP 侧)
+-----------+ +-----------+
| |
172.16.11.0/30 172.16.14.0/30
| |
[HUAWEI-Edge1 AR6140-16G4XG] [HUAWEI-Edge2 AR6140-16G4XG]
AS 65001 AS 65001
GE0/0/0 172.16.12.2(连 ISP) GE0/0/0 172.16.13.2(连 ISP)
GE0/0/1 172.16.11.1(连 Core1) GE0/0/1 172.16.14.1(连 Core2)
Loopback0 10.200.1.254 Loopback0 10.200.2.254
| |
+-----> 172.16.11.0/30 / 172.16.14.0/30 <------------+
| |
[HUAWEI-Core1 S5735-L24T4S-A1] [HUAWEI-Core2 S5735-L24T4S-A1]
Loopback0 10.200.1.1 Loopback0 10.200.2.1
Vlanif10 192.168.10.1 Vlanif20 192.168.20.1
(办公网段) (服务器网段)
\_____ 10.200.1.0/30 _____/
理解这张图的三个要点:
第一,Edge1/Edge2 是「门口的快递员」:一只脚在 AS 65001、一只脚在 AS 65002,对外跑 EBGP、对内跑 IBGP,把内网网段告诉运营商。
第二,Core1/Core2 只跑 IBGP 和 OSPF:不直连运营商(EBGP 缺省要求直连),用 Loopback 与 Edge 建 IBGP,由 OSPF 保证对方 Loopback 可达。
第三,同一 AS 内的 IBGP 也必须成对建。规则是:从 IBGP 学来的路由不会再传给另一个 IBGP 邻居(防环)。所以 Core2 想拿到 Edge1 学来的运营商路由,要么与 Core1 全互联,要么上路由反射器。本章采用 RR 方式:Edge1 当反射器,Core1、Core2 当客户机。
邻居关系一览
| 设备 | 在本 AS 内的角色 | 对端 | 对端地址 | 类型 |
|---|---|---|---|---|
| Edge1 | 路由器反射器(RR) | ISP-R / Core1 / Core2 | 172.16.12.1 / 10.200.1.1 / 10.200.2.1 | 1 条 EBGP + 2 条 IBGP |
| Edge2 | 客户机 | ISP-R / Edge1 | 172.16.13.1 / 10.200.1.254 | 1 条 EBGP + 1 条 IBGP |
| Core1 / Core2 | 客户机 | Edge1 | 10.200.1.254 | 各 1 条 IBGP(Loopback 建) |
把这六条全建通,剩下的就是宣告、策略、选路。
EBGP 与 IBGP:一字之差,规矩全变
这是初学者最容易糊涂的地方。同样是 BGP,一旦对端在本 AS 内,规则立刻换了一副面孔:
| 对比项 | EBGP(对等体在别 AS) | IBGP(对等体在本 AS) |
|---|---|---|
| AS 号 | 对端 AS 号 ≠ 本机 AS 号 | 对端 AS 号 = 本机 AS 号 |
| 起包 TTL | 缺省 1,必须直连 | 缺省 255,可跨多跳 |
| 报文 next-hop | 改成自己的接口地址 | 保持不变 |
| 是否需要 IGP 可达 | 不需要(直连即可) | 必须要(这是 IBGP 最大的坑) |
| 防环靠什么 | AS 路径(AS_PATH) | 水平分割(学自 IBGP 不传 IBGP) |
| 典型用途 | 对接运营商、跨 AS 组网 | 把 EBGP 路由传遍本 AS |
逐条解释这张表:
AS 号是身份:本机 bgp 65001、peer 172.16.12.1 as-number 65002,两边声明一致才握手成功;不一致就永远卡在 Idle 或 Active。
TTL 是防旁路的闸:EBGP 缺省 TTL=1,一条 BGP 报文最多走一跳,防止 AS 间会话被第三方设备绕进去;IBGP 缺省 255,因为对端可能隔着十几跳。
next-hop 决定这条路由能不能用:EBGP 发路由时把 next-hop 改成自己的接口地址;IBGP 发路由时保持不变,于是运营商地址一路传进 AS 内部。这就是「EBGP 路由进入 AS 后,AS 内设备必须能直达那个外部地址」的由来——否则 BGP 表里看得到、主路由表里进不去。
防环靠不同的东西:EBGP 靠 AS 路径,每经过一个 AS 就在头部加自己的 AS 号,发现自己的号已在路径里就丢弃;IBGP 靠水平分割——从 IBGP 学来的路由不发给任何 IBGP 邻居。
解决水平分割的两种办法:一是 Full Mesh,N 台设备两两建会话,共 N×(N-1)/2 条,10 台要 45 条、50 台要 1225 条,不可维护;二是 路由反射器(RR),客户机只与 RR 建邻居,由 RR 替它们转发。本章采用 RR。
数据的实际流向:以办公网 192.168.10.0/24 访问运营商侧 110.1.0.0/16(模拟地址)为例:
业务流(数据面)
PC(192.168.10.x) --> Core1 --> Edge1 --> ISP-R --> 110.1.0.0/16
^ ^
| | 两段路由,缺一不可
控制面:Core1 路由表 Edge1 路由表
192.168.10.0/24 直连 192.168.10.0/24 由 IBGP 学到(next-hop 指向 Core1)
110.1.0.0/16 BGP 学到 110.1.0.0/16 由 EBGP 学到(next-hop 172.16.12.1)
两个方向都要有路由:Core1 靠 OSPF 知道办公网段,靠 **IBGP(从 Edge1 学)**知道运营商网段;ISP-R 靠 EBGP(从 Edge1 学)知道我们的地址。「全网可达」由两种协议拼出来:AS 内的地址与会话源地址由 OSPF/IS-IS 保证,AS 之间的地址靠 BGP 交换,缺一边数据都过不去。
报文与状态机。BGP 只有四种主要报文:
| 报文 | 作用 | 类比 |
|---|---|---|
| Open | 问候并交换能力:AS 号、Router-ID、Hold Time、能力参数 | 交换名片、报出身份 |
| Keepalive | 心跳,缺省 60 秒一次 | 打个电话确认在线 |
| Update | 携带路由的属性;撤销路由也用 Update | 寄地址簿的新页或撤回页 |
| Notification | 报错并关闭会话 | 对方说「谈不下去了」,挂电话 |
会话建立走一个六状态机,每个状态的检测点都不同:
- Idle:还没开始,或在等重启计时器。
- Connect:已发出 TCP SYN,等待对端回应。
- Active:TCP 连接失败、正在反复重连。这是最误导人的状态名——不是「活跃」,而是「我打不通」。卡在 Active,八成是地址不可达、179 被挡、
connect-interface配错或ebgp-max-hop没配。 - OpenSent:TCP 已建立,已发 Open,等对方的 Open。
- OpenConfirm:双方 Open 都收到,等对方的 Keepalive。
- Established:开始交换 Update,只有到了这里邻居才算真的建起来。
排错口诀:Idle/Active 查 TCP;OpenSent 查 AS 号、Router-ID、认证、版本;OpenConfirm 查 Keepalive 与 Hold Time;Established 但没路由查 network、next-hop、策略。
network 宣告:只宣告「路由表里真实存在且掩码精确一致」的路由
BGP 的 network 与 OSPF 的 network 完全不同:OSPF 用反掩码把接口 IP 纳入进程,BGP 的 network x.x.x.x mask 255.255.255.0 则是去路由表里找有没有这条精确路由,找到才发。
两条硬性条件:路由表里必须已有这条网段(直连、静态、OSPF 都行),且掩码必须完全一致——/24 写成 /25 或 /16 都发不出。所以「宣告了但邻居收不到」,九成不是 BGP 的错,而是本机路由表里没有这条精确路由。
另一条路是 import-route(重发布),主动去直连、静态、OSPF 等路由源里取路由,同样生成一条本地始发路由。风险有二:搬得太多(一次 import-route direct 可能把互联段、管理段全送给运营商看),源路由消失后不一定自动撤销(静态路由删了,BGP 里还可能挂着)。
选路原则
BGP 选路按固定顺序逐条比较,先分出胜负就选它、后面不看。华为文档有十余条规则,本章压成最常用的 9 条:
| 顺序 | 比较项 | 缺省值 | 比较方向 | 常见用途 |
|---|---|---|---|---|
| 1 | 协议首选值(Weight,华为私有) | 0 | 大者优 | 本机选路,不出 AS |
| 2 | 本地优先级(Local_Pref) | 100 | 大者优 | 本 AS 全体选出口(多数场景的主力) |
| 3 | 本地始发(network / aggregate / import-route) | — | 本地始发优先 | 本机产生的最优先 |
| 4 | AS 路径长度 | 实际长度 | 短者优 | 绕路多路径的自然淘汰 |
| 5 | 起源(Origin) | IGP 来源记为 I | I < E < ? | 由 network 产生的优先 |
| 6 | MED(缺省 0) | 0 | 小者优 | 相邻 AS 之间「你选哪条进来」 |
| 7 | EBGP 优于 IBGP | — | EBGP 优先 | 从外部学来的优先于内部反射的 |
| 8 | 到下一跳的 IGP cost | 实际 cost | 小者优 | 本 AS 内离出口最近的设备胜出 |
| 9 | Router-ID 小者优先 | — | 小者优 | 最后的兜底,通常用于等同路由 |
几条细节必须说透:
Weight 是华为私有属性,只在本机生效、不传邻居,适合在双出口设备上给主出口加权。
Local_Pref 只在 IBGP 之间传递,发给 EBGP 邻居时会被剥掉,所以它最有效的用法是从 RR 或边界设备「往内打」。
本地始发优先于 AS 路径:自己 network / import-route 产生的路由,哪怕 AS 路径更长也优先——「我明明配了更好的路径,怎么还走我自己宣告的」,就是这一条在起作用。
MED 只在相邻 AS 间比较、小者优,多数 ISP 不认客户发来的 MED,只能当参考。EBGP 优于 IBGP 体现「外部视野优先」。到下一跳的 IGP cost 最容易被忽略:一旦比到这一条,谁离出口近谁胜,于是不同设备可能选出不同出口。
路由策略:BGP 的「闸门」
BGP 与 IGP 最大的区别是策略优先:每条路由的进和出都能被单独定义。常用工具五类:
| 工具 | 作用对象 | 典型场景 | 方向 |
|---|---|---|---|
peer ... filter-policy import / ip-prefix |
按目的网段过滤 | 只收运营商的特定网段 | 收 / 发 |
peer ... as-path-filter |
按 AS 路径正则匹配 | 拦截从某家 ISP 绕过来的路由 | 收 / 发 |
peer ... route-policy import/export |
综合匹配 + 改属性 | 改 Local_Pref / MED / 打标记 | 收 / 发 |
apply community + peer ... advertise-community |
打团体属性 | 跨设备批量筛选路由 | 传出 |
peer ... route-limit / discard-extra |
数量上限 | 防邻居发来 100 万条把内存打爆 | 收 |
团体属性(Community) 是可以自定义的 32 位标签,用「AS 号:数值」写在路由上随路由传递,接收方能用 route-policy 匹配、修改、过滤它,相当于「一次打标、处处生效」。但它缺省不会传出门,必须在邻居上配 peer ... advertise-community——这是踩坑榜前列的错误。
路由反射器(RR) 的规则只有四条:从非客户机学来的路由反射给所有客户机;从客户机学来的路由反射给除来源外的所有客户机与非客户机;反射时不改变 next-hop 等属性。
RR 与客户机构成一个簇(Cluster),用 cluster-id 标识(缺省取 RR 的 Router-ID);多台 RR 冗余时同簇的 cluster-id 推荐配成一致。
联邦(Confederation) 是另一种拆解全互联的办法:把大 AS 拆成若干子 AS,子 AS 内跑 IBGP、子 AS 间跑「联邦 EBGP」。对外仍表现为一个 AS,代价是配置复杂。本章只给骨架,实战中 RR 更常用。
适用版本:华为 VRP V200R019 及以上(AR6000 系列);H3C Comware V7(R2610 及以上)。
12.2 华为设备配置详解
12.2.1 命令行基础速览(本章会用到的那几条)
先把本章反复出现的华为命令按「建对等体 / 宣告 / 调优 / 查看」分四类列出来,混个脸熟:
# 进入 BGP 进程视图,参数是本 AS 号(私有 AS 号范围 64512~65535)
bgp 65001
# 配置 Router-ID(缺省取最大的 Loopback 地址)
router-id 10.200.1.254
# 建 EBGP 对等体:对端在别 AS
peer 172.16.12.1 as-number 65002
# 建 IBGP 对等体:对端在本 AS,必须用 Loopback 做源
peer 10.200.1.1 as-number 65001
peer 10.200.1.1 connect-interface LoopBack0
# EBGP 跨设备对接(非物理直连)时放宽 TTL
peer 172.16.12.1 ebgp-max-hop 2
# 给对等体加描述,运维排错时救命
peer 172.16.12.1 description To-ISP-R
接下来是宣告与调优类命令:
# 进入 IPv4 单播地址族,宣告与策略都在这里配
bgp 65001
ipv4-family unicast
# 宣告网段:要求本机路由表里有精确存在的同掩码路由
network 192.168.10.0 255.255.255.0
# 从 IBGP 邻居学来的路由,发出时把下一跳改成本机
peer 10.200.1.1 next-hop-local
# 团体属性必须显式允许传出,否则邻居看不到
peer 10.200.1.1 advertise-community
quit
# 以下三条在 BGP 进程视图里配
# 把本机设为反射器、把对端设为客户机
peer 10.200.1.1 reflect-client
# TCP MD5 认证,两端必须完全一致
peer 10.200.1.1 password cipher Bgp@2024
# 重发布直连路由(有风险,务必配 route-policy 限制范围)
import-route direct
最后是查看类命令,排错时这是你的「听诊器」:
# 看邻居状态与收发的路由数量
display bgp peer
# 看某个邻居的详细参数(连接源、TTL、Keepalive、能力协商)
display bgp peer verbose
# 看 BGP 路由表与指定邻居的收发路由
display bgp routing-table
display bgp routing-table peer 172.16.12.1 advertised-routes
display bgp routing-table peer 172.16.12.1 received-routes
视图层级先记住,敲错视图是新手最普遍的报错来源:
| 视图 | 提示符 | 能配什么 |
|---|---|---|
| 系统视图 | [HUAWEI] |
ip ip-prefix、route-policy、ip as-path-filter |
| BGP 进程视图 | [HUAWEI-bgp] |
peer as-number、connect-interface、password、reflect-client |
| BGP IPv4 地址族视图 | [HUAWEI-bgp-af-ipv4] |
network、import-route、next-hop-local、advertise-community、filter-policy |
| 路由策略视图 | [HUAWEI-route-policy] |
if-match、apply |
特别注意:next-hop-local、advertise-community、filter-policy 都在 ipv4-family unicast 视图下,而 as-number、connect-interface、password、reflect-client 在 BGP 进程视图下。跨厂商互查配置时最容易在这里出错。
再看几个关键参数的缺省值,配之前对照一下:
| 参数 | 华为缺省值 | 说明 |
|---|---|---|
| BGP 版本 | 4 | 与 H3C 缺省一致 |
| Hold Time | 180 秒 | Keepalive 缺省 60 秒(Hold 的 1/3) |
| EBGP 起包 TTL | 1 | IBGP 为 255 |
| Local_Pref | 100 | 只在 IBGP 内传递 |
| Weight | 0 | 华为私有,本机有效 |
| MED | 0 | 只在相邻 AS 间比较 |
12.2.2 完整配置模板
模板一:EBGP 对接运营商(Edge1,AR6140-16G4XG)
先配 Edge1 的底层:两个物理口、一个 Loopback,再用 OSPF 把内网互联段与 Loopback 宣告出去,保证 IBGP 的源地址互相可达。
# ===== Edge1 第一阶段:接口地址 + OSPF 保证 Loopback 可达 =====
system-view
sysname HUAWEI-Edge1
# Loopback 作为 IBGP 会话的源地址与 Router-ID 的来源
interface LoopBack0
ip address 10.200.1.254 255.255.255.255
quit
# GigabitEthernet0/0/0 接运营商(EBGP),GigabitEthernet0/0/1 接内网核心
interface GigabitEthernet0/0/0
ip address 172.16.12.2 255.255.255.252
quit
interface GigabitEthernet0/0/1
ip address 172.16.11.1 255.255.255.252
quit
# OSPF 只负责内网:Loopback 与互联段
ospf 1 router-id 10.200.1.254
bandwidth-reference 1000
area 0
network 10.200.1.254 0.0.0.0
network 172.16.11.0 0.0.0.3
quit
# 把一条指向运营商的默认路由引入 OSPF,让内网知道出口在哪
default-route-advertise always
quit
quit
接着配置 BGP 进程本身,这是本章的核心:
# ===== Edge1 第二阶段:BGP 进程、EBGP 对端、IBGP 对端(RR)=====
bgp 65001
# 手工指定 Router-ID:本机 Loopback
router-id 10.200.1.254
# 与运营商建 EBGP:对端是 65002,物理直连,TTL 缺省 1
peer 172.16.12.1 as-number 65002
peer 172.16.12.1 description To-ISP-R
# 与 Core1 建 IBGP,源地址用 Loopback
peer 10.200.1.1 as-number 65001
peer 10.200.1.1 connect-interface LoopBack0
peer 10.200.1.1 description To-Core1
# 与 Core2 建 IBGP,同样用 Loopback
peer 10.200.2.1 as-number 65001
peer 10.200.2.1 connect-interface LoopBack0
peer 10.200.2.1 description To-Core2
# 进入 IPv4 单播地址族,宣告与策略都在这里配
ipv4-family unicast
# 把办公网段宣告给运营商,前提是本机路由表有 192.168.10.0/24
network 192.168.10.0 255.255.255.0
network 192.168.20.0 255.255.255.0
# EBGP 邻居的进出策略也挂在地址族视图下:只收 110.1.0.0/16 段,只发公司网段
peer 172.16.12.1 filter-policy ip-prefix PREFIX_FROM_ISP import
peer 172.16.12.1 route-policy RP_TO_ISP export
quit
quit
注意这里的 network 有个前提:本机路由表里必须有这两条精确路由。模板一中 Edge1 的 OSPF 只宣告了 Loopback 与互联段,所以它没有这两条——宣告了也不发出去,这是很多人卡一整天的地方。修正办法是让 OSPF 宣告这些网段,或在 Edge1 上 import-route ospf 1;下一段给出带策略限制的正确写法。
继续补齐 Edge1 的完整宣告、下一跳处理与 IBGP 防环:
# ===== Edge1 第三阶段:宣告、下一跳与反射器 =====
bgp 65001
ipv4-family unicast
# 把 OSPF 学来的内网路由重发布进 BGP,但要限制范围
# 不做限制会把互联段 172.16.x 也送给运营商,属于典型事故
import-route ospf 1 route-policy RP_TO_BGP
# 从 IBGP 邻居学来的路由,下一跳要改成自己,否则 AS 内设备不可达
peer 10.200.1.1 next-hop-local
peer 10.200.2.1 next-hop-local
# Edge1 当路由反射器,Core1/Core2 是客户机
peer 10.200.1.1 reflect-client
peer 10.200.2.1 reflect-client
# 允许团体属性传给两个 IBGP 邻居
peer 10.200.1.1 advertise-community
peer 10.200.2.1 advertise-community
# 只接受运营商发来的、AS 路径以 65002 结尾的路由,挡掉绕路来的坏路由
peer 172.16.12.1 filter-policy ip-prefix PREFIX_FROM_ISP import
quit
quit
quit
这段模板引用了两个策略对象,需要先在系统视图下定义:
# ===== Edge1 第四阶段:策略对象定义(系统视图)=====
system-view
# 前缀列表:只匹配 110.1.0.0/16 及更细的子网,用于收运营商路由时过滤
ip ip-prefix PREFIX_FROM_ISP index 10 permit 110.1.0.0 16 less-equal 24
# 路由策略:只把公司网段送给运营商,其他一律不发
ip ip-prefix LAN_ONLY index 10 permit 192.168.10.0 24
ip ip-prefix LAN_ONLY index 20 permit 192.168.20.0 24
route-policy RP_TO_BGP permit node 10
if-match ip-prefix LAN_ONLY
quit
quit
# 收运营商路由时,给所有进来的路由打上团体属性,便于内网统一筛选
route-policy RP_FROM_ISP permit node 10
apply community 65001:100
quit
quit
filter-policy 的缺省行为是「匹配的放行,不匹配的丢弃」,所以 PREFIX_FROM_ISP 只放行 110.1.0.0/16 段内掩码 16~24 的路由。要打标记、改 MED 就得改用 route-policy。
最后,把主链路、备份链路与选路捏在一起:Edge1 是主出口,Edge2 是备份。用 Local_Pref 让 Core 走 Edge1,用 MED 让运营商从 Edge1 进来。两个策略对象都在系统视图里先定义好:
# ===== 策略对象:抬高本地优先级 + 设置 MED(系统视图)=====
system-view
route-policy RP_TO_IBGP permit node 10
# 发给 IBGP 邻居的路由本地优先级抬到 200,缺省 100
apply local-preference 200
quit
quit
route-policy RP_TO_ISP permit node 10
# 发给运营商的路由设置 MED=100,缺省 0
apply cost 100
quit
quit
再回到 BGP 地址族视图,把两个策略挂到对应邻居上:
# ===== Edge1 第五阶段:出口优先级与 MED(挂策略)=====
bgp 65001
ipv4-family unicast
# 对 Core 发路由时抬高本地优先级,让他们优先选本机出口
peer 10.200.1.1 route-policy RP_TO_IBGP export
peer 10.200.2.1 route-policy RP_TO_IBGP export
# 对运营商宣告时带 MED,引导它从本机进来
peer 172.16.12.1 route-policy RP_TO_ISP export
quit
quit
quit
注意 Local_Pref 只在 IBGP 之间传递:对 EBGP 邻居抬 Local_Pref,命令敲得上,对方收到的仍是缺省值。所以「给运营商调优」只能用 MED。
模板二:IBGP 全互联 + RR(Core1 / Core2)
Core1 与 Core2 的配置结构相同,只换地址与描述。先给 Core1(S5735-L24T4S-A1):
# ===== Core1:S5735-L24T4S-A1,IBGP 客户机 =====
system-view
sysname HUAWEI-Core1
interface LoopBack0
ip address 10.200.1.1 255.255.255.255
quit
interface Vlanif10
ip address 192.168.10.1 255.255.255.0
quit
interface Vlanif11
ip address 172.16.11.2 255.255.255.252
quit
# OSPF 负责内网可达:Loopback、办公网段、互联段
ospf 1 router-id 10.200.1.1
bandwidth-reference 1000
area 0
network 10.200.1.1 0.0.0.0
network 192.168.10.0 0.0.0.255
network 172.16.11.0 0.0.0.3
quit
quit
quit
Core1 的 BGP 配置很短,因为客户机只管连 RR:
# ===== Core1:BGP 只连 Edge1(RR)=====
bgp 65001
router-id 10.200.1.1
# Source 必须用 Loopback,与 RR 侧的 connect-interface 一致
peer 10.200.1.254 as-number 65001
peer 10.200.1.254 connect-interface LoopBack0
peer 10.200.1.254 description To-Edge1-RR
ipv4-family unicast
# 客户机一般不配 next-hop-local:它不替别人转发外部路由
# 允许团体属性传递,RR 打上的标记才收得到
peer 10.200.1.254 advertise-community
quit
quit
quit
Core2 只换地址与描述,其余结构相同:
# ===== Core2:S5735-L24T4S-A1,IBGP 客户机 =====
system-view
sysname HUAWEI-Core2
interface LoopBack0
ip address 10.200.2.1 255.255.255.255
quit
interface Vlanif20
ip address 192.168.20.1 255.255.255.0
quit
interface Vlanif14
ip address 172.16.14.2 255.255.255.252
quit
ospf 1 router-id 10.200.2.1
bandwidth-reference 1000
area 0
network 10.200.2.1 0.0.0.0
network 192.168.20.0 0.0.0.255
network 172.16.14.0 0.0.0.3
quit
quit
quit
bgp 65001
router-id 10.200.2.1
peer 10.200.1.254 as-number 65001
peer 10.200.1.254 connect-interface LoopBack0
peer 10.200.1.254 description To-Edge1-RR
ipv4-family unicast
peer 10.200.1.254 advertise-community
quit
quit
quit
模板三:联邦骨架(了解即可)
联邦把 AS 65001 拆成两个子 AS 65010 与 65020,对外声明仍是 65001。下面只给骨架,不配完整策略:
# ===== 子 AS 内部的边界设备:声明联邦身份与对端子 AS =====
bgp 65010
# 对外表现的 AS 号是 65001,不是 65010
confederation id 65001
# 对端属于联邦内的子 AS 65020
confederation peer-as 65020
peer 172.16.15.1 as-number 65020
peer 172.16.15.1 description To-SubAS-65020
quit
quit
联邦最容易被误解的一点是:子 AS 之间的 BGP 邻居,报文里仍然带着真实的私有子 AS 号,但在对外宣告时,AS 路径里会被替换成「联邦 ID + 联邦外的 AS」,因此外部世界只看得到 65001,看不到 65010 和 65020 这两层。这一点在抓包时最容易迷惑人——你看的包里的 AS 号跟对端路由表显示的不一样,是正常的。实战中联邦的排错成本很高(要同时看子 AS 内部、子 AS 之间、联邦对外三个层次),RR 才是更常见的选择。
适用版本:华为 VRP V200R019 及以上(AR6000 系列);H3C Comware V7(R2610 及以上)。
12.2.3 逐行讲解
下面挑出模板里最容易出问题的行,逐条对照讲清楚:
| 命令 | 作用 | 新手常填错的地方 |
|---|---|---|
bgp 65001 |
建 BGP 进程,声明本 AS 号 | 与 router-id 写反;AS 号是身份不是进程号 |
router-id 10.200.1.254 |
指定 BGP 的身份证 | 与 OSPF 的 Router-ID 缺省会取同一地址,最好都手工指定 |
peer 172.16.12.1 as-number 65002 |
建 EBGP 邻居 | 对端 AS 号填成自己的 65001,邻居永远起不来 |
peer 10.200.1.1 connect-interface LoopBack0 |
指定与对端通信的源接口 | 对端 peer 指向 Loopback,本机源却用物理口,TCP 建不起来 |
peer 172.16.12.1 ebgp-max-hop 2 |
放宽 EBGP 的 TTL(直连 EBGP 不需要) | IBGP 不需要;直连 EBGP 也不要配——H3C 官方提示「建议不要指定直连 EBGP 对等体配置 peer ebgp-max-hop,否则可能导致 BGP 路由无法正常迭代」 |
network 192.168.10.0 255.255.255.0 |
宣告网段 | 路由表里没有精确同掩码路由,宣告不生效 |
import-route ospf 1 route-policy RP_TO_BGP |
重发布 OSPF 路由 | 不加 route-policy 会把互联段、管理段全送出去 |
peer 10.200.1.1 next-hop-local |
改 IBGP 发出去路由的下一跳 | 漏配则 AS 内设备下一跳不可达,路由不进 FORWARD 表 |
peer 10.200.1.1 reflect-client |
把对端设为客户机 | RR 上的 peer 必须已经先建好,否则这条命令报错 |
peer 10.200.1.1 advertise-community |
允许团体属性传出 | 漏配则 apply community 打了标对方也看不到 |
peer 10.200.1.1 password cipher xxx |
TCP MD5 认证 | 两端必须一致;错一个字就卡在 OpenSent |
逐条展开其中最重要的四条:
逐条展开其中最重要的三条:
connect-interface 为什么必须配。IBGP 邻居地址是 Loopback,指向「那台设备」而不是「那条线」。本机发出的 TCP SYN 若用物理口地址当源,对端对不上会话,报文直接被丢,所以两端都要配 connect-interface 互指自己的 Loopback;用物理口作源的后果是链路一抖会话就断、全 AS 重收敛。
next-hop-local 在解决什么。运营商发来的 110.1.0.0/16 的 next-hop 是 172.16.12.1,Edge1 若原样反射给 Core1,Core1 到不了这个地址,路由「有但不可用」,进不了主路由表;加上之后 next-hop 变成 Edge1 的 172.16.11.1,Core1 就能把包交给 Edge1。所以 AS 边界设备与 RR 都把它当必配项。
import 与 export 的语义。import 是收到之后先过策略再进 BGP 表,export 是发出之前先过策略;filter-policy 只做开关式过滤,route-policy 还能改属性。同一个方向只用一种工具最稳,因为两者的执行先后在不同版本间并不完全统一。若出现「策略写了 permit、路由却全没了」,先比较 display bgp routing-table peer <邻居> received-routes 与 display bgp routing-table 的条数,差额就是被策略拦掉的。
适用版本:华为 VRP V200R019 及以上(AR6000 系列);H3C Comware V7(R2610 及以上)。
12.3 H3C 设备配置详解
H3C Comware V7 的 BGP 与华为 VRP 概念一致,但配置结构多了一层:V7 把 BGP 拆成「BGP 视图」与「地址族视图」,peer 的建立写在 BGP 视图下,与 IPv4 宣告、策略相关的命令写在 address-family ipv4 unicast 视图下,通常还要在这里再用一次 peer <地址> enable。这是华为转 H3C 时最容易卡住的地方。
12.3.1 H3C 侧的视图结构先理清
先把两层结构图示出来,后面所有配置都按这个框架套:
[H3C] 系统视图
|
+-- bgp 65001 ← BGP 进程视图(AS 号)
|
+-- router-id 10.200.1.254
+-- peer 172.16.12.1 as-number 65002 ← 建对等体:写在 BGP 视图
+-- peer 10.200.1.1 as-number 65001
+-- peer 10.200.1.1 connect-interface LoopBack0
|
+-- address-family ipv4 unicast ← 地址族视图
|
+-- peer 172.16.12.1 enable ← 显式使能(部分版本缺省已使能,但不赌缺省值)
+-- peer 10.200.1.1 enable
+-- network 192.168.10.0 24 ← 宣告与策略:写在这里
+-- peer 10.200.1.1 next-hop-local
+-- peer 10.200.1.1 reflect-client
把这张图记牢,H3C 的 BGP 就再也不会敲错位置。判断方法很简单:凡是与「路由」有关的(network、import-route、route-policy、filter-policy、next-hop-local、reflect-client、advertise-community),都在地址族视图下;凡是与「会话」有关的(as-number、connect-interface、ebgp-max-hop、password、description),都在 BGP 视图下。
⚠ 版本差异:Comware V5 没有地址族视图,
peer与network都写在 BGP 视图下,与华为 VRP 更接近;V7 引入地址族后才有上述两层结构。迁移 V5 老配置时要逐条搬到地址族视图里。
关于 peer <ip> enable 要给一个准确说明:H3C 有 default ipv4-unicast 开关,部分版本缺省即使能,此时不写 enable 也能通;但不同产品线缺省不一致,且一旦有人 undo default ipv4-unicast,依赖缺省的邻居会静默失效。生产环境一律显式写,宁可多敲一行,不赌缺省值。
⚠ 待核实:待核实 H3C Comware V7 各产品线
default ipv4-unicast的出厂缺省状态(启用/未启用)——这一条需要逐产品线查出厂配置,无法从单份文档确认;本章写法按显式 enable 给出,不依赖缺省值,故不影响正确性
12.3.2 完整配置模板:EBGP 对接运营商(H3C MSR3610-X1)
沿用 11.1.2 的拓扑:Edge1 换用 H3C MSR3610-X1,对外 GigabitEthernet0/0 连运营商 ISP-R(ISP 侧 172.16.12.1,AS 65002),对内 GigabitEthernet0/1 连 Core1,Loopback0 是 10.200.1.254。
先把接口与 OSPF 准备好(IBGP 依赖 IGP 保证 Loopback 可达):
# 进入系统视图
system-view
sysname H3C-Edge1
# 环回口:IBGP 邻居与 Router-ID 都靠它
interface LoopBack 0
ip address 10.200.1.254 255.255.255.255
quit
# 连运营商的口
interface GigabitEthernet0/0
ip address 172.16.12.2 255.255.255.252
quit
# 连 Core1 的口
interface GigabitEthernet0/1
ip address 172.16.11.1 255.255.255.252
quit
# 内网跑 OSPF,让 Loopback 与互联段可达
ospf 1 router-id 10.200.1.254
area 0
network 10.200.1.254 0.0.0.0
network 172.16.11.0 0.0.0.3
quit
quit
# 默认路由指向运营商
ip route-static 0.0.0.0 0.0.0.0 172.16.12.1
接着是 BGP 本体,注意两层视图的切换:
# 进入 BGP 视图,声明本 AS 号
bgp 65001
# Router-ID 与邻居会话参数写在 BGP 视图
router-id 10.200.1.254
peer 172.16.12.1 as-number 65002
peer 172.16.12.1 description To-ISP-R
peer 10.200.1.1 as-number 65001
peer 10.200.1.1 connect-interface LoopBack0
# 进入 IPv4 单播地址族,宣告与策略都在这里
address-family ipv4 unicast
# 地址族里显式使能一次(部分版本缺省已使能,但显式写不依赖缺省值)
peer 172.16.12.1 enable
peer 10.200.1.1 enable
# 宣告内网网段(要求路由表里有精确同掩码路由)
network 192.168.10.0 255.255.255.0
network 192.168.20.0 255.255.255.0
# 给 IBGP 邻居发路由时把下一跳改成本机
peer 10.200.1.1 next-hop-local
# 团体属性允许传出
peer 10.200.1.1 advertise-community
quit
quit
save force
12.3.3 完整配置模板:RR 与客户机(H3C)
Edge1 同时充当路由反射器,把 Core1、Core2 设为客户机:
# Edge1:reflect-client 在 bgp 视图下声明,然后在地址族里使能
bgp 65001
peer 10.200.1.1 as-number 65001
peer 10.200.2.1 as-number 65001
peer 10.200.1.1 reflect-client
peer 10.200.2.1 reflect-client
address-family ipv4 unicast
peer 10.200.1.1 enable
peer 10.200.2.1 enable
peer 10.200.1.1 next-hop-local
peer 10.200.2.1 next-hop-local
quit
quit
客户机侧(Core1,S5130S-28S-EI)配置更简单,只建邻居、不需要反射配置:
# Core1:只做客户机,所有 IBGP 路由都从 Edge1 反射过来
system-view
sysname H3C-Core1
interface LoopBack 0
ip address 10.200.1.1 255.255.255.255
quit
# 内网 OSPF,保证 Edge1 的 Loopback 可达
ospf 1 router-id 10.200.1.1
area 0
network 10.200.1.1 0.0.0.0
network 192.168.10.0 0.0.0.255
network 172.16.11.0 0.0.0.3
quit
quit
# 只与 Edge1 建一条 IBGP,不需要与 Core2 建邻居
bgp 65001
router-id 10.200.1.1
peer 10.200.1.254 as-number 65001
peer 10.200.1.254 connect-interface LoopBack0
address-family ipv4 unicast
peer 10.200.1.254 enable
quit
quit
save force
这就是 RR 的价值:Core1 只维护一条 IBGP 会话,却能拿到全 AS 的外部路由;不用 RR 就要两两全互联,五台设备就是十条会话。
12.3.4 H3C 侧的路由策略与选路调整
策略工具在 H3C 上同样齐全,写法与华为高度相似,主要差别在视图位置(都在地址族视图下)与个别关键字:
# 用前缀列表圈定只允许宣告的内网网段
ip prefix-list LAN_OUT index 10 permit 192.168.10.0 24
ip prefix-list LAN_OUT index 20 permit 192.168.20.0 24
ip prefix-list LAN_OUT index 30 deny 0.0.0.0 0 less-equal 32
# 路由策略:匹配后打团体属性并放行
route-policy RP_TO_ISP permit node 10
if-match ip-prefix LAN_OUT
apply community 65001:100
quit
# 在地址族里把策略挂到邻居上
bgp 65001
address-family ipv4 unicast
peer 172.16.12.1 enable
peer 172.16.12.1 route-policy RP_TO_ISP export
peer 172.16.12.1 advertise-community
quit
quit
调整出口方向最常用的两个属性,在 H3C 上的写法:
# 对本 AS 内所有路由统一抬高本地优先级(越大越优)
route-policy RP_HIGH_LP permit node 10
apply local-preference 200
quit
# 从某邻居学来的路由降低本地优先级(做成备份出口)
route-policy RP_LOW_LP permit node 10
apply local-preference 50
quit
# 挂到邻居上
bgp 65001
address-family ipv4 unicast
peer 10.200.1.1 route-policy RP_HIGH_LP import
peer 172.16.13.1 route-policy RP_LOW_LP import
quit
quit
AS 路径过滤用正则表达式,H3C 与华为的正则语法一致(^ 开始、$ 结束、_ 表示 AS 分隔符):
# 拒绝任何路径里含 AS 65100 的路由(防止经过某个不良中转)
ip as-path 1 deny _65100_
ip as-path 1 permit .*
bgp 65001
address-family ipv4 unicast
peer 172.16.12.1 as-path-acl 1 import
quit
quit
12.3.5 H3C 与华为的四个关键差异
与 11.2 对照,差异集中在下列几处,每一处都足以让「照抄华为配置」失败:
| 差异点 | 华为(VRP) | H3C(Comware V7) | 踩错的后果 |
|---|---|---|---|
| 视图结构 | bgp 视图里直接写 network、peer ... enable 不需要 |
必须进 address-family ipv4 unicast |
命令敲进去没报错但不生效 |
| 对等体使能 | 不需要单独 enable | 地址族里写 peer <ip> enable |
不写时依赖 default ipv4-unicast 缺省值,换型号可能失效 |
| AS 路径过滤 | peer ... as-path-filter 引用 ip as-path-filter |
peer ... as-path-acl 引用 ip as-path |
命令不存在 |
| 前缀列表 | ip ip-prefix |
ip prefix-list |
命令不存在 |
| 宣告网段 | network x.x.x.x mask |
network x.x.x.x mask(也可写位数) |
基本相同 |
AS 路径过滤命令族已确证:H3C 只有
peer as-path-acl一套,不存在as-path-filter写法(在 H3C 《06-BGP配置》全文 36 万字中as-path-filter出现 0 次,peer as-path-acl出现 2 次)。ip as-path { as-path-number | as-path-name } { deny | permit } regular-expression,列表号范围 1~256。出处:H3C 06-BGP配置 、H3C 12-路由策略命令 。
H3C 路由策略与团体属性位置已确证:
peer route-policy import、peer prefix-list import、peer advertise-community均在address-family ipv4 unicast视图下配,不在 BGP 视图。且 H3C 官方给出接收策略的执行顺序:filter-policy import→peer filter-policy import→peer as-path-acl import→peer prefix-list import→peer route-policy import(前面的挡住了,后面的就不再执行)。出处:H3C 06-BGP配置 (原文「如果同时配置了几种过滤策略,则按照如下顺序过滤接收的路由…只有通过前面的过滤策略,才能继续执行后面的过滤策略」)。
适用版本:华为 VRP V200R019 及以上(AR6000 系列);H3C Comware V7(R2610 及以上)。
12.3.6 本章 BGP 命令的官方核实结果
第二轮全量核实中,把本章主干命令逐条对照了官方文档,结论如下(可直接按 URL 复核):
| 命令 | 核实到的官方口径 | 出处 |
|---|---|---|
peer x as-number / connect-interface |
华为官方:peer connect-interface 用于「指定发送 BGP 报文的源接口,并可指定发起连接时使用的源地址」 |
华为 peer connect-interface(S5700/S6700) |
peer x ebgp-max-hop |
H3C 官方:「缺省情况下,不允许同非直连网络上的邻居建立 EBGP 会话」;且「建议不要对直连 EBGP 对等体配置 ebgp-max-hop,否则可能导致 BGP 路由无法正常迭代」 |
H3C 06-BGP配置 、H3C 07-BGP高级配置 |
peer x next-hop-local |
H3C 官方:「缺省情况下,向 EBGP 对等体发布路由时,将下一跳属性修改为自身的地址;向 IBGP 对等体发布路由时,不修改下一跳属性」——这正是 IBGP 必须显式配 next-hop-local 的官方依据 |
同上 |
next-hop-local 的配置视图 |
H3C 在 address-family ipv4 unicast 视图下配(官方示例:[SwitchB-bgp-default-ipv4] peer 4.4.4.4 next-hop-local),不在 BGP 视图 |
H3C 06-BGP配置 |
address-family ipv4 unicast + peer enable |
官方示例通篇为 [SwitchB-bgp-default] address-family ipv4 unicast → [SwitchB-bgp-default-ipv4] peer 10.1.1.1 enable 的两段式 |
同上 |
| 邻居建不起来的排查顺序 | H3C 官方排障步骤原文列了 8 步:查 AS 号 → 查邻居 IP → 查 Loopback 是否配 connect-interface → 查非直连 EBGP 是否配 ebgp-max-hop → 查路由表有无到邻居的路由 → ping 链路 → display tcp 查 TCP → 查是否被禁 179 端口的 ACL 拦截 |
H3C BGP配置·故障处理 |
其中**「非直连 EBGP 不要画蛇添足配 ebgp-max-hop」**这一条,是官方明确的风险提示,本章 11.7 的踩坑第 7 条按此口径写。
12.4 华为 / H3C 命令对照表
下面这张表是本章的「双语词典」,覆盖了 BGP 从建邻居到调优的常用命令,最后一列专门点出那些「照抄过去就报错」的地方:
| 功能 | 华为(VRP) | H3C(Comware V7) | 差异说明 |
|---|---|---|---|
| 建进程 / 地址族 | bgp 65001 → ipv4-family unicast |
bgp 65001 → address-family ipv4 unicast |
地址族视图名词序不同 |
| 使能邻居 | 不需要 | peer <ip> enable(地址族视图) |
H3C 多一步 |
| 会话身份 | peer <ip> as-number |
peer <ip> as-number |
相同,都在 BGP 视图 |
| 会话源 / TTL | peer <ip> connect-interface LoopBack0 / peer <ip> ebgp-max-hop 2 |
同左 | 相同 |
| 宣告 / 重发布 | network 192.168.10.0 255.255.255.0 / import-route ospf 1 |
network 192.168.10.0 24 / import-route ospf 1 |
掩码可写长度 |
| 下一跳 / 反射 / 团体 | peer <ip> next-hop-local / reflect-client / advertise-community |
同左 | 名称相同 |
| 认证 | peer <ip> password cipher X |
peer <ip> password cipher X |
相同 |
| 前缀列表 / 过滤 | ip ip-prefix P index 10 permit ... + peer <ip> filter-policy ip-prefix P import |
ip prefix-list P index 10 permit ... + peer <ip> ip-prefix P import |
命令名与写法不同 |
| AS 路径过滤 | ip as-path-filter 1 permit .* + peer <ip> as-path-filter 1 import |
ip as-path 1 permit .* + peer <ip> as-path-acl 1 import |
命令族不同 |
| 查看 / 保存 | display bgp peer / display bgp routing-table / save |
display bgp peer ipv4 / display bgp routing-table ipv4 / save force |
H3C 带地址族后缀 |
最值得反复确认的是视图归属:华为「进程管身份、地址族管策略」,H3C 在此基础上多一个「地址族里 peer enable」的步骤。
适用版本:华为 VRP V200R019 及以上(AR6000 系列);H3C Comware V7(R2610 及以上)。
12.5 配置验证
验证 BGP 按「邻居 → 能力 → 路由 → 选路 → 策略」五层走,第一眼先看邻居:邻居不是 Established,后面所有检查都没有意义。
第一步,看邻居是否全部建起来:
display bgp peer
期望三条邻居都在 Established,PrefRcv 不为 0:
BGP local router ID : 10.200.1.254
Local AS number : 65001
Total number of peers : 3 Peers in established state : 3
Peer V AS MsgRcvd MsgSent OutQ Up/Down State PrefRcv
10.200.1.1 4 65001 1287 1301 0 01:22:14 Established 1
10.200.2.1 4 65001 987 1021 0 01:01:03 Established 1
172.16.12.1 4 65002 2210 2195 0 02:11:45 Established 2
重点看三列:State 必须是 Established;PrefRcv 为 0 说明对端没发或本机策略拦了;Up/Down 每次看都是几秒,说明会话在反复重建。
第二步,看单个邻居的详细参数:
display bgp peer verbose
重点看会话类型与本端源地址:
BGP Peer is 10.200.1.1, remote IP address is 10.200.1.1
Type: IBGP link
BGP version 4, Remote router ID 10.200.1.1
BGP current state: Established, Up for 01:22:14
BGP current event: RecvKeepalive
BGP last state: OpenConfirm
Port: Local - 179 Remote - 49732
Type 一栏能直接告诉你会话类型(显示 EBGP link 而你以为配的是 IBGP,就是 as-number 填错);BGP last state 会告诉你这次会话是从哪个状态走过来的。
第三步,确认宣告出去的路由对端真的收到。先在本机看自己发出去了什么:
display bgp routing-table peer 172.16.12.1 advertised-routes
期望看到办公网段与服务器网段,Origin 为 i,AS_PATH 为空:
BGP Local router ID is 10.200.1.254
Status codes: * valid, > best, d damped, h history
Origin codes: i - IGP, e - EGP, ? - incomplete
Network NextHop MED LocPrf Path/Ogn
*> 192.168.10.0/24 172.16.12.2 0 i
*> 192.168.20.0/24 172.16.12.2 0 i
这里一条都没有,问题在本机宣告或出口策略;这里有而对端没有,问题在对端入口策略——「本机发出的」与「对端收到的」是两个独立检查点。
第四步,看运营商发来的路由有没有进来、下一跳是什么:
display bgp routing-table 110.1.0.0
期望带 *>(最优可用),Original nexthop 为 172.16.12.1:
BGP local router ID : 10.200.1.254
Paths: 1 available, 1 best, 1 select
BGP routing table entry information of 110.1.0.0/16:
From: 172.16.12.1 (10.200.200.2)
Original nexthop: 172.16.12.1
AS-path 65002, origin igp, MED 0, pref-val 0, valid, external, best, select
From 说明是哪位邻居发来的,external 说明来自 EBGP,best 说明已被选中;只有 valid 没有 best,说明还有别的路径在竞争。
第五步,在 Core1 上验证 IBGP 与 RR 是否在起作用——Core1 没有连运营商,它必须能从 Edge1 反射得到这条路由:
display bgp routing-table 110.1.0.0
display ip routing-table 110.1.0.0
Core1 的 BGP 表与主路由表里都应有这条路由:
BGP local router ID : 10.200.1.1
BGP routing table entry information of 110.1.0.0/16:
From: 10.200.1.254 (10.200.1.254)
Original nexthop: 172.16.11.1
AS-path 65002, origin igp, MED 0, localpref 200, external
Original nexthop: 172.16.11.1 就是 next-hop-local 生效的证据——它被改成了 Edge1 面向内网的地址。如果这条路由在 BGP 表里有、在主路由表里没有,说明下一跳不可达,这是本章反复强调的最大坑。
第六步,验证团体属性有没有传到位:
display bgp routing-table community 65001:100
为空就按「源设备 apply community → 每一跳的 advertise-community」逐个排查。
H3C 侧验证命令(带 ipv4 地址族后缀):
display bgp peer ipv4
display bgp routing-table ipv4
display bgp routing-table ipv4 peer 172.16.12.1 advertised-routes
display bgp routing-table ipv4 community
H3C 的 display bgp peer ipv4 输出格式略有不同,同样只看 State 一列是否为 Established:
BGP local router ID: 10.200.1.254
Local AS number: 65001
Total number of peers: 2 Peers in established state: 2
Peer AS MsgRcvd MsgSent OutQ PrefRcv Up/Down State
10.200.1.1 65001 1287 1301 0 1 01:22:14 Established
172.16.12.1 65002 2210 2195 0 2 02:11:45 Established
汇总成一张日常清单:
| 检查项 | 命令 | 通过标准 |
|---|---|---|
| 邻居状态 | display bgp peer |
全部 Established,PrefRcv 不为 0 |
| 会话类型与源 | display bgp peer verbose |
Type、Local 地址与设计一致 |
| 发出的路由 | advertised-routes |
有设计中的网段,Origin 为 i |
| 收到的路由 | display bgp routing-table 目的网段 |
带 *>,属性符合预期 |
| 下一跳可达 | display ip routing-table 下一跳 |
主路由表里有条目 |
| 团体属性 | display bgp routing-table community |
标记按设计传递 |
适用版本:华为 VRP V200R019 及以上(AR6000 系列);H3C Comware V7(R2610 及以上)。
12.6 排错与故障树
BGP 排错的思路与 OSPF 不同:OSPF 靠组播找邻居,BGP 靠 TCP 建会话,所以先查 TCP、再查 BGP。按状态机顺序画成故障树:
邻居不是 Established
|
+- 邻居列表里根本没有 / 一直 Idle
| +- 一端配了 peer、另一端没配(单向配置)
| +- 对端地址写错,或本地没有到对端的路由
| +- connect-interface 指到 Loopback,但 Loopback 地址没被 IGP 宣告
|
+- Active(TCP 打不通,正在反复重拨)
| +- 物理链路断:display interface brief
| +- 路由不可达:IBGP 的 Loopback 没被 OSPF 保证
| +- 179 端口被 ACL 或防火墙拦:典型表现是一边通、一边不通
| +- EBGP 中间隔了设备却没配 ebgp-max-hop
| +- peer 地址与本端源接口不在同一可达范围
|
+- OpenSent(TCP 通了,Open 报文谈不拢)
| +- AS 号不一致(最常见)
| +- password 认证不一致
| +- 两端 Router-ID 冲突
| +- BGP 版本或能力协商失败(老设备)
|
+- OpenConfirm(只差最后一个 Keepalive)
| +- Hold Time 配得过短,或路径丢包严重
|
+- Established 但路由不对
+- 对端没宣告:对端 `network` 的精确路由不在其路由表
+- 策略拦了:import/export 的 route-policy、ip-prefix
+- 下一跳不可达:IBGP 漏配 next-hop-local
+- 选路不符合预期:按属性顺序逐条比对
逐个症状对应原因与定位命令:
| 症状 | 可能原因 | 排查命令 | 定位方法 |
|---|---|---|---|
| 列表里没有对端 | 单向配置 | display current-configuration configuration bgp |
与对端配置逐行对照 |
| 一直 Idle | 地址不可达 | ping -a <本机源> <对端> |
必须带源地址 ping,才测的是 BGP 真实路径 |
| Active | TCP 179 不通 | display tcp status、telnet <对端> 179 |
连得上说明 TCP 没问题,问题在协议层 |
| Active | 源接口与 peer 不匹配 | display bgp peer verbose |
看 Local 地址是否是设计中的 Loopback |
| Active | EBGP 跨设备未放宽 TTL | display bgp peer verbose |
检查 ebgp-max-hop 是否配 |
| OpenSent | AS 号错 | 对端 display bgp peer |
两边 as-number 逐字核对 |
| OpenSent | 认证不一致 | display logbuffer |
找 authentication 相关报错 |
| OpenSent | Router-ID 冲突 | 两端 display bgp peer verbose |
两台设备的 Router ID 相同则必错 |
| Established 但无路由 | 对端没宣告 | 对端 advertised-routes |
对端发出的为空就去查对端路由表 |
| Established 但路由不可用 | next-hop 不可达 | display ip routing-table |
BGP 表有、主路由表没有 |
| 选了次优路径 | 属性不符预期 | display bgp routing-table <网段> |
按 localpref → AS 路径 → MED 顺序比 |
再看三个现场案例。
案例一:AS 号抄错,卡在 OpenSent。链路通、telnet 对端 179 也能连上,邻居却在 Active 与 OpenSent 之间跳。查日志有「AS 号与本地配置不一致」的提示,一对发现我方写 65002、运营商单子上是 65003——照着另一条链路复制来的。AS 号必须从对接单上逐字核对。
案例二:179 只放行了一个方向。我方看对端 Established,对端看我方一直 Active。这类单向不通几乎都是中间设备只放了一个方向:两端 display tcp status 看 179 连接、再在防火墙查会话表即可确认。两个方向的 TCP 179 都要放行,因为双方都可能主动发起连接。
案例三:RR 漏配 next-hop-local,BGP 一切正常但用户上不了网。邻居全 Established、BGP 表里运营商路由一条不少,可主路由表里没有、ping 也不通——RR 反射时没改下一跳,客户机拿着不可达的下一跳,路由被判为不可用。BGP 表里有路由不等于数据能过去,下一跳可达才是判定标准。
H3C 侧排错命令同构,同样带地址族:
display bgp peer ipv4
display bgp routing-table ipv4
display logbuffer | include BGP
display tcp verbose
跨厂商对接时,若邻居卡在 OpenSent 且 AS 号、认证都核对无误,就要怀疑「能力协商」:display bgp peer verbose 里有收到的能力列表,两边对比着看。
华为侧的 BGP 能力协商命令已核实(官方命令参考原文):
peer { group-name | ipv4-address } capability-advertise { 4-byte-as | route-refresh | conventional }(IPv6 对等体去掉conventional)。该命令用来「使能 BGP 的发布可选能力」,undo形式用来恢复缺省配置。实操要点:跟极老的邻居(不支持 4 字节 AS 号或 Route-refresh)对接时,常用
undo peer x capability-advertise 4-byte-as或... route-refresh来关闭相应能力,避免 OpenSent 阶段能力协商失败导致卡住。本章 11.6 的"卡在 OpenSent"排查里可以按这条去试。出处:NetEngine AR1000V V300R021 命令参考 · BGP 配置命令 。H3C 侧同名命令的取值集合未核实。
适用版本:华为 VRP V200R019 及以上(AR6000 系列);H3C Comware V7(R2610 及以上)。
12.7 新手踩坑与注意事项
- 把 Active 当成「正常运行」——它的含义是「TCP 打不通、正在重拨」。避法:卡在哪个状态就查对应的那一层。
network宣告了却没生效——路由表里没有精确同掩码路由,BGP 不报错也不生成宣告。避法:宣告前display ip routing-table <网段>确认。- IBGP 用物理口地址做源——物理口一断就全 AS 重收敛。避法:一律用 Loopback 建,两端都配
connect-interface,并让 IGP 宣告 Loopback。 - 漏配
next-hop-local——BGP 表里有、主路由表里没有。避法:边界设备与 RR 对每个向内的 IBGP 邻居都配上。 - 指望 IBGP 路由再传给 IBGP——水平分割是 BGP 的基本规则,不是配置能绕开的。避法:要么 Full Mesh,要么用 RR。
import-route direct一把梭——互联段、管理段全被送出去。避法:一律配route-policy限定重发布范围。- 团体属性「打了没传」——
apply community只负责打标,advertise-community才决定能不能出门。避法:要带标出 AS,就在出口邻居上显式打开。 - EBGP 的 TTL 与物理直连——缺省 TTL 为 1,中间隔一台设备就建不起来。避法:确需跨设备时配
ebgp-max-hop 2,并清楚这等于放弃了旁路检查。 - Router-ID 冲突——两台设备配了同一个 Router-ID,会话反复建立又断开。避法:全网统一用 Loopback 规划 Router-ID,且逐台登记。
- 改完策略不刷新——部分策略改动不会立刻作用于已有邻居。避法:改完主动
refresh bgp触发一次,别等用户报障。 - H3C 漏了
peer enable——as-number配了、地址族里没 enable,邻居在该地址族里根本没激活。避法:H3C 配完立刻display bgp peer ipv4确认能看到它。 reset bgp all图省事——可能引发全网震荡。避法:精确到邻居,如reset bgp 172.16.12.1。- 两台 RR 的
cluster-id不一致——同簇不统一会让簇检查失效,可能绕行甚至回环。避法:同簇 RR 统一cluster-id并写进设计文档。 - 把 Local_Pref 用在 EBGP 上——发给 EBGP 邻居的 Local_Pref 会被剥掉,对方看不到。避法:跨 AS 只调 MED,AS 内才调 Local_Pref。
- 忘了
save——华为save要敲y,H3C 用save force。避法:割接最后一步必save,并用display saved-configuration复核。
适用版本:华为 VRP V200R019 及以上(AR6000 系列);H3C Comware V7(R2610 及以上)。
12.8 本章小结
BGP 是「村子之间的快递协议」:它不负责算村内的路,只负责把地址簿发给邻村,用 AS 路径防环、用属性选路、用策略过滤。本章的要点压缩成下面几条:
- BGP 是路径矢量协议,跑在 TCP 179 上;这决定了「先查 TCP、再查 BGP」的排错顺序。
- EBGP 与 IBGP 的差别不止 AS 号:TTL、next-hop、IGP 可达要求、防环手段全不同,其中最大的坑是「IBGP 下一跳必须由 IGP 保证可达」。
- 状态机就是排错地图:Idle/Active 查 TCP,OpenSent 查 AS 号与认证,OpenConfirm 查 Keepalive,Established 之后才轮到路由与策略。
network要求本机路由表有精确同掩码路由;import-route有「搬太多」和「源消失不撤销」的风险,都要配策略。- 选路按顺序逐条比:weight → local-preference → 本地始发 → AS 路径 → origin → MED → EBGP 优于 IBGP → IGP cost → Router-ID。
- RR 解决 IBGP 全互联;RR 与 AS 边界设备必须有
next-hop-local。 - 策略四件套:
filter-policy/ip-prefix、as-path-filter、route-policy、community;团体属性要advertise-community才传得出去。 - 华为与 H3C 的核心差异是视图归属:H3C 要进
address-family ipv4 unicast再peer <ip> enable;华为没有 enable 这一步,但宣告与策略同样在ipv4-family unicast下。
自测题
- 两台路由器建 EBGP 邻居,中间经过一台三层交换机,配置照模板敲的却一直卡在 Active。最可能的原因是什么?怎么改?
- 同一目的网段收到两条路由:一条 Local_Pref 为 150、AS 路径长度 3;另一条 Local_Pref 为 100、AS 路径长度 1。它选哪一条?为什么?
- IBGP 邻居已 Established,
display bgp routing-table里有运营商路由,但display ip routing-table里没有。最可能的两个原因与对应修复命令是什么? - RR 上配了
reflect-client,而客户机上什么都没配,邻居能建起来吗?如果 RR 上漏了reflect-client,会出现什么现象? - H3C 上配了
peer 172.16.12.1 as-number 65002,display bgp peer里却看不到这个邻居,最可能漏了什么?华为上会不会有这个问题?
- EBGP 缺省 TTL 为 1,中间多一台三层设备报文就被丢弃,TCP 建不起来,卡在 Active。解决:两端对 EBGP 邻居配
peer 172.16.12.1 ebgp-max-hop 2,并确认中间设备有到对端路由、未过滤 179。 - 选 Local_Pref 为 150 的那条。BGP 按固定顺序比较,Local_Pref 排在 AS 路径长度之前,先分出胜负后面的规则就不看了——这正是「BGP 是策略协议」的体现。
- 一是下一跳不可达(EBGP 路由反射后未改 next-hop),在边界设备或 RR 上配
peer <ip> next-hop-local;二是被策略拦了,检查 import/export 方向的filter-policy与route-policy。 - 能建起来。
reflect-client只在 RR 上配,影响的是反射行为而不是会话建立。若 RR 漏配,两个客户机之间的路由不会互相反射,现象是「都能和 RR 通,但客户机之间学不到对方的 BGP 路由」。 - 漏的是
address-family ipv4 unicast视图下的peer 172.16.12.1 enable:as-number只是在 BGP 视图登记身份,还要在 IPv4 单播地址族里enable才激活。华为没有这一步,配完as-number即激活,所以从华为迁移过来的人最容易漏。
关于本书:《华为 / H3C 网络设备典型功能配置详解》—— 面向国内高校/企业网络环境, 华为 VRP 与 H3C Comware 双厂商并排配置的实操教材,共 43 章。 全书所有命令尽量有官方出处,查不到的显式标注「待核实」。 返回系列目录
本人保留对侵权者及其全家发动因果律武器的权利
版权提醒
如无特殊申明,本站所有文章均是本人原创。转载请务必附上原文链接:https://www.elliot98.top/post/huawei-h3c-book/12/。
如有其它需要,请邮件联系!版权所有,违者必究!