Tray reports Coder Connect as healthy while tunnel/DNS is broken; stale NRPT rule causes downstream tooling to hang or fail
@aslilac is already working on this.
Since Aug 20, 2026.
Assessment
This issue has not been assessed yet.
Description
Summary
The Coder Desktop tray indicator currently reflects "service running / signed in"
rather than "tunnel + DNS are actually serving traffic." When the dataplane goes
unhealthy (network flap, sleep/wake, control-plane DNS hiccup, etc.) but the
service is still running, the tray stays green while:
- The
.coderNRPT rule and Wintun adapter remain in place. - The embedded DNS server either keeps answering with
fd60:627a:a42b::/48
addresses that no longer route, or silently returns empty answers.
This misleads both users and downstream tooling that relies on *.coder
resolving correctly, producing two distinct user-visible failure modes.
Failure mode 1 — stale DNS still answering
Embedded DNS continues to return fd60::/48 addresses for <workspace>.coder,
but packets to those addresses go nowhere. Downstream effects:
ssh coder.<workspace>(via acoder config-ssh-style ProxyCommand) hitscoder ssh --stdio, which callsworkspacesdk.ExistsViaCoderConnect,
sees afd60::/48answer, commits to the direct-Connect path, and times out
withdial tcp [fd60:...]:22: connect: operation timed out.coder ssh <workspace>(no--stdio) still works because it bypasses the
Connect probe and builds its own tailnet client.- Reported recovery in the field has been "reboot the laptop," which tears down
the stale state.
(Filed separately against coder/coder as coder/coder#26669 for the CLI-side
defensive fix.)
Failure mode 2 — embedded DNS returns empty answers
Conversely, the embedded DNS server stops returning anything for <workspace>.coder
while the tray still shows connected:
> Resolve-DnsName -Name myworkspace.coder -Server fd60:627a:a42b::53
(empty answer — no IPAddress, no NXDOMAIN)
Downstream effects:
- File sync's remote directory picker (
POST /api/v0/list-directoryagainsthttp://<workspace>.coder:4/) fails with a rawSystem.Net.Sockets.SocketException (11001): No such host is known.
surfaced to the user as a wall of stack trace in the directory picker dialog. - Mutagen sync daemon repeatedly fails to resolve
<workspace>.coderhostnames. - Tailnet logs show
failed to dial tailnet v2+ API,no matching peer, etc.
This is the same underlying state-management gap as coder/coder-desktop-windows#170, and tends to follow
the "service restarted without full off/on toggle" path from #149.
What I'd like to see
- Tray indicator should reflect dataplane health, not just service state.
When the tunnel cannot carry traffic (no peers, can't dial coordinator, embedded
DNS not serving), the tray should turn yellow/red and surface a one-click
recovery action ("Restart Coder Connect"). - State should be coherent on tunnel-unhealthy. If the tunnel is not
actually serving traffic, the NRPT rule and embedded DNS should either be
torn down (so callers get a clean NXDOMAIN) or kept in lockstep with the
tunnel's real status. The current "DNS lingers, tunnel is gone" intermediate
state is what trips both failure modes above. - Friendlier error in the directory picker. Even after the underlying
issue is fixed,list-directoryshould not surface a rawAggregateException
stack to the user. Catch the socket / DNS failure class and render
"Workspace unreachable — check Coder Connect status," ideally with a link to
the tray. - Recovery shouldn't require a reboot. Today users in the field are
resolving this by rebooting, or by toggling Coder Connect off/on (#149 notes
that a service restart alone leaves the system in a broken state — the
off/on toggle from the tray is the documented recovery path). Either the
service-restart path should fully re-establish state, or the off/on toggle
should be discoverable from inside the broken state (e.g. surfaced by item 1).
Reproduction
Hard to deterministically reproduce, but reported triggers include:
- Waking from sleep on a corporate machine (Zscaler / split-horizon DNS in the
mix, per #149). - Network flap while signed in.
- Control-plane DNS briefly failing to resolve, then recovering.
- Restarting the Coder Desktop Windows service while signed in (per coder/coder-desktop-windows#170:
deletes the Wintun adapter, NRPT rule, andCoderVpnServiceentry without
recreating them).
In all cases the tray UI continues to display the connected state.
Related
- coder/coder#26669 — companion CLI-side issue for
ExistsViaCoderConnectto
add a liveness probe so the CLI degrades gracefully even if Desktop is in
this state. - coder/coder-desktop-windows#170 — DNS publishing silently fails — workspace lookups return empty answers
despite Connect being on. - #149 — Not connected after waking from sleep.
Created on behalf of @mdanter
- Dominant language
- C#
- Stars
- 29
- Forks
- 12
- Avg merge
- 4h 15m
- Merged PRs (30d)
- 2
Contributor guide
No contributing guide indexed for this repository
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from coder/coder-desktop-windows
-
bug
Difficulty 2/5 1-3 hours Newbie friendliness 65/100
coder/coder-desktop-windows#166 ·
-
CoderVPN Unsigned Openbug
Difficulty 3/5 1-2 days Newbie friendliness 52/100
coder/coder-desktop-windows#179 · 3 comments ·
-
bug coder-desktop networking
Difficulty 4/5 3-5 days Newbie friendliness 48/100
coder/coder-desktop-windows#177 · 2 comments ·
-
bug github-sync
Difficulty 4/5 3-5 days Newbie friendliness 38/100
coder/coder-desktop-windows#170 ·
-
Difficulty 3/5 1-2 days Newbie friendliness 35/100
coder/coder-desktop-windows#151 ·
All issues in coder/coder-desktop-windows
Similar issues
-
bug
Difficulty 1/5 Under an hour Newbie friendliness 90/100
-
Type: enhancement
Difficulty 2/5 1-3 hours Newbie friendliness 65/100
apache/arrow-adbc#4809 ·
-
type/automation type/tech-debt
Difficulty 2/5 1-3 hours Newbie friendliness 70/100
-
Difficulty 2/5 1-3 hours Newbie friendliness 65/100
microsoft/vscode-azurefunctions#5197 · 1 comment ·
-
Difficulty 1/5 Under an hour Newbie friendliness 85/100
microsoft/microsoft-ui-reactor#1274 ·