Deployment guide

FRRouting

Overview

FRRouting (FRR) is a full IP routing protocol suite for Linux, the successor to Quagga and a project of the Linux Foundation. It runs the core internet routing protocols, including BGP, OSPF, IS-IS, RIP, PIM, LDP and BFD, as cooperating daemons (zebra, bgpd, ospfd, and more) managed through a single shell, vtysh. It turns a Linux host into a capable software router or route server for a cloud network, an on-premises site or a lab.

This guide covers the deployment and configuration of FRRouting on Ubuntu 24.04 on Azure using SecureAnyCloud Azure Marketplace images. The image installs the current stable FRRouting release (10.7.0) from the official FRR APT repository, with the repository signing key pinned by fingerprint. It also adds the FRR origin to unattended upgrades, so your VM keeps receiving FRR security updates.

The VTY is never exposed. Each FRR daemon offers a telnet-style VTY on a dedicated port (2601 to 2616). Left on a routable address with no password, those ports are a serious attack surface, so this image binds every daemon VTY to 127.0.0.1 only. You manage the router locally as root with vtysh over its unix socket, and nothing routable is opened.

FRR is a routing node inside your VNet, so the Network Security Group needs only TCP 22 for administration by default. When you configure real routing, open the specific protocol ports (BGP tcp/179, OSPF IP protocol 89, and so on) to your own peers inside your VNet.

No baked credential. Routing is managed locally as root through vtysh, so there is no login credential baked into the image and nothing to rotate. First boot writes the per-VM node details to /root/frrouting-credentials.txt (readable by root only).

A self-contained demo that works the moment it boots. The image ships a small OSPF demo, so it is provably a working router on a single VM with nothing attached. This router (id 10.0.0.1) forms a real Full OSPF adjacency, over a virtual link, with a lightweight peer router that runs in a network namespace (id 10.0.0.2). The peer originates the route 10.20.20.2/32, which this router learns via OSPF (route code O).

On first boot, show ip ospf neighbor shows a Full adjacency and show ip route shows a real OSPF-learned route, with no external peers. You replace the demo with your own routing when you are ready.

What you get:

  • FRRouting 10.7.0 (from the official frr-stable repository), run under systemd as frr.service.
  • zebra, bgpd and ospfd enabled and managed by watchfrr, ready for BGP and OSPF.
  • Every routing daemon VTY bound to 127.0.0.1 only, so the telnet VTY ports are never exposed off box.
  • A self-contained OSPF demo (a Full adjacency plus an OSPF-learned route) that is live on first boot with no external peers.
  • Kernel IP forwarding enabled and the full networking module set installed, so the VM is a correct router.
  • No baked login credential. FRR is managed locally as root through vtysh.
  • Unattended security upgrades left enabled, covering both the OS and FRR.

Prerequisites

  • An active Azure subscription, an SSH public key, and a VNet and subnet in the target region.
  • A subscription to the FRRouting listing on Azure Marketplace.
  • Network Security Group rules that allow TCP 22 for administration. Add whichever routing protocol ports you will use with your own peers (for example BGP tcp/179), restricted to those peers.
  • Recommended virtual machine size: Standard_B2s (2 vCPU, 4 GB RAM) for a control plane router or route server. Routers that handle high traffic or many peers should use Standard_D2s_v5 or larger.
1

Deploy from the Azure Portal

Search the Marketplace for FRRouting, select the SecureAnyCloud publisher, and select Create.

Configure the Network Security Group to allow TCP 22 for administration. FRR is a routing node inside your VNet, so do not expose the VTY or protocol ports to the internet. Open protocol ports such as BGP tcp/179 only to your own peers inside your VNet (see Step 8).

2

Deploy from the Azure CLI

RG="net-prod"; LOCATION="eastus"; VM_NAME="frr-node" IMAGE_URN="sac1647283583153:frrouting-ubuntu-24-04:default:latest" SSH_KEY="$(cat ~/.ssh/id_rsa.pub)" az group create --name "$RG" --location "$LOCATION"
# Accept the Marketplace terms once per subscription (required before the first CLI deploy)
az vm image terms accept --urn sac1647283583153:frrouting-ubuntu-24-04:default:latest
az vm create \
  --resource-group "$RG" --name "$VM_NAME" \
  --image "$IMAGE_URN" \
  --size Standard_B2s \
  --admin-username azureuser \
  --ssh-key-values "$SSH_KEY" \
  --public-ip-sku Standard
# Administration only. Open routing protocol ports to your own peers separately (Step 8):
az vm open-port --resource-group "$RG" --name "$VM_NAME" --port 22 --priority 1001
3

First boot

On first boot the image brings up the demo topology, starts FRR and the demo peer router, waits for the OSPF adjacency to reach Full, and writes /root/frrouting-credentials.txt. This completes within a minute.

SSH in as azureuser and read the details:

sudo cat /root/frrouting-credentials.txt
4

Confirm FRR is running

frr.service is active, vtysh reports the FRRouting version, and show daemons lists the enabled routing daemons running under watchfrr.

