FRRouting for Fun and Profit

Posted August 31, 2018 by Matthew McGeehan

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.

Under the Hood:

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.

FRR Installation Steps:

  1. Add the repository to yum.
    rpm --import
  2. Create the following file /etc/yum.repos.d/cumulus-host-el.repo and add the information listed below.
    vi /etc/yum.repos.d/cumulus-host-el.repo
    name=Cumulus roh packages
  3. Install FRR using yum.
    sudo yum install frr -y
  4. Alternatively, you can run the following command to install FRR.

    sudo yum install -y
  5. Once the installation is complete, it is time to decide which routing protocols to run. Edit the /etc/frr/daemons and put a yes next to the protocols you would like to run.

    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)
  6. Configure FRR to run on system startup.
    sudo systemctl enable frr.service
  7. Start the 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.

Stay Tuned:

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.