# 8.3 动态路由器架设:quagga (zebra + ripd)
## 8.3 动态路由器架设:quagga (zebra + ripd)
在一般的静态路由器上面,我们可以透过修改路由配置文件 (route-ethN) 来设定好既定的路由规则,让你的路由器运作顺利。不过, 这样的方法总是觉得很讨厌!如果某天因为组织的再造导致需要重新规划子网网段,如此一来,你就得要在[图 8.2-1](#fig8.2-1) 的 Router A 与 Linux Router 再次的处理与检查路由规则,真是有够麻烦的~ 那能不能让路由器自己学习新的路由,来达成自动增加该笔路由的信息呢?
上述的功能就是所谓的动态路由。动态路由通常是用在路由器与路由器之间的沟通,所以要让你的路由器具有动态路由的功能, 你必须要了解到对方路由器上面所提供的动态路由协议才行,这样两部路由器才能够透过该协议来沟通彼此的路由规则。 目前常见的动态路由协议有:RIPv1, RIPv2, OSPF, BGP 等。
想要在 CentOS 上面搞定这些动态路由的相关机制,那就得要使用 quagga 这个软件啦!这个软件是 zebra 计划的延伸, 相关的官网说明可以参考文后的参考数据([注3](#ps3))。既然要玩 quagga ,自然就得要先安装他啰!赶紧处理吧!
```
[root@www ~]# yum install quagga
[root@www ~]# ls -l /etc/quagga
-rw-r--r--. 1 root root 406 Jun 25 20:19 ripd.conf.sample
-rw-r-----. 1 quagga quagga 26 Jul 22 11:11 zebra.conf
-rw-r--r--. 1 root root 369 Jun 25 20:19 zebra.conf.sample
.....(其他省略).....
```
这个软件所提供的各项动态路由协议都放置到 /etc/quagga/ 目录内,底下我们以较为简单的 RIPv2 协议来处理动态路由, 不过你得要注意的是,不论你要启动什么动态路由协议,那个 zebra 都必须要先启动才行!这是因为:
- zebra 这个 daemon 的功能在更新核心的路由规则;
- RIP 这个 daemon 则是在向附近的其他 Router 沟通协调路由规则的传送与否。
而各个路由服务的配置文件都必须要以 /etc/quagga/\*.conf 的档名来储存才行,如上表我们可以发现 zebra 这个服务是有设定好了,不过 ripd 的档名却不是 .conf 结尾。所以我们必须要额外作些设定才行。
为了练习一下我们的 quagga ,当然得要设计一下可能的网络联机啰~假设网络联机的图标如下,共有三个区网的网段, 其中最大的是 192.168.1.0/24 这个外部区网,另有两个内部区网分别是 192.168.100.0/24 及 192.168.200.0/24 。
![](https://box.kancloud.cn/2016-05-13_5735da4fce2cb.gif)
图 8.3-1、练习动态路由所设定的网络联机示意图
上图的两部 Linux Router 分别负责不同的网域,其中 Router Z1 是上个小节设定好之后就保留的,左边的 Router Z2 则是需要额外设定的路由器喔!两部 Router 可以透过 192.168.1.0/24 这个网域来沟通。在没有设定额外路由规则的情况下,那个 PC Z1 与 PC Z2 是无法沟通的!另外,quagga 必须要同时安装在两部 Linux Router 上头才行, 而且我们只要设定好这两部主机的网络接口 (eth0, eth1) 后,不需要手动输入额外的路由设定喔!可以透过 RIP 这个路由协议来搞定的!
- 1\. 将所有主机的 IP 设定妥当:
这是最重要的吧?请将这四部主机 (Router Z1, Router Z2, PC Z1, PC Z2) 的网络参数,按照图 8.3-1 的模样设置妥当。 设置的方式请参考本章上一小节,或者是依据第四章的 4.2.1 来设定啰,这里不再重复说明了。 另外,在 Router Z1, Z2 的部分还得要加上修改 ip*forwrad 参数!亦即是 /etc/sysctl.conf 的设定值喔! 这个鸟哥也常常忘记 @*@。
- 2\. 在两部 Router 上面设定 zebra :
我们先设定图 8.3-1 右手边那一部 Router Z1,关于 zebra.conf 你可以这样设定的:
```
# 1\. 先设定会影响动态路由服务的 zebra 并且启动 zebra
[root@www ~]# vim /etc/quagga/zebra.conf
hostname www.centos.vbird <==给予这个路由器一个主机名,随便取!
password linuxz1 <==给予一个密码!
enable password linuxz1 <==将这个密码生效!
log file /var/log/quagga/zebra.log <==将所有 zebra 产生的信息存到登录文件中
[root@www ~]# /etc/init.d/zebra start
[root@www ~]# chkconfig zebra on
[root@www ~]# netstat -tunlp | grep zebra
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.1:2601 0.0.0.0:* LISTEN 4409/zebra
```
仔细看,由于 zebra 这个服务的任务主要是在修改 Linux 系统核心内的路由, 所以他仅监听本机接口而已,并不会监听外部的接口才对!另外,在 zebra.conf 这个档案当中, 我们所设定的那个密码是有作用的喔!可以让我们登入 zebra 这套软件呢! 好了,我们来查一查这个 2601 的 port 是否正确的启动的呢?
```
[root@www ~]# telnet localhost 2601
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
Hello, this is Quagga (version 0.99.15).
Copyright 1996-2005 Kunihiro Ishiguro, et al.
User Access Verification
Password: <==在这里输入刚刚你设定的密码啊!
www.centos.vbird> ? <==在这边输入『 ? 』就能够知道有多少指令可使用
echo Echo a message back to the vty
enable Turn on privileged mode command
exit Exit current mode and down to previous mode
help Description of the interactive help system
list Print command list
quit Exit current mode and down to previous mode
show Show running system information
terminal Set terminal line parameters
who Display who is on vty
www.centos.vbird> list <==列出所有可用指令
echo .MESSAGE
....(中间省略)....
show debugging zebra
show history
show interface [IFNAME]
....(中间省略)....
show ip protocol
show ip route
....(其他省略)....
www.centos.vbird> show ip route
Codes: K - kernel route, C - connected, S - static, R - RIP, O - OSPF,
I - ISIS, B - BGP, > - selected route, * - FIB route
K>* 0.0.0.0/0 via 192.168.1.254, eth0 <==核心直接设定的
C>* 127.0.0.0/8 is directly connected, lo <==接口产生的路由
K>* 169.254.0.0/16 is directly connected, eth1 <==核心直接设定的
C>* 192.168.1.0/24 is directly connected, eth0 <==接口产生的路由
C>* 192.168.100.0/24 is directly connected, eth1 <==接口产生的路由
www.centos.vbird> exit
Connection closed by foreign host.
```
仔细看到,我们登入这个 zebra 的服务之后,可以输入『help』或问号『?』, zebra 就会显示出你能够执行的指令有哪些,比较常用的当然是查询路由规则啰!以『 show ip route 』来查阅,结果可以发现目前的接口与默认路由都被显示出来了,显示的结果当中:
- K :代表以类似 route 指令加入核心的路由规则,包括 route-ethN 所产生的规则;
- C :代表由你的网络接口所设定的 IP 而产生的相关的路由规则
- S :以 zebra 功能所设定的静态路由信息;
- R :就是透过 RIP 协议所增加的路由规则啰!
事实上,如果你还想要增加额外的静态路由的话,也可以透过 zebra 而不必使用 route 指令呢! 例如想要增加 10.0.0.0/24 给 eth0 来处理的话,可以这样做:
```
[root@www ~]# vim /etc/quagga/zebra.conf
# 新增底下这一行喔!
ip route 10.0.0.0/24 eth0
[root@www ~]# /etc/init.d/zebra restart
[root@www ~]# telnet localhost 2601
Password: <==这里输入密码
www.centos.vbird> show ip route
K>* 0.0.0.0/0 via 192.168.1.254, eth0
<u>S>* 10.0.0.0/24 [1/0] is directly connected, eth0</u>
C>* 127.0.0.0/8 is directly connected, lo
K>* 169.254.0.0/16 is directly connected, eth1
C>* 192.168.1.0/24 is directly connected, eth0
C>* 192.168.100.0/24 is directly connected, eth1
```
嘿嘿!立刻就会多出一笔路由的规则,而且最右边会显示 S,亦即是静态路由 (Static route) 的意思。 如此一来,我们系统管理员可就轻松多了!设定完右边 Router Z1 的 zebra 之后,不要忘记设定你的 Router Z2 呦! 同样的设定再来一遍啦!只是主机名与密码应该给予不同才是呦!因为过程都一样,鸟哥就不再重复设定。 接下来我们可以开始看看 ripd 这个服务啰!
- 3\. 在两部 Router 上面设定 ripd 服务:
ripd 这个服务可以在两部 Router 之间进行路由规则的交换与沟通,当然啦,如果你的环境里面有类似 Cisco 或者是其他有提供 RIP 协议的路由器的话,那么你当然也是可以透过这个 RIP 让你的 Linux Router 与其他硬件路由器互相沟通的吶! 只不过 CentOS 6.x 的 quagga 所提供的 ripd 服务使用的是 RIPv2 版本,这个版本预设就要求得要进行身份验证的动作, 但是我们是个小型网络,并不想要加入这个身份验证的功能,因此就得要增加某些设定值才能够顺利的启动 ripd 呦!
先来设定 Router Z1 吧!在 Router Z1 当中,我们主要是透过 eth0 发送所有的网域路由信息,同时,我们管理的网域有 192.168.1.0/24, 192.168.100.0/24。再加上取消身份验证的设定值后,我们的 ripd 就会变成这样:
```
[root@www ~]# vim /etc/quagga/ripd.conf
hostname www.centos.vbird <==这里是设定 Router 的主机名而已
password linuxz1 <==设定好你自己的密码喔!
debug rip events <==可以记录较多的错误讯息!
debug rip packet <==鸟哥透过这个讯息解决很多问题
router rip <==启动 Router 的 rip 功能
version 2 <==启动的是 RIPv2 的服务 (默认值)
network 192.168.1.0/24 <==这两个就是我们管理的接口啰!
network 192.168.100.0/24
<u>interface eth0</u> <==针对外部的那个接口,要略过身份验证的方式
<u>no ip rip authentication mode</u> <==就是这个项目!不要验证身份!
log file /var/log/quagga/zebra.log <==登录档设定与 zebra 相同即可
[root@www ~]# /etc/init.d/ripd start
[root@www ~]# chkconfig ripd on
[root@www ~]# netstat -tulnp | grep ripd
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.1:2602 0.0.0.0:* LISTEN 4456/ripd
udp 0 0 0.0.0.0:520 0.0.0.0:* 4456/ripd
# 新版的 quagga 启动的 2602 仅在 127.0.0.1,是透过 port 520 来传递信息!
```
基本上,这样就设定完成一部路由器的 RIP 动态路由协议了!在上头 ripd.conf 的设定当中, 他会主动以 eth0 及 192.168.1.0/24 这个网域的功能来进行搜索,如此一来,未来你进行任何路由规则的变动, 或者是整个网域的主机 IP 进行更动,你将不需要重新到每部 Router 上更动! 因为这些路由器会自动的更新他们自己的规则喔!嘿嘿!接下来,同样的动作请你到 [图 8.3-1](#fig8.3-1) 左边那部 Router Z2 上面设定一下! 因为整个设定的流程都一样,所以这里鸟哥就省略啦!
- 4\. 检查 RIP 协议的沟通结果:
在两部 Linux Router 都设定妥当之后,你可以登入 zebra 去看这两部主机的路由更新结果喔! 举例来说,鸟哥登入[图 8.3-1](#fig8.3-1) 右边那部 Router Z1 后,并且登入 zebra , 观察路由会是这样的情况:
```
[root@www ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.100.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
10.0.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
192.168.200.0 192.168.1.200 255.255.255.0 UG 2 0 0 eth0
0.0.0.0 192.168.1.254 0.0.0.0 UG 0 0 0 eth0
# 其实看路由就知道啦!那条有点线的就是新增的路由规则!很清楚!
[root@www ~]# telnet localhost 2601
Password: <==不要忘记了密码啊!
www.centos.vbird> show ip route
Codes: K - kernel route, C - connected, S - static, R - RIP, O - OSPF,
I - ISIS, B - BGP, > - selected route, * - FIB route
K>* 0.0.0.0/0 via 192.168.1.254, eth0
S>* 10.0.0.0/24 [1/0] is directly connected, eth0
C>* 127.0.0.0/8 is directly connected, lo
K>* 169.254.0.0/16 is directly connected, eth1
C>* 192.168.1.0/24 is directly connected, eth0
C>* 192.168.100.0/24 is directly connected, eth1
R>* 192.168.200.0/24 [120/2] via 192.168.1.200, eth0, 00:02:43
```
如果你有看到上述的字体,嘿嘿!那就是成功啦!那个最左边的 R 代表的是透过 RIP 通讯协议所设定的路由规则啦! 如此一来,咱们的路由器设定就搞定啰~如果一切都没有问题,你也想要开机就启动 zebra, ripd,那么还得要这样:
```
[root@www ~]# chkconfig zebra on
[root@www ~]# chkconfig ripd on
```
透过这个 quagga 以及 RIPv2 的路由协议的辅助,我们可以轻松的就将路由规则分享到附近区网的其他路由器上头, 比起单纯使用 route 去修改 Linux 的核心路由表,这个动作当然要快速很多!不过,如果是很小型的网络环境,那么不要使用这个 quagga 啊!因为有点多此一举的感觉。如果你的企业环境真的有够大,那么玩一玩这个 quagga 配合一些动态路由协议,嘿嘿!也是可行的啦!
**Tips:** 鸟哥差一点被这一版的 ripd.conf 设定内容搞死~因为 CentOS 5.x 以后的版本预设的 RIPv2 会去进行身份验证,所以原先在 CentOS 4.x 的设定是不能用的,偏偏登录档又看不出个所以然..后来查到可以透过 ripd.conf 内的 debug 参数去设定除错登录, 才发现 RIPv2 的认证问题!最终 google 一下才解决问题~好累啊!
![](https://box.kancloud.cn/2016-05-13_5735736501917.gif)
- - - - - -
- 鸟哥的Linux私房菜:服务器架设篇 第三版
- 第一部份:架站前的进修专区
- 作者序
- 第一章、架设服务器前的准备工作
- 1.1 前言: Linux 有啥功能
- 1.2 基本架设服务器流程
- 1.3 自我评估是否已经具有架站的能力
- 1.4 本章习题
- 第二章、基础网络概念
- 2.1 网络是个什么玩意儿
- 2.2 TCP/IP 的链结层相关协议
- 2.3 TCP/IP 的网络层相关封包与数据
- 2.4 TCP/IP 的传输层相关封包与数据
- 2.5 连上 Internet 前的准备事项
- 2.6 重点回顾:
- 2.7 本章习题
- 2.8 参考数据与延伸阅读
- 第三章、局域网络架构简介
- 3.1 局域网络的联机
- 3.2 本书使用的内部联机网络参数与通讯协议
- 第四章、连上 Internet
- 4.1 Linux 连上 Internet 前的注意事项
- 4.2 连上 Internet 的设定方法
- 4.3 无线网络--以笔记本电脑为例
- 4.4 常见问题说明
- 4.5 重点回顾
- 4.6 本章习题
- 4.7 参考数据与延伸阅读
- 第五章、 Linux 常用网络指令
- 5.1 网络参数设定使用的指令
- 5.2 网络侦错与观察指令
- 5.3 远程联机指令与实时通讯软件
- 5.4 文字接口网页浏览
- 5.5 封包撷取功能
- 5.6 重点回顾
- 5.7 本章习题
- 5.8 参考数据与延伸阅读
- 第六章、 Linux 网络侦错
- 6.1 无法联机原因分析
- 6.2 处理流程
- 6.3 本章习题
- 6.4 参考数据与延伸阅读
- 第二部分:主机的简易资安防护措施
- 第七章、网络安全与主机基本防护:限制端口, 网络升级与 SELinux
- 7.1 网络封包联机进入主机的流程
- 7.2 网络自动升级软件
- 7.3 限制联机埠口 (port)
- 7.4 SELinux 管理原则
- 7.5 被攻击后的主机修复工作
- 7.6 重点回顾
- 7.7 课后练习
- 7.8 参考数据与延伸阅读
- 第八章、路由观念与路由器设定
- 8.1 路由
- 8.2 路由器架设
- 8.3 动态路由器架设:quagga (zebra + ripd)
- 8.4 特殊状况:路由器两边界面是同一个 IP 网段: ARP Proxy
- 8.5 重点回顾
- 8.6 本章习题
- 8.7 参考数据与延伸阅读
- 第九章、防火墙与 NAT 服务器
- 9.1 认识防火墙
- 9.2 TCP Wrappers
- 9.3 Linux 的封包过滤软件:iptables
- 9.4 单机防火墙的一个实例
- 9.5 NAT 服务器的设定
- 9.6 重点回顾
- 9.7 本章习题
- 9.8 参考数据与延伸阅读
- 第十章、申请合法的主机名
- 10.1 为何需要主机名
- 10.2 注册一个合法的主机名
- 10.3 重点回顾
- 10.4 本章习题
- 10.5 参考数据与延伸阅读
- 第三部分:局域网络内常见的服务器架设
- 第十一章、远程联机服务器SSH / XDMCP / VNC / RDP
- 11.1 远程联机服务器
- 11.2 文字接口联机服务器: SSH 服务器
- 11.3 最原始图形接口: Xdmcp 服务的启用
- 11.4 华丽的图形接口: VNC 服务器
- 11.5 仿真的远程桌面系统: XRDP 服务器
- 11.6 SSH 服务器的进阶应用
- 11.7 重点回顾
- 11.8 本章习题
- 11.9 参考数据与延伸阅读
- 第十二章、网络参数控管者: DHCP 服务器
- 12.1 DHCP 运作的原理
- 12.2 DHCP 服务器端的设定
- 12.3 DHCP 客户端的设定
- 12.4 DHCP 服务器端进阶观察与使用
- 12.5 重点回顾
- 12.6 本章习题
- 12.7 参考数据与延伸阅读
- 第十三章、文件服务器之一:NFS 服务器
- 13.1 NFS 的由来与其功能
- 13.2 NFS Server 端的设定
- 13.3 NFS 客户端的设定
- 13.4 案例演练
- 13.5 重点回顾
- 13.6 本章习题
- 13.7 参考数据与延伸阅读
- 第十四章、账号控管: NIS 服务器
- 14.1 NIS 的由来与功能
- 14.2 NIS Server 端的设定
- 14.3 NIS Client 端的设定
- 14.4 NIS 搭配 NFS 的设定在丛集计算机上的应用
- 14.5 重点回顾
- 14.6 本章习题
- 14.7 参考数据与延伸阅读
- 第十五章、时间服务器: NTP 服务器
- 15.1 关于时区与网络校时的通讯协议
- 15.2 NTP 服务器的安装与设定
- 15.3 客户端的时间更新方式
- 15.4 重点回顾
- 15.5 本章习题
- 15.6 参考数据与延伸阅读
- 第十六章、文件服务器之二: SAMBA 服务器
- 16.1 什么是 SAMBA
- 16.2 SAMBA 服务器的基础设定
- 16.3 Samba 客户端软件功能
- 16.4 以 PDC 服务器提供账号管理
- 16.5 服务器简单维护与管理
- 16.6 重点回顾
- 16.7 本章习题
- 16.8 参考数据与延伸阅读
- 第十七章、区网控制者: Proxy 服务器
- 17.1 什么是代理服务器 (Proxy)
- 17.2 Proxy 服务器的基础设定
- 17.3 客户端的使用与测试
- 17.4 服务器的其他应用设定
- 17.5 重点回顾
- 17.6 本章习题
- 17.7 参考数据与延伸阅读
- 第十八章、网络驱动器装置: iSCSI 服务器
- 18.1 网络文件系统还是网络驱动器
- 18.2 iSCSI target 的设定
- 18.3 iSCSI initiator 的设定
- 18.4 重点回顾
- 18.5 本章习题
- 18.6 参考数据与延伸阅读
- 第四部分:常见因特网服务器架设
- 第十九章、主机名控制者: DNS 服务器
- 19.1 什么是 DNS
- 19.2 Client 端的设定
- 19.3 DNS 服务器的软件、种类与 cache only DNS 服务器设定
- 19.4 DNS 服务器的详细设定
- 19.5 协同工作的 DNS: Slave DNS 及子域授权设定
- 19.6 DNS 服务器的进阶设定
- 19.7 重点回顾
- 19.8 本章习题
- 19.9 参考数据与延伸阅读
- 第二十章、WWW 伺服器
- 20.1 WWW 的簡史、資源以及伺服器軟體
- 20.2 WWW (LAMP) 伺服器基本設定
- 20.3 Apache 伺服器的進階設定
- 20.4 登錄檔分析以及 PHP 強化模組
- 20.5 建立連線加密網站 (https) 及防砍站腳本
- 20.6 重點回顧
- 20.7 本章習題
- 20.8 參考資料與延伸閱讀
- 第二十一章、文件服务器之三: FTP 服务器
- 21.1 FTP 的数据链路原理
- 21.2 vsftpd 服务器基础设定
- 21.3 客户端的图形接口 FTP 联机软件
- 21.4 让 vsftpd 增加 SSL 的加密功能
- 21.5 重点回顾
- 21.6 本章习题
- 21.7 参考数据与延伸阅读
- 第二十二章、邮件服务器: Postfix
- 22.1 邮件服务器的功能与运作原理
- 22.2 MTA 服务器: Postfix 基础设定
- 22.3 MRA 服务器: dovecot 设定
- 22.4 MUA 软件:客户端的收发信软件
- 22.5 邮件服务器的进阶设定
- 22.6 重点回顾
- 22.7 本章习题
- 22.8 参考数据与延伸阅读