Building A High-Availability pfSense Firewall Pair

A single firewall can be reliable for years, yet it remains a single point of failure. A failed power supply, storage device, software upgrade, or careless interface change can disconnect an office from cloud services, voice platforms, remote staff, and the internet. A high-availability pfSense deployment reduces that exposure by keeping a second firewall ready to take over.

The usual design uses two pfSense appliances with shared virtual IP addresses. Common Address Redundancy Protocol, or CARP, presents those addresses to the local network, while pfsync replicates active connection states between the nodes. Configuration synchronisation then keeps rules, NAT, DHCP, VPN, and other settings aligned.

This arrangement suits an Australian branch office, workshop, school, or home lab with a business-grade NBN service and a 4G or 5G backup connection. It is valuable in Sydney and Melbourne offices where a short outage can interrupt SaaS work just as severely as a hardware fault, and in regional areas where replacement equipment may take several days to arrive.

Define The Failure You Need To Survive

Start by writing down what the pair must protect. A firewall cluster can handle a node failure, planned maintenance, and some interface faults, but it cannot automatically solve an NBN provider outage, a failed upstream modem, or a power cut affecting both appliances.

For a small site, the practical target is often continued LAN access, internet connectivity, site-to-site VPNs, and remote-access VPN availability when either firewall is offline. If the business depends on hosted accounting, Microsoft 365, VoIP, or Australian cloud regions, document acceptable downtime and which services need a live session to survive a failover.

Keep the design within pfSense’s supported architecture. Use matching hardware, the same pfSense release, equivalent interface names, and compatible packages. Mixing a 2.5 GbE appliance with a slower second unit can work, but it complicates troubleshooting and may create an unexpected bottleneck during a failure.

Choose Hardware And Network Interfaces

Each firewall needs a dedicated synchronisation path, normally a direct Ethernet connection or a small isolated switch segment. A second private link is useful for configuration synchronisation and state replication, while the production interfaces carry WAN, LAN, and optional DMZ traffic. Avoid sharing synchronisation traffic with a busy user VLAN.

Hardware vendors and appliance models vary widely in Australia. Imported mini-PCs may be inexpensive, but warranty handling, replacement time, power adapters, and Intel NIC compatibility matter more than a low purchase price. Karl’s hardware vendor guide is a useful reference when comparing appliance sources and network components.

Use a UPS for both firewalls, the NBN termination device, network switch, and wireless controller. In places affected by summer storms, bushfires, or unstable local power, a UPS and a tested shutdown policy may protect availability better than buying a faster CPU.

Prepare Addressing And Shared Services

Give each firewall a unique management address on every relevant subnet, then reserve a separate CARP virtual IP for the address used by clients. For example, the nodes might use 192.168.10.2 and 192.168.10.3, with 192.168.10.1 as the shared LAN address. The same principle applies to WAN, DMZ, and VPN-facing networks where CARP is appropriate.

CARP advertisements require correctly configured multicast or protocol traffic between the nodes. Firewalls, managed switches, and upstream equipment must permit the required traffic, and both machines need matching interface assignments. Confirm that switch port security, spanning-tree settings, and VLAN tagging do not interfere with the heartbeat.

Decide which device supplies DHCP and DNS services. pfSense can provide both, but a failover arrangement needs deliberate settings so clients do not receive conflicting leases or resolver addresses. Use the shared LAN address for clients, and make sure DNS Resolver, NTP, certificates, and gateway monitoring behave consistently after a role change.

Build The First Node Carefully

Install the same pfSense version on both appliances, but configure the primary node first. Set hostnames, interfaces, VLANs, gateways, DNS behaviour, firewall aliases, NAT rules, VPNs, and monitoring before enabling synchronisation. Export a configuration backup and record the physical port mapping.

Create the synchronisation account with a strong, unique password, then configure XMLRPC synchronisation from the primary to the secondary over the private link. Select only the settings that should replicate. Certificates, DHCP leases, package data, and interface assignments deserve special attention because an indiscriminate sync can overwrite a necessary node-specific value.

Treat the firewall configuration like infrastructure code. Keep encrypted backups outside the appliance and record changes in a repository or ticket system. Teams already using automated testing for PHP can borrow the same discipline from continuous integration practices: make small changes, review them, and retain a known-good version.

Enable CARP And State Synchronisation

After the primary configuration is stable, add the virtual IPs and configure CARP priorities. The intended primary should have the higher effective priority, while the secondary remains ready to become master. Set a clear pfsync interface and confirm that state traffic is not filtered or routed through an unsuitable path.

Test with ordinary traffic before scheduling an outage. Start a download, establish an SSH session, place a test VPN connection, and observe whether the sessions survive when the active node is stopped. Some protocols will reconnect regardless, while long-lived TCP sessions may expose a missed state or asymmetric routing problem.

Check gateway groups and monitoring targets as well. A firewall can remain powered on while its WAN path is unusable, so gateway health checks should be meaningful rather than aimed only at the provider’s immediate next hop. For NBN services, document how the modem or NBN connection device behaves during a firewall failover.

Plan Operations And Security

HA does not remove the need for patching. Upgrade one node at a time, verify that the surviving node is carrying traffic, and confirm that synchronisation is healthy before touching the other. Read the release notes for pfSense, installed packages, OpenVPN or IPsec changes, and any CARP-related behaviour.

Restrict management access to trusted administration networks and use multi-factor authentication where available. Log administrator activity, configuration changes, VPN events, and failover transitions to a central system. Australian organisations handling personal information should align firewall operations with the Privacy Act and the Australian Privacy Principles, particularly around access control, retention, and incident response.

The Essential Eight is not a complete firewall design, but its emphasis on patching, privileged access, backups, and logging provides a sensible operational baseline. Keep an offline or separately hosted configuration backup, because a synchronised mistake can otherwise reach both appliances.

Test Failover As A Routine Task

A cluster is only high availability if staff know how it behaves. Schedule a quarterly test that records the active node, CARP status, pfsync health, VPN reachability, DNS resolution, DHCP leasing, outbound internet access, and monitoring alerts. Test both planned failover and abrupt power loss.

The physical environment deserves testing too. Clean dust from vents, inspect UPS batteries, and confirm that cables are labelled and firmly seated. Small maintenance tasks can prevent strange faults; even basic device-care guidance, such as how to clean iPhone speakers safely, reinforces the broader principle of using gentle, documented maintenance rather than improvised tools.

Record the time required to restore service and the steps needed to return control to the preferred node. If failback is automatic, ensure it does not cause repeated role changes. If it is manual, document who authorises it and how the team verifies that synchronisation is complete.

Practical Recommendations For Deployment

A dependable pfSense pair benefits from simple standards that are easy to audit and repeat:

  • Use identical or closely matched appliances with supported network adapters.
  • Connect both firewalls, the network core, and the NBN termination equipment to a UPS.
  • Reserve dedicated interfaces or VLANs for pfsync and configuration synchronisation.
  • Give every node a unique management address and use CARP addresses for clients.
  • Keep pfSense versions, packages, interface names, and time settings aligned.
  • Store encrypted configuration backups away from both firewalls.
  • Schedule failover drills and record the observed recovery time.

A well-built cluster should make maintenance uneventful rather than mysterious. Start with a small lab test, introduce the design during a controlled maintenance window, and keep the old firewall configuration available until traffic, VPNs, monitoring, and failback have all been verified. Then make the test schedule part of normal infrastructure operations.

Experience

Information Technology Consulting

Independent Practice

Provides IT consulting services focused on infrastructure planning, cloud migration strategy, and systems architecture. Engagements draw on years of hands-on sysadmin and development experience across Linux, Windows, and hybrid environments.

K9 Search & Rescue Volunteer

Ongoing

Active participant in K9 Search & Rescue operations, combining technical logistics skills with field support for canine search teams.

Karl Katzke's Blog

October 2006 – May 2014

Published a long-running personal technology blog covering cloud vs. in-house infrastructure, F# and Mono on OSX, hardware vendor critiques, RAID card performance analysis, and sysadmin storytelling. Notable posts include "When Sysadmins Ruled the Earth" (May 15, 2014) and "Getting Started with F# and Mono on OSX" (December 22, 2012).

Credentials

A small badge icon with a shield shape in muted blue tones on a light background

Systems Administration

Deep experience with Linux (RHEL, SLES, CentOS), high-availability clusters, and STONITH configurations.

A small badge icon with a gear shape in muted blue tones on a light background

Cloud Infrastructure

Practical knowledge of AWS EC2, reserved instances, and cost analysis for cloud vs. on-premises deployments.

A small badge icon with a code symbol in muted blue tones on a light background

Development

Proficient in F#, PHP (Symfony), and cross-platform tooling including Mono and MonoDevelop on OSX.

Studies

F# & Functional Programming

Self-directed, 2012

Explored strongly typed functional programming with F# on OSX using the Mono runtime. Published a detailed getting-started guide covering toolchain setup and cross-platform game development research.

High-Availability & Cluster Management

Professional Development, 2009

Configured and documented crm_mon email alerting for STONITH events on SLES11-HAE clusters, integrating with Nagios monitoring for production environments.

Hardware & Storage Performance

Ongoing

Conducted hands-on benchmarking of SATA/SAS RAID controllers including HighPoint RocketRaid 2740 and LSI/SuperMicro AOC-USASLP2-H8iR, comparing against software RAID configurations.

Skills

A small icon representing a server with clean geometric lines in slate blue

Linux Administration

RHEL, SLES, CentOS — package management, kernel tuning, HA clustering, and monitoring integration.

A small icon representing a cloud shape with clean geometric lines in slate blue

Cloud Architecture

AWS EC2, reserved-instance planning, cost modeling, and hybrid infrastructure strategy.

A small icon representing code brackets with clean geometric lines in slate blue

F# & .NET/Mono

Functional programming on OSX, MonoDevelop toolchain, and cross-platform game-dev exploration.

A small icon representing a database cylinder with clean geometric lines in slate blue

PHP & Symfony

Web application development with the Symfony framework and the broader PHP ecosystem.

A small icon representing a storage drive with clean geometric lines in slate blue

Storage & RAID

SATA/SAS controller evaluation, md RAID configuration, and performance benchmarking.

A small icon representing a shield with clean geometric lines in slate blue

High Availability

Pacemaker, STONITH, crm_mon alerting, and Nagios integration for production cluster monitoring.