Everything that joins the Wi-Fi korthveil goes out through NordVPN. When NordVPN stops answering, it switches to IPVanish. When both are down, it is blocked (the kill switch): nothing leaves through your normal internet line. One wizard does it, and it can also send chosen devices, people connecting in over WireGuard, or only certain sites through the VPN.

What you need:

The screenshots come from a test firewall whose LAN zone is lan. On the GMKtec test firewall the Wi-Fi zone is WIFI.

Step 1: A WireGuard file from each provider

Make a new configuration for this firewall at each provider. Never reuse one from another router or your phone: a WireGuard key used on two devices makes both drop their connection.

Provider Where
NordVPN Nord Account › NordVPN › Manual setup: follow the WireGuard (NordLynx) instructions for one server. The file has your private key, the server's public key and endpoint (port 51820), and Address = 10.5.0.2/32.
IPVanish Your IPVanish account: the WireGuard configuration generator. Choose a server near you and download the .conf file.
Mullvad, Proton VPN, Surfshark, others The provider's WireGuard configuration generator.

Each file looks like this; the keys are yours alone:

[Interface]
PrivateKey = (your key)
Address = 10.5.0.2/32
DNS = 103.86.96.100

[Peer]
PublicKey = (the server's key)
AllowedIPs = 0.0.0.0/0
Endpoint = us1234.nordvpn.com:51820

Keep the files safe, like passwords.

Step 2: A password on the Wi-Fi

Go to Network › Interfaces, zones & routes and click the pencil on the Wi-Fi interface (wlp3s0):

Field Set to
Network name (SSID) korthveil
Security WPA2/WPA3-Personal (recommended)
Passphrase Click Generate one: five groups of four letters and digits, without look-alikes such as 0/O and 1/l. Write it down; it is shown until you save. Or type your own (8 to 63 characters, 12 or more recommended).
Generate a strong Wi-Fi passphrase
Generate a strong Wi-Fi passphrase

Click Save to pending changes. With WPA2/WPA3-Enterprise instead (a certificate per device, guide NAC and Enterprise Wi-Fi), everything below works the same.

Step 3: The wizard, providers

Open System › Wizards › VPN provider with failover.

For each provider:

  1. Type a short Name: nord, then ipvanish. The tunnel becomes wgnord, wgipvanish.
  2. Paste the file into Configuration, or choose it (a screenshot of a QR code works too).
  3. Click Check.

Korthveil reads the file, shows ready, and hides the private key on screen. Health check via the provider's DNS is the DNS server from the file. It is reached only through the tunnel, so it shows whether the whole path works.

Zone for the provider tunnels: providers. It is kept apart from the zone that remote VPN users arrive in, so rules can tell them apart.

Two providers checked and ready
Two providers checked and ready

Already imported a provider on VPN › WireGuard? Tick it under Provider tunnels already on this firewall instead of pasting it again.

Step 4: Failover

Field Set to Meaning
Group name VPN_ONLY The gateway group the wizard creates
Order wgnord first, then wgipvanish The arrows change the order
Health check The provider's DNS (filled in) Pinged through each tunnel every 5 seconds; 3 lost answers mark it down, 2 answers bring it back
Kill switch on No provider answers: blocked. Off: your normal internet line until one is back
The order and the kill switch
The order and the kill switch

Failover or load balance: How the providers share the traffic chooses between Failover: one at a time, in order (above) and Load balance: all at once. With load balance every provider that answers carries a share, and one device stays on one provider for each site, so sites keep seeing the same address. A provider that stops answering is left out until it answers again; with none, the kill switch blocks. Weights (for example NordVPN 2, IPVanish 1) are set later on Network › Policy routing › Gateway groups. IPv6 through WireGuard tunnels without a gateway uses one provider at a time.

Load balance with weights, on Network › Policy routing
Load balance with weights, on Network › Policy routing

Step 5: Who uses the VPN

Choose any of:

Choose networks, devices from DHCP, or remote VPN users
Choose networks, devices from DHCP, or remote VPN users

Adding people who connect in: use Wizards › Remote-access VPN, or VPN › WireGuard › Remote devices › Add device. Each device gets its own configuration file and a QR code: open the WireGuard app on the phone, tap +, Scan from QR code, and it is connected. Choose all their internet traffic (full tunnel) there, so it reaches the providers.

Step 6: What goes through it

Leave Only these sites empty to send all their internet traffic through the VPN. Or list host names and networks, such as discord.com or 157.240.0.0/16, to send only those. Host names follow DNS changes on their own.

Traffic between your own networks (Wi-Fi to LAN, for example) never goes through the provider.

All traffic, or only listed sites
All traffic, or only listed sites

Step 7: Review and apply

The review lists, in words, everything the wizard adds:

Configuration changes and Network actions show the exact lines.

The review before anything changes
The review before anything changes

Click Apply, then Keep these settings within five minutes. Without that, the firewall goes back by itself (safety rollback).

Keep the settings
Keep the settings
Done
Done

Step 8: Check it

  1. Join the Wi-Fi korthveil with the passphrase from Step 2.
  2. Open an IP check site (for example the provider's own "what is my IP" page). It shows NordVPN's server and location, not your internet provider.
  3. Watch the providers: in Network › Policy routing › Gateway groups, wgnord is up and active, wgipvanish up.
  4. Check the path: Firewall › Policy lookup: a phone's address on the Wi-Fi to any internet address says sends it via gateway group VPN_ONLY: the first healthy of wgnord, wgipvanish, else dropped (kill switch).

Test the failover: on VPN › WireGuard, untick Enabled on wgnord and commit. Within about 15 seconds IPVanish is active and the IP check shows IPVanish. Turn wgnord back on: NordVPN takes over again. Downloads that were running stop and start again on the new path.

Test the kill switch: turn both tunnels off. Web pages stop loading, and nothing leaves through your normal internet line. Turn them back on.

Change it later

Everything the wizard made can be changed on its own page:

What Where
Order, health checks, kill switch Network › Policy routing › Gateway groups
Which networks, devices, or sites Network › Policy routing › Policy routes (and the address objects VPN_ONLY_devices, VPN_ONLY_sites under Firewall › Aliases)
A provider's new file Run the wizard again with the same name and tick Replace the tunnel, or VPN › WireGuard › Import configuration
Device reservations Network › DHCP server

In any rule or policy route, Add object… also lists the DHCP clients by name.

Troubleshooting

Symptom Check
A provider always shows down VPN › WireGuard › Tunnel status: does it have a recent handshake? If not, the file is wrong or used elsewhere: make a new one. If it has one, try another health check address (1.1.1.1).
The Wi-Fi works but shows my real IP Policy routing: a route for WIFI to VPN_ONLY exists, and nothing above it matches first. Policy lookup shows which one matches.
No internet at all on the Wi-Fi Both providers are down and the kill switch is working. Gateway groups shows why.
Some sites refuse the VPN Some services block VPN addresses. Send those sites around the VPN with a policy route Use the normal routes above the VPN route.
A device left the VPN after a while It was on a lease and got a new address. Run the wizard again with Keep their addresses on, or reserve it on Network › DHCP server.

More: the guide VPN failover with a kill switch, and moving pfSense rules to Korthveil explains gateway groups and policy routes in depth. adr/0067 and adr/0069 describe the design.