千家信息网

在CentOS中怎么制作BGP路由器

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,这篇文章主要讲解了"在CentOS中怎么制作BGP路由器",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"在CentOS中怎么制作BGP路由器"吧!Qua
千家信息网最后更新 2026年11月01日在CentOS中怎么制作BGP路由器

这篇文章主要讲解了"在CentOS中怎么制作BGP路由器",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"在CentOS中怎么制作BGP路由器"吧!

Quagga是一个开源路由软件套件。在这个教程中,我将会重点讲讲如何把一个Linux系统变成一个BGP路由器,还是使用Quagga,演示如何建立BGP与其它BGP路由器对等。

在我们进入细节之前,一些BGP的背景知识还是必要的。边界网关协议(即BGP)是互联网的域间路由协议的实际标准。在BGP术语中,全球互联网是由成千上万相关联的自治系统(AS)组成,其中每一个AS代表每一个特定运营商提供的一个网络管理域(据说,美国前总统乔治.布什都有自己的 AS 编号)。
为了使其网络在全球范围内路由可达,每一个AS需要知道如何在英特网中到达其它的AS。这时候就需要BGP出来扮演这个角色了。BGP是一个AS去与相邻的AS交换路由信息的语言。这些路由信息通常被称为BGP线路或者BGP前缀。包括AS号(ASN;全球唯一号码)以及相关的IP地址块。一旦所有的BGP线路被当地的BGP路由表学习和记录,每一个AS将会知道如何到达互联网的任何公网IP。

在不同域(AS)之间路由的能力是BGP被称为外部网关协议(EGP)或者域间协议的主要原因。就如一些路由协议,例如OSPF、IS-IS、RIP和EIGRP都是内部网关协议(IGPs)或者域内路由协议,用于处理一个域内的路由.
测试方案

在这个教程中,让我们来使用以下拓扑。

我们假设运营商A想要建立一个BGP来与运营商B对等交换路由。它们的AS号和IP地址空间的细节如下所示:

运营商 A: ASN (100), IP地址空间 (100.100.0.0/22), 分配给BGP路由器eth2网卡的IP地址(100.100.1.1)

运营商 B: ASN (200), IP地址空间 (200.200.0.0/22), 分配给BGP路由器eth2网卡的IP地址(200.200.1.1)

路由器A和路由器B使用100.100.0.0/30子网来连接到对方。从理论上来说,任何子网从运营商那里都是可达的、可互连的。在真实场景中,建议使用掩码为30位的公网IP地址空间来实现运营商A和运营商B之间的连通。
在 CentOS中安装Quagga

如果Quagga还没安装好,我们可以使用yum来安装Quagga。


代码如下:

# yum install quagga

如果你正在使用的是CentOS7系统,你需要应用一下策略来设置SELinux。否则,SElinux将会阻止Zebra守护进程写入它的配置目录。如果你正在使用的是CentOS6,你可以跳过这一步。


代码如下:

# setsebool -P zebra_write_config 1

Quagga软件套件包含几个守护进程,这些进程可以协同工作。关于BGP路由,我们将把重点放在建立以下2个守护进程。

Zebra:一个核心守护进程用于内核接口和静态路由.
BGPd:一个BGP守护进程.

配置日志记录

在Quagga被安装后,下一步就是配置Zebra来管理BGP路由器的网络接口。我们通过创建一个Zebra配置文件和启用日志记录来开始第一步。


代码如下:

# cp /usr/share/doc/quagga-XXXXX/zebra.conf.sample /etc/quagga/zebra.conf

在CentOS6系统中:


代码如下:

# service zebra start
# chkconfig zebra on

在CentOS7系统中:


代码如下:

# systemctl start zebra
# systemctl enable zebra

Quagga提供了一个叫做vtysh特有的命令行工具,你可以输入与路由器厂商(例如Cisco和Juniper)兼容和支持的命令。我们将使用vtysh shell来配置BGP路由在教程的其余部分。

启动vtysh shell 命令,输入:


代码如下:

# vtysh

提示将被改成该主机名,这表明你是在vtysh shell中。


代码如下:

Router-A#

现在我们将使用以下命令来为Zebra配置日志文件:


代码如下:

Router-A# configure terminal
Router-A(config)# log file /var/log/quagga/quagga.log
Router-A(config)# exit

永久保存Zebra配置:


代码如下:

