Ceph入门到精通-如何编译安装Quagga?

Quagga

1. 理论部分

1.1 软件简介

Quagga中文翻译斑驴,是一种先进的路由软件包,提供一套基于TCP/IP的路由协议。

1.2 斑驴的应用场景

– 使得操作系统变成专业的路由
– 使得操作系统具有与传统路由通过路由协议直接对接

1.3 斑驴支持的路由协议

– BGP
– OSPF
– RIP
– IS-IS
– MPLS
– LDP
– BFD
– PIM-SSM

1.4 斑驴与传统路由的区别

– 传统路由以提供所有路由协议的过程程序的方式运行
– 斑驴由多个守护进程共同构建路由表的方式运行

1.5 斑驴的架构

+----+  +----+  +-----+  +-----+
|bgpd|  |ripd|  |ospfd|  |zebra|
+----+  +----+  +-----+  +-----+|
+---------------------------|--+
|                           v  |
|  UNIX Kernel  routing table  |
|                              |
+------------------------------+Quagga System Architecture

如上图所示:
– ripd,负责处理RIP协议
– ospfd,负责处理ospf v2协议
– bgpd,负责处理BGP v4协议
– zebra,作为内核路由表管理器
其他守护进程:
– ripngd
– ospf6d

1.6 斑驴支持的系统平台

– GNU/Linux
– FreeBSD
– NetBSD
– OpenBSD
另外,以下平台将来也可能支持
– Solaris
– Mac OSX

1.7 斑驴对C库的依赖

– GNU’s CCC
– LLVM’s clang
– Intel’s ICC
注:以上C库经过充分的测试

2 最佳实践

2.1 环境信息

2.1.1 系统信息

IP Address = 10.168.0.60
OS = RHEL 8.0 x86_64

2.1.2 编译环境配置

yum -y install gcc gcc-c++ make expat-devel

2.1.3 下载安装包

cd ~
wget https://gogs.quagga.net/attachments/a6f5eb64-639a-49cf-964e-7aa196b9ac50 -O quagga-1.2.4.tar.gz

注:如果你需要下载其他版本,或以上链接无效,请参阅如下链接,
Releases · Quagga/quagga · GitHub

2.1.4 解压安装包

tar -xf quagga-1.2.4.tar.gz

2.2 编译安装

2.2.1 预编译软件包

cd ~/quagga-1.2.4/
./configure --bindir=/usr/bin \--sbindir=/usr/sbin \--libexecdir=/usr/libexec \--sysconfdir=/etc/quagga \--localstatedir=/var/run/quagga \--libdir=/usr/lib64  \--includedir=/usr/include \--datarootdir=/usr/share \--infodir=/usr/share/info \--localedir=/usr/share/locale \--mandir=/usr/share/man \--docdir=/usr/share/doc/quagga \--enable-user=quagga \--enable-group=quagga \--enable-vty-group=quaggavt

参数“localstatedir”是必须设置为“/var/run/quagga”,否则配置ospf时会出现以下错误提示,

OSPF not enabled on this interface

如果看到如下错误提示,

configure: error: vtysh needs libreadline but was not found and usable on your system.

你可能需要安装如下依赖包,

yum install -y readline-devel

如果看到如下错误提示,

configure: error: Package requirements (libcares) were not met:Package 'libcares', required by 'virtual:world', not found

你可能需要安装如下依赖包,

yum install -y c-ares-devel

2.2.2 编译并安装软件包

make
make install

2.3 配置Quagga主服务zebra

2.3.1 创建运行用户

groupadd -g 85 quaggavt
groupadd -g 92 quagga
useradd -u 92 -g 92 -d /var/run/quagga/ -s /sbin/nologin quagga
usermod -G quaggavt quagga

2.3.2 部署配置文件

