linux虚拟网络之软路由Quagga

Quagga特性;Quagga相关文件;Quagga配置特性与错误 ============================================================================================================ Quagga软件原名是Zebra是由一个日本开发团队编写的一个以GNU版权方式发布的软件。 Quagga的特性 1.模块化设计:Quagga基于模块化方案的设计,即对每一个路由协议使用单独的守护进程。 因此Quagga运行时要运行多个守护进程,包括ripd ripngd ospfd ospf6d bgpd 和Zebra。 其中,Zebra守护进程用来更新内核的路由表,而其他的守护进程负责进行相应路由选择协议的路由更新。 2.运行速度快:因为使用了模块化的设计,使得Quagga的运行速度比一般的路由选择程序要快。 3.可靠性高:在所有软件模块都失败的情况下,路由器可以继续保持连接并且daemons也会继续运行。故障诊断不必离线的状态下被诊断和更正 --------------------------------------------------------------------------------------------------------------- Quagga相关文件 Quagga的配置文件均放在/etc/quagga目录下。 Quagga的模板文件在/usr/share/doc/quagga-0.99.22.4/ vtysh.conf为配置Quagga所使用的shell的配置文件 zebra.conf是Quagga的主要配置文件。 Quagga对每钟路由选择协议有单独的配置文件: RIP 所需的 ripd.conf OSPF所需的ospf.conf BGP所需的 bgp.conf --------------------------------------------------------------------------------------------------------------- Quagga配置特性与错误: 1.配置界面有锁机制,当一个进程进入到配置界面时,其他进程无法接入到配置界面 2.centos与vtysh的状态是实时同步的。例如: a.centos增加veth pair接口对,在vtysh进程"show interface",可以看到接口实时更新 b.centos中实时进行网卡IP的配置,zebra进程"show interface",可以看到接口IP实时更新 c.在vtysh进程进行端口IP配置,centos "ip a",可以看到信息实时更新 3.vtysh进行配置,write时,保存所有相关进程的配置;ospfd write时,只保存ospfd.conf; zebra进程只加载zebra.conf的配置,其配置界面也只有配置zebra的相关命令,没有其他配置命令,例如:无法配置动态路由协议;write时,只保存zebra.conf ospfd进程只加载ospfd.conf的配置,其配置界面也只能配置ospf相关配置,没有其他配置命令,例如:可以进入到接口视图,但无法配置接口IP;也无法配置bgp;write时,只保存ospfd.conf vtysh管理界面则加载quagga相关活动进程的配置文件;拥有全部的配置命令;write时,保存所有的相关配置到各个配置文件中。 4.个人猜想:vtysh可能只是将所有相关进程的配置集中起来,去重存异。 现象1:当zebra.conf和ospf.conf的password配置不同时,vtysh界面show run看到2个password; 现象2:在现象1的基础上,vtysh界面进行password修改,write后,zebra.conf和ospf.conf显示为相同的password 5.错误:vtysh界面无法保存ospfd配置,可能是因为ospfd.conf文件权限的关系导致的。猜测正确的修复方式应该是将文件属主修改为quagga 6.错误:write时提示“Can‘t open configuration file /etc/quagga/zebra.conf.OS1Uu5.”,系selinux导致的。

