Troubleshooting client issues

This page helps you find out why a device does not connect or cannot reach what it should. Work from the symptom: each section lists what to check, the cause and the fix. Error messages are quoted as the client prints them.

Most problems come from configuration, the network or the sign-in, not from a broken install. Do not reinstall the client as a first step: on Windows an uninstall deletes the device's identity, and the device comes back as a new peer.

Start here

Run these three commands on the affected device:

netzilo version
netzilo status -d
tail -n 200 /var/log/netzilo/client.log      # Windows: %ProgramData%\Netzilo\client.log

netzilo status -d answers most questions. The summary at the end looks like this:

Management: Connected
Signal: Connected
Relays: 2/2 Available
Nameservers: 1/1 Available
FQDN: laptop-01.netzilo.network
Netzilo IP: 100.64.12.7/16
Peers count: 2/3 Connected

Each peer block shows Status, Connection type (P2P or Relayed), the ICE candidate types, the last WireGuard handshake, the transfer counters and the latency. See CLI for every field.

Before you go deeper, rule out four things that look like client faults:

  • Another VPN holds the default route or a route to the same destination. Disconnect it and test again.
  • The clock is wrong. Certificate checks and the sign-in fail, and the errors point at TLS. Turn on automatic time.
  • A captive portal (hotel, airport, guest Wi-Fi) is not completed. Open a browser, complete it, then reconnect.
  • A proxy or firewall that inspects TLS sits in the path. Exempt the Netzilo management, signal and relay hosts.

The CLI cannot reach the client service

failed to connect to daemon error: … If the daemon is not running please run: netzilo service install / netzilo service start

CheckCommand
Service stateLinux systemctl status Netzilo; macOS sudo launchctl print system/Netzilo; Windows sc query Netzilo
SocketLinux and macOS ls -l /var/run/netzilo.sock; Windows netstat -ano | findstr 40836

Start the service with sudo netzilo service start. If it is missing, run sudo netzilo service install && sudo netzilo service start.

  • failed to listen daemon interface in the log: a stale socket or a busy port. Remove /var/run/netzilo.sock (or free port 40836) and start the service.
  • A Windows non-admin install has no service. Its per-user client listens on its own port, and the CLI of the same user finds it without flags.
  • On macOS, if netzilo is not found, open a new terminal or use /Applications/Netzilo.app/Contents/MacOS/netzilo.

The device cannot sign in

netzilo status shows Daemon status: NeedsLogin or LoginFailed.

A failed netzilo up prints login failed: <reason> straight away when retrying cannot help, and login backoff cycle failed: <reason> after about 30 seconds of retries for everything else.

MessageCauseFix
NeedsLogin after it worked beforethe login expired (24 hours by default for SSO devices), or the client was logged out by down, a service stop or restartrun netzilo up at the device. Enrol servers with a setup key, which does not expire
LoginFailedmanagement not reachable, a TLS failure, a wrong URL, an invalid setup key or tokenread the failed login: line in the client log. curl -sS -o /dev/null -w "%{http_code}\n" https://<management-host>/api/users must return 401
failed adding new peer: account not foundthe setup key is unknown to this server: mistyped, deleted, or from another servercopy a key from Endpoint > Setup Keys of the right server, and check the management URL
couldn't add peer: setup key is invalidthe key is expired, revoked or used upcreate a new key, or raise its usage limit
invalid setup-key formatthe key is mistypedcopy it exactly
peer is not registered during a sessionthe peer was deleted in the dashboardenrol again with a setup key or SSO
invalid PAT token, PAT token expiredthe access token is wrong or expiredcreate a new token, delete pat.dat and unset NETZILOPAT
no SSO provider returned from management. Please proceed with setting up this device using setup keysthe self-hosted server has no device sign-in configureduse --setup-key, or fix the server's identity provider settings
no available port found from configured redirect URLslocal ports 53000 and 54000 are busy during the browser sign-infree the ports; on a machine without a desktop the CLI uses a code instead
authentication timeout after N seconds, waiting for browser login failedthe browser sign-in was not finishedrun netzilo up again and finish it
user is blockedan administrator blocked the userunblock the user under Team > Users
maximum number of personal peers reachedthe plan's peer limit is reachedremove peers or upgrade the plan
user does not belong to any of the allowed JWT groupsthe account allows only certain identity-provider groupsfix the user's group membership or the setting under Settings > Groups

On a server without a browser, netzilo up prints a URL and a code. Open the URL on any device. A setup key is simpler for servers.

