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路由器eth1网卡的IP地址(100.100.1.1)

运营商 B: ASN (200), IP地址空间 (200.200.0.0/22), 分配给BGP路由器eth1网卡的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 eth1 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

继续配置eth1接口的参数:

复制代码代码如下:

site-A-RTR(config)# interface eth1

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 eth1 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"

eth1 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对等

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, eth1

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 eth1 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属性调整、本地优先级和预先路径准备等,我将会在后续的教程中覆盖这些主题。

linux怎么查看bgp状态,在CentOS中制作BGP路由的教程相关推荐

  1. linux查看php端口,Linux如何查看端口状态

    Linux如何查看端口状态,相信大家应该都知道我们有的时候需要进行查看当前系统开放了哪些端口,这样子可以查看我们的服务是否正常运行,所以今天小魏给大家分享下在linux服务器下怎么来查看端口的情况. ...

  2. linux6 防火墙状态,linux 6 查看防火墙状态及开启关闭命令

    linux 6查看防火墙状态及开启关闭命令 存在以下两种方式: 一.service方式 查看防火墙状态: [root@centos6 ~]# service iptables status iptab ...

  3. Linux下 启动SELinux命令,Linux下查看SELinux状态和关闭SELinux的方法命令是什么

    Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统.对于SELinux状态可能很多用户不知道怎么设置,这篇文章主要介绍了Linux下查看SELinux状态和关闭SELi ...

  4. linux下查看防火墙状态、关闭防火墙、开放关闭端口等

    linux下查看防火墙状态.关闭防火墙.开放关闭端口等 1. 查看防火墙状态 2. 关闭防火墙 3. 开启防火墙 4. 关闭.开启防火墙示例看图 5. 查看防火墙开放的端口.设置开放端口 5.1 查看 ...

  5. linux php7 yum 卸载,Linux_在Centos中yum安装和卸载软件的使用方法,安装一个软件时 yum -y install h - phpStudy...

    在Centos中yum安装和卸载软件的使用方法 安装一个软件时 yum -y install httpd 安装多个相类似的软件时 yum -y install httpd* 安装多个非类似软件时 yu ...

  6. linux 查看san链路状态,Linux下查看网络状态的方法

    当我的设备在机房,懒得去查看网线连接情况:或者设备在远端,没有条件让眼睛亲临现场,我需要在终端查看设备网络接口的物理连接状态.基于此种场景,我就了解了几种关于命令查看网络状态的方法. 1. ifcon ...

  7. linux 查看was端口,Linux如何查看端口状态

    查看并发状态 # netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}' 这条语句返回结果如下 LAST_ACK 5 ...

  8. Linux查看PHP的端口号,linux如何查看端口状态

    linux查看端口状态使用netstat命令. netstat命令各个参数说明如下: -a:列出所有网络状态,包括 Socket 程序: -c秒数:指定每隔几秒刷新一次网络状态: -n:使用 IP 地 ...

  9. linux 下查看线程状态

    前言 在调试程序时需要查看各个线程的状态,方便定位问题. 解决 方法1.pstree pstree PID 方法2.top top 然后按H,会显示线程 -p 可以指定PID,但是在嵌入式平台很可能被 ...

最新文章

  1. Cannot resolve the collation conflict between SQL_Latin1_General_CP1_CI_AS and Latin1_General_100...
  2. STL源码剖析 算法章节 算法总览
  3. word把选择答案弄到题目里_word中把选择题的正确答案自动填到括号里技巧
  4. python爬虫金融数据_python爬虫项目-爬取雪球网金融数据(关注、持续更新)
  5. 关于NavigateUrl中绑定Eval()方法时出现服务器标记的格式不正确的解决方法
  6. 拷贝文件到另一台电脑
  7. Redis BigKey
  8. 关于SRVINSTW与Kernel-Mode Driver Manager
  9. 基于C#木门归方程序 下料机 锯片 CNC 拆单软件 全屋定制设计拆单软件橱柜衣柜拆单设计制造管理一体化软件 有屋软件
  10. 记一次Full GC(Ergonomics)引发的思考
  11. 地图 显示 动态轨迹_腾讯地图SDK全新版本上线,可满足开发者核心诉求
  12. android q状态栏,用腻了导航栏?在一加Android Q beta中强行开启全面屏手势
  13. Caché 实操《Caché 算法与数据结构-数组原理》学习笔记
  14. yaourt/yay 安装软件出现 parse “XXX“: first path segment in URL cannot contain colon 错误
  15. 为提高 SDLC 安全,GitHub 发布新功能|GitHub Universe 2022
  16. Cisco Packet Tracer 超网(CIDR)设置实验
  17. Windows桌面实现之八(DirectX HOOK 方式截取特殊的全屏程序之二)
  18. 莫比乌斯(mobius)笔记
  19. 天载配资总结指数很健康,现在新高
  20. 深度学习训练时GPU利用率忽高忽低问题

热门文章

  1. Fitnesse初体验(介绍、下载、安装)
  2. 思维导图局域网共享功能使用教程
  3. 考研阅卷【现场实拍】!你的分数是这样得出的!
  4. 离散元 python_刚开始学习离散元软件Yade,有什么建议?
  5. 开关电源变压器基础知识
  6. 3DMark 2005 Build 120
  7. 封装Windows10系统
  8. unity 一个物体赋予多个材质球
  9. MySQL的安装(详解)
  10. 超级搞笑!安全套(避孕套,保险套)经典广告语大全