「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             |
+--------------|---------------+
               |
+--------------v---------------+
|   UNIX Kernel routing table  |
+------------------------------+

1.3 Supported Platforms

1.4 Supported RFCs

1.5 How to get Quagga

1.6 Mailing List

1.7 Bug Reports

2 Installation

./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/zebra.conf 文件,格式:

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

启动基础服务(zebra.service):

systemctl start zebra.service

3.2 Terminal Mode Commands

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

3.3 Common Invocation Options

命令行选项,在命令行中使用的命令

3.4 Virtual Terminal Interfaces

View Mode,类似华为交换机中的用户模式、系统模式、各种视图等等。

以及常用快捷键。

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 技术,但是鉴于该动态路由协议并非我们需要使用的路由协议,鉴于此我们不再深入阅读官方文档,仅作记录。

13 VTY shell

VTY 相关的配置

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

综合索引