Your phone and PC connect to Korthveil over WireGuard. Each device gets its own configuration: the phone scans a QR code, the PC imports a file. All their internet traffic goes through the tunnel, they use the firewall's DNS, and from the firewall it goes out through NordVPN, with IPVanish as backup and a kill switch.
What you need:
VPN_ONLY with wgnord and wgipvanish (guide Send your Wi-Fi through NordVPN, with IPVanish as backup). You can also do it afterwards (Step 7).Inside the house only. In this guide the devices connect from the Wi-Fi zone WIFI (firewall address 192.168.20.1) or the management network MGMT (192.168.2.13), on UDP port 51822. Connecting from the internet, for example on mobile data, would need a port forward of UDP 51822 to the firewall on whatever router sits in front of it. That is not part of this guide, and nothing here changes that router.
Not in FIPS mode. WireGuard uses algorithms that are not FIPS-approved. On a firewall in FIPS mode, Korthveil refuses to commit WireGuard tunnels: use IPsec there.
The screenshots come from a test firewall whose zones are lan and lab. On the GMKtec test firewall they are WIFI and MGMT.
phone / PC Korthveil firewall
┌──────────────┐ UDP 51822 ┌──────────────────────────────────┐
│ WireGuard │ ──────────────▶ │ wg0 (zone vpn) │
│ app │ to 192.168.20.1│ 10.255.0.1, fd00:255::1 │
│ 10.255.0.10 │ │ │ DNS: the firewall's resolver │
│ all traffic │ │ ▼ │
│ in the tunnel│ │ policy route VPN_ONLY │
└──────────────┘ │ wgnord, else wgipvanish, │
│ else blocked (kill switch) │
└──────────────────────────────────┘
wg0 is the WireGuard server on the firewall. It joins its own zone, vpn, so rules can treat VPN users on their own.Open Network › Interfaces, zones & routes. In Zones, look for vpn. If it is not there, click Add zone and name it vpn (description: Remote devices over WireGuard). It needs no interfaces: the tunnel joins it in Step 3.
Keep vpn apart from the providers' zone providers. The VPN provider wizard needs them to be different.
Open VPN › WireGuard. In Remote access endpoint, set Public host name or address to 192.168.20.1, the firewall's address on the Wi-Fi.
Korthveil writes this address into every new device configuration. It adds the port itself.

A PC on the management network connects to 192.168.2.13 instead. Step 6 shows how to change that address in the PC's file.
Click New tunnel. Korthveil names it wg0 (or the next free name), makes a new key pair, and fills in addresses. Check and set:
| Field | Set to | Meaning |
|---|---|---|
| Enabled | on | |
| Description | Phones and laptops |
|
| Role | Server (devices and sites connect here) | |
| Listen port (UDP) | 51822 |
The new tunnel takes the first free port from 51820; change it |
| Zone | vpn |
The zone the tunnel joins (Step 1) |
| Accept connections from zones | WIFI and MGMT |
UDP 51822 is opened only in these zones. Leave wan unticked |
| Firewall IPv4 address | for example 10.255.0.1/24 |
The firewall's address in the tunnel, and the tunnel's subnet |
| Firewall IPv6 address | for example fd00:255::1/64 |
The same for IPv6. Korthveil fills in a random private (ULA) /64 |
| MTU | blank (1420) | |
| Public endpoint override | blank | Blank: the address from Step 2 |
You don't need a firewall rule for the port. Accept connections from zones opens UDP 51822 into the firewall from those zones, and only there. Korthveil adds it with the commit.
Then, under Remote device addresses:
| Field | Set to | Meaning |
|---|---|---|
| IPv4 pool start / end | 10.255.0.10 to 10.255.0.254 |
Each new device takes the next free address. Blank: the whole subnet |
| IPv6 pool start / end | fd00:255::10 to fd00:255::ffff |
The same for IPv6. Every device gets both |
| DNS servers for devices | 10.255.0.1, fd00:255::1 |
The firewall's own tunnel addresses: devices ask the firewall for names |
The rest of this guide uses 10.255.0.1 and fd00:255::1. If your fields show other addresses (for example 10.253.0.1/24), keep them and use yours wherever the guide says 10.255.0.….