cp /etc/quagga/vtysh.conf.sample /etc/quagga/vtysh.conf
cp /etc/quagga/zebra.conf.sample /etc/quagga/zebra.conf
chown quagga:quagga /etc/quagga/
chown quagga:quagga /etc/quagga/*.conf
chown quagga:quaggavt /etc/quagga/vtysh.conf
chmod 640 /etc/quagga/*.conf

2.3.3 测试运行环境

zebra -d -f /etc/quagga/zebra.conf -C

参数简介,
-d 参数声明zebra以damon的模式运行
-f 参数声明zebra配置文件的位置
-C 参数声明zebra以测试模式运行并退出(适合调试)

2.3.4 手动测试运行

zebra -d -f /etc/quagga/zebra.conf -i /run/quagga/zebra.pid

参数简介,
-i 参数声明pid文件的位置
命令执行后,我们建议你使用如下命令确认运行正常,

pgrep -a zebra

如果你看到如下输出,则守护进程正常运行,

47962 zebra -d -f /etc/quagga/zebra.conf -i /run/quagga/zebra.pid

如果你需要手动退出进程,请使用如下命令,

kill 2 `pgrep zebra`

2.3.5 部署服务脚本

cp ~/quagga-1.2.4/redhat/*.service /usr/lib/systemd/system/
cp ~/quagga-1.2.4/redhat/quagga.sysconfig /etc/sysconfig/quagga

如果你需要外部主机可以管理zebra,我建议你修改如下配置

vim /etc/sysconfig/quagga

内容修改如下,

#
# Default: Bind all daemon vtys to the loopback(s) only
#
BABELD_OPTS="-A 127.0.0.1"
BGPD_OPTS="-A 127.0.0.1"
ISISD_OPTS="-A ::1"
OSPF6D_OPTS="-A ::1"
OSPFD_OPTS="-A 127.0.0.1"
RIPD_OPTS="-A 127.0.0.1"
RIPNGD_OPTS="-A ::1"
# ZEBRA_OPTS="-A 127.0.0.1"
ZEBRA_OPTS="-A 0.0.0.0"
PIMD_OPTS="-A 127.0.0.1"# Watchquagga configuration for LSB initscripts
#
# (Not needed with systemd: the service files are configured to automatically
# restart any daemon on failure. If zebra fails, all running daemons will be
# stopped; zebra will be started again; and then the previously running daemons
# will be started again.)
#
# Uncomment and edit this line to reflect the daemons you are actually using:
#WATCH_DAEMONS="zebra bgpd ospfd ospf6d ripd ripngd"
#
# Timer values can be adjusting by editing this line:
WATCH_OPTS="-Az -b_ -r/sbin/service_%s_restart -s/sbin/service_%s_start -k/sbin/service_%s_stop"

由于官方提供的启动脚本执行会报错,我们建议你使用如下命令修改,

vim /usr/lib/systemd/system/zebra.service

脚本修改如下,

[Unit]
Description=GNU Zebra routing manager
Wants=network.target
Before=network.target
After=network-pre.target
ConditionPathExists=/etc/quagga/zebra.conf
Documentation=man:zebra[Service]
Type=forking
EnvironmentFile=-/etc/sysconfig/quagga
ExecStartPre=/sbin/ip route flush proto zebra
ExecStartPre=-/usr/bin/mkdir -p /run/quagga
ExecStartPre=-/bin/chown -f quagga:quagga /run/quagga /etc/quagga/zebra.conf
ExecStartPre=-/bin/chown -f quagga:quaggavt /etc/quagga/vtysh.conf
ExecStartPre=-/bin/chmod -f 640 /etc/quagga/zebra.conf  /etc/quagga/vtysh.conf
ExecStart=/usr/sbin/zebra -d $ZEBRA_OPTS -f /etc/quagga/zebra.conf -i /run/quagga/zebra.pid
Restart=on-abort[Install]
WantedBy=multi-user.target

修改完毕后,你需要重新载入脚本,

systemctl daemon-reload

2.3.6 测试启动脚本

systemctl start zebra.service
systemctl stop zebra.service
systemctl restart zebra.service
systemctl status zebra.service

2.4.7 配置服务自启动

systemctl enable zebra.service

2.4 配置Quagga ospfd服务

2.4.1 部署配置文件

cp /etc/quagga/ospfd.conf.sample /etc/quagga/ospfd.conf
chown quagga:quagga /etc/quagga/
chown quagga:quagga /etc/quagga/*.conf
chown quagga:quaggavt /etc/quagga/vtysh.conf
chmod 640 /etc/quagga/*.conf

2.4.2 测试运行环境

ospfd -d -f /etc/quagga/zebra.conf -C

参数简介,
-d 参数声明zebra以damon的模式运行
-f 参数声明zebra配置文件的位置
-C 参数声明zebra以测试模式运行并退出(适合调试)

2.4.3 手动测试运行

ospfd -d -f /etc/quagga/ospfd.conf -i /run/quagga/ospfd.pid

参数简介,
-i 参数声明pid文件的位置
命令执行后,我们建议你使用如下命令确认运行正常,

pgrep -a ospfd

如果你看到如下输出,则守护进程正常运行,

51600 ospfd -d -f /etc/quagga/ospfd.conf -i /run/quagga/ospfd.pid

如果你需要手动退出进程,请使用如下命令,

kill 2 `pgrep ospfd`

2.4.4 部署服务脚本

vim /etc/sysconfig/quagga

内容修改如下,

#
# Default: Bind all daemon vtys to the loopback(s) only
#
BABELD_OPTS="-A 127.0.0.1"
BGPD_OPTS="-A 127.0.0.1"
ISISD_OPTS="-A ::1"
OSPF6D_OPTS="-A ::1"
# OSPFD_OPTS="-A 127.0.0.1"
OSPFD_OPTS="-A 0.0.0.0"
RIPD_OPTS="-A 127.0.0.1"
RIPNGD_OPTS="-A ::1"
# ZEBRA_OPTS="-A 127.0.0.1"
ZEBRA_OPTS="-A 0.0.0.0"
PIMD_OPTS="-A 127.0.0.1"# Watchquagga configuration for LSB initscripts
#
# (Not needed with systemd: the service files are configured to automatically
# restart any daemon on failure. If zebra fails, all running daemons will be
# stopped; zebra will be started again; and then the previously running daemons
# will be started again.)
#
# Uncomment and edit this line to reflect the daemons you are actually using:
#WATCH_DAEMONS="zebra bgpd ospfd ospf6d ripd ripngd"
#
# Timer values can be adjusting by editing this line:
WATCH_OPTS="-Az -b_ -r/sbin/service_%s_restart -s/sbin/service_%s_start -k/sbin/service_%s_stop"

由于官方提供的启动脚本执行会报错,我们建议你使用如下命令修改,

vim /usr/lib/systemd/system/ospfd.service

脚本修改如下,

[Unit]
Description=OSPF routing daemon
BindsTo=zebra.service
Wants=network.target
After=zebra.service network-pre.target
Before=network.target
ConditionPathExists=/etc/quagga/ospfd.conf
Documentation=man:ospfd[Service]
Type=forking
EnvironmentFile=/etc/sysconfig/quagga
ExecStartPre=-/bin/chown -f quagga:quagga /etc/quagga/ospfd.conf
ExecStartPre=-/bin/chmod -f 640 /etc/quagga/ospfd.conf
ExecStart=/usr/sbin/ospfd -d $OSPFD_OPTS -f /etc/quagga/ospfd.conf -i /run/quagga/ospfd.pid
Restart=on-abort[Install]
WantedBy=multi-user.target

修改完毕后,你需要重新载入脚本,

systemctl daemon-reload

2.4.5 测试启动脚本

systemctl start ospfd.service
systemctl stop ospfd.service
systemctl restart ospfd.service
systemctl status ospfd.service

2.4.6 配置服务自启动

systemctl enable ospfd.service

2.5 配置防火墙

2.5.1 确定路由服务的通讯端口

netstat -anp | egrep "ospfd|zebra"

可见如下输出,

tcp        0      0 0.0.0.0:2601            0.0.0.0:*               LISTEN      2746/zebra
tcp        0      0 0.0.0.0:2604            0.0.0.0:*               LISTEN      2753/ospfd
raw        0      0 0.0.0.0:89              0.0.0.0:*               LISTEN      2753/ospfd
raw6       0      0 :::58                   :::*                    7           2746/zebra

注:ospfd进程的89端口可能要等路由发布才能看到

2.5.2 允许路由的协议或端口通讯

egrep "89|58" /etc/protocols

可见如下信息,

ipv6-icmp       58      IPv6-ICMP               # ICMP for IPv6
ospf    89      OSPFIGP         # Open Shortest Path First IGP

由于89与58端口不是IP协议是一种socket的类型,所以使用允许协议的方式配置,

firewall-cmd --permanent --add-protocol=ospf
firewall-cmd --permanent --add-protocol=ipv6-icmp
firewall-cmd --reload
firewall-cmd --list-all

另外两个管理端口使用如下命令配置,

firewall-cmd --permanent --add-port 2601/tcp
firewall-cmd --permanent --add-port 2604/tcp
firewall-cmd --reload
firewall-cmd --list-all

2.6 配置服务自启动

如果你不熟悉路由的基本配置,请参阅以下链接的2.3章节,
如何实现基于Linux的路由之Quagga? – cmdSchool

参阅文档
===============

Quagga github
—————-
GitHub - Quagga/quagga: Quagga Tracking repository - Master is at http://git.savannah.gnu.org/cgit/quagga.git

Quagga的下载,
Releases · Quagga/quagga · GitHub
https://gogs.quagga.net/Quagga/quagga/releases

rpm包的构建
—————–
https://github.com/Quagga/quagga/blob/master/redhat/README.rpm_build.md

错误“OSPF not enabled on this interface”的解决方法,
———————–
https://lists.quagga.net/pipermail/quagga-users/2006-April/006715.html
https://lists.quagga.net/pipermail/quagga-users/2006-April/006709.html
Mailing List Archive: OSPF not enabled on this interface

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/87650.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Go 基础篇】Go语言日期与时间函数详解:时间的掌控与转化

Go语言是一种快速、简洁且高效的编程语言,它在处理日期与时间方面提供了丰富的标准库函数。本文将详细介绍Go语言中处理日期与时间的函数,涵盖常用的日期时间操作、格式化、时区转换等内容,并介绍time.Time结构体中的相关方法。 时间的表示与…

科技探究之旅--亲子研学活动

2023年8月26日,广州市从化区齐家社会工作服务中心(以下简称“齐家”)的“星乐园-乡村儿童公益辅导服务项目”组织了新开村及西湖村助学点24对亲子到广州市白云区文搏3D打印基地进行“科技探究之旅--亲子研学”活动,旨在发现、点燃…

AIGC - 生成模型

AIGC - 生成模型 0. 前言1. 生成模型2. 生成模型与判别模型的区别2.1 模型对比2.2 条件生成模型2.3 生成模型的发展2.4 生成模型与人工智能 3. 生成模型示例3.1 简单示例3.2 生成模型框架 4. 表示学习5. 生成模型与概率论6. 生成模型分类小结 0. 前言 生成式人工智能 (Generat…

2023第七届蓝帽杯 初赛 web LovePHP

LovePHP 直接给了源码。 network查看到,PHP版本是7.4.33 题目要求我们GET一个my_secret.flag参数,根据PHP字符串解析特性,PHP需要将所有参数转换为有效的变量名,因此在解析查询字符串时,它会做两件事: 删…

Spring Boot(Vue3+ElementPlus+Axios+MyBatisPlus+Spring Boot 前后端分离)【五】

😀前言 本篇博文是关于Spring Boot(Vue3ElementPlusAxiosMyBatisPlusSpring Boot 前后端分离)【五】,希望你能够喜欢 🏠个人主页:晨犀主页 🧑个人简介:大家好,我是晨犀,希望我的文章…

vscode使用anaconda自带的python环境在终端运行时报错

目录 具体报错内容官方翻译报错讲人话解决方法 具体报错内容 CommandNotFoundError: Your shell has not been properly configured to use conda activate. If your shell is Bash or a Bourne variant, enable conda for the current user with$ echo ". E:\Anaconda/e…

ResNet详解:网络结构解读与PyTorch实现教程

目录 一、深度残差网络(Deep Residual Networks)简介深度学习与网络深度的挑战残差学习的提出为什么ResNet有效? 二、深度学习与梯度消失问题梯度消失问题定义为什么会出现梯度消失?激活函数初始化方法网络深度 如何解决梯度消失问…

vulnhub Seattle-0.0.3

环境:vuluhub Seattle-0.0.3 1.catelogue处任意文件下载(目录穿越) http://192.168.85.139/download.php?item../../../../../../etc/passwd 有个admin目录,可以下载里面的文件进行读取 2.cltohes详情页面处(参数prod)存在sql报错注入 http://192.16…

数据分析作业四-基于用户及物品数据进行内容推荐

## 导入支持库 import pandas as pd import matplotlib.pyplot as plt import sklearn.metrics as metrics import numpy as np from sklearn.neighbors import NearestNeighbors from scipy.spatial.distance import correlation from sklearn.metrics.pairwise import pairwi…

AxureRP制作静态站点发布互联网,内网穿透实现公网访问

AxureRP制作静态站点发布互联网,内网穿透实现公网访问 文章目录 AxureRP制作静态站点发布互联网,内网穿透实现公网访问前言1.在AxureRP中生成HTML文件2.配置IIS服务3.添加防火墙安全策略4.使用cpolar内网穿透实现公网访问4.1 登录cpolar web ui管理界面4…

Android studio APK切换多个摄像头(Camera2)

1.先设置camera的权限 <uses-permission android:name"android.permission.CAMERA" /> 2.布局 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"and…

服务器部署前后端项目-SQL Father为例

hello~大家好哇&#xff0c;好久没更新博客了。现在来更新一波hhh 现在更新一下部署上的一些东西&#xff0c;因为其实有很多小伙伴跟我之前一样&#xff0c;很多时候只是开发了&#xff0c;本地前后端都能调通&#xff0c;也能用&#xff0c;但是没有部署到服务器试过&#x…