Connected, but peers are unreachable

Read netzilo status -d for the peer you cannot reach.

What you seeMeaningFix
Status: Disconnected, Last WireGuard handshake: -no path was found, or the other peer did not answer (offline, signed out)check that both sides show Relays: n/n Available and allow outbound UDP
Connection type: Relayeddirect UDP is blocked; traffic uses a relay, with higher latencyallow outbound UDP to any port. Behind 1:1 NAT, set netzilo up --external-ip-map <public-ip>
Connected, but the handshake is older than about three minutesthe tunnel is stalecheck that both peers use the same --preshared-key, or neither. Raise the log level to debug and read the connection lines
The peer is not listed at allno enabled policy connects the two peers' groupscheck Network > Policies. Only allow rules exist; one-way TCP and UDP rules need ports
ping works, the service port is refusedthe policy allows the protocol but not the port, or the target's own firewall blocks itcheck the policy's ports and the target's firewall
All peers dropped after a Wi-Fi or dock changethe client restarted its connections after the network changedwait 10 to 20 seconds. netzilo refresh re-syncs but does not rebuild tunnels
peer.access.blocked events under Activity > Eventsa posture check failedthe event names the check and the reason. Fix the device or the check

Two peers talk only when an enabled policy covers a group of each, and every posture check on that policy passes for the source peer.

Management, signal or relays are not reachable

Status lineFix
Management: Disconnected, reason: …allow outbound TCP 443 to the management host. Behind a corporate proxy, use netzilo up --proxy http://proxy:3128 or --proxy auto. If the proxy strips HTTP/2, set NB_FORCE_WS=1 in the service environment
Signal: Disconnectedas above
Relays: 0/2 Availableallow outbound UDP and TCP 3478 and 5349 to the relay host. netzilo status -d lists the relay addresses
Nameservers: 0/1 Availablethe DNS server sent to this peer is not reachable through the tunnel. Check the route and policy to it (UDP 53)

The client keeps retrying management and signal on its own, so once the path is open no restart is needed.

Network interface problems

Log messagePlatformFix
failed creating tunnel interface, interface wt0 don't have an ipv4 addressLinuxmodprobe tun; in a container add --cap-add=NET_ADMIN and /dev/net/tun; if another interface is named wt0, use --interface-name
couldn't access device /dev/net/tun … add flag --cap-add=NET_ADMINcontaineradd the capability and the device
Interface type: Userspace on LinuxLinuxthe WireGuard kernel module is missing. It works; install the module for speed
invalid interface name … Please use the prefix utun followed by a number on MacOSmacOS--interface-name utun100
no network adapter, wintun errorsWindowswintun.dll must sit next to netzilo.exe in %ProgramData%\Netzilo Client. Check whether antivirus quarantined it, then reinstall
no firewall manager found, trying to use userspace packet filtering firewallLinuxinstall nftables or iptables. Policies are still enforced meanwhile

Connected but nothing routes? A client that does not run as root (Linux, macOS) or as SYSTEM (Windows) is forced into userspace mode without saying so: there is no network interface, and only the local SOCKS5 proxy reaches peers. This includes a Windows non-admin install and netzilo up -F from an elevated, non-SYSTEM shell. netzilo status does not show it. Check that the client runs as root or SYSTEM and that the host has the Netzilo interface.

DNS

SymptomFix
<peer>.netzilo.network does not resolvecheck the Nameservers line. Linux: resolvectl status, nmcli device show wt0 or /etc/resolv.conf; macOS scutil --dns | grep -A3 Netzilo; Windows Get-DnsClientNrptRule shows Netzilo-Match
the DNS manager of this peer doesn't support custom port. Disabling primary DNS setup.port 53 is taken. Stop the program that uses it, or set --dns-resolver-address 127.0.0.1:5053
DNS servers with match domains are ignored on Linuxthe host does not use systemd-resolved or NetworkManager. Add a DNS server without match domains for the group, or move the host to systemd-resolved
broken params in resolv.conf, repairing it...another tool rewrote the file; the client repairs it
Windows: DNS broken after uninstallthe Netzilo-Match rule was left behind. Remove it with Remove-DnsClientNrptRule

In userspace mode the host resolver is not changed. Netzilo names resolve only through the proxy, with socks5h://127.0.0.1:<port>.

Routes and exit nodes

SymptomFix
The route does not show on the devicenetzilo routes list. The peer must be in a distribution group of the route and the route must be enabled. Run netzilo refresh
The route is there, but traffic failsa policy must allow the traffic from the device's group to the routing peer's group. Masquerade must be on unless the network routes back to 100.64.0.0/10
Two routes cover the same networknetzilo routes select <id> picks one; select all restores the default
No internet through an exit nodeIPv6 is not routed through exit nodes. Add a DNS server without match domains for the same distribution group, and check the exit node's own internet access
doesn't support default routes … skipping this prefixthe client is too old for exit nodes, or runs with NB_DISABLE_CUSTOM_ROUTING=true. Upgrade, or remove the variable
Exit node on a Linux client fails with a sysctl errorset NB_USE_LEGACY_ROUTING=true in the service environment

SSH

MessageFix
you must have Administrator privileges to run this commandrun with sudo or from an elevated terminal
Couldn't connect. Please check the connection status or if the ssh server is enabled on the other peerthe target needs netzilo up --allow-server-ssh and SSH Access turned on for the peer in the dashboard
the target log says running SSH server is not permitted--allow-server-ssh is off on the target
sign-in failsthe OS user must exist on the target; the default is root

TLS errors in AI tools and other apps

The client runs a TLS-inspecting proxy on 127.0.0.1:41339 and trusts its own certificate authority, Netzilo Edge CA, in the operating system. On Windows and macOS, traffic is sent through it only for the apps named in an endpoint filter's Agents list.

SymptomFix
An app shows a certificate error for an AI or SaaS sitethe app does not use the OS trust store. Python, curl: export SSL_CERT_FILE=/etc/netzilo/netzilo-ca.pem REQUESTS_CA_BUNDLE=/etc/netzilo/netzilo-ca.pem. Java: import the CA into cacerts. Firefox: turn on enterprise roots. An app that pins certificates must be removed from the filter's Agents
MITM: CA trust install failed (manual trust may be required)trust the CA by hand. macOS: sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain /etc/netzilo/netzilo-ca.pem. Debian: copy it to /usr/local/share/ca-certificates/netzilo-mitm-ca.crt and run update-ca-certificates
MITM: certutil -addstore failed (Windows)from an elevated prompt, run certutil -addstore -f Root "%ProgramData%\Netzilo\netzilo-ca.pem", and check that security software did not block it
Claude Code, Codex or other Node tools fail TLS on Windows while browsers workthe tools run in a desktop session that started before the install. Sign out of Windows and back in
MITM: existing CA files invalid (…) — regeneratingthe client made a new CA. Redo every manual trust step with the new netzilo-ca.pem
MacFilter: manager exited with errorapprove the system extension in System Settings > General > Login Items & Extensions
unified proxy stopped with errorport 41339 is in use. Use netzilo up --socks5-port <port>
An agent gets 401, 403, 405 or 429 from the AI Gatewaythis is not a client problem: the gateway refused the request. See AI Gateway

Upgrade and install problems

SymptomFix
After the Linux install script the peer appears twice or asks to sign inthe script logs the peer out. Delete the stale peer and enrol again
Admin mode is already installed, please uninstall Netzilo Client and try again.a non-admin install over an admin install. Install elevated, or uninstall first
netzilo is not recognised in a terminalopen a new terminal, or use the full path
The dashboard says Update available but the tray shows no updatedownload the new version from the Add Peer dialog
The tray shows different GUI and Service versionsthe two come from different installs. Reinstall

More installer messages are in Installer command lines.

Turn on detailed logs

Raise the level at runtime. No restart, and it returns to normal when the service restarts:

netzilo debug log level debug        # or trace

At debug, the log shows connection setup (ICE) lines tagged [pion: …]. Reproduce the problem, collect a bundle with sudo netzilo debug bundle, then set the level back to info.

A permanent level means changing the service, which logs the device out:

sudo netzilo service uninstall && sudo netzilo service install --log-level debug && sudo netzilo service start

Do this only when someone can sign the device in again. Avoid netzilo debug for: it logs the device out twice.

Where the logs are. Linux and macOS: /var/log/netzilo/client.log. Windows: %ProgramData%\Netzilo\client.log. Logs rotate at 5 MB. On macOS, crash output goes to /var/log/Netzilo.err.log, which the bundle does not include. The tray's Support > Open Logs Folder opens the folder.

  • Report bugs and issues - what to send to support and how to redact it
  • CLI - every command, flag and file
  • Install Netzilo - install, enrol and upgrade on every platform
  • Policies - why two peers can or cannot talk
  • Routes - routing peers and distribution groups
  • DNS - DNS servers and match domains