Click Save to pending changes at the bottom of the page.
Devices ask 10.255.0.1 for names, so the firewall's resolver must answer the vpn zone.
Open Network › DNS resolver. In Resolver, under Serve these zones, tick vpn as well as the zones already ticked. Click Save to pending changes. With the DNS filter on, the phone gets the same ad and malware blocking as the Wi-Fi.

Commit the pending changes (the bar at the top), with a note such as WireGuard server wg0 for phones. In Tunnel status at the bottom of VPN › WireGuard, wg0 now shows up.
On VPN › WireGuard, with the tab wg0 selected, click Add device in Remote devices:
| Field | Set to |
|---|---|
| Device name | phone (fixed once created) |
| Owner | who uses it (optional) |
| Traffic through the tunnel | Full tunnel: all IPv4 and IPv6 traffic |
| What the device may reach | Internet and local network (everything), Internet only (no local network), or Local network only |
| DNS servers | 10.255.0.1, fd00:255::1 (filled in from Step 3) |
What the device may reach is enforced by the firewall, by the device's tunnel addresses, so a changed configuration on the device cannot widen it. Internet only suits a guest's phone: it browses (through NordVPN, Step 7) but cannot open anything in the house. Local network only suits a laptop that only needs the file server. "Local network" means the private ranges (10/8, 172.16/12, 192.168/16, fc00::/7 and so on) unless the tunnel's Local network for device access lists your own networks. Change it later with the pencil in the device's row.


Click Create device and QR code. Korthveil makes the device's keys and a preshared key, gives it the next free IPv4 and IPv6 addresses, and saves it to the pending changes.
A window Configuration for phone opens, with the QR code and these buttons: Download .conf, Copy configuration, Copy device public key. This is the only time the private key is shown. Korthveil does not keep it. Keep the window open for Step 7, or download the file now. If you close it too early, re-key the device (the arrows icon in its row) for a new QR code.
The guide does not show this window: the QR code holds the device's private key. Treat it like a password. Don't photograph it, send it by chat or email, or leave it on screen.
Click Done, and repeat for pc. For the PC, click Download .conf: you get pc.conf.
PC on the management network: the file says Endpoint = 192.168.20.1:51822. Open it in a text editor and change that line to Endpoint = 192.168.2.13:51822. Change nothing else.
Commit the pending changes. A device connects only after the commit.

So far the devices' internet traffic reaches the firewall but has nowhere to go: by default nothing is allowed from vpn to the internet. The VPN provider wizard adds the route, the rule, and NAT.
Open System › Wizards › VPN provider with failover:
wgnord, then wgipvanish. Leave the new-provider box empty (click Remove on it). Zone for the provider tunnels stays providers.VPN_ONLY, wgnord first, Kill switch on, as before.wg0. Networks and devices from an earlier run (such as WIFI) stay as they are; you don't need to tick them again.
Running the wizard again only adds or replaces what you tick in that run: the Wi-Fi keeps its policy route and its allow rule into the VPN.
For wg0 the wizard adds:
vpn to providers.The source NAT on each provider tunnel is already there.
IPv6: if your providers give the tunnel only an IPv4 address, the kill switch blocks the devices' IPv6 internet traffic instead of letting it out through your own line. Apps then use IPv4.
iPhone or Android:
korthveil) and allow the VPN profile when the phone asks.Windows or macOS:
pc.conf.Then delete the .conf file from the Downloads folder: the app keeps its own copy.
The device must be on the Wi-Fi korthveil (or the management network for the PC) to connect. It sends a keepalive every 25 seconds, so the firewall sees at once that it is there.
phone shows:
- Kind Device, Status online (a handshake in the last 3 minutes);
- Endpoint: the phone's own address on the Wi-Fi, for example 192.168.20.57:49152;
- Last handshake: under two minutes ago;
- Received and Sent: growing while you use the phone.Remote devices shows the same: online, and the traffic as ↓ received ↑ sent.
DNS servers: 10.255.0.1, fd00:255::1. A blocked domain from the DNS filter does not load.10.255.0.10 to any internet address says it is sent via gateway group VPN_ONLY.
On VPN › WireGuard, tab wg0, in Remote devices:
| You want to | Do this |
|---|---|
| Lock it out for good | Click the bin icon in its row, confirm Remove device phone?, Save to pending changes, and Commit. Its key stops working at once. |
| Block it for now | Untick Enabled in its row (or click the pencil and untick Enabled), save, and commit. Tick it again later: the same QR code works again. |
| Give the person a new phone | Click the arrows icon (New keys and QR code). The old configuration stops working when you commit; scan the new QR code on the new phone. |

