BGP基础配置——一个简单的iBGP、eBGP和IGP联动拓扑搭建


对IP与网络的基础有了初步的认知之后,我们要探索更加深入、更加复杂的内容了。首先要学习的就是BGP——边界网关协议。正是这个协议把世界从一个个局域网串联起来,形成我们众所周知的因特网,打破各个自治系统之间的隔阂,让世界互联成为可能。本实验基于华为HCIP教材以及eNSP进行模拟,通过实战对BGP形成初步认知,了解如何启动BGP、iBGP和eBGP的区别、BGP报文以及对外发送BGP路由条目。

实验拓扑

实验拓扑如图所示,其中AR1、AR2和AR3都属于AS 65001,而AR4属于AS 65002。值得注意的是,64512-65534是私有AS号。各个端口配置的IP地址将会在后面的配置命令中给出。

其中,AR2不属于BGP路由器,不设置BGP的相关功能。在AS65001内部,仅AR1和AR3构建iBGP对等体,通过Loopback接口地址建立连接;而AR1和AR4建立eBGP对等体关系,通过直连接口地址建立连接。

基础配置

我们先在各个设备上配置IP地址,如下:

1
2
3
4
5
6
7
<AR1>dis ip int brief 
Interface IP Address/Mask Physical Protocol
GigabitEthernet0/0/0 192.168.12.1/24 up up
GigabitEthernet0/0/1 172.16.14.1/24 up up
GigabitEthernet0/0/2 unassigned down down
LoopBack0 10.0.0.1/32 up up(s)
NULL0 unassigned up up(s)
1
2
3
4
5
6
7
<AR2>dis ip int br
Interface IP Address/Mask Physical Protocol
GigabitEthernet0/0/0 192.168.12.2/24 up up
GigabitEthernet0/0/1 192.168.23.2/24 up up
GigabitEthernet0/0/2 unassigned down down
LoopBack0 10.0.0.2/32 up up(s)
NULL0 unassigned up up(s)
1
2
3
4
5
6
<AR3>dis ip int br
GigabitEthernet0/0/0 unassigned down down
GigabitEthernet0/0/1 192.168.23.3/24 up up
GigabitEthernet0/0/2 unassigned down down
LoopBack0 10.0.0.3/32 up up(s)
NULL0 unassigned up up(s)
1
2
3
4
5
6
<AR4>dis ip int br
GigabitEthernet0/0/0 unassigned down down
GigabitEthernet0/0/1 172.16.14.4/24 up up
GigabitEthernet0/0/2 unassigned down down
LoopBack0 10.0.0.4/32 up up(s)
NULL0 unassigned up up(s)

AS65001内配置OSPF(IGP)

然后我们把OSPF配置一下。如果不配OSPF,那么AR1和AR3就无法路由到彼此,那么更无从谈起BGP邻居的建立了。所以,我们要先配置OSPF。本试验在AS65001内配置IGP即可。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<AR1>dis cur con ospf
[V200R003C00]
#
ospf 1
area 0.0.0.0
network 10.0.0.1 0.0.0.0
network 172.16.14.0 0.0.0.255
network 192.168.12.0 0.0.0.255
#
Return

<AR2>dis cur con ospf
[V200R003C00]
#
ospf 1
area 0.0.0.0
network 10.0.0.2 0.0.0.0
network 192.168.12.0 0.0.0.255
network 192.168.23.0 0.0.0.255
#
Return

<AR3> dis cur con ospf
[V200R003C00]
#
ospf 1
area 0.0.0.0
network 10.0.0.3 0.0.0.0
network 192.168.23.0 0.0.0.255
#
Return

这样,内部的OSPF就建立好了。可以通过这些命令复习一下OSPF是怎么配置的。通过OSPF进程和area区域,并通过network宣告参与OSPF计算的IP地址即可。

BGP配置

