网络与 IP

BGP 配置详细步骤:华为、H3C、思科 eBGP 配置实例

BGP 配置的骨架在三家设备上相同:启动 BGP 写本端 AS 号,指定 router-id,用 peer(思科 neighbor)写对端地址和 AS 号,用 network 宣告自有网段,用 display bgp peer 或 show ip bgp summary 确认邻居 Established。最容易错的两处:H3C 必须在地址族里激活邻居;network 宣告的网段在路由表里必须有掩码一致的路由。

作者 顶联产品团队发布于 7 分钟阅读

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 的静态路由。

想看看在你的机房里怎么用?

从一次产品演示开始,梳理你的业务链路。

查看价格
服务热线 400-112-2951

让我们聊聊你的 IDC 业务

扫码添加企业微信,预约产品演示或申请试用。

Toplink 企业微信二维码

长按保存或使用企业微信 / 微信扫描

也可致电
400-112-2951
Telegram
@TopLink88