After the commit the device no longer appears online in Tunnel status. Each device has its own keys, so the others keep working.
| What | Where |
|---|---|
| Port, zones that may connect, addresses, DNS for new devices | VPN › WireGuard, tab wg0 |
| A device's addresses, full or split tunnel, DNS | The pencil in its row. The device's own file does not change: re-key it (new QR code) afterwards, or change it in the app. |
| More devices | Add device again. Use one configuration per device: the same key on two devices makes both drop. |
| Let VPN users reach your own networks too (a NAS on the LAN, for example) | Firewall › Rules: allow from zone vpn to that zone. Traffic between your own networks never goes through the provider. |
| Provider order, kill switch | Network › Policy routing › Gateway groups |
Other ways to add devices: System › Wizards › Remote-access VPN also makes devices with QR codes. It is meant for people connecting from the internet: it opens the port in your internet zone, and if there is no tunnel in its zone yet, it makes one on the first free port from 51820. For this setup, use VPN › WireGuard as above.
| Symptom | Check |
|---|---|
| No handshake (Last handshake: never) | Is the device on the Wi-Fi or the management network? Is UDP 51822 ticked under Accept connections from zones for that zone, and committed? Does the endpoint in the app match the network (192.168.20.1 on the Wi-Fi, 192.168.2.13 on management)? Is the device Enabled? A device added but not committed cannot connect yet. |
| No handshake after re-keying | The old configuration is still in the app. Delete the tunnel in the app and scan the new QR code. |
| Handshake, but no internet | Step 7 is missing or wg0 is not ticked in the wizard: without it nothing is allowed from vpn to the internet. Network › Policy routing › Gateway groups: if both providers are down, the kill switch is blocking, as it should. Firewall › Policy lookup shows which route and rule match. |
| Handshake, but names don't resolve | Network › DNS resolver: is vpn ticked under Serve these zones? Does the device's configuration have DNS = 10.255.0.1, fd00:255::1? If it has no DNS line, the device was added with an empty DNS field: edit it and re-key it. |
| The IP check shows my own internet provider | The device is in split-tunnel mode (Remote devices says Split), or the tunnel in the app is off. Choose Full tunnel with the pencil, then re-key. |
| Some sites work, IPv6 sites time out | Your providers carry only IPv4 and the kill switch blocks IPv6 (Step 7). Most apps fall back to IPv4 by themselves. |
| Works on the Wi-Fi only, not on mobile data | As designed: 192.168.20.1 is a private address and the port is open only inside the house. From the internet it would need a port forward of UDP 51822 on the router in front, a public address or dynamic DNS name as the endpoint, and wan ticked under Accept connections from zones. |
| The phone and the PC keep dropping each other | They share one configuration. Give each device its own (Add device). |
| Create device and QR code is greyed out | Fill in Device name, and set Public host name or address (Step 2). The name must not be in use on wg0. |
| Commit refused: WireGuard in FIPS mode | WireGuard is not allowed in FIPS mode. Use IPsec. |
More: the guide Send your Wi-Fi through NordVPN, with IPVanish as backup covers the providers and the kill switch. modules/wireguard.md describes the add-in, and adr/0069 the VPN provider wizard.