我们在AR1上做了这样的配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
[AR1]bgp 65001
[AR1-bgp]router-id 10.0.0.1
[AR1-bgp]peer 10.0.0.3 as
[AR1-bgp]peer 10.0.0.3 as-number 65001
[AR1-bgp]peer 10.0.0.3 connect-interface lo0 #iBGP最好用Loopback地址去建立
[AR1-bgp]dis th
[V200R003C00]
#
bgp 65001
router-id 10.0.0.1
peer 10.0.0.3 as-number 65001
peer 10.0.0.3 connect-interface LoopBack0
#
ipv4-family unicast
undo synchronization
peer 10.0.0.3 enable
#
return
[AR1-bgp]q

在AR3上做了这样的配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[AR3]bgp 65001
[AR3-bgp]router-id 10.0.0.3
[AR3-bgp]peer 10.0.0.1 as-number 65001
[AR3-bgp]peer 10.0.0.1 connect-interface lo0
[AR3-bgp]dis th
[V200R003C00]
#
bgp 65001
router-id 10.0.0.3
peer 10.0.0.1 as-number 65001
peer 10.0.0.1 connect-interface LoopBack0
#
ipv4-family unicast
undo synchronization
peer 10.0.0.1 enable
#
Return

BGP的配置要点在于:

主要步骤在于:

  1. 启动BGP进程。其方法为bgp <as-number>
  2. 配置router-id。其方法为router-id <ipv4 address>
  3. 配置BGP对等体。其方法为peer <ipv4/ipv6 address> as-number <AS号(数字或者x.y形式均可)>
  4. 指定发送BGP报文的源接口。默认使用报文的出接口作为源接口。
  5. 配置BGP引入路由。例如network或者import-route

iBGP建立及过程

BGP邻居查看

我们看看AR1上的BGP邻居吧:

1
2
3
4
5
6
7
8
9
<AR1>dis bgp peer

BGP local router ID : 10.0.0.1
Local AS number : 65001
Total number of peers : 1 Peers in established state : 1

Peer V AS MsgRcvd MsgSent OutQ Up/Down State PrefRcv

10.0.0.3 4 65001 15 15 0 00:13:40 Established 0

以及AR3:

1
2
3
4
5
6
7
8
9
<AR3>dis bgp peer

BGP local router ID : 10.0.0.3
Local AS number : 65001
Total number of peers : 1 Peers in established state : 1

Peer V AS MsgRcvd MsgSent OutQ Up/Down State PrefRcv

10.0.0.1 4 65001 16 17 0 00:14:02 Established 0

可以看到,AR1和AR3已经顺利建立起了iBGP邻居了。

BGP的建立过程

我们如果抓包,是可以看到建立过程的,以AR1为例:

我们筛选出来端口号是179的所有TCP包,就能看到整个交互逻辑了。我们可以看到的确两个方向都发送了TCP连接,但是AR3发起的TCP连接最终被关闭了,保留的是由AR1发起的TCP连接。而且可以看到很多互相发送keepalive报文的过程:

我们可以大概看一下Open报文长什么样:

其核心内容包括我的AS号、Hold Time和Router ID。其中保持时间是需要进行协商的,建立BGP peer需要保持这个参数一致。

我们再看一下Keepalive包,这个没有内容,只有BGP报头。

值得注意的是,双方都发送了Keepalive报文,才意味着BGP连接完成,进入Established状态!

eBGP建立

到现在,我们AS65001的iBGP连接就已经建立完毕了。接下来我们将建立AR1和AR4之间的BGP连接,即eBGP。

对于AR1,由于已经配置了router-id,无需重复配置。而且对于eBGP,最好用接口本身作为建立连接的地址,因此也无需配置connect-interface。所以我们配置如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<AR1>sys
Enter system view, return user view with Ctrl+Z.
[AR1]bgp 65001
[AR1-bgp]peer 172.16.14.4 as-number 65002
[AR1-bgp]dis th
[V200R003C00]
#
bgp 65001
router-id 10.0.0.1
peer 10.0.0.3 as-number 65001
peer 10.0.0.3 connect-interface LoopBack0
peer 172.16.14.4 as-number 65002
#
ipv4-family unicast
undo synchronization
peer 10.0.0.3 enable
peer 172.16.14.4 enable
#
return
[AR1-bgp]q
[AR1]q

