Learn How to Set up Linux's Quagga Routing Suite
November 27, 2021
Quagga is a popular open-source project for providing routing services on the Linux platform. It is made up of several components for various dynamic protocols.
Such as Open Shortest Path First (OSPF), Routing Information Protocol (RIP), Border Gateway Protocol (BGP), Intermediate System to Intermediate System (IS-IS), and Multiprotocol Label Switching (MPLS). It partially uses the same virtual terminal or CLI (vty/vtysh) for protocol configuration as Cisco/Juniper.
in this article, we will install the Quagga routing suite on Ubuntu.
By the end of this article, you should be able to:
- Know what is Quagga Linux and its brief history.
- Understand the working of Quagga Linux.
- Know why you should use Quagga Linux.
- Supported Platforms by Quagga Linux.
- Install Quagga in a Linux environment.
- Configure the Zebra daemon, Ospfd daemon, and Ripd daemon.
Table of contents
- Table of contents
- A quick history of Quagga and an explanation of what it is
- How does Quagga work?
- Who uses Quagga today, and what other open-source alternatives are available?
- Supported Platforms
- Ospfd daemon
A quick history of Quagga and an explanation of what it is
Quagga is a GPLv2-licensed open-source routing stack. It is a program that implements IP routing protocols like
Let’s look at the distinction between a
routing stack and a
complete router. A routing stack is a set of protocols that transmit routing information between network nodes so that each node has the necessary knowledge of the network architecture, whereas a complete router is a networking device that routes data packets between computer networks.
A complete router in Quagga requires traffic forwarding and a routing stack, however only routing protocols are implemented.
Quagga can run on Linux and forward traffic using the standard Linux kernel, or it can use OpenFlow or another open proprietary interface to connect to a distributed forwarding platform. It can also be used with off-the-shelf routers to accept and advertise routes for routing protocols.
Quagga evolved from the
Zebra routing code about 10 years ago.
Zebra is no longer a public project, but it is still available as a commercial solution under the name
How does Quagga work?
A system with Quagga installed acts as a dedicated router. With Quagga, your machine exchanges routing information with other routers using routing protocols.
Quagga uses this information to update the kernel routing table so that the right data goes to the intended place.
Who uses Quagga today and what other open-source alternatives are available?
Quagga is primarily used in virtual environments, large data centers (cloud providers), and the academic/research community. It is used where an open-source implementation of routing protocols is required as a foundation for experimenting with new standards and ideas.
Regrettably, the majority of large users use Quagga in secret and they’re not going to admit it in public. They use Quagga because it allows them to tailor it to their network’s specific needs.
Bird is the most viable open-source alternative to Quagga as far as viable open-source alternatives go.
Bird began as a
BGP route-server/reflector for Internet service providers and exchange points and it has a lot of features that are unique to this environment.
Bird has evolved into a more generic routing stack in recent years and it has long supported
ISIS is in the works.
Bird is most commonly used in environments where the system only receives and sends
XORP, which has a small but active community, as well as the OpenBSD-supported
Currently, Quagga supports
BSD. Porting Quagga to other platforms is too difficult as platform-dependent code is limited to the
Protocol daemons are mostly platform-independent. The list of officially supported platforms are listed below:
Quagga may run correctly on other platforms and may run with partial functionality on further platforms. Versions of these platforms that are older than around 2 years from the point of their original release may need some work.
Similarly, the following platforms may work with some effort:
- Mac OSX
Also note that particularly regarding proprietary platforms, compiler and
Clibrary choice will affect Quagga. Only recent versions of the following
Ccompilers are well tested:
- GNU’S GCC
- LLVM’S clang
- intel’s ICC
Quagga can be installed from source code, but we will use the
deb/binary package in this article. To check the Qugaaga package’s dependencies, run the command below:
apt-cache depends quagga
- The output of the above command is shown below:
- Run the following command to install Qugaaga routing software:
apt-get install quagga
Quagga package installation is shown in the following figure:
Unless a few kernel settings are enabled, Linux-based devices do not support packet forwarding by default. Using the commands indicated in the figure below, enable packet forwarding for IPv4. Settings will be permanently saved in
echo "net.ipv4.conf.all.forwarding=1" | sudo tee -a /etc/sysctl.conf echo "net.ipv4.conf.default.forwarding=1" | sudo tee -a /etc/sysctl.conf sudo sysctl -p
We will now configure Quagga routing software to run on Linux after enabling packet forwarding. To run the Quagga daemon on Ubuntu, you’ll need to do the following:
ripngd.conf ospfd.conf bgpd.conf ripd.conf zebra.conf vytsh.conf isis.conf babelid.conf
A user can create these configuration files or copy these sample files from
/usr/share/doc/quagga/examples/ path to
Copying sample files under
/etc/quagga/ path is shown in following figure:
Rename samples files after copying in
sudo mv ripngd.conf.sample ripngd sudo mv ospfd.conf.sample ospfd.conf sudo mv bgpd.conf.sample bgpd.conf sudo mv ripd.conf.sample ripd.conf sudo mv zebra.conf.sample zebra.conf sudo mv vtysh.conf.sample vtysh.conf sudo mv isisd.conf.sample isisd.conf sudo mv babeld.conf.sample babeld.conf
Because the Quagga daemon runs as quagga, it changes the ownership and permissions of configuration files. During package installation, Ubuntu creates the user quagga.
Run the following command under the
/etc/quagga folder to change ownership and permission:
sudo chown quagga:quagga *
The permission “640” has already been assigned to the files. Finally, we must enable or disable Quagga’s many daemons. This is because the Zebra daemon is an essential component of the routing suite, it must be enabled in the /etc/quagga/daemons file.
Only OSPF and RIP dynamic protocol daemons are enabled in the file in this post.
The following snapshot depicts the default setting of the daemons file. The default configuration file disables all routing daemons.
The Configuration file with OSPF and RIP enabled is shown below:
Different daemons of the Quagga suite will run on the TCP protocol and listening ports will be from 2600-2800.
cat /etc/services | grep zebra zebrasrv 2600/tcp # zebra service zebra 2601/tcp # zebra vty ripd 2602/tcp # ripd vty (zebra) ripngd 2603/tcp # ripngd vty (zebra) ospfd 2604/tcp # ospfd vty (zebra) bgpd 2605/tcp # bgpd vty (zebra) ospf6d 2606/tcp # ospf6d vty (zebra) isisd 2608/tcp # ISISd vty (zebra)
Start Quagga routing suite using the following command:
sudo /etc/init.d/quagga restart
Using the netstat command, we can confirm the successful running of daemons.
sudo netstat -antp | grep 260
Quagga routing can be configured using the following ways:
vtysh telnet (telnet 127.0.0.1 ospfd/ripd/bgpd/zebra)
vtysh provides a central location for all daemon configuration. To start a virtual shell (vtysh) for Quagga configuration, type the following command in a terminal:
Zebra, ospfd and ripd can be configured using vtysh.
Now, let us look at daemon configurations using telnet commands.
The Quagga architecture is made up of a core daemon called
Zebra. Zebra functions as an abstraction layer for the underlying Unix kernel and exposes the
Zserv API to Quagga clients through a
TCP stream. These Zserv clients are usually responsible for implementing a routing protocol and communicating routing updates to the zebra daemon.
The command below shows how to configure
telnet localhost 2601
The ospfd daemon controls routing tables using the Open Shortest Path First (OSPF) protocol. Because this implementation only supports OSPF version 2, it can only maintain IPv4 routing tables.
- To configure
Quagga-suiterun the below command:
telnet localhost 2604
The Routing Information Protocol (RIP) daemon handles the routing tables of routers.
- The code below demonstrates how to configure
ripddaemon in the Quagga suite.
telnet localhost 2602
The Quagga routing suite is primarily used to execute dynamic routing on the Linux platform. We learned how to install, configure, and use the Quagga routing suite in this tutorial.
The Quagga routing suite allows you to configure routing protocols like
RIP in a variety of ways. Small and medium businesses can benefit using Quagga-based routing devices (SME).
Peer Review Contributions by: Dawe Daniel