systemctl is-active frr.service
sudo vtysh -c "show version"
sudo vtysh -c "show daemons"
5

Inspect the self-contained OSPF demo

The image ships a live OSPF demo so you can see routing working immediately. This router forms a Full OSPF adjacency with a peer router running in a network namespace, over a point-to-point link in area 0. No external peers are required.

sudo vtysh -c "show ip ospf neighbor"
sudo vtysh -c "show ip ospf interface frrveth0"
6

See the OSPF learned route

Because the adjacency is Full, this router learns the peer's route 10.20.20.2/32 via OSPF. In show ip route, the route appears with the route code O (OSPF), not C (connected). This proves the router learned it dynamically over the adjacency rather than from a local interface.

sudo vtysh -c "show ip route ospf"
sudo vtysh -c "show ip route 10.20.20.2/32"
7

Secure by default: the VTY is loopback only

This is the key security property for a routing node. Every FRR daemon's VTY listens on 127.0.0.1 only, so the telnet-style management ports (2601 to 2616) are never reachable off box.

bgpd is running and ready for you to add your own BGP peers.

sudo ss -tlnp | grep -E '127.0.0.1:(260[0-9]|261[0-6])' grep -E '^(zebra|bgpd|ospfd)=yes' /etc/frr/daemons
sudo vtysh -c "show ip bgp summary"
8

Configure your own routing

Replace the demo with your own routing. FRR reads its integrated configuration from /etc/frr/frr.conf. You can edit that file or configure live with vtysh.

For example, to peer BGP with a router at 10.1.0.5 in AS 65010, add a neighbor under the existing router bgp block:

router bgp 65000 neighbor 10.1.0.5 remote-as 65010 address-family ipv4 unicast neighbor 10.1.0.5 activate exit-address-family

Apply configuration changes and check them with:

sudo systemctl reload frr
sudo vtysh -c "show running-config"

The demo OSPF configuration (interfaces frrveth0, the router ospf block with router id 10.0.0.1) is safe to leave in place or remove once you have your own routing. It uses private link addresses that do not touch your real interfaces.

9

Open protocol ports to your peers

FRR only needs TCP 22 exposed for administration. When you configure real routing, open the relevant protocol ports to your specific peers, never to the internet:

BGP TCP 179 from each BGP peer's address OSPF IP protocol 89 from each OSPF neighbour's address (multicast within the subnet) BFD UDP 3784 / 4784 from each BFD peer

Add narrowly scoped Network Security Group rules for exactly the peers and protocols you use. Because the VTY stays loopback only (Step 7), the control plane is never exposed, even if a protocol port is open to a peer.

10

Manage FRR with vtysh

vtysh is the single management shell for every daemon. These are the common operations:

sudo vtysh -c "show ip route"
sudo vtysh -c "show ip ospf neighbor"
sudo vtysh -c "show ip bgp summary"
sudo vtysh -c "show running-config"

To configure interactively, run sudo vtysh, then configure terminal. To save the running configuration back to /etc/frr/frr.conf, use sudo vtysh -c "write memory".

11

Security recommendations

  • Keep the VTY loopback only. Manage FRR locally with vtysh. Do not change the -A 127.0.0.1 bindings in /etc/frr/daemons to a routable address unless you place a firewall in front, because the VTY has no authentication by default.
  • Restrict the NSG. Expose only TCP 22 for administration. Open routing protocol ports (BGP 179, OSPF, BFD) only to the specific peers that need them, never to the internet.
  • Authenticate your routing sessions. For production peering, configure BGP MD5 / TCP-AO and OSPF authentication so your neighbors are cryptographically verified.
  • Filter your routes. Apply prefix lists and route maps to your BGP neighbors, so you accept and advertise only the prefixes you intend to.
  • Keep the OS and FRR patched. Unattended security upgrades remain enabled on the running VM and cover both Ubuntu and the FRR packages.
12

Support and Licensing

FRRouting is a project of the Linux Foundation and is distributed under the GPL 2.0 or later license. This SecureAnyCloud image installs the unmodified official FRRouting packages. SecureAnyCloud provides the packaging, the loopback-only VTY hardening, the self-contained OSPF demo, kernel router defaults, and 24/7 support with a guaranteed 24-hour response SLA.

SecureAnyCloud is not affiliated with or endorsed by The FRRouting Project or the Linux Foundation. FRRouting and FRR are marks of their respective owners and are used here only to identify the software.

Deploy on Azure

Find FRRouting on Ubuntu 24.04 LTS on the Azure Marketplace, published by SecureAnyCloud. Deploy from the Portal or the Azure CLI as shown above.

Need Help?

Email sales@secureanycloud.com for deployment help, configuration questions or licensing inquiries.

Deploy on Azure

Launch FRRouting (FRR) on Ubuntu 24.04 LTS on Azure with 24/7 support from SecureAnyCloud.

View this image

Need Help?

Our support team is available 24/7.

sales@secureanycloud.com

Deploy on Azure