Quagga安装前准备;Quagga运行守护进程;zebra/ospfd/bgpd命令参数;进入配置界面的多种方式 ================================================================================================================ Quagga安装前准备 yum install readline-devel (--enable-vtysh需要) yum install quagga #SELinux需要关闭,未关闭的情况下,自己遇到的问题就是write时报错“Can‘t open configuration file /etc/quagga/zebra.conf.OS1Uu5.” getenforce #查看SELinux状态 setenforce 0 #临时关闭SELinux,设置SELinux 成为permissive模式(不用重启机器) 修改/etc/selinux/config 文件,将SELINUX=enforcing改为SELINUX=disabled #改配置文件需要重启机器 cat /etc/services |grep 2601 #该文件保存了服务和端口的对应关系,不建议修改 --------------------------------- 安装Quagga的另一个总结版本: 1.yum install quagga 2.rpm -ql quagga #找到其中一个文件/usr/share/doc/quagga-0.99.22.4/ospfd.conf.sample 3.将文件放入目录/etc/quagga cp /usr/share/doc/quagga-0.99.22.4/ospfd.conf.sample /etc/quagga/ospfd.conf 4.启动ospf进程:systemctl start ospfd 5.命令vtysh进入到ospf的配置界面(和思科的非常相似,命令也是可以补齐的) 6.ss -ntlp #可以看到ospf的进程信息 7./proc/sys/net/ipv4/ip_forward #centos系统的IP转发功能,0开启,1关闭 ----------------------------------------------------------------------------------------------------------------- Quagga运行守护进程 systemctl start zebra systemctl start ospfd #相当于/usr/sbin/ospfd -d -A 127.0.0.1 -f /etc/quagga/ospfd.conf service zebra start chkconfig zebra on chkconfig --list zebra zebra -d #以守护进程的方式运行zebra,但是与‘systemctl start zebra’有区别,缺少了一些参数 ospfd -d #以守护进程的方式运行ospfd,但是与‘systemctl start ospfd’有区别,缺少了一些参数 bgpd -d #以守护进程的方式运行bgpd,但是与‘systemctl start bgpd’有区别,缺少了一些参数 /usr/local/sbin/zebra -d #启动zebra后台程序 /usr/local/sbin/(ospfd|bgpd|ripd) -d #运行其他守护进程 ----------------------------------------------------------------------------------------------------------------- zebra/ospfd/bgpd命令参数 zebra -h #查看命令行选项 [root@yefeng quagga]# zebra -h #ospfd,bgpd等命令的参数与zebra有区别,但基本一致 -b, --batch Runs in batch mode -d, --daemon Runs in daemon mode -f, --config_file Set configuration file name -i, --pid_file Set process identifier file name -z, --socket Set path of zebra socket -k, --keep_kernel Don't delete old routes which installed by zebra. -C, --dryrun Check configuration for validity and exit -A, --vty_addr Set vty's bind address -P, --vty_port Set vty's port number -r, --retain When program terminates, retain added route by zebra. -u, --user User to run as -g, --group Group to run as -s, --nl-bufsize Set netlink receive buffer size -v, --version Print program version -h, --help Display this help and exit ----------------------------------------------------------------------------------------------------------------- 进入配置界面:进入Quagga以及其他守护进程的配置界面 vtysh vtysh -c "show running" telnet 127.0.0.1 2601 #zebra telnet localhost 2601 telnet 127.1 2601 telnet 127.0.0.1 2602 #ripd telnet 127.0.0.1 2603 #ripngd telnet 127.0.0.1 2604 #ospfd telnet 127.0.0.1 2605 #bgpd telnet 127.0.0.1 2606 #ospf6d

Quagga查看配置与保存;修改路由器基本配置(zebra进程配置) ================================================================================================================ 查看配置(Quagga等守护进程enable界面): yefeng# show running-config yefeng# show startup-config ---------------------------------- 配置保存: 方式1: write #保存配置,若报错打不开文件,则需要关闭SELinux,例如“Can‘t open configuration file /etc/quagga/zebra.conf.OS1Uu5.” copy running-config startup-config 方式2: 直接修改zebra.conf等配置文件 ----------------------------------------------------------------------------------------------------------------- 修改路由器基本配置(zebra进程配置) 路由器基本配置 (1)进入配置模式: [root@vn quagga]# telnet 127.0.0.1 2601 #进入zrbra守护进程配置界面 Router> enable #进入特权模式 Router# config terminal #进入配置模式 (2)设置系统网络名称 Router(config)# hostname Router1 (3)配置密码 Router1(config)# password zebra #配置终端连接密码;若zebra.conf文件无password配置,则telent后提示“Vty password is not set.” Router1(config)# enable password zebra #配置进入特权模式的密码 Router1(config)# service password-encryption #对口令进行加密;注意,该配置要在配置密码后再进行配置 (4)配置接口IP地址 Router1(config)# interface eth0 #一定要进入接口模式 Router1(config-if)# ip add #按tab键自动补全 Router1(config-if)# ip address 192.168.0.2/24 #设定IP地址,子网掩码 Router1(config-if)# no shutdown #激活网络接口 Router1(config-if)# exit #退出 Router1(config)# interface eth1 #添加第二个IP Router1(config-if)# ip address 192.168.1.2/24 #设置IP地址、子网掩码 Router1(config-if)# no shutdown #激活网络接口 Can't up interface #这里需要添加一块虚拟网卡, 注意选择仅与主机共享一个网络(host only) Router1(config-if)# no shutdown Router1(config-if)# exit Router1(config)# exit Router1# show interface #查看接口信息 Router1# show interface eth0 #单独查看eth0的接口信息 为eth1配置IP地址(重新打开一个terminal): [root@vn ~]# ifconfig eth1 192.168.1.2 Router1# show interface eth1 (5)显示IP路由表信息 Router1# show ip route (6)设置和查看访问控制列表 Router1# configure terminal Router1(config)# access-list private-only permit 192.168.0.0/24 只允许这四个网络进行转发,拒绝其他任何网络 Router1(config)# access-list private-only permit 192.168.1.0/24 Router1(config)# access-list private-only permit 192.168.2.0/24 Router1(config)# access-list private-only permit 192.168.3.0/24 Router1(config)# access-list private-only deny any Router1# show ip access-list 查看访问控制列表 (7)查看和保存路由器配置 Router1# show running-config 查看当前正在运行的路由配置 Router1# show startup-config 显示下一次启动的配置内容 Router1# copy running-config startup-config 保存到下一次启动的配置文件中 Router1# write Connection closed by foreign host. [root@vn quagga]# cat /etc/quagga/zebra.conf 这里可以看到配置信息 注意:另一种方法是直接修改/etc/quagga/zebra.conf 配置文件,这是两种方式,根据实际情况自己选择。 (8)日志 r1(config)# line vty r1(config-line)# exec-timeout 0 0 r1(config)# log stdout r1(config)# no log stdout r1(config)# log syslog r1(config)# no log syslog r1(config)# log file /var/log/quagga/zebra.log r1(config)# log file /usr/local/etc/zebra.log

