如何实现基于Linux的路由之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 = CentOS 7.3 x86_64

2.2 基本配置

2.2.1 基础安装包配置

yum install -y quagga

2.2.2 确认样例文件位置

 rpm -ql quagga | grep conf.sample

信息显示如下:

/usr/share/doc/quagga-0.99.22.4/babeld.conf.sample
/usr/share/doc/quagga-0.99.22.4/bgpd.conf.sample
/usr/share/doc/quagga-0.99.22.4/bgpd.conf.sample2
/usr/share/doc/quagga-0.99.22.4/isisd.conf.sample
/usr/share/doc/quagga-0.99.22.4/ospf6d.conf.sample
/usr/share/doc/quagga-0.99.22.4/ospfd.conf.sample
/usr/share/doc/quagga-0.99.22.4/ripd.conf.sample
/usr/share/doc/quagga-0.99.22.4/ripngd.conf.sample
/usr/share/doc/quagga-0.99.22.4/zebra.conf.sample

2.2.3 使用默认配置

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

以上配置文件是核心配置,如果要开通OSPF协议,请使用以下配置,

cp /usr/share/doc/quagga-0.99.22.4/ospfd.conf.sample /etc/quagga/ospfd.conf

2.2.4 配置路由远程管理

vim /etc/sysconfig/quagga

修改如下配置,

OSPFD_OPTS="-A 0.0.0.0"
ZEBRA_OPTS="-A 0.0.0.0"

注:以上定义所有地址都可管理,基于安全考量,我们建议你定义一个管理段的地址,例如“10.168.0.60”。

2.2.5 启动服务并配置服务自启动

systemctl start zebra.service
systemctl enable zebra.service

systemctl start ospfd.service
systemctl enable ospfd.service

启动完毕后,请使用以下命令确认服务启动,

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.2.6 允许路由的协议或端口通讯

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.2.7 安装管理工具

yum install -y telnet

2.2.8 测试路由功能

telnet 127.0.0.1 2601

向导如下:

Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.

Hello, this is Quagga (version 0.99.22.4).
Copyright 1996-2005 Kunihiro Ishiguro, et al.


User Access Verification

Password:
Router>

以上是测试zebra进程,如果测试ospfd进程,请使用如下命令,

telnet 127.0.0.1 2604

向导如下:

Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.

Hello, this is Quagga (version 0.99.22.4).
Copyright 1996-2005 Kunihiro Ishiguro, et al.


User Access Verification

Password:
ospfd>

注,默认密码是“zebra”

2.2.9 允许写入配置文件

setsebool -P zebra_write_config 1

2.3 zebra进程的常用命令

2.3.1 模式的切换

2.3.1.1 进入特权模式

Router> enable
Password:
Router#

注:默认密码是zebra

2.3.1.2 进入配置模式

Router# configure terminal
Router(config)#

2.3.1.3 退出配置模式

R1(config)# exit
R1# 

2.3.1.4 退出特权模式

R1# exit

信息显示如下:

Connection closed by foreign host.

2.3.2 配置路由名称

Router(config)# hostname R1
R1(config)#

2.3.3 密码相关配置

2.3.3.1 配置路由登录密码

R1(config)# password zebra

2.3.3.2 配置路由特权模式密码

R1(config)# enable password zebra

2.3.3.3 启用密码非明文模式

R1(config)# service password-encryption

2.3.4 接口相关配置

2.3.4.1 进入子接口模式

R1(config)# interface ens33
R1(config-if)#

2.3.4.2 配置接口IP地址

R1(config-if)# ip address 172.16.0.1/24
R1(config-if)# no shutdown
R1(config-if)# ip address 172.16.0.2/24
R1(config-if)# no shutdown

2.3.4.3 禁用接口IP地址

R1(config-if)# no ip address 172.16.0.2/24
R1(config-if)# no shutdown

2.3.5 接口相关操作

2.3.5.1 查看所有物理接口

R1# show interface description

信息显示如下:

Interface       Status  Protocol  Description
ens33           up      unknown
lo              up      unknown

2.3.5.2 查看所有物理接口配置

R1# show interface

信息显示如下:

Interface ens33 is up, line protocol detection is disabled
  index 2 metric 1 mtu 1500
  flags: 
  HWaddr: 00:0c:29:ac:9d:6f
  inet 10.168.0.60/24 broadcast 10.168.0.255
  inet 172.16.0.1/24 broadcast 172.16.0.255
  inet6 fe80::20c:29ff:feac:9d6f/64
Interface lo is up, line protocol detection is disabled
  index 1 metric 1 mtu 65536
  flags: 
  inet 127.0.0.1/8
  inet6 ::1/128

2.3.5.3 查看指定物理接口

R1# show interface ens33

信息显示如下:

Interface ens33 is up, line protocol detection is disabled
  index 2 metric 1 mtu 1500
  flags: 
  HWaddr: 00:0c:29:ac:9d:6f
  inet 10.168.0.60/24 broadcast 10.168.0.255
  inet 172.16.0.1/24 broadcast 172.16.0.255
  inet6 fe80::20c:29ff:feac:9d6f/64

2.3.6 路由操作

2.3.6.1 查看路由信息

R1# show ip route

信息显示如下:

Codes: K - kernel route, C - connected, S - static, R - RIP,
       O - OSPF, I - IS-IS, B - BGP, A - Babel,
       > - selected route, * - FIB route

K>* 0.0.0.0/0 via 10.168.0.1, ens33
C>* 10.168.0.0/24 is directly connected, ens33
C>* 127.0.0.0/8 is directly connected, lo
C>* 172.16.0.0/24 is directly connected, ens33

2.3.7 ACL相关操作

2.3.7.1 配置允许转发的网段

R1(config)# access-list private-only permit 172.16.0.0/24

2.3.7.2 查看允许转发的网段

R1# show ip access-list

信息显示如下:

ZEBRA:
Zebra IP access list private-only
    permit 172.16.0.0/24

2.3.8 配置相关操作

2.3.8.1 查看当前运行的配置

R1# show running-config

信息显示如下:

Current configuration:
!
hostname R1
password 8 nZ6u2H61cc6C6
enable password 8 XjKyrETErdUhM
service password-encryption
!
interface ens33
 ip address 172.16.0.1/24
 ipv6 nd suppress-ra
!
interface lo
!
access-list private-only permit 172.16.0.0/24
!
!
!
line vty
!
end

2.3.8.2 查看下次启动的配置

R1# show startup-config

信息显示如下:

! -*- zebra -*-
!
! zebra sample configuration file
!
! $Id: zebra.conf.sample,v 1.1 2002/12/13 20:15:30 paul Exp $
!
hostname Router
password zebra
enable password zebra
!
! Interface's description.
!
!interface lo
! description test of desc.
!
!interface sit0
! multicast

!
! Static default route sample.
!
!ip route 0.0.0.0/0 203.181.89.241
!

!log file zebra.log

2.3.8.3 保存配置到启动

R1# copy running-config startup-config

参阅文档:
=======================================
http://www.nongnu.org/quagga/docs/docs-info.html

没有评论

发表评论

Quagga
如何解决Quagga受Docker虚拟接口影响?

1 前言 一个问题,一篇文章,一出故事。 笔者生产环境Docker集群有用到Quagga做OSPF路 …

Quagga
如何编译安装Quagga?

1. 理论部分 1.1 软件简介 Quagga中文翻译斑驴,是一种先进的路由软件包,提供一套基于TC …

Quagga
如何熟悉斑驴(Quagga)静态路由命令?

1 环境配置 1.1 基础环境搭建 请参阅以下文章完成环境配置,并理解Quagga的基础理论, ht …