「Network」- Quagga Routing Suite

  CREATED BY JENKINSBOT

问题描述

我们使用 Huawei AR1220E-S 设备,但运行在内网,无法直接访问。我们通过公网服务器,部署 xl2tpd 服务(作为中转),实现异地组网。但是 xl2tpd 存在动态分配地址、网络接口名不固定等等问题,我们决定部署动态路由协议的软件实现以解决这些问题,实现在多个软路由间网络互通。

我们选择 Quagga Routing Suite 来运行动态路由协议,只要原因是:其提供的 vtysh 命令,其交互方式与管理网络设备及其类似;另外支持的动态路由协议较多;广泛使用(从 Google Search 结果来看,使用 Quagga 的文章比较多)。

该笔记将记录:Quagga 的学习过程(参照官方文档),以及配置示例,常见问题解决方法。

解决方案

建议阅读 Quagga (http://www.quagga.net) 官方文档,以获取更多细节,该笔记仅作摘录笔记。

1 Overview(概念术语、系统架构)

1.1 About Quagga

1.2 System Architecture

这是官方提供的架构图:

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

如下,是我们绘制的架构图(根据文档的描述而绘制):

+------------------------------+
|                              |
|            vtysh             |
|                              |
+-||------||-------|--------|--+
  ||      ||       |        |
  ||      ||       |        |
+-||-+  +-||-+  +--|--+  +--|--+
|bgpd|  |ripd|  |ospfd|  |zebra|
+-||-+  +-||-+  +--|--+  +--|--+
  ||      ||       |        |
+-vv------vv-------v--------v--+
|  zebra (Kernel RIB Manager)  |
+--------------|---------------+
               |
+--------------v---------------+
|   UNIX Kernel routing table  |
+------------------------------+

服务端口号:

zebrasrv      2600/tcp		  # zebra service
zebra         2601/tcp		  # zebra vty
ripd          2602/tcp		  # RIPd vty
ripngd        2603/tcp		  # RIPngd vty
ospfd         2604/tcp		  # OSPFd vty
bgpd          2605/tcp		  # BGPd vty
ospf6d        2606/tcp		  # OSPF6d vty
ospfapi       2607/tcp		  # ospfapi
isisd         2608/tcp		  # ISISd vty
pimd          2611/tcp		  # PIMd vty
nhrpd         2612/tcp		  # nhrpd vty

1.3 Supported Platforms

1.4 Supported RFCs

1.5 How to get Quagga

1.6 Mailing List

1.7 Bug Reports

2 Installation(编译、安装、部署)

# from Source
./configure && make && make install

# Ubuntu 20.04.3 LTS
apt-get install quagga*

2.1 Configure the Software

2.2 Build the Software

2.3 Install the Software

命令 vtysh 负责控制管理这些组件,组件的端口号:

zebrasrv      2600/tcp		  # zebra service
zebra         2601/tcp		  # zebra vty
ripd          2602/tcp		  # RIPd vty
ripngd        2603/tcp		  # RIPngd vty
ospfd         2604/tcp		  # OSPFd vty
bgpd          2605/tcp		  # BGPd vty
ospf6d        2606/tcp		  # OSPF6d vty
ospfapi       2607/tcp		  # ospfapi
isisd         2608/tcp		  # ISISd vty
pimd          2611/tcp		  # PIMd vty
nhrpd         2612/tcp		  # nhrpd vty

3 Basic commands(通用选项及参数)

根据架构图所示,每个协议组件独立运行(能够运行在不同主机上):
1)five routing daemons: ripd, ripngd, ospfd, ospf6d, bgpd
2)one manager daemon: zebra

该笔记将记录:各组件都支持的 配置参数命令行选项 等等。

3.1 Config Commands(通用配置文件选项)

