One profile per site
Each remote network receives a name, configuration, interface, routes, connection state, handshake, counters, and ping test.
Connect NyxGuard to private applications at remote offices, datacenters, homes, and cloud networks—without exposing those applications to the public internet.
NyxGuard keeps privileged tunnel operations outside the web application and gives every remote site its own isolated WireGuard interface.
Each remote network receives a name, configuration, interface, routes, connection state, handshake, counters, and ping test.
The manager never receives host networking privileges. Private keys remain in the restricted VPN volume and are never returned by the API.
NyxGuard validates profiles, removes unsafe DNS changes, blocks executable hooks, narrows full-tunnel routes, and rejects overlaps.
Provider choice does not matter. The remote peer may be Linux, pfSense, OPNsense, MikroTik, a hardware router, a VM, or another cloud.
| Value | Example | Meaning |
|---|---|---|
| Remote endpoint | vpn.branch.example:51820/UDP | Public address used only to reach the WireGuard peer |
| WireGuard server | 10.90.20.1/24 | Private tunnel address on the remote peer |
| NyxGuard client | 10.90.20.2/32 | Unique tunnel address assigned to NyxGuard |
| Remote LAN | 192.168.20.0/24 | The full network that NyxGuard may reach |
| LAN test target | 192.168.20.1 | A gateway or server inside the remote LAN |
192.168.20.1 is one host. The route normally entered in AllowedIPs or Remote networks is 192.168.20.0/24.192.168.2.0/24, 10.40.0.0/16, or 172.22.5.0/24. The selected CIDR only needs to be unique from other VPN sites and networks already used by NyxGuard.test -c /dev/net/tun && echo "TUN ready" || echo "TUN missing"
modprobe tun, add lxc.cgroup2.devices.allow: c 10:200 rwm and lxc.mount.entry: /dev/net/tun dev/net/tun none bind,create=file to /etc/pve/lxc/<CTID>.conf, then restart the guest and rerun the NyxGuard updater. Without TUN, 4.0.14 keeps Manager online and skips only the VPN agent.The remote peer must accept the tunnel and route traffic between WireGuard and the private LAN.
sudo apt update sudo apt install -y wireguard sudo install -d -m 700 /etc/wireguard wg genkey | sudo tee /etc/wireguard/server.key | wg pubkey | sudo tee /etc/wireguard/server.pub sudo chmod 600 /etc/wireguard/server.key
Never copy the server private key into NyxGuard. The client profile needs only the server public key.
echo 'net.ipv4.ip_forward=1' | sudo tee /etc/sysctl.d/99-wireguard-forward.conf sudo sysctl --system
[Interface] Address = 10.90.20.1/24 ListenPort = 51820 PrivateKey = SERVER_PRIVATE_KEY [Peer] PublicKey = NYXGUARD_CLIENT_PUBLIC_KEY AllowedIPs = 10.90.20.2/32
sudo systemctl enable --now wg-quick@wg0 sudo wg show # Permit the selected WireGuard port in the host firewall, router, and cloud firewall/NSG. sudo ufw allow 51820/udp
A handshake alone does not provide LAN access. The remote gateway must forward packets and remote devices must know how to return traffic.
Add a LAN/router route for 10.90.20.0/24 through the WireGuard gateway's LAN address. This preserves the original VPN source IP and is preferred where routing can be managed.
Masquerade 10.90.20.0/24 when the LAN router cannot be changed. Remote hosts see the WireGuard gateway as the source, but replies work without a new LAN route.
Permit forwarding from wg0 to the LAN interface and established return traffic. Also allow the actual application ports on the destination hosts.
sudo iptables -A FORWARD -i wg0 -o eth0 -j ACCEPT sudo iptables -A FORWARD -i eth0 -o wg0 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT sudo iptables -t nat -A POSTROUTING -s 10.90.20.0/24 -o eth0 -j MASQUERADE
Create a dedicated client peer on the remote WireGuard server, then upload only that client profile to NyxGuard.
[Interface] PrivateKey = NYXGUARD_CLIENT_PRIVATE_KEY Address = 10.90.20.2/32 [Peer] PublicKey = SERVER_PUBLIC_KEY Endpoint = vpn.branch.example:51820 AllowedIPs = 10.90.20.1/32, 192.168.20.0/24 PersistentKeepalive = 25
PreUp/PostUp/PreDown/PostDown hooks are blocked; default routes must be narrowed to explicit remote CIDRs..conf client profile and confirm that the readiness indicator shows the selected file.0.0.0.0/0 or ::/0, enter only the required private CIDRs in Remote networks.Public endpoints may differ or even share a provider. What matters for application traffic is that the internal destination networks do not overlap.
| Site | Endpoint | Tunnel client | Remote network | Status |
|---|---|---|---|---|
| Head Office | vpn.hq.example:51820 | 10.90.10.2/32 | 192.168.10.0/24 | Valid |
| Branch Office | vpn.branch.example:51820 | 10.90.20.2/32 | 192.168.20.0/24 | Valid |
| Warehouse | 203.0.113.40:51820 | 10.90.30.2/32 | 10.40.0.0/16 | Valid |
192.168.1.0/24, a normal destination route cannot determine which customer/site should receive the packet. NyxGuard also rejects a remote route that overlaps a network already attached to the Manager. Different public IP addresses do not fix an internal route conflict.For overlapping customer networks, renumber one LAN, translate one site to a unique range at its gateway, or connect only one conflicting site at a time. A future policy-routing/network-namespace design may provide additional isolation, but 4.0.14 fails safely instead of risking traffic entering the wrong tunnel.
A green Connected state is the beginning of validation, not the end.
Confirm the site shows its own interface, tunnel address, endpoint, and exactly the expected remote CIDRs.
A recent handshake proves that the endpoint, keys, UDP path, and peer configuration are working.
Test the WireGuard server or remote gateway address. NyxGuard rejects targets outside the selected site's routes.
Test an address inside the remote LAN. Failure here usually indicates forwarding, NAT/return routing, or a firewall.
ICMP may be blocked even when TCP works. Verify the real destination and port before creating a Proxy Host.
After the first successful connection, verify auto-reconnect by restarting the stack during a maintenance window.
After the selected tunnel can reach the application, NyxGuard can proxy it without making the remote application itself public.
Scheme: http Hostname: 192.168.20.10 Port: 8080 Origin: http://192.168.20.10:8080
/web to the upstream unless the application explicitly requires it.Use the displayed state and the first failed layer to narrow the problem quickly.
nyxguard-vpn-agent is running and inspect its logs. Pulling only the manager image is not sufficient.AllowedIPs.The VPN feature uses two matching images. The standard scripts install both and keep the additional service persistent after reboot.
curl -fsSL https://raw.githubusercontent.com/NyxCloudRO/NyxGuardManager/main/install.sh | sudo bash
curl -fsSL https://raw.githubusercontent.com/NyxCloudRO/NyxGuardManager/main/update.sh \ | sudo env FORCE_TAG=4.0.14 NYXGUARD_AUTO_YES=1 bash
docker ps --filter name=nyxguard docker logs --tail=100 nyxguard-manager docker logs --tail=100 nyxguard-vpn-agent
Install 4.0.14, plan unique networks, create a dedicated WireGuard peer, then follow the layered tests above.