Router-A# write

在路由器B操作同样的步骤。
配置对等的IP地址

下一步,我们将在可用的接口上配置对等的IP地址。


代码如下:

Router-A# show interface #显示接口信息

Interface eth0 is up, line protocol detection is disabled
. . . . .
Interface eth2 is up, line protocol detection is disabled
. . . . .

配置eth0接口的参数:


代码如下:

site-A-RTR# configure terminal
site-A-RTR(config)# interface eth0
site-A-RTR(config-if)# ip address 100.100.0.1/30
site-A-RTR(config-if)# description "to Router-B"
site-A-RTR(config-if)# no shutdown
site-A-RTR(config-if)# exit

继续配置eth2接口的参数:


代码如下:

site-A-RTR(config)# interface eth2
site-A-RTR(config-if)# ip address 100.100.1.1/24
site-A-RTR(config-if)# description "test ip from provider A network"
site-A-RTR(config-if)# no shutdown
site-A-RTR(config-if)# exit

现在确认配置:


代码如下:

Router-A# show interface

Interface eth0 is up, line protocol detection is disabled
Description: "to Router-B"
inet 100.100.0.1/30 broadcast 100.100.0.3
Interface eth2 is up, line protocol detection is disabled
Description: "test ip from provider A network"
inet 100.100.1.1/24 broadcast 100.100.1.255

Router-A# show interface description #显示接口描述

Interface Status Protocol Description
eth0 up unknown "to Router-B"
eth2 up unknown "test ip from provider A network"

如果一切看起来正常,别忘记保存配置。


代码如下:

Router-A# write

同样地,在路由器B重复一次配置。

在我们继续下一步之前,确认下彼此的IP是可以ping通的。


代码如下:

Router-A# ping 100.100.0.2

PING 100.100.0.2 (100.100.0.2) 56(84) bytes of data.
64 bytes from 100.100.0.2: icmp_seq=1 ttl=64 time=0.616 ms

下一步,我们将继续配置BGP对等和前缀设置。
配置BGP对等

Quagga守护进程负责BGP的服务叫bgpd。首先我们来准备它的配置文件。


代码如下:

# cp /usr/share/doc/quagga-XXXXXXX/bgpd.conf.sample /etc/quagga/bgpd.conf

在CentOS6系统中:


代码如下:

# service bgpd start
# chkconfig bgpd on

在CentOS7中:


代码如下:

# systemctl start bgpd
# systemctl enable bgpd

现在,让我们来进入Quagga 的shell。


代码如下:

# vtysh

第一步,我们要确认当前没有已经配置的BGP会话。在一些版本,我们可能会发现一个AS号为7675的BGP会话。由于我们不需要这个会话,所以把它移除。


代码如下:

Router-A# show running-config

... ... ...
router bgp 7675
bgp router-id 200.200.1.1
... ... ...

我们将移除一些预先配置好的BGP会话,并建立我们所需的会话取而代之。


代码如下:

Router-A# configure terminal
Router-A(config)# no router bgp 7675
Router-A(config)# router bgp 100
Router-A(config)# no auto-summary
Router-A(config)# no synchronizaiton
Router-A(config-router)# neighbor 100.100.0.2 remote-as 200
Router-A(config-router)# neighbor 100.100.0.2 description "provider B"
Router-A(config-router)# exit
Router-A(config)# exit
Router-A# write

路由器B将用同样的方式来进行配置,以下配置提供作为参考。


代码如下:

Router-B# configure terminal
Router-B(config)# no router bgp 7675
Router-B(config)# router bgp 200
Router-B(config)# no auto-summary
Router-B(config)# no synchronizaiton
Router-B(config-router)# neighbor 100.100.0.1 remote-as 100
Router-B(config-router)# neighbor 100.100.0.1 description "provider A"
Router-B(config-router)# exit
Router-B(config)# exit
Router-B# write

当相关的路由器都被配置好,两台路由器之间的对等将被建立。现在让我们通过运行下面的命令来确认:


代码如下:

Router-A# show ip bgp summary


从输出中,我们可以看到"State/PfxRcd"部分。如果对等关闭,输出将会显示"Idle"或者"Active'。请记住,单词'Active'这个词在路由器中总是不好的意思。它意味着路由器正在积极地寻找邻居、前缀或者路由。当对等是up状态,"State/PfxRcd"下的输出状态将会从特殊邻居接收到前缀号。

