Troubleshooting¶
Start from what you see. Each case gives the log lines that identify it,
the cause, and the fix. The log lines are copied from real runs. Logs are
read with journalctl -u vnet-<program>; vnet-state is described in
During an event.
A machine does not join¶
vnet-state lists it under expected but not connected. Read its agent
log first: the last lines say how far the join went
(How a machine joins).
- The agent cannot reach the conductor
[Agent] Connecting to conductor 192.0.2.5:5000 ... [Agent] Conductor 192.0.2.5:5000 not reachable
The conductor is down, or TCP 5000 is blocked between the machine and the conductor, or
CONDUCTOR_IPis wrong. From the machine:nc -zv 192.0.2.5 5000. With lockdown on, the agent opens the conductor’s port itself; check thatCONDUCTOR_IPis the address the machine really dials.- The conductor refuses the machine
[Agent] No switch assignment from the conductor (rejected, no switch available, or no answer)
The conductor’s log says which:
[Conductor] Rejected agent auth: c001The name is not in the auth file, is listed as a switch, or the key differs. Compare
VNET_AUTH_KEYin/etc/vnet/agent.envwith the line in/etc/vnet/auth.txt. After editing the auth file, reload the conductor.[Conductor] Rejected agent c001: certificate role is 'switch'The machine has a certificate made for another role, often a copy of the wrong file. Issue an agent certificate for it (Manage certificates).
[Conductor] No available switch for agent c001No switch is registered, or none for the machine’s network. Check that the switches are up (
vnet-state) and thatVNET_NETWORKis the same on the machine and a switch, or unset.
- The TLS handshake fails
[TLS] connect ...:SSL routines:tls_post_process_server_certificate:certificate verify failed:... [Agent] TLS to conductor failed
The machine and the conductor do not share a CA, or a certificate has expired. See Manage certificates.
- The machine cannot reach its switch
[Agent] Assigned to switch switch2 @ 192.0.2.12:6001 [Agent] Switch switch2 not reachable (1/3)
The switch port is blocked from this machine, or the address is wrong: the conductor gives agents the address it sees the switch connect from. If the switch is behind NAT or has several addresses, set
VNET_ADVERTISE_IPon the switch. After three tries the agent asks the conductor again, which may pick another switch.- The switch refuses the machine
[Agent] Switch did not accept the connection
The switch’s log says why:
[Switch] Agent c003 not found in config, rejectingThe machine is in the auth file but has no address in the access list. Add
c003 <address>to the switch config and reload the conductor.[Switch] Rejected agent c003: no config received from the conductor yetThe switch has no access list: the conductor has no
VNET_CONFIG_PATHand the switch no file of its own, or the pushed file did not parse (see below).[Switch] Rejected agent: unknown token (fd=12)The token expired (60 s) or was meant for another switch: the agent was very slow between the two steps, or two machines share a name.
- The agent stops at once
[Agent] CONDUCTOR_IP and CONDUCTOR_PORT must be set,[Agent] No auth key: set VNET_AUTH_KEY or VNET_AUTH_KEY_FILE,[Agent] TLS is off: ...,[Agent] Cannot open bypass file ...: the env file is incomplete, or the unit cannot read it.systemctl status vnet-agentshows the last lines.
Two machines cannot reach each other¶
Both are connected, but a ping between them gets no answer.
- The rules do not allow it
The access list has no line connecting them. On their switches, the
aclcounter rises with each attempt (systemctl kill -s USR1 vnet-switch). Check/etc/vnet/switch.txton the conductor for a line with both names, add it, reload the conductor.- The destination is not where you think
vnet-stategives each machine’s virtual address. An address that is in no address line counts as internet and is dropped asacl.- They are on different switches and the switches are not linked
On the sender’s switch,
routesis lower than the number of machines on the other switches, andwaited-for-routerises. Look for:[Switch] Peer switch1 did not answer the dial
The switch ports must be reachable between switches, not only from the machines. If the link was up and dropped earlier (
Heartbeat timeout,Connection closed: switch1), the routes through it are not restored by themselves in this version: restart the conductor (Failures and recovery).- The receiving machine filters it
The switch delivered it (
localorto-switchrises) but the machine does not answer: its own firewall, or the application listens on another address. Lockdown accepts everything on the TUN.
A machine cannot reach the internet¶
- The machine has no rule
Without a
::internet:line for that address or a prefix holding it, the packet is dropped asacl.- The switch has no internet
The switch logs at start
No default route for NATorInternet forwarding is not activeinstead ofNAT 10.0.0.0/8 via vnet-out -> eth0. Give the switch a default route and restart it.tun-write-errorsrising points the same way.- Names do not resolve
An address works but a name does not: DNS is blocked. Allow the resolver (Lock down contestant machines).
A machine lost its network after the agent started¶
The agent moves the default route into the TUN and, with lockdown, closes the physical network. Everything not allowed by the rules or the bypass file goes away by design: the LAN, a VDI session, SSH from the organizers, DNS, NTP.
Read
[Agent] Lockdown on: ...and thestays on the physical networklines: what is listed is what remains.With
droplog,journalctl -k -g vnet-dropshows what is dropped.Add a
routeorinline to the bypass file andsystemctl reload vnet-agent.
If you cannot reach the machine at all, use its console:
systemctl stop vnet-agent restores everything. If the agent is gone,
free it by hand (Lock down contestant machines).
Machines keep dropping and rejoining¶
- Two machines share a name
The conductor logs
Agent c001 registered again; closing fd Nover and over, andvnet-stateshowsc001on a different switch each time. Two machines have the same env file: give each its own.- The network loses packets
Heartbeat timeout on fd Nin the switch or agent logs, without a process stopping. Something between them drops traffic forVNET_DEAD_SECseconds. RaiseVNET_DEAD_SEC(and keep it aboveVNET_HEARTBEAT_SEC) on every program if the network is known to stall, and look at the physical network.- A switch restarts in a loop
systemctl status vnet-switchand its log: a missing variable, a bad config file, or a port already in use.
A switch is refused, or the access list differs¶
[Conductor] Rejected switch switch2: its config (...) differs from switch1's (...)The switches read their own files and the files differ. Copy the same file to every switch, or let the conductor push it (
VNET_CONFIG_PATHon the conductor).[Conductor] Switch switch2 runs config ..., not the one sent (...); see its logThe switch refused the pushed file. Its log says
Config from the conductor (...) did not parsewith the[Config]line naming the error. If it saysthe two binaries parse it differently, the conductor and the switch run different versions of vNet: install the same build on both.[Conductor] Rejected switch auth: switch2Wrong name or key for the switch, as for an agent.
A change did not take effect¶
A reload was not sent: the files are read at start and on reload only.
The reload failed:
Config reload failed; the previous config stays in forceorAuth file reload failed; the line before names the error.The change only applies at the next join: a new virtual address, a removed or changed key (Configuration).
A switch has
VNET_CONFIG_PATHof its own and was reloaded: it reads its own file, then the conductor’s next push replaces it.
The network is slow or loses packets under load¶
rate-limitedrisingA machine sends more than
VNET_AGENT_PPSorVNET_AGENT_MBPS. Expected from a judge serving many contestants: raise the limit on the switch that holds it.link-full-dropsrisingA link cannot keep up: the destination’s switch link or the machine’s own. Look at the network between switches, or spread machines over more switches.
- One switch carries most machines
Machines stay where they were placed after a switch comes back, so a restart leaves the others loaded. Placement is round-robin, not by load: restarting the agents of some machines spreads them over the switches in turn.
The conductor does not start¶
No VNET_AUTH_FILE: every name and key would be accepted.Set
VNET_AUTH_FILE.VNET_ALLOW_INSECURE=1is for a lab only.TLS is off: keys and routes would cross the network in the clear.Set
VNET_TLS=1and the TLS files.Auth file line N: ...orConfig file ... did not parseFix the line named (Auth file, Switch config).
bind: Address already in useAnother conductor runs on that port.
When nothing here fits¶
Collect, for the machine and its switch: vnet-state with the auth
file, the switch’s statistics after SIGUSR1, the last 100 lines of the
three logs around the time of the problem, and the configuration files
with the keys removed. Reproduce in the Docker lab
(Try vNet with Docker) if you can, with VNET_DEBUG=1 on the
switches.