
WireGuard VPN
Kernel-fast VPN tunnels with QuickBox CLI + dashboard control
WireGuard® on QuickBox Pro provides a lightweight VPN tunnel for routing server or application traffic through trusted endpoints. The QuickBox integration covers CLI automation, dashboard uploads, automatic MTU tuning, NAT rules, and stored keys for visual status. It includes app-scoped routing for isolating specific application traffic (Dispatcharr, Emby, Jellyfin, Plex, and qBittorrent) through WireGuard tunnels using Linux network namespaces. It also includes a server gateway that lets your box act as a multi-user WireGuard server — administrators enroll individual users, who connect their own devices into the box and (optionally) route all of their traffic through it. Plan firewall and routing rules accordingly for any additional traffic policies.
Kernel-speed tunnels
WireGuard modules with minimal overhead for low-latency VPN links
Dashboard control
System → VPN Control lets you upload client .conf files, view keys, and toggle active peers
Auto MTU tuning
qb manage wireguard calc --mtu probes the endpoint to set a safe MTU before activation
Server or client
Generate server configs (NAT + IPv4/IPv6 forwarding) or ingest provider client profiles
NordVPN helper
nvpn_conf_gen builds ready-to-use NordLynx WireGuard profiles into the QuickBox stash
Config stash
All configs live under /etc/v4-dashboard/wg with location cache and dashboard previews
Cron sync
Install adds a 30-minute cron to sync active profile names and keys to the dashboard
Key visibility
Private/public keys are surfaced in VPN Control for quick copy-and-paste when needed
App-scoped routing
Route only Dispatcharr, Emby, Jellyfin, Plex, or qBittorrent traffic through a WireGuard tunnel while other server traffic stays on the default route
Kill switch protection
Optionally stop a routed app's service when the VPN tunnel drops, with configurable auto-recovery
Server gateway
Turn your box into a multi-user WireGuard server — admins enroll users, each gets a private /32 from the gateway pool
Per-user self-service
Enrolled users download their own config and view their own connection metrics from their dashboard, gated by their ACL group
Installation
Prerequisites
Prerequisites
- QuickBox Pro v3 already installed
- Root/sudo shell access to run
qbcommands - UDP 51820 reachable from peers (or your chosen listen port)
- Outbound HTTPS allowed for ipinfo.io and NordVPN API (for location + generator)
What you get
- WireGuard kernel module with
linux-headersinstalled automatically - Systemd-managed tunnels via
wg-quick@<profile>.service - IPv4/IPv6 forwarding and NAT rules configured by installer
- Config stash at
/etc/v4-dashboard/wgwith dashboard integration - NordVPN profile generator (
nvpn_conf_gen) ready to use
Install via qb (CLI)
WireGuard install/reinstall writes configs but does not auto-start wg-quick. Activate a profile with qb manage wireguard check -cn <config> or via VPN Control when you are ready.
# Server setup with one client profile and NAT rules
qb install wireguard -u username -o server -lp 51820 -noc 1 -dns 1.1.1.1 \
-cidr 10.5.0.2/16 -cai "0.0.0.0/0,::/0" -ep vpn.example.com \
-pur "iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE" \
-pdr "iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE"
# Client-mode installer (paste config when prompted)
qb install wireguard -u username -o client
# Reinstall in place (keeps stash under /etc/v4-dashboard/wg)
qb reinstall wireguard -u username -o server
# Remove WireGuard entirely
qb remove wireguard -u usernameInstall from the dashboard (VPN Control)
- Open System → VPN Control (admin only).
- Click Install WireGuard → choose Client (upload
.conf) or Server (enter listen port, client count, CIDR, allowed address, endpoint, DNS, PostUp/PostDown). - Submit. Uploaded configs are written to
/etc/v4-dashboard/wg/, server builds land in/etc/wireguard/and are synced back to the stash. - Use the peer table to toggle Active (starts/stops
wg-quick@<name>), view ping/location, and delete peers.
- Allow UDP on your chosen listen port (default 51820) before activating.
- Switching default routes through a VPN can interrupt SSH/dashboard sessions—schedule a maintenance window.
When WireGuard activates, the PostUp rules create firewall entries for both IPv4 (iptables) and IPv6 (ip6tables): a FORWARD accept on the wg0 interface and a NAT MASQUERADE on the server’s default network interface. If app-scoped routing is enabled, additional rules appear for veth network namespaces (10.200.x.y subnets). You can verify all of these rules in the dashboard under Settings > Security > Firewall Rules tab — filter by the WireGuard origin to isolate VPN-related entries.
Basic Usage
Activate or swap a profile
# Sync a stored config to /etc/wireguard and start the service
qb manage wireguard check -cn nvpn_us1234
# Stop and remove the active client config
qb manage wireguard check --deactivate -cn nvpn_us1234
# Remove a stored profile and its service unit
qb manage wireguard remove -cn nvpn_us1234- Dashboard: toggle the Active checkbox for a peer in VPN Control to start/stop
wg-quick@<peer>. Location, ping, and redacted config preview come from/etc/v4-dashboard/wg/<peer>.confand the cached IP lookup. - CLI:
qb manage wireguard checkrewrites/etc/wireguard/<peer>.conf, enableswg-quick@<peer>, and updatesuser_software.software_alt_portso the dashboard stays in sync.
Add client or server configs (CLI)
# Add a client profile (paste config when prompted)
qb manage wireguard add --client -cn wg-client
# Add a server profile with custom CIDR, allowed IPs, and port
qb manage wireguard add --server -lp 51820 -cidr 10.5.0.2/16 \
-cai "0.0.0.0/0,::/0" -noc 3 -pur "iptables -A FORWARD -i %i -j ACCEPT" \
-pdr "iptables -D FORWARD -i %i -j ACCEPT"NordVPN config generator (built-in helper)
# Generate up to 5 NordVPN WireGuard profiles (stores as nvpn_<host>.conf)
nvpn_conf_gen -t "<nordvpn_token>" -c "United States" -L 5 -dns 103.86.96.100
# List available countries
nvpn_conf_gen -l
# MTU tuning is automatic per endpoint (calls qb manage wireguard calc --mtu internally)Configuration locations
CLI options
-o, --operationSet mode: server or client (install/reinstall)
-lp, --listen-portWireGuard listen port (default 51820)
-lp 51820-cidr, --cidrInterface address/CIDR for server
-cidr 10.5.0.2/16-cai, --client-allowed-ipAllowedIPs for peers
-cai '0.0.0.0/0,::/0'-dns, --dnsClient DNS resolver (default 1.1.1.1)
-dns 1.1.1.1-cn, --client-nameName multiple client configs (wg0-client, wg1-client, etc.)
-cn wg0-client-mtu, --mtuOverride MTU (auto-calculated if omitted)
-mtu 1420-ep, --endpointEndpoint hostname/IP for peers
-ep vpn.example.com-pur, --postup-rulePostUp iptables/ip6tables rules
-pur 'iptables -A FORWARD -i %i -j ACCEPT'-pdr, --postdown-rulePostDown rules to clean NAT/forwarding
-pdr 'iptables -D FORWARD -i %i -j ACCEPT'-noc, --number-of-clientsGenerate multiple client configs for a server
-noc 3qb manage wireguard addAdd client (--client) or server (--server) profiles
qb manage wireguard add --client -cn providerqb manage wireguard checkActivate profile, enable wg-quick@<name>
qb manage wireguard check -cn wg0-clientqb manage wireguard check --deactivateStop service and remove active config
qb manage wireguard check --deactivate -cn wg0-clientqb manage wireguard calcCalculate MTU or CIDR helper
qb manage wireguard calc --mtu --endpoint host --protocol ipv4nvpn_conf_genGenerate NordVPN WireGuard profiles
nvpn_conf_gen -t <token> -c 'Canada' -L 5Common workflows
- Install + generate server peers:
qb install wireguard -u username -o server -noc 3 ...writeswg0.confandwg{n}-client.confinto the stash; use VPN Control to download or activate a specific peer. - Import a provider profile: Upload
.confin VPN Control orqb manage wireguard add --client -cn providerand paste; MTU is injected if missing and permissions are normalized. - Activate/rotate endpoints: Use peer table toggle or
qb manage wireguard check -cn <peer>to bring up a tunnel; use--deactivateto tear down before switching regions. - Generate NordVPN sets:
nvpn_conf_gen -t <token> -c "United States" -L 5outputsnvpn_<hostname>.conffiles ready for activation. - Reinstall safely:
qb reinstall wireguard -u username -o serverrefreshes binaries and configs while keeping the stash in/etc/v4-dashboard/wg.
App-scoped routing
WireGuard client configurations you upload to VPN Control are the underlay for app-scoped routing. The routing setup itself — selecting which app to route, enabling the tunnel, and configuring the kill switch — is managed from System → VPN Control. This section explains what app-scoped routing does; for the full workflow including staging routing before installing Plex, see the VPN Control documentation.
Two routing modes
WireGuard on QuickBox Pro operates in two distinct modes. Understanding the difference is important before configuring either one.
Main VPN (peer activation) — Activating a peer in the VPN Control peer table (toggling the Active switch) starts a wg-quick@<peer> tunnel that routes all server traffic through that peer. Every connection from your server — the dashboard, SSH, running applications — exits through the VPN. This is a full-tunnel, server-wide configuration.
App-scoped routing — A separate feature that routes only one application’s traffic through a WireGuard tunnel using a private network namespace. The rest of the server keeps its default route. Dispatcharr, Emby, Jellyfin, Plex, and qBittorrent are supported. Each routed app runs inside its own isolated namespace with a dedicated WireGuard interface, so there is complete traffic separation with no interference between apps or the host.
Both modes can be active at the same time — but they must use different WireGuard peer configs.
App-scoped routing runs the application server-side inside a network namespace on your QuickBox box; the namespace’s egress exits through the VPN. You do not install a tunnel client on your own phone or laptop for this. The “exit location” you see in the dashboard is where the app’s outbound traffic appears to originate (the VPN provider’s exit), not your own device’s location.
A WireGuard peer config represents a single authenticated session with the VPN provider — one keypair, one handshake, one tunnel. This has two important implications:
- Main VPN vs app routing: If you activate a peer as your main VPN and then select that same peer config for app-scoped routing, the app routing handshake will fail (no connection, Bad Gateway). Use a separate
.conffile for app routing. - Multiple routed apps: If you route Emby and qBittorrent simultaneously, each app needs its own peer config. Two apps cannot share one
.conf— the second app’s namespace will fail to establish a handshake. Upload one.confper routed app from your VPN provider.
Your main VPN and each app routing slot can point to the same VPN provider or server — they just need separate, independent config files with their own keys.
App-scoped routing lets you send only a specific application’s network traffic through a WireGuard tunnel while all other server traffic uses the default route. Each routed app runs inside its own Linux network namespace with a dedicated WireGuard interface, so there is complete traffic isolation with no interference between apps or the host.
qBittorrent is also a supported routable app alongside the media servers. Routing qBittorrent through WireGuard keeps BitTorrent traffic private, prevents ISP traffic shaping on torrent transfers, and isolates that traffic completely from the rest of your server. qBittorrent requires an additional step: you must supply the Peer Listen Port that matches what qBittorrent itself is configured to use, so that the dashboard can set up the correct port forwarding through the tunnel. See qBittorrent — VPN routing for the full how-to.
Supported applications
| Application | Service Type | Service Unit | Notes |
|---|---|---|---|
Dispatcharr | Per-user (4-service stack) | dispatcharr-gunicorn@{username} plus daphne, celery-worker, celery-beat | All four application services routed together in one namespace; PostgreSQL and Redis stay on the host |
Emby | Per-user (template) | emby-server@{username} | One routing profile per user instance |
Jellyfin | Per-user (template) | jellyfin@{username} | One routing profile per user instance |
Plex | System-wide | plexmediaserver | Single shared service — only one routing profile at a time |
qBittorrent | Per-user (template) | qbittorrent@{username} | Peer listen port required — must match qBittorrent's setting |
How to enable from the dashboard
- Navigate to System > VPN Control (admin only).
- Upload WireGuard client
.conffiles — one per routing slot you plan to use. If you have a main VPN peer already active, you need an additional.conffor each app you want to route. Two apps cannot share one.conf; each needs its own independent config file with its own keypair. - Scroll to the App-Scoped Routing card.
- Select the application you want to route. Dispatcharr, Emby, Jellyfin, and qBittorrent must be installed and their service running before they appear here. Plex appears in the list even before it is installed, so routing can be staged ahead of time.
- If the app has multiple service instances (e.g., Emby installed for several users), select the instance.
- Choose a WireGuard peer config from the dropdown. Select a config that is not already in use — by the main VPN or by another routed app. Each active routing slot (main VPN + each routed app) must use a distinct
.conffile. - Click Enable Routing.
The dashboard shows a live health indicator once routing is active, confirming that the namespace, WireGuard interface, and routing rules are all in place.
Plex authenticates through plex.tv and reports its public IP for remote access detection. When Plex traffic is routed through WireGuard, plex.tv will see the VPN exit IP instead of the server’s real IP. This is expected behavior and does not affect local access through the QuickBox dashboard or reverse proxy. If you rely on Plex remote access, be aware that the reported external address will change to match the VPN endpoint.
HTTPS certificate window: During the first few minutes after enabling VPN routing for Plex, the Plex web app may fail over HTTPS with an “unable to connect securely” message. This is temporary — Plex is requesting its TLS certificate through the VPN and the request can be briefly delayed. While it is pending, use http://<your-server-IP>:32400/web/ for initial setup. See Plex — Accessing Plex during initial setup for the full explanation.
Because Plex runs as a single system-wide service (plexmediaserver), only one user can enable app-scoped routing for Plex at a time. Emby and Jellyfin use per-user template services, so multiple users can each have independent routing profiles.
Plex is the only application that supports staging VPN routing before it is installed. This allows Plex’s first-run account registration to happen through the VPN tunnel. Emby, Jellyfin, and qBittorrent do not support pre-install staging — enable routing for those apps after they are installed and running.
Kill switch protection
The kill switch is an optional safety net that fully stops the routed application’s service if the VPN tunnel degrades. This prevents any traffic from leaking outside the VPN.
- Trigger threshold: Configurable between 60 seconds and 24 hours (default 600 seconds / 10 minutes for Emby, Jellyfin, and Plex; 1,800 seconds / 30 minutes for qBittorrent). The kill switch fires when the WireGuard handshake age exceeds this threshold.
- Auto-recovery: When enabled, the system attempts to restore VPN routing automatically after a kill switch event using exponential backoff (2 minutes, 4 minutes, 8 minutes, 16 minutes, 30 minutes) up to 5 attempts.
- Manual re-enable: If auto-recovery is disabled or all 5 attempts are exhausted, an admin must manually re-enable routing from VPN Control.
Configure the kill switch from the Kill Switch Protection panel that appears after routing is enabled for an app.
Reaching a routed service
App-scoped routing moves a media server’s outbound traffic through the VPN tunnel, but it does not remove your inbound access paths. Once routing is enabled you can still reach Emby or Jellyfin in two ways.
Local network (LAN). Any device on the same local network as your server can connect directly using the server’s LAN IP address and the app’s normal port — for example http://192.168.1.10:8096 for Emby. The network namespace is on the server; LAN-adjacent devices connect as usual.
QuickBox reverse proxy. The dashboard’s reverse proxy bridges into the namespace through an internal veth link. The app remains available at https://<your-server-or-domain>/<username>/<app>/ on port 443, same as when routing is off. This is the recommended path for browser access whether you are on LAN or remote.
Remote / WAN access. For access from outside your network, use the reverse proxy URL or your own domain pointed at the server. The app’s raw port (e.g., 8096 for Emby, 8920 for Jellyfin HTTPS) is not automatically exposed on your server’s public IP when the app is inside a namespace — remote clients should go through the proxy or a port-forward you explicitly configure.
App-scoped routing tunnels the app’s outbound connections (metadata fetches, library scans, API calls) through the VPN for privacy. Inbound connections from you or your clients still reach the app through the same LAN address or reverse proxy URL they always used. There is no leak: the app cannot make outbound calls except through the tunnel, and inbound traffic arrives through the veth bridge, not the public interface.
How it works (overview)
- A dedicated Linux network namespace is created for the app (e.g.,
qb_emby,qb_plex,qb_dispatcharr). - A WireGuard interface is configured inside the namespace using the selected peer config.
- A veth pair bridges the namespace to the host so the reverse proxy can still reach the app.
- The app’s systemd service is restarted inside the namespace.
- All traffic originating from the app exits through the VPN tunnel. Incoming requests from the dashboard’s reverse proxy reach the app through the veth bridge.
- When routing is disabled, the namespace is torn down and the service restarts on the normal host network.
A background health monitor polls every 30 seconds to verify the namespace, WireGuard interface, and routing rules are intact. If the kill switch is enabled and the tunnel handshake goes stale, the monitor takes protective action.
Routed apps come back automatically after a reboot
App-scoped routing survives a server reboot without manual intervention. When the box comes back up, QuickBox Pro rebuilds every routing namespace and tunnel and restarts the routed services for you.
- Apps wait for their namespace. Routed services are held until their network namespace exists, so they no longer race ahead of the tunnel and flap at boot. A routed app that started before its namespace was ready would otherwise fail with a “network namespace path” error — that ordering gate prevents it.
- Services start in parallel, without blocking the boot. Restarting the routed apps is fire-and-forget, so one slow app cannot stall the recovery of the others.
- Self-healing if a boot run stalls. The reconcile step has a generous timeout (up to 10 minutes for a multi-namespace rebuild) and retries on failure. A periodic safety-net timer re-checks routing shortly after boot and again on an interval, so a boot that was interrupted self-heals — worst case within about 15 minutes — with no action from you.
You do not have to re-enable app-scoped routing after rebooting the server. Routing profiles you have already enabled are restored automatically. If a routed app appears momentarily disconnected right after boot, give it a few minutes for the safety-net recovery to converge before intervening.
Server gateway (multi-user inbound server)
The server gateway is a separate capability from the two outbound modes above. Instead of your box dialing out through a provider, the gateway makes your box a WireGuard server that other devices connect into. An administrator enrolls individual users; each enrolled user gets a private address from the gateway pool and a personal config they install on their phone, laptop, or router to tunnel into the box.
- Main VPN (peer activation) — your box connects out through a provider; all server traffic exits the tunnel.
- App-scoped routing — only one app’s outbound traffic exits a tunnel; the rest of the server is unaffected.
- Server gateway — your box is the inbound server; remote users connect into it. This is the only mode that enrolls per-user peers and hands out per-user configs.
The server gateway is independent of app-scoped routing — enabling one does not affect the other. The gateway uses its own dedicated address pool (10.13.13.0/24) that does not collide with app-routing namespaces.
Who can do what
The gateway has two clearly separated roles:
| Role | What they can do |
|---|---|
Administrator ( admin.system.vpn) | Enable the gateway, enroll and revoke individual users, and choose the server-wide tunnel mode (split or full). Available from the dashboard's VPN Control page or from the qb CLI. |
Enrolled user (granted the WireGuard app through their ACL group) | Download their own config and view their own connection metrics from their dashboard. Display only — they cannot enroll, revoke, or change the mode. |
Gateway provisioning is an administrator operation, gated by the admin.system.vpn permission. An authorized admin can perform every gateway action either from the dashboard’s VPN Control page or from the qb CLI — the gate is who is authorized, not where the action runs.
Admin: provisioning the gateway
An administrator drives the gateway lifecycle from System → VPN Control (or the equivalent qb commands):
- Enable the gateway. This provisions the
wg0server interface, generates the server keypair, enables IP forwarding, applies the NAT rules, and bringswg-quick@wg0up. It is idempotent — running it again on an already-provisioned gateway changes nothing. - Enroll a user. Enrolling allocates the user a private
/32from the gateway pool, generates a fresh keypair, records the peer, and writes a personal config that the user can download. Enroll is what makes a user appear in the peer list. Re-enrolling the same user reuses their existing address. - Revoke a user. Revoking removes the user’s peer from the live interface and the saved server config, frees their address back into the pool, and deletes their config. It is idempotent — revoking a user who was never enrolled is a no-op.
The enrolled-peer list shows each user’s allocated address and public key. Private keys are never displayed — they live only in the user’s downloadable config.
# Enable / ensure the server gateway (idempotent)
qb install wireguard -o gateway-enable
# Enroll a user — allocates a /32 and writes their personal config
qb install wireguard -o gateway-enroll --wg-user username
# Revoke a user — frees their address and deletes their config
qb install wireguard -o gateway-revoke --wg-user username
# List enrolled peers (username, address, public key — never private keys)
qb install wireguard -o gateway-listSplit vs full tunnel
The gateway has a server-wide tunnel mode that controls how much of each enrolled user’s traffic routes through the box. Only an administrator can change it, and it applies to every enrolled user.
| Mode | What it does |
|---|---|
Split tunnel | Enrolled users reach only the box and its gateway subnet through the tunnel; all other traffic stays on each user's own connection. Use this to give users private access to the box without changing where the rest of their traffic goes. |
Full tunnel | An enrolled user's entire outbound traffic routes out through the box, so the user's public IP becomes the server's WAN IP. Use this to run the box as a privacy gateway for connected users. |
# Switch the gateway-wide tunnel mode (full or split)
qb install wireguard -o gateway-mode --wg-tunnel full
qb install wireguard -o gateway-mode --wg-tunnel splitChanging the gateway’s tunnel mode regenerates every enrolled user’s config with a new keypair. After a mode change, each enrolled user must re-download their config from their dashboard — their previous config will no longer connect. Plan a mode change for a maintenance window and let users know to grab a fresh config afterward.
User self-service: download and metrics
Provisioning is always done by an administrator. Once an administrator has granted a user access to the WireGuard app through their ACL group, a compact self-service panel appears in that user’s own Applications page. What the user sees depends on what the admin has set up for them:
- Download their own gateway config — once an admin has enrolled them on the server gateway, the WireGuard app row’s expansion panel shows a download button for their personal
.conf. The download is scoped to the signed-in user only — no one can pull another user’s config, and there is no way to select a different user. - View their own connection metrics — the panel shows their peer’s last handshake age and bytes transferred when they are connected. This is a snapshot that refreshes on an interval; it is display-only.
- See their routed apps and toggle their own routes — for any app an admin has routed for that user over WireGuard, the panel lists the app with its exit location, transfer totals, a health indicator, and a per-route Routed / Direct switch. That toggle is the one change a non-admin may make, and only on a route the admin already provisioned — a user can never provision a new route, change the backend, or touch another user’s route.
If an administrator has not yet enrolled the user or routed any app for them, the panel shows that nothing has been provisioned yet. Users never see the VPN Control page itself — that surface is admin-only. A user’s only WireGuard surface is the self-service panel in their own WireGuard app row, and only when their ACL group grants them the WireGuard app.
Security notes
- Each enrolled user gets their own keypair and a unique
/32from the gateway pool — peers are isolated from one another. - Private keys are generated on the server and written only into each user’s downloadable config (
640permissions). They are never displayed in the peer list, never logged, and never emitted to the terminal. The peer list shows public keys and addresses only. - In full-tunnel mode an enrolled user’s default route is redirected through the box, so all of that user’s Internet traffic exits from the server’s IP. In split-tunnel mode only traffic destined for the gateway subnet uses the tunnel.
- Enrolled peers persist in the server config, so they survive a reboot or a
wg-quickrestart. Revoking a user removes their peer both live and from the saved config. - The gateway pool (
10.13.13.0/24) is dedicated and does not overlap the outbound provider range, the app-routing namespace range, or the OpenVPN client subnet.
Best practices
Do
- Open UDP 51820 (or your chosen port) before activation; double-check upstream router NAT.
- Keep
/etc/v4-dashboard/wgbacked up — this holds all client/server profiles. - Use
qb manage wireguard calc --mtuwhenever endpoints change to avoid fragmentation. - If tunneling all traffic, ensure SSH/HTTPS fallback access (out-of-band console or LAN path).
- Review PostUp/PostDown rules to align with your firewall policy and interfaces.
- Enable the kill switch for app-scoped routing when VPN privacy is critical — it prevents traffic leaks if the tunnel drops.
- Test app-scoped routing with a single app first before routing multiple applications.
- When running the server gateway, change the tunnel mode during a maintenance window — a mode flip rotates every enrolled user's keypair, so they must re-download their config.
- Revoke gateway access for users who no longer need it — it frees their address and invalidates their config immediately.
Don't
- Do not share private keys; dashboard masks keys but files remain sensitive on disk.
- Do not store unencrypted tokens in version control or shared directories.
- Do not delete a WireGuard peer config that has active app-scoped routing — disable routing for the app first.
- Do not assign the same
.conffile to more than one routing slot (main VPN or any routed app) — each slot needs its own independent peer config with its own keys. - Do not share one gateway config between two devices — each enrolled user gets their own keypair and address; sharing a config breaks the second device's handshake.
Troubleshooting
- Confirm PostUp/PostDown MASQUERADE rules match your outbound interface (
ip route list default). - Verify
AllowedIPsis set (0.0.0.0/0,::/0for full tunnel or specific subnets for split tunnel).
- Run
qb manage wireguard calc --mtu --endpoint <host> --protocol ipv4and update the profile. - Check for ISP ICMP filtering; fall back to a conservative MTU like 1380 if probes fail.
- Ensure the cron entry in
/etc/cron.d/quickboxexists and that/etc/v4-dashboard/wgexists with correct permissions for the v4-dashboard service. - Toggle a peer via
qb manage wireguard check -cn <peer>to refreshsoftware_alt_portand dashboard state.
- Test reachability:
nc -u -v <public_ip> 51820from outside; open/forward UDP if closed. - Consider provider configs (e.g., NordVPN) if residential IP lacks consistent port forwarding.
- The user must be granted the WireGuard app through their ACL group before the download surface appears in their dashboard — without it the WireGuard app row stays hidden.
- The user must also be enrolled by an administrator. If the panel says no config has been generated yet, enroll them from VPN Control (or
qb install wireguard -o gateway-enroll --wg-user <username>). - After an admin flips the gateway tunnel mode, every enrolled user’s config is regenerated — tell users to re-download, as their old config will no longer connect.
- The health monitor checks the namespace, WireGuard interface, iptables rules, ip rules, and ip routes every 30 seconds. A “Degraded” badge means one or more of these components is missing.
- If the app service was manually restarted outside the dashboard, it may have started on the host network instead of inside the namespace. Disable and re-enable routing to restore it.
- Check the VPN Control card for the last error message. The kill switch fires when the WireGuard handshake age exceeds the configured threshold.
- If auto-recovery is enabled, the system will attempt to restore routing automatically (up to 5 times with exponential backoff).
- If recovery is exhausted or disabled, manually re-enable routing from the App-Scoped Routing card after verifying the VPN peer is reachable.
FAQ
.conf file: the second app's namespace will fail to establish a handshake, resulting in no connectivity and a Bad Gateway error. Upload one .conf per app you want to route. All of them can point to the same VPN provider or server — they just need to be separate, independent files.plexmediaserver), so only one routing profile can be active at a time. Emby and Jellyfin use per-user template services, so each user can have their own independent routing profile..conf file. You cannot share one config between two routed apps any more than you can share it between the main VPN and app routing. Upload one .conf per slot — main VPN plus one per routed app — from your VPN provider. All configs can point to the same VPN provider or server; they just need independent files with their own keys..conf — plus their own connection metrics — in the WireGuard row's expansion panel in their dashboard. The download is scoped to the signed-in user; no one can pull another user's config, and non-admins never see the VPN Control page.Additional resources
Join the Community
Media server operators sharing configs, getting support, and shaping the future of QuickBox Pro.