在这个例子的输出中,BGP对等只是在AS100和AS200之间呈up状态。因此没有前缀被更改,所以最右边列的数值是0。
配置前缀通告

正如一开始提到,AS 100将以100.100.0.0/22作为通告,在我们的例子中AS 200将同样以200.200.0.0/22作为通告。这些前缀需要被添加到BGP配置如下。

在路由器-A中:


代码如下:

Router-A# configure terminal
Router-A(config)# router bgp 100
Router-A(config)# network 100.100.0.0/22
Router-A(config)# exit
Router-A# write

在路由器-B中:


代码如下:

Router-B# configure terminal
Router-B(config)# router bgp 200
Router-B(config)# network 200.200.0.0/22
Router-B(config)# exit
Router-B# write

在这一点上,两个路由器会根据需要开始通告前缀。
测试前缀通告

首先,让我们来确认前缀的数量是否被改变了。


代码如下:

Router-A# show ip bgp summary


为了查看所接收的更多前缀细节,我们可以使用以下命令,这个命令用于显示邻居100.100.0.2所接收到的前缀总数。


代码如下:

Router-A# show ip bgp neighbors 100.100.0.2 advertised-routes


查看哪一个前缀是我们从邻居接收到的:


代码如下:

Router-A# show ip bgp neighbors 100.100.0.2 routes


我们也可以查看所有的BGP路由器:


代码如下:

Router-A# show ip bgp


以上的命令都可以被用于检查哪个路由器通过BGP在路由器表中被学习到。


代码如下:

Router-A# show ip route

代码: K - 内核路由, C - 已链接 , S - 静态 , R - 路由信息协议 , O - 开放式最短路径优先协议,

I - 中间系统到中间系统的路由选择协议, B - 边界网关协议, > - 选择路由, * - FIB 路由


代码如下:

C>* 100.100.0.0/30 is directly connected, eth0
C>* 100.100.1.0/24 is directly connected, eth2
B>* 200.200.0.0/22 [20/0] via 100.100.0.2, eth0, 00:06:45

Router-A# show ip route bgp

B>* 200.200.0.0/22 [20/0] via 100.100.0.2, eth0, 00:08:13

BGP学习到的路由也将会在Linux路由表中出现。


代码如下:

[root@Router-A~]# ip route

100.100.0.0/30 dev eth0 proto kernel scope link src 100.100.0.1
100.100.1.0/24 dev eth2 proto kernel scope link src 100.100.1.1
200.200.0.0/22 via 100.100.0.2 dev eth0 proto zebra

最后,我们将使用ping命令来测试连通。结果将成功ping通。


代码如下:

[root@Router-A~]# ping 200.200.1.1 -c 2

总而言之,本教程将重点放在如何在CentOS系统中运行一个基本的BGP路由器。这个教程让你开始学习BGP的配置,一些更高级的设置例如设置过滤器、BGP属性调整、本地优先级和预先路径准备等,我将会在后续的教程中覆盖这些主题。

感谢各位的阅读,以上就是"在CentOS中怎么制作BGP路由器"的内容了,经过本文的学习后,相信大家对在CentOS中怎么制作BGP路由器这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!

路由 代码 路由器 配置 前缀 对等 命令 地址 系统 运营商 运营 接口 进程 学习 教程 通告 制作 之间 信息 空间 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技公司 什么是科技互联网 亿人帮互联网科技有限公司 疫情对互联网科技公司影响 网络科技有限互联网 高科技与互联网 互联网金融公司科技 深圳齐家互联网科技 科技大学互联网专业好不好 华服互联网科技官网 昊天互联网科技有限公司 洛阳昕诺飞互联网科技有限公司 浙南科技城互联网大厦建设工程 华夏恒生互联网科技013171 爱医互联网络科技 昆明中奇联合互联网科技 米泉互联网科技专业怎么样 三亚科技创新互联网基地 深圳互联网科技园地址 中国主要互联网科技公司 天津市摩尔互联网科技 上海互联网科技有限公司 互联网高科技股票 宁夏众和广鑫互联网科技有限公司 重庆互联网医院沙龙医盟信息科技 洛阳共同富裕互联网科技有限公司 广州富喜互联网络科技 陕西九四连强互联网科技有限公司 广州智享互联网科技 杭州科技互联网公司有哪些
0