修改路由器动态路由协议配置(ripd/ospfd/bgpd) ============================================================================================== 配置和查看ripd守护进程 # service ripd start # telnet localhost 2602 ripd(config)# hostname r1_ripd #改个名字好辨认 r1_ripd(config)# router rip #启动rip r1_ripd(config-router)# network 192.9.200.0/24 #RIPv1是有类别路由协议,RIPv2是无类别路由协议,Quagga 默认支持RIPv2,指定网络需要子网掩码 ri_ripd#show ip rip status r1_ripd# debug rip events r1_ripd# debug rip packet r1_ripd(config)# log file /var/log/quagga/ripd.log r1_ripd(config)# log file /usr/local/etc/ripd.log 然后我们在shell下查看debug信息 # tail -f /usr/local/etc/ripd.log ------------------------------------------------------ 配置和查看ospfd守护进程 Quagga使用ospfd程序实现OSPF路由功能,但ospfd需要从zebra程序获得接口信息,所以zebra程序必须在 ospfd程序之前运行。 ospfd不支持多个OSPF进程,我们不能指定OSPF进程号。 # service ospfd start # telnet localhost 2604 ospfd(config)# hostname r1_ospfd r1_ospfd(config)# router ospf #启动ospf r1_ospfd(config-router)# ospf router-id 192.9.200.179 #设置router-id r1_ospfd(config-router)# network 192.9.200.0/24 area 0 r1_ospfd(config-router)# network 192.168.2.0/24 area 2 #最关键的,来标识路由器上哪些IP网络号是OSPF的一部分,对于每个网络,我们必须标识该网络所属 的区域。 r1_ospfd# sh ip ospf route r1_ospfd# sh ip ospf interface r1_ospfd# debug ospf event r1_ospfd(config)# log file /var/log/quagga/ospfd.log r1_ospfd(config)# log file /usr/local/etc/ospfd.log 然后我们在shell下查看debug信息 shell_1> tail -f /usr/local/etc/ospfd.log r2_ospfd# show ip ospf neighbor r1_ospfd# sh ip ospf database r1_ospfd# show ip ospf int eth0 ------------------------------------------------------ 配置和查看bgpd守护进程 # service bgpd start # telnet localhost 2605 bgpd(config)# hostname r1_bgpd r1_bgpd(config)# router bgp 7675 #配置里已经指定了AS为7675. AS是一个16bit的数字,其范围从1到 65535。RFC 1930给出了AS编号使用指南。从64512到65535的AS编号范围是留作私用的,类似私有IP。 r1_bgpd(config-router)# network 192.9.200.0/24 r1_bgpd(config-router)# neighbor 192.9.200.179 remote-as 767

实验1:虚拟机与eNSP建立ospf邻居;实验2:虚拟机与eNSP建立bgp邻居 ========================================================================= 实验1:虚拟机与eNSP建立ospf邻居 1.两边配置ospf后,成功尽力ospf邻居 2.quagga应该只支持1个ospf进程 3.虚拟机宣告路由,eNSP可以正确学习到路由 4.eNSP宣告路由和引入静态路由,虚拟机可以正确学习到路由 ------------------------------------------------------ 实验2:虚拟机与eNSP建立bgp邻居 bgp 64512 router-id 192.168.98.1 peer 192.168.98.88 as-number 64513 # ipv4-family unicast undo synchronization peer 192.168.98.88 enable router bgp 64513 bgp router-id 192.168.98.88 neighbor 192.168.98.1 remote-as 64512 现象1:bgp邻居up过程很慢,等了至少10分钟,why? 现象2:路由宣告与华为路由器机制不同: 华为:bgp只能network有效网段,本地路由表没有的表项被network,虽然会有配置,但不生效,也不会通知给邻居。 quagga:不会进行本地路由表项的匹配,只要被network,则统统通告该路由。
Quagga 简介 https://blog.csdn.net/u011353822/article/details/41328801
Quagga简介、安装、配置说明 https://blog.csdn.net/qq_39642794/article/details/102523670
linux路由器Quagga的配置(一):安装 http://blog.sina.com.cn/s/blog_68b156d50101kf64.html
使用Quagga软件配置CentOS设备的方法详解 http://www.xitongzhijia.net/xtjc/20141211/32372.html
配置 eNSP 连接VMware虚拟机网络 https://blog.csdn.net/force_eagle/article/details/96093525
Linux中编译安装软件的流程 https://blog.csdn.net/renfeigui0/article/details/102932677
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!