FRRouting allows Linux and BSD machines to participate in network routing decisions. FRR is used in Cumulus Linux as part of their open network operating system. It came into being as a fork of Quagga. One of the main reasons given for the fork was that the pace of development for Quagga was too slow.
FRR supports a wide range of protocols including BGP, OSPF, and PIM. It has a ton of different uses including anycast, container advertiser, and just plain old routing. Imagine no longer needing to pay a big name vendor tons of money to route traffic using BGP or OSPF in a small dev environment.
It's important to point out that FRR uses the Linux kernel's routing stack and packet forwarding. FRR has a daemon called zebra that acts as the routing information base. The routing protocols in FRR connect to zebra and tell it what routes are available. Zebra then tells the Linux kernel (FIB) to install the routes.
rpm --import https://apps3.cumulusnetworks.com/setup/cumulus-apps-rpm.pubkey
vi /etc/yum.repos.d/cumulus-host-el.repo [cumulus-arch-roh-3] name=Cumulus roh packages baseurl=https://apps3.cumulusnetworks.com/repos/rpm/el/7/roh-3/$basearch gpgcheck=1 enabled=1
sudo yum install frr -y
Alternatively, you can run the following command to install FRR.
sudo yum install -y https://github.com/FRRouting/frr/releases/download/frr-5.0.1/frr-5.0.1-2018070501.el7.centos.x86_64.rpm
This file contains a list of routing protocol deamons. For my test, I chose to run bgpd and ospfd. On a side note, zebra needs to be running in order for anything to work. Zebra is the glue that holds everything together. Remember that zebra is responsible for updating the Linux kernel route table.
vi /etc/frr/daemons zebra=yes (This one is mandatory to bring the others up) bgpd=yes osfpd=yes
sudo systemctl enable frr.service
sudo systemctl start frr.service
Now it's time to get down to the fun stuff. FRR comes with a CLI called vtysh. As a network engineer, running vtysh reminded me a lot of configuring a traditional Cisco IOS device. The CLI allows you to configure various routing protocols and verify that neighbor sessions are up and running. I was a little surprised at how relatively simple it is to use. To launch the cli type vtysh from the Linux shell.
sudo vtysh Hello, this is FRRouting (version 3.2+cl3u4). Copyright 1996-2005 Kunihiro Ishiguro, et al. hostname.mydomain.com#
In my next post, I will walk through how to configure a dynamic routing protocol in FRR. I hope you've seen how easy it is to get FRR up and running. FRR can also be run in GNS3 as an appliance or as a Docker container. Feel free to take a look at the links below to learn more.