OSPF Routing for a Three-Node Proxmox Interconnect
In this post I’ll show a routing-based approach for interconnecting two Proxmox VE nodes together with a Proxmox Backup Server using OSPF and Free Range Routing (FRR). Instead of relying on Layer-2 redundancy and Spanning Tree, the interconnect is routed, which keeps the design simple while still providing redundant paths between all systems.
OSPF Routing for a Proxmox Cluster Interconnect
In this tutorial I’ll show how to interconnect two Proxmox VE nodes and a Proxmox Backup Server (PBS) using OSPF with Free Range Routing (FRR).
Instead of building the interconnect as a Layer‑2 network with Spanning Tree, every link is routed. This approach has several advantages:
- deterministic routing
- very fast failover
- no STP required
- simple and clean network design
Each link between nodes is its own /30 point‑to‑point network, and OSPF distributes the routes automatically.
The Proxmox Backup Server advertises a loopback address, which is used by the cluster nodes for:
- backup datastore access
- the qdevice used for cluster quorum
Network Topology
The network 192.168.103.0/24 is split into small /30 point‑to‑point networks.
Example layout:
| Link | Network |
|---|---|
| pve-1 ↔ pve-2 | 192.168.103.0/30 |
| pve-1 ↔ pbs | 192.168.103.4/30 |
| pve-2 ↔ pbs | 192.168.103.8/30 |
The Proxmox Backup Server uses a loopback address:
192.168.103.254/32
This address is advertised via OSPF and used by the cluster nodes to access the backup server.
Because it is a loopback address, it stays reachable even if one of the interconnect links fails.
Q: Why use /30 networks for the interconnect?
A /30 network contains exactly two usable addresses, which makes it ideal for point‑to‑point links.
This keeps the routing table clean and prevents accidental use of the network for other hosts.
Step 1 — Install FRR
Install Free Range Routing on all nodes.
On Proxmox VE nodes:
apt update
apt install frr frr-pythontools
On the Proxmox Backup Server:
apt update
apt install frr frr-pythontools
Enable the OSPF daemon.
Edit:
/etc/frr/daemons
Set:
ospfd=yes
Restart FRR:
systemctl restart frr
Q: Why use FRR instead of static routes?
Static routes would technically work, but they become difficult to maintain as soon as redundancy is introduced.
OSPF automatically:
- detects failures
- recalculates routes
- converges to the best path
This makes the design self-healing.
Step 2 — Configure the Interconnect Networks
Configure the point-to-point networks on the interconnect interfaces.
Example configuration.
pve-1
nic3 → pve-2
192.168.103.1/30
nic4 → pbs
192.168.103.5/30
pve-2
nic3 → pve-1
192.168.103.2/30
nic4 → pbs
192.168.103.9/30
pbs
nic3 → pve-1
192.168.103.6/30
nic4 → pve-2
192.168.103.10/30
Q: Why route the interconnect instead of using a bridge with STP?
Layer‑2 redundancy typically requires:
- bonding
- STP
- or MLAG
Routing removes these complexities. OSPF simply calculates the best path and reroutes traffic if a link fails.
This results in:
- faster convergence
- easier troubleshooting
- deterministic traffic flow
When I first set this up, my initial idea was to use Linux bridges with Spanning Tree enabled and connect every node to each other. The main drawback of this approach is that one link will always be blocked by STP, which inevitably causes traffic to pass through a node that is not the actual destination.
Step 3 — Configure the PBS Loopback Address
On the Proxmox Backup Server, create a loopback IP used for:
- backup traffic
- qdevice communication
Example using /etc/network/interfaces:
auto lo:backup
iface lo:backup inet static
address 192.168.103.254/32
Apply the configuration:
ifreload -a
Q: Why use a loopback IP for the backup server?
The loopback address is not tied to a specific interface.
This means:
- the backup endpoint remains reachable
- routing automatically chooses the best path
- failover works transparently
Without a loopback IP, services would depend on the availability of a specific interface.
Step 4 — Configure FRR (OSPF)
Edit the FRR configuration file:
/etc/frr/frr.conf
pve-1
frr version 10.4.1
frr defaults traditional
hostname pve-1
log syslog informational
service integrated-vtysh-config
!
interface nic3
ip ospf cost 200
ip ospf dead-interval 3
ip ospf hello-interval 1
exit
!
interface nic4
ip ospf cost 10
ip ospf dead-interval 3
ip ospf hello-interval 1
exit
!
router ospf
ospf router-id 192.168.102.1
network 192.168.103.0/30 area 0.0.0.0
network 192.168.103.4/30 area 0.0.0.0
exit
!
pve-2
frr version 10.4.1
frr defaults traditional
hostname pve-2
log syslog informational
service integrated-vtysh-config
!
interface nic3
ip ospf cost 200
ip ospf dead-interval 3
ip ospf hello-interval 1
exit
!
interface nic4
ip ospf cost 10
ip ospf dead-interval 3
ip ospf hello-interval 1
exit
!
router ospf
ospf router-id 192.168.102.2
network 192.168.103.0/30 area 0.0.0.0
network 192.168.103.8/30 area 0.0.0.0
exit
!
pbs
frr version 10.3
frr defaults traditional
hostname pbs
log syslog informational
no ip forwarding
no ipv6 forwarding
service integrated-vtysh-config
!
interface nic3
ip ospf dead-interval 3
ip ospf hello-interval 1
exit
!
interface nic4
ip ospf dead-interval 3
ip ospf hello-interval 1
exit
!
router ospf
ospf router-id 192.168.102.3
redistribute connected
network 192.168.103.4/30 area 0.0.0.0
network 192.168.103.8/30 area 0.0.0.0
exit
!
end
redistribute connected advertises the loopback address (192.168.103.254/32) into OSPF.
Q: Why use different OSPF interface costs?
OSPF chooses the lowest cost path.
By assigning:
nic4→ lower costnic3→ higher cost
we create a preferred path while keeping the second link as a backup.
Step 5 — Restart FRR
Apply the configuration on all systems:
systemctl restart frr
Step 6 — Verify OSPF
Check neighbors:
vtysh -c "show ip ospf neighbor"
Check routes:
vtysh -c "show ip route"
You should see:
192.168.103.254/32
This confirms that the loopback IP from the backup server is being distributed.
Design Notes
Fast failover
hello-interval 1
dead-interval 3
These aggressive timers allow OSPF to detect failures quickly.
PBS does not route traffic
The backup server has:
no ip forwarding
This ensures it only participates in routing announcements but does not act as a transit router.
Result
With this setup:
- the Proxmox nodes have redundant routed connectivity
- the backup server remains reachable through multiple paths
- no Spanning Tree is required
- failover happens automatically via OSPF
For small Proxmox clusters with multiple interconnect links, this results in a simple, deterministic and reliable network design.