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:

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.

How it works

 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)     │
                                  └──────────────────────────────────┘

Step 1: A zone for VPN users

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.

Step 2: Where devices connect

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.

The address devices connect to
The address devices connect to

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.

Step 3: The server tunnel

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.….

The server tunnel: port, zone, zones that may connect, addresses, and DNS
The server tunnel: port, zone, zones that may connect, addresses, and DNS

Click Save to pending changes at the bottom of the page.

Step 4: The firewall answers DNS for the tunnel

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.

The resolver also answers the vpn zone
The resolver also answers the vpn zone

Step 5: Commit

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.

Step 6: Add the phone and the PC

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.

Internet only: blocked from the local network by the firewall
Internet only: blocked from the local network by the firewall
Add the phone: full tunnel and the firewall's DNS
Add the phone: full tunnel and the firewall's DNS

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.

Both devices in the list
Both devices in the list

Step 7: Send their internet through NordVPN

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:

  1. Providers: under Provider tunnels already on this firewall, tick wgnord, then wgipvanish. Leave the new-provider box empty (click Remove on it). Zone for the provider tunnels stays providers.
  2. Failover: group name VPN_ONLY, wgnord first, Kill switch on, as before.
  3. Who: under People connecting in over WireGuard tick wg0. Networks and devices from an earlier run (such as WIFI) stay as they are; you don't need to tick them again.
  4. What: leave Only these sites empty.
  5. Review, Apply, then Keep these settings within five minutes.
Who: the Wi-Fi as before, plus the WireGuard server wg0
Who: the Wi-Fi as before, plus the WireGuard server wg0

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:

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.

Step 8: Put it on the device

iPhone or Android:

  1. Open the WireGuard app and tap +.
  2. Choose Scan from QR code and point the camera at the QR code from Step 6.
  3. Name the tunnel (for example korthveil) and allow the VPN profile when the phone asks.
  4. Turn the tunnel on.

Windows or macOS:

  1. Open the WireGuard app and choose Import tunnel(s) from file.
  2. Choose pc.conf.
  3. Click Activate.

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.

Step 9: Check it

  1. On the firewall: VPN › WireGuard › Tunnel status. The row for 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.

  1. The graphs: at the top of Tunnel status, VPN throughput shows the traffic of all WireGuard tunnels, and Active VPN sessions the peers with a recent handshake. The provider tunnels count too, so expect the number to go up by one for each device that connects. Hover over a graph for the values.
  2. On the phone: 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. DNS: the WireGuard app shows DNS servers: 10.255.0.1, fd00:255::1. A blocked domain from the DNS filter does not load.
  4. The path: Firewall › Policy lookup from 10.255.0.10 to any internet address says it is sent via gateway group VPN_ONLY.
Tunnel status: graphs, and every peer with its handshake and traffic
Tunnel status: graphs, and every peer with its handshake and traffic

A lost or stolen phone

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.
Block a device for now: untick Enabled
Block a device for now: untick Enabled

After the commit the device no longer appears online in Tunnel status. Each device has its own keys, so the others keep working.

Change it later

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.

Troubleshooting

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.