配置文件位置:/etc/quagga/*.conf

3.1.1 Basic Config Commands
1)例如密码配置,日志配置

3.1.2 Sample Config File
1)配置文件格式:

!
! Zebra configuration file
!
hostname Router
password zebra
enable password zebra
!
log stdout
!
!

3.2 Terminal Mode Commands(通用交互选项)

在 VTY 中,通用的命令,这些命令与协议模式无关,仅与 VTY 相关。

3.3 Common Invocation Options(通用命令行选项)

命令行选项,在命令行中使用的命令选项,用于控制服务的启动

3.4 Virtual Terminal Interfaces

每个服务都提供 VTY 连接,即我们能够通过 telnet 命令连接这些服务,但前提是这些服务的 VTY 都要设置密码;

注意事项:
1)这里的 VTY 是指通过 telnet 连接的方式,注意与 VTY Shell 区分
2)通过 telnet 连接 vty:需要在 /etc/quagga/*.conf 中通过 password 指定密码,否则无法连接;
2)通过 vtysh 连接 vty:该命令通过 *.sock 文件 来访问服务(但依旧支持配置认证方式);

3.4.2 VTY Modes
1)VTY View Mode:类似华为交换机的用户视图(user view),仅能查看系统配置信息;
2)VTY Enable Mode:类似华为交换机的系统视图(system view),该模式能够进行配置修改,可通过 enable password 配置该模式的密码;
3)VTY Other Modes:其他视图模式;

3.4.3 VTY CLI Commands
1)光标移动的快捷键;
2)修改内容的快捷键;
3)客户端高级快捷键;

4 Zebra

负责更新内核路由表,将路由信息实施到主机中。
在不同的路由协议之间重新分配路由

4.1 Invoking zebra

命令行参数

4.2 Interface Commands

4.2.1 Standard Commands,标准的命令,比如配置接口
4.2.2 Link Parameters Commands,链路参数

4.3 Static Route Commands

静态路由配置命令

4.4 Multicast RIB Commands

组播配置命令

4.5 zebra Route Filtering

路由过滤功能,由选择的将某些路由加入内核路由表,某些路由不应该加入内核路由表;

4.6 zebra FIB push interface

各组件将最优路由发给 Zebra 进程,Zebra 进行路由计算,得到总的最佳路由表(RIB),然后通过 RIB 生成 FIB 表,并将 FIB 下发到内核中。

但是在某些场景中,路由器具有不同于内核的转发路径,通常是基于硬件的快速路径。在这些情况下,也需要维护在快速路径中的 FIB 。

这种管理转发平面的组件,被成为转发平面管理器(FPM)

zebra -----(FIB)----> Kernel
  |
  |
(TCP Connection, FIB)
  |
  v
 FPM
  |
  |
  |
  v
Forwarding Plane

fpm/fpm.h 定义数据格式,以指定 zebra 与 FPM 对接规范。

4.7 zebra Terminal Mode Commands

终端命令

5 RIP

Routing Information Protocol,现在(01/05/2022)已经很少使用该动态路由协议,这也不是我们需要使用的路由技术,这里不再介绍。

6 RIPng

RIPng 是 RIP 协议的升级版本,

该动态路由协议并非我们需要使用的路由协议,鉴于此我们不再深入阅读官方文档,仅作记录。

7 OSPFv2

这是我们需要使用的路由协议。

创建 /etc/quagga/ospfd.conf 文件:

touch /etc/quagga/ospfd.conf 

启动 ospfd 服务:

systemctl start ospfd.service

7.11 Debugging OSPF

查看邻居关系(7.11 Debugging OSPF):

...
transit-router# show ip ospf
...

场景:引入特定路由

进入 OSPF 配置(这里仅包含核心配置):

# vtysh 

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

transit-router# configure terminal 
transit-router(config)# router ospf
...


...
router ospf
 ospf router-id 0.0.0.2
 redistribute kernel route-map L2TP-Route
 network 172.31.251.0/24 area 0.0.0.0
!
access-list L2TP-Route permit 172.31.251.0/24
!
route-map L2TP-Route permit 5
 match ip address L2TP-Route
...

8 OSPFv3

OSPFv3 = OSPF for IPv6

该动态路由协议并非我们需要使用的路由协议,鉴于此我们不再深入阅读官方文档,仅作记录。

9 ISIS

ISIS (Intermediate System to Intermediate System)

该动态路由协议并非我们需要使用的路由协议,鉴于此我们不再深入阅读官方文档,仅作记录。

10 NHRP

也是种动态路由协议。

虽然我们没有学习过这种路由协议,但是该动态路由协议并非我们需要使用的路由协议,鉴于此我们不再深入阅读官方文档,仅作记录。

11 BGP

BGP 我们有相关经验

但是该动态路由协议并非我们需要使用的路由协议,鉴于此我们不再深入阅读官方文档,仅作记录。

12 Configuring Quagga as a Route Server

我们未接触过 BGP Route Server 技术,但是鉴于该动态路由协议并非我们需要使用的路由协议,鉴于此我们不再深入阅读官方文档,仅作记录。

# 04/23/2022 应该是 BGP 的 Router Reflector 技术;

13 VTY shell

VTY 相关的配置

进入特定路由协议配置界面:

# vtysh 

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

transit-router# configure terminal 
transit-router(config)# router ospf
transit-router(config-router)# ?
  area                   OSPF area parameters
  auto-cost              Calculate OSPF interface cost according to bandwidth
  capability             Enable specific OSPF feature
...

14 Filtering

路由过滤工具,用于决定哪些路由进入内核,哪些路由不应该进入内核。

15 Route Map

Router Map 同时提供两种功能:
1)路由过滤:过滤满足条件的路由;
2)应用动作:修改路由属性的工具;

16 IPv6 Support

该部分文档描述 Quagga 对 IPv6 的支持。

17 Kernel Interface

读取路由表的方法,与内部实现相关。

18 SNMP Support

该部分文档描述 Quagga 对 SNMP 的支持。

Appendix A Zebra Protocol

协议相关内容

Appendix B Packet Binary Dump Format

报文二进制转储格式

Command Index

命令索引

VTY Key Index

终端快捷键索引

Index

综合索引