BGP 配置详细步骤:华为、H3C、思科 eBGP 配置实例
BGP 配置的骨架在三家设备上相同:启动 BGP 写本端 AS 号,指定 router-id,用 peer(思科 neighbor)写对端地址和 AS 号,用 network 宣告自有网段,用 display bgp peer 或 show ip bgp summary 确认邻居 Established。最容易错的两处:H3C 必须在地址族里激活邻居;network 宣告的网段在路由表里必须有掩码一致的路由。
BGP 配置最常见的场景,是机房用自己的 AS 号与运营商建立 eBGP 会话,把自有地址段宣告出去,同时接收运营商下发的路由。完成这件事分五步:配好互联接口地址;为要宣告的网段准备一条路由,通常是指向 NULL0 的静态路由;启动 BGP 进程,写本端 AS 号和 router-id;用 peer 或 neighbor 指定对端地址和 AS 号;用 network 宣告网段,并加上出方向过滤,保证只发出自己的地址段。下面先列出要准备的参数,讲清 AS 号、router-id、network 与 import-route 各管什么,再给出华为、H3C、思科三家的完整命令和验证方法。示例中的公网地址和 AS 号都是文档专用值,替换成运营商开通单上的实际值即可。
BGP 配置前要准备哪些参数
动手之前,把下面这张表填满。任何一项不确定,会话都可能建不起来,或者建起来以后宣告错路由:
| 参数 | 本文示例 | 从哪里来 |
|---|---|---|
| 本端 AS 号 | 64510 | 自己申请的 AS 号;用上游分配的私有 AS 时以上游通知为准 |
| 对端 AS 号 | 64496 | 运营商开通单 |
| 互联地址 | 本端 192.0.2.1/30,对端 192.0.2.2/30 | 运营商分配 |
| 要宣告的网段 | 203.0.113.0/24 | 自有或获得授权的地址段,按运营商要求准备授权文件或路由登记 |
| router-id | 10.255.255.1 | 自己规划,通常取 LoopBack0 的地址 |
| 对端下发的路由 | 只给默认路由 | 开通时约定,也可能是本网路由或完整路由表 |
| 认证密钥 | 双方约定 | 运营商要求启用 MD5 认证时提供 |
示例拓扑如下。203.0.113.0/24 在机房内部被拆成多个小网段分给各个 VLAN,边界路由器上并没有一条完整的 /24 路由,这一点后面会用到:
运营商 AS 64496
192.0.2.2/30
|
192.0.2.1/30 接口 GE0/0/1
[ 机房边界路由器 AS 64510 LoopBack0 10.255.255.1 ]
|
机房内部:203.0.113.0/24 拆成 /26、/27 分给各业务 VLAN
AS 号、router-id 和 network、import-route 的区别
AS 号写在两个地方
本端 AS 号写在启动 BGP 进程的命令里(华为、H3C 是 bgp 64510,思科是 router bgp 64510),一台设备的一个 BGP 实例只有一个本端 AS;对端 AS 号写在每个邻居上。设备据此判断会话类型:对端 AS 与本端不同就是 eBGP,相同就是 iBGP,不需要另外声明。
4 字节 AS 号有两种写法:整数形式(asplain),如 4200000001;点分形式(asdot),把高 16 位和低 16 位用点隔开,同一个号写作 64086.59905(64086 × 65536 + 59905 = 4200000001)。华为、思科都能接受两种输入,运营商开通单上写的是哪种,配置时照抄即可,不要自己换算出错。AS 号填错的表现是 TCP 连接能建立,但对方校验 OPEN 报文时发现 AS 号对不上,回一条 NOTIFICATION(OPEN Message Error / Bad Peer AS)后断开,会话反复重试,始终到不了 Established。
router-id:手工指定,不要依赖自动选择
router-id 是一个写成 IPv4 地址形式的 32 位标识,在 AS 内必须唯一,不要求可达,也不需要宣告出去。不手工指定时,设备会按规则自动挑一个接口地址,通常优先取 Loopback 接口中最大的地址。问题在于自动选出的值会随接口增删而变化,而修改 router-id 会让 BGP 会话全部重建。所以生产环境一律手工指定,习惯上取 LoopBack0 的地址,这个接口不会因为某个物理口断开而消失。两台设备误用了同一个 router-id 时,部分设备会直接拒绝建立会话,规划地址时一并分配好。
network 与 import-route:两种把路由放进 BGP 的方式
| 对比项 | network | import-route(思科叫 redistribute) |
|---|---|---|
| 宣告什么 | 命令里指定的那一个前缀 | 某个来源(直连、静态、OSPF 等)的全部路由,可用路由策略筛选 |
| 前提条件 | IP 路由表里必须有一条前缀和掩码都完全一致的路由 | 路由表里有该来源的路由 |
| Origin 属性 | IGP,路由表里标 i | Incomplete,标 ? |
| 默认路由 | 可以用 network 0.0.0.0 宣告 | 默认不引入,华为需要 default-route imported,思科需要 default-information originate |
| 主要风险 | 小,掩码写错通常只是宣告不出去 | 不加策略会把互联网段、内网段一起带出去 |
| 适合 | 自有地址段等少量固定前缀 | 需要随业务动态增减的大量前缀,例如客户自带的地址段 |
network 的“完全一致”是最常见的坑。示例中 203.0.113.0/24 在内部拆成了 /26、/27,路由表里没有完整的 /24,network 203.0.113.0 255.255.255.0 写上去什么也不会发生。解决办法就是加一条指向 NULL0 的静态路由,让 /24 出现在路由表里;内部更具体的 /26、/27 按最长匹配优先转发,这条黑洞路由只兜住还没分配出去的地址,顺带防止去往空闲地址的流量在边界上来回绕圈。思科还有一个细节:network 不写 mask 时按 A、B、C 类的自然掩码处理,203.0.113.0 碰巧是 C 类能对上 /24,换成 10.0.0.0 就成了 /8。
确实要用 import-route 时,必须挂一条路由策略,只放行要宣告的前缀。华为写法(H3C 的 if-match 写成 if-match ip address prefix-list OWN-NET):
route-policy STATIC-TO-BGP permit node 10
if-match ip-prefix OWN-NET
quit
bgp 64510
ipv4-family unicast
import-route static route-policy STATIC-TO-BGP
思科写法:
route-map STATIC-TO-BGP permit 10
match ip address prefix-list OWN-NET
router bgp 64510
address-family ipv4 unicast
redistribute static route-map STATIC-TO-BGP
路由策略只写了 permit 节点时,没匹配上的路由一律不引入,这正是想要的效果。
BGP 配置命令:华为、H3C、思科完整实例
三段配置实现的是同一件事:建立到 192.0.2.2 的 eBGP 会话,宣告 203.0.113.0/24,出方向只放行这一个前缀,限制对端发来的路由条数。命令以华为 VRP V200R、H3C Comware V7、思科 IOS/IOS-XE 为准,其他版本以设备文档为准。
华为 BGP 配置实例
system-view
interface LoopBack0
ip address 10.255.255.1 255.255.255.255
quit
interface GigabitEthernet0/0/1
description To-ISP-A
ip address 192.0.2.1 255.255.255.252
quit
ip route-static 203.0.113.0 255.255.255.0 NULL0
ip ip-prefix OWN-NET index 10 permit 203.0.113.0 24
bgp 64510
router-id 10.255.255.1
peer 192.0.2.2 as-number 64496
peer 192.0.2.2 description ISP-A
peer 192.0.2.2 password cipher <与运营商约定的密钥>
ipv4-family unicast
network 203.0.113.0 255.255.255.0
peer 192.0.2.2 enable
peer 192.0.2.2 ip-prefix OWN-NET export
peer 192.0.2.2 route-limit 1000
return
save
几点说明:
- 华为的邻居在 IPv4 单播地址族里默认已激活,
peer 192.0.2.2 enable写上无妨。 - 边界设备如果是 S 系列交换机,物理口默认是二层口,要先在接口下执行
undo portswitch切成三层口(部分型号不支持),或者把端口划进一个 VLAN,在 VLANIF 上配置互联地址。 route-limit 1000表示对端发来的路由超过 1000 条时断开会话。对端只给默认路由时这个值绰绰有余;接收完整路由表时要按实际条数加余量设置,并考虑改成只告警不断开。
H3C BGP 配置实例
system-view
interface LoopBack0
ip address 10.255.255.1 32
quit
interface GigabitEthernet1/0/1
port link-mode route
description To-ISP-A
ip address 192.0.2.1 30
quit
ip route-static 203.0.113.0 24 NULL0
ip prefix-list OWN-NET index 10 permit 203.0.113.0 24
bgp 64510
router-id 10.255.255.1
peer 192.0.2.2 as-number 64496
peer 192.0.2.2 description ISP-A
peer 192.0.2.2 password cipher <与运营商约定的密钥>
address-family ipv4 unicast
network 203.0.113.0 24
peer 192.0.2.2 enable
peer 192.0.2.2 prefix-list OWN-NET export
peer 192.0.2.2 route-limit 1000
return
save
和华为相比,H3C Comware V7 有三处要注意:
- 地址族里的
peer 192.0.2.2 enable不能省。V7 的邻居不会自动加入 IPv4 单播地址族,漏了这一步,IPv4 路由不会交换,有的版本连会话都不建立。 - 前缀列表叫
ip prefix-list,出方向过滤写peer 地址 prefix-list 名称 export;华为叫ip ip-prefix。 - 交换机的端口要先切成三层:
port link-mode route放在接口配置的最前面执行,切换模式会把接口上原有的配置恢复为默认;不支持三层模式的型号,改在 VLAN 接口上配置互联地址。
思科 BGP 配置实例
configure terminal
interface Loopback0
ip address 10.255.255.1 255.255.255.255
interface GigabitEthernet0/0/1
description To-ISP-A
ip address 192.0.2.1 255.255.255.252
no shutdown
ip route 203.0.113.0 255.255.255.0 Null0
ip prefix-list OWN-NET seq 10 permit 203.0.113.0/24
router bgp 64510
bgp router-id 10.255.255.1
bgp log-neighbor-changes
neighbor 192.0.2.2 remote-as 64496
neighbor 192.0.2.2 description ISP-A
neighbor 192.0.2.2 password <与运营商约定的密钥>
address-family ipv4 unicast
network 203.0.113.0 mask 255.255.255.0
neighbor 192.0.2.2 activate
neighbor 192.0.2.2 prefix-list OWN-NET out
neighbor 192.0.2.2 maximum-prefix 1000
exit-address-family
end
write memory
bgp log-neighbor-changes 让邻居每次起落都写一条日志,排障时很有用。IOS 默认会把邻居自动加入 IPv4 单播地址族,配置了 no bgp default ipv4-unicast 时才必须 activate。如果设备是 IOS XR,规则不同:没有配置路由策略的 eBGP 邻居默认不收也不发任何路由,必须为每个邻居写好入、出方向的 route-policy。
三家 BGP 配置命令对照
| 作用 | 华为 VRP | H3C Comware V7 | 思科 IOS/IOS-XE |
|---|---|---|---|
| 启动 BGP、写本端 AS | bgp 64510 |
bgp 64510 |
router bgp 64510 |
| 指定 router-id | router-id 10.255.255.1 |
router-id 10.255.255.1 |
bgp router-id 10.255.255.1 |
| 建立邻居、写对端 AS | peer 192.0.2.2 as-number 64496 |
peer 192.0.2.2 as-number 64496 |
neighbor 192.0.2.2 remote-as 64496 |
| 进入 IPv4 地址族 | ipv4-family unicast |
address-family ipv4 unicast |
address-family ipv4 unicast |
| 激活邻居 | 默认已激活 | peer 192.0.2.2 enable,必须 |
默认已激活 |
| 宣告网段 | network 203.0.113.0 255.255.255.0 |
network 203.0.113.0 24 |
network 203.0.113.0 mask 255.255.255.0 |
| 引入其他路由 | import-route static route-policy 名称 |
import-route static route-policy 名称 |
redistribute static route-map 名称 |
| 前缀列表 | ip ip-prefix 名称 index 10 permit 203.0.113.0 24 |
ip prefix-list 名称 index 10 permit 203.0.113.0 24 |
ip prefix-list 名称 seq 10 permit 203.0.113.0/24 |
| 出方向过滤 | peer 地址 ip-prefix 名称 export |
peer 地址 prefix-list 名称 export |
neighbor 地址 prefix-list 名称 out |
| MD5 认证 | peer 地址 password cipher 密钥 |
peer 地址 password cipher 密钥 |
neighbor 地址 password 密钥 |
| 路由条数上限 | peer 地址 route-limit 1000 |
peer 地址 route-limit 1000 |
neighbor 地址 maximum-prefix 1000 |
| 保存配置 | save |
save |
write memory |
验证:邻居 Established、路由发出与收到
配置完成后,按“会话、发出、收到、生效”四步检查,每一步都有明确的期望结果:
| 检查项 | 华为 | H3C | 思科 | 期望结果 |
|---|---|---|---|---|
| 邻居状态 | display bgp peer |
display bgp peer ipv4 |
show ip bgp summary |
华为、H3C 显示 Established;思科 State/PfxRcd 列显示数字 |
| BGP 路由表 | display bgp routing-table |
display bgp routing-table ipv4 |
show ip bgp |
自有网段前有 *>,Origin 为 i |
| 发给对端的路由 | display bgp routing-table peer 192.0.2.2 advertised-routes |
display bgp routing-table ipv4 peer 192.0.2.2 advertised-routes |
show ip bgp neighbors 192.0.2.2 advertised-routes |
只有 203.0.113.0/24 |
| 从对端收到的路由 | display bgp routing-table peer 192.0.2.2 received-routes |
display bgp routing-table ipv4 peer 192.0.2.2 received-routes |
show ip bgp neighbors 192.0.2.2 routes |
约定好的路由,本例只有 0.0.0.0/0 |
| 是否装进路由表 | display ip routing-table protocol bgp |
display ip routing-table protocol bgp |
show ip route bgp |
默认路由的下一跳是 192.0.2.2 |
华为上会话正常时的输出类似这样(示例):
<Border-R1> display bgp peer
BGP local router ID : 10.255.255.1
Local AS number : 64510
Total number of peers : 1 Peers in established state : 1
Peer V AS MsgRcvd MsgSent OutQ Up/Down State PrefRcv
192.0.2.2 4 64496 732 729 0 12:05:31 Established 1
PrefRcv 为 1,对应运营商只下发了一条默认路由。再看 BGP 路由表(示例):
<Border-R1> display bgp routing-table
Total Number of Routes: 2
Network NextHop MED LocPrf PrefVal Path/Ogn
*> 0.0.0.0 192.0.2.2 0 0 64496i
*> 203.0.113.0/24 0.0.0.0 0 0 i
* 表示路由有效,> 表示被选为最优,只有最优路由才会发给邻居。自有网段的下一跳是 0.0.0.0,说明它由本机产生;Path/Ogn 只有一个 i,说明是 network 宣告、AS_PATH 为空,发给运营商时才会加上 64510。思科 show ip bgp 里本机产生的路由下一跳同样是 0.0.0.0,Weight 为 32768。
设备上的检查只能说明“我发出去了”,运营商有没有接受,要从外部确认:请运营商在他们的设备上查收到的前缀,或者从其他网络对 203.0.113.0/24 里的地址做路由追踪,看路径是否经过这家运营商进入你的机房。
BGP 配好了却不通:按现象排查
| 现象 | 配置上的常见原因 | 先看什么 |
|---|---|---|
| 邻居一直停在 Idle | 没有到对端地址的路由;H3C 漏了地址族里的 peer enable;邻居被管理性关闭;路由条数超限后被断开,等待重连 |
华为 display current-configuration configuration bgp,思科 show running-config | section bgp |
| 在 Active、Connect 之间来回切换 | 互联地址不通;对端地址写错;ACL 拦了 TCP 179;用 Loopback 建邻居却没放开跳数;MD5 密钥两端不一致 | 带源地址 ping 对端:华为 ping -a 192.0.2.1 192.0.2.2,思科 ping 192.0.2.2 source GigabitEthernet0/0/1;再看日志里有没有 MD5 认证失败的记录 |
| 进入 OpenSent 后又退回 Idle 或 Active,反复重试 | 对端 AS 号写错(Bad Peer AS);部分设备上两端 router-id 相同(Bad BGP Identifier) | 设备日志里的 NOTIFICATION 错误码;华为 display bgp peer 192.0.2.2 log-info |
| Established,但 PrefRcv 为 0 | 运营商还没下发;本端入方向策略把路由过滤光了;IOS XR 没写路由策略 | 查收到的路由,再对照入方向策略 |
| 自有网段没有宣告出去 | network 的掩码和路由表不一致;缺少 NULL0 静态路由;出方向前缀列表没匹配上 | 华为 display ip routing-table 203.0.113.0 24,确认路由表里有完全一致的条目 |
| 宣告了不该宣告的网段 | import-route 没挂路由策略;出方向没有过滤 | advertised-routes,立即补上过滤 |
| 运行一段时间后断开 | 保持时间内没收到报文;对端发来的路由超过 route-limit;链路 MTU 不一致导致大的 UPDATE 报文丢失 | 断开时的日志和错误码,思科 show ip bgp neighbors 192.0.2.2 | include Last reset |
Active 和 Idle 都不是“正常但空闲”的意思,看到它们就说明会话没建立。排查顺序固定为:先保证三层可达,再核对两端的地址和 AS 号,最后看认证和策略。
在机房里怎么落地
BGP 配置写在路由器上,但宣告哪些网段、每个网段是否已经对外发布,需要一个地方统一记录,否则换一个人接手就说不清楚。Toplink DCIM 的 IP 地址管理按 CIDR 录入地址段,大段可以自动拆分成多个 /24 分别管理,和 BGP 宣告的粒度一致;每个段可以按线路分组、打上“已宣告 · ISP-A”之类的标签,尚未宣告的段可以锁定,开通服务器时不会被自动分配出去。边界设备是 DCIM 已纳管的三层交换机时,修改 BGP 配置可以在交换机管理里直接打开浏览器 SSH 终端,会话全程录像并记录命令日志,哪条 network、哪条前缀列表由谁在什么时候改过,出了问题能直接回放核对。
常见问题
改了 BGP 路由策略,要重启会话才生效吗?
不用重启会话,做一次软复位即可:华为 refresh bgp 192.0.2.2 import(出方向用 export),H3C refresh bgp 192.0.2.2 import ipv4,思科 clear ip bgp 192.0.2.2 soft in(出方向用 out)。不带 soft 的 clear ip bgp 和 reset bgp 会断开会话、中断业务,只在必要时使用。
IPv6 的 BGP 怎么配?
步骤相同,换成 IPv6 地址族。华为在 bgp 视图下 peer 2001:db8:1::2 as-number 64496,再进入 ipv6-family unicast 执行 peer 2001:db8:1::2 enable 和 network 2001:db8:100:: 48;思科在 address-family ipv6 unicast 下执行 neighbor 2001:db8:1::2 activate 和 network 2001:db8:100::/48。IPv6 前缀同样需要路由表里有一条掩码一致的路由。
能用 Loopback 地址和运营商建 eBGP 吗?
可以,但需要双方都同意。eBGP 默认要求对端直连(TTL 为 1),用 Loopback 建邻居时两端都要放开跳数,并指定源接口:华为、H3C 用 peer 地址 ebgp-max-hop 2 和 peer 地址 connect-interface LoopBack0,思科用 neighbor 地址 ebgp-multihop 2 和 neighbor 地址 update-source Loopback0,还要有一条到对端 Loopback 的静态路由。