对于AR4,我们还需要配置一下router-id。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<AR4>sys
Enter system view, return user view with Ctrl+Z.
[AR4]bgp 65002
[AR4-bgp]peer 172.16.14.1 as-number 65001
[AR4-bgp]router-id 10.0.0.4
[AR4-bgp]dis th
[V200R003C00]
#
bgp 65002
router-id 10.0.0.4
peer 172.16.14.1 as-number 65001
#
ipv4-family unicast
undo synchronization
peer 172.16.14.1 enable
#
return
[AR4-bgp]q
[AR4]q

过了一会儿,我们就能看到这样的提示了:

Mar 24 2026 09:35:40-08:00 AR1 %%01BGP/3/STATE_CHG_UPDOWN(l)[0]:The status of the peer 172.16.14.4 changed from OPENCONFIRM to ESTABLISHED. (InstanceName=Public, StateChangeReason=Up)

Mar 24 2026 09:35:41-08:00 AR4 %%01BGP/3/STATE_CHG_UPDOWN(l)[0]:The status of the peer 172.16.14.1 changed from OPENCONFIRM to ESTABLISHED. (InstanceName=Public, StateChangeReason=Up)

这就说明这个eBGP peer邻居也建立好了。

我们可以分别在AR1和AR4上执行dis bgp peer看一眼:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<AR1>dis bgp peer

BGP local router ID : 10.0.0.1
Local AS number : 65001
Total number of peers : 2 Peers in established state : 2

Peer V AS MsgRcvd MsgSent OutQ Up/Down State PrefRcv

10.0.0.3 4 65001 972 974 0 16:10:40 Established 0
172.16.14.4 4 65002 3 5 0 00:01:21 Established 0

<AR4>dis bgp peer

BGP local router ID : 10.0.0.4
Local AS number : 65002
Total number of peers : 1 Peers in established state : 1

Peer V AS MsgRcvd MsgSent OutQ Up/Down State PrefRcv

172.16.14.1 4 65001 3 3 0 00:01:45 Established 0

接着,我们让AR4向AS65001宣告路由。我们可以先看看AR4的路由表:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<AR4>dis  ip ro
Route Flags: R - relay, D - download to fib
------------------------------------------------------------------------------
Routing Tables: Public
Destinations : 8 Routes : 8

Destination/Mask Proto Pre Cost Flags NextHop Interface

10.0.0.4/32 Direct 0 0 D 127.0.0.1 LoopBack0
127.0.0.0/8 Direct 0 0 D 127.0.0.1 InLoopBack0
127.0.0.1/32 Direct 0 0 D 127.0.0.1 InLoopBack0
127.255.255.255/32 Direct 0 0 D 127.0.0.1 InLoopBack0
172.16.14.0/24 Direct 0 0 D 172.16.14.4 GigabitEthernet0/0/1
172.16.14.4/32 Direct 0 0 D 127.0.0.1 GigabitEthernet0/0/1
172.16.14.255/32 Direct 0 0 D 127.0.0.1 GigabitEthernet0/0/1
255.255.255.255/32 Direct 0 0 D 127.0.0.1 InLoopBack0

BGP这个协议是不会主动对外广播路由条目的,除非你主动要求了。也就是说,需要用network或者import-route进行对外宣告,而且需要遵守BGP条目的产生原则。

然后我们在AR4上执行如下配置:

1
2
3
[AR4]bgp 65002
[AR4-bgp]network 10.0.0.4 32
[AR4-bgp]import-route static

这是在把路由注入到BGP中。我们可以在AR4上加入好几条静态路由,看看能不能发送过去。我们添加的静态路由如下,并进行了抓包:

1
2
3
4
[AR4]ip route-static 172.16.0.0 24 172.16.14.5
[AR4]ip route-static 172.16.1.0 24 172.16.14.5
[AR4]ip route-static 172.16.2.0 24 172.16.14.5
[AR4]ip route-static 172.16.3.0 24 172.16.14.5

我们上AR1再看一下:

1
2
3
4
5
6
7
8
9
10
<AR1>dis bgp peer

BGP local router ID : 10.0.0.1
Local AS number : 65001
Total number of peers : 2 Peers in established state : 2

Peer V AS MsgRcvd MsgSent OutQ Up/Down State PrefRcv

10.0.0.3 4 65001 1013 1020 0 16:51:22 Established 0
172.16.14.4 4 65002 49 46 0 00:42:03 Established 5

请注意,通过172.16.14.4这个peer学习到的路由条目是5了!说明eBGP广播生效了!

接着,我们分别上AR1和AR3看看是不是这么回事:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<AR1>dis bgp ro

BGP Local router ID is 10.0.0.1
Status codes: * - valid, > - best, d - damped,
h - history, i - internal, s - suppressed, S - Stale
Origin : i - IGP, e - EGP, ? - incomplete


Total Number of Routes: 5
Network NextHop MED LocPrf PrefVal Path/Ogn

*> 10.0.0.4/32 172.16.14.4 0 0 65002i
*> 172.16.0.0/24 172.16.14.5 0 0 65002?
*> 172.16.1.0/24 172.16.14.5 0 0 65002?
*> 172.16.2.0/24 172.16.14.5 0 0 65002?
*> 172.16.3.0/24 172.16.14.5 0 0 65002?

<AR3>dis bgp ro

BGP Local router ID is 10.0.0.3
Status codes: * - valid, > - best, d - damped,
h - history, i - internal, s - suppressed, S - Stale
Origin : i - IGP, e - EGP, ? - incomplete


Total Number of Routes: 5
Network NextHop MED LocPrf PrefVal Path/Ogn

*>i 10.0.0.4/32 172.16.14.4 0 100 0 65002i
*>i 172.16.0.0/24 172.16.14.5 0 100 0 65002?
*>i 172.16.1.0/24 172.16.14.5 0 100 0 65002?
*>i 172.16.2.0/24 172.16.14.5 0 100 0 65002?
*>i 172.16.3.0/24 172.16.14.5 0 100 0 65002?

没错,都学到路由信息了!一条lo0通过network宣告,4条静态通过import-route宣告。我们还捕捉到了至关重要的Update包:

可以看到,相关的更新信息都在这里实现的。至此,我们的BGP基础配置就顺利完成了!

最后,我们看一下聚合路由的配置。因为AR4发布了好多/24的路由,条目不少,如果能聚合在一起,可以大幅降低路由条目数量。

1
[AR4-bgp]aggregate 172.16.0.0 22 detail-suppressed

我们执行了路由聚合。这将导致对外发布的路由不再是明细路由,而是聚合后的结果。然后我们去AR3上看一下,发现的确如此:

1
2
3
4
5
6
7
8
9
10
11
12
13
<AR3>dis bgp ro

BGP Local router ID is 10.0.0.3
Status codes: * - valid, > - best, d - damped,
h - history, i - internal, s - suppressed, S - Stale
Origin : i - IGP, e - EGP, ? - incomplete


Total Number of Routes: 2
Network NextHop MED LocPrf PrefVal Path/Ogn

*>i 10.0.0.4/32 172.16.14.4 0 100 0 65002i
*>i 172.16.0.0/22 172.16.14.4 100 0 65002?

所以,路由聚合的作用就是让BGP对外只宣告聚合后的条目,而不宣告明细路由。我们可以看到UPDATE条目:

以及新增路由:

这就是BGP路由条目的“一拆一装”!

结语

至此,我们已经顺利完成了基础BGP的搭建,也看到了BGP路由是如何宣告出去的。目前应该对BGP的概念有所了解,知道iBGP、eBGP和IGP的区别和联系,之后应当在现网中加深理解,为后续路由反射、路径属性和路由优选打下坚实的基础。


文章作者: Jack Zhang
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Jack Zhang !
  目录