Run two Korthveil firewalls as a pair: one is active and carries your internet and your gateway address; the other is on standby and takes over within seconds if the active one stops, then hands back when it returns. Your devices keep using the same gateway address and notice at most a second or two. The screenshots are from a test pair; the example addresses are a home network with a rack firewall (korthmain) as the main firewall and a NUC as the standby.

The example pair:

korthmain (rack, 6 ports) NUC (2 ports and Wi-Fi)
Role Primary (priority 200): active whenever it is up Secondary (priority 100): standby
Own LAN address 192.168.2.4 192.168.2.3
Shared gateway (moves to the active one) 192.168.2.1 192.168.2.1
Internet port enp1s0 enp2s0
LAN port enp2s0 enp1s0

What moves on a failover: the shared gateway address (192.168.2.1, and an IPv6 one), the internet port and its address from the ISP, the DHCP server and Gaming & apps (UPnP). Firewall rules, NAT, the DNS resolver and VPN servers run on both, so they are ready; open connections continue because the boxes copy their connection state.

When your ISP gives one address: most home connections give one public address, by DHCP, to one device. The pair handles this: both firewalls use the same MAC address on their internet port, and the port is up only on the active firewall. The ISP sees one device and gives it the same address, whichever firewall that is.

Step 1: Install the second firewall

  1. Install Korthveil on the second box from a USB stick (see Installation). Use the same version on both.
  2. Give it its own LAN address (192.168.2.4 in the example), gateway and DNS the current firewall (192.168.2.1). Do not connect its internet port yet, do not turn on its DHCP server, and do not give it the gateway address.
  3. Connect its LAN port to your LAN switch and open its web console (https://192.168.2.4).
  4. Remote management: each firewall needs its own SentinelOps enrollment. In SentinelOps, create a one-time enrollment token for the new box; on the box, System › SentinelOps RMM: server, tenant, site, authority updates, paste the token, Save, Commit, Enroll now. A backup restored from the other firewall never copies its SentinelOps identity.

Step 2: The internet port, the same MAC on both

The ISP knows your current firewall by its internet port's MAC address. On both firewalls, Network › Interfaces › the internet port › Edit:

The internet port: cloned MAC, up only on the active firewall
The internet port: cloned MAC, up only on the active firewall

Then connect the second firewall's internet port to a free port on the modem (or a small switch between the modem and both firewalls). It stays down while the other firewall is active.

Step 3: The pair (High availability)

On each firewall: Network › High availability, turn the add-in on, and set:

This node: korthmain primary, priority 200; the NUC secondary, priority 100. Preemption on: the primary takes the active role back when it returns.

This node: role and priority, local to each firewall
This node: role and priority, local to each firewall

HA link: the port the firewalls use to talk to each other (the LAN port works; a direct cable between spare ports is better) and the peer's own address on it.

Virtual addresses: on the LAN port, VRID 1, IPv4 192.168.2.1/24, and an IPv6 address from your LAN prefix if your LAN uses IPv6. The same on both firewalls. From 1.1.21 an IPv4 address alone works too (1.1.20 needed an IPv6 one as well).

Each firewall has two IPv4 addresses on the LAN: its own (.4 on korthmain, .3 on the NUC), which never moves and is how you reach that firewall's web console, and the shared one (.1), which only the active firewall holds. The own address must differ from the shared one (Step 5 changes the current firewall's own address).

No fixed LAN gateway: leave the LAN port's gateway empty on both firewalls. The active one has the internet itself. The standby gets a route through the shared address only while it is standby, so it still reaches updates, SentinelOps and time servers. A gateway set to the shared address is removed by the sync, because the active firewall would route through itself.

Virtual addresses: the shared gateway
Virtual addresses: the shared gateway

Step 4: Pairing and configuration sync

The active firewall sends its configuration to the standby after every commit, so you configure one firewall and the other follows.

On each firewall, High availability › Peer pairing:

  1. This firewall's certificate fingerprint: press Copy and paste it into the other firewall's Peer certificate fingerprint. Only a firewall with exactly that certificate receives the configuration.
  2. Peer address: the other firewall's own address, for example https://192.168.2.3.
  3. Pairing secret: press Generate on one firewall and enter the same secret on the other.
  4. Ports: the two firewalls have different hardware. For each of the peer's ports, choose the port that does the same job here, or not on this firewall (for example the NUC's Wi-Fi on the rack firewall).
Peer pairing: fingerprint, secret, and the port map
Peer pairing: fingerprint, secret, and the port map

Save and Commit on each firewall. What stays local to each firewall and is never overwritten: its hostname, its own addresses on the shared-address ports, its management port, its HA role and pairing, and its SentinelOps enrollment.

Configuration sync: last sent and received
Configuration sync: last sent and received

Step 5: Switch over to the pair (a short interruption)

Pick a quiet moment: this step moves your gateway address.

  1. On the current firewall (the NUC in the example): change its own LAN address from 192.168.2.1 to 192.168.2.3, with the pair settings of Steps 2–4 already saved. Commit with Safety rollback on.
  2. The pair forms within seconds: the primary becomes active and takes 192.168.2.1 and the internet port; the other becomes standby.
  3. Check the top bar on both: Failover · Active and Failover · Standby, green, with the linked addresses.
The top bar: failover role and linked addresses
The top bar: failover role and linked addresses
Pair status on the active firewall
Pair status on the active firewall

Step 6: Test it

VPN provider tunnels in a pair

The configuration sync copies the WireGuard tunnels to the standby firewall. From 1.1.30, the standby keeps every VPN client tunnel (a provider such as NordVPN or IPVanish, and every tunnel in a gateway group) idle: it does not connect to the provider. Only the active firewall does, so the provider never sees two connections of one account. When the standby becomes active, it connects its tunnels and the gateway groups start from tier 1. Remote-access tunnels (the firewall as WireGuard server) run on both.

Before 1.1.30, both firewalls connected the provider tunnels and the provider kept dropping one of them. If you added a rule that blocks the standby's UDP 51820 as a workaround, remove it after updating both firewalls.

Updates for the pair

Update one at a time, each with a live update (see Updating Korthveil): first the standby, then Force failover on the active one, update it, then Clear forced failover.

When the other firewall gets a new certificate (amber light)

The pairing trusts one exact certificate of the other firewall, by its fingerprint. When that firewall gets a new web certificate (for example after it is reinstalled, renamed, or its certificate is replaced under System › Certificates), the active firewall stops sending it the configuration. Nothing else changes: the pair still fails over, and your internet keeps working. But changes you commit no longer reach the standby.

What you see: the top-bar light turns amber (Failover · Active). Hover over it: the last line says

Sync problem: the peer cannot be reached: … the peer's certificate is 4b63…, not the paired 8248…

The first fingerprint is the certificate the other firewall shows now; the second is the one paired.

Check that the new certificate is really the other firewall's. Sign in to the other firewall's own address (the NUC in the example: https://192.168.2.3), open Network › High availability › Peer pairing, and read This firewall's certificate fingerprint. It must be exactly the first fingerprint of the message. If it is not, do not trust it: another device is answering at that address.

Trust it on the active firewall (korthmain in the example):

  1. Network › High availability › Peer pairing › Peer certificate fingerprint (SHA-256): replace the old fingerprint with the new one (press Copy on the other firewall, paste here). Leave the pairing secret empty: it is kept.
  2. Save to pending changes and Commit.
Peer pairing on the active firewall: the peer's new fingerprint
Peer pairing on the active firewall: the peer's new fingerprint
  1. Configuration sync › Send configuration now. Last sent shows the revision, the peer's revision and ok.
Configuration sync: sent and accepted by the standby
Configuration sync: sent and accepted by the standby
  1. The top-bar light is green again within 15 seconds.
The top bar after the fix
The top bar after the fix

The record: System › Audit log lists who did it, from which address, and when: the commit (with its note), and the configuration sent to the peer (ha.sync.push).

Audit log: the commit and the configuration sent to the peer
Audit log: the commit and the configuration sent to the peer

If the active firewall's own certificate changes instead, do the same the other way round: paste its new fingerprint on the standby, which then accepts the configuration again.

The pictures in this section are from the home pair (korthmain active, the NUC on standby), 2 November 2026, when the NUC had made itself a new certificate.

Troubleshooting

You see Meaning What to do
Failover · Starting (amber) The pair add-in has not reported a role yet Wait a few seconds; check that the add-in is on and committed
Both firewalls active They cannot hear each other on the HA link Check the cable or switch between them; the standby refuses configuration while both are active
Last refusal: wrong pairing secret The secrets differ Enter the same secret on both and commit
Amber light; … not the paired … certificate The other firewall has a new certificate Check and trust it: see When the other firewall gets a new certificate above
The peer's ports … have no counterpart The port map is incomplete Map every peer port, or mark it not on this firewall
Standby gets no internet address after a takeover The MACs differ Both internet ports need the same cloned MAC
Commit refused: Sync group … has only 1 virtual router(s) 1.1.20 with only an IPv4 shared address Update to 1.1.21, or add an IPv6 shared address as well
High availability page: … interfaces is null 1.1.20 stored a zone without ports after the sync Update to 1.1.21 (both firewalls)
The standby cannot check for updates 1.1.20 had no route on the standby Update to 1.1.21: the standby routes through the shared address