Tailscale not connecting or DNS broken on Omarchy
Tailscale says Connected while every DNS lookup fails, or the bar panel says Disconnected on a healthy tailnet. The accept-routes fix, the panel bugs, and ufw.
Run `tailscale status --json | jq -r '.Health[]?'` first, because the Omarchy bar panel never reads Health. If it reports unreachable DNS servers plus advertised routes, run `sudo tailscale set --accept-routes` to accept them, or `sudo tailscale set --accept-dns=false` to keep your local resolvers. If the tailnet is fine and only the panel says Disconnected, run `omarchy restart shell`.
Omarchy installs Tailscale from Install > Service > Tailscale, which runs omarchy-install-service-tailscale. That script adds the package, enables tailscaled.service, runs sudo tailscale up --accept-routes, sets you as the local operator, enables the Taildrop receiver, and turns on the omarchy.tailscale bar plugin. Most “Tailscale is broken” reports on Omarchy 4 come from one of those steps not finishing, or from the bar panel telling you something the daemon never said.
The fix
Work through these in order. All of this is checked against 4.0.4.
-
Ask the daemon, not the bar.
tailscale status tailscale status --json | jq -r '.Health[]?'The panel never reads
Health, so this is the only place the real complaint shows up. -
If
HealthcontainsTailscale can't reach the configured DNS servers. Internet connectivity may be affected.together withSome peers are advertising routes but --accept-routes is false, pick one of these two. They are different choices, not alternatives to try in sequence:# Accept the subnet routes, so the pushed nameservers become reachable sudo tailscale set --accept-routes # Or keep your own resolvers and stop using tailnet DNS sudo tailscale set --accept-dns=falseAccepting routes puts every advertised prefix in your routing table, including ranges that may collide with your home LAN. If you do not know what the subnet router advertises, take the second option.
-
If you never finished the login. The installer’s
sudo tailscale up --accept-routesis also the authentication gate. Close that terminal before you follow the link and the node never joins, and the routes preference is never written. One 3.6.0 report (issue #5400) saw the terminal end at Done! without ever showing a link. Run it again by hand, follow the link, then claim operator rights so the panel and Taildrop work without sudo:sudo tailscale up --accept-routes sudo tailscale set --operator="$USER" -
If
tailscale statussaysRunningbut the bar panel says Disconnected, restart the shell:omarchy restart shellIt will come back. This is a panel bug, not a network one, and it returns on large tailnets.
-
If the panel says
Tailscale CLI is not installed or not on PATH.while the CLI plainly works, installwhich:omarchy pkg add which omarchy restart shell -
If you can reach peers but cannot reach a service hosted on this machine, open the port on the tunnel interface. Omarchy’s firewall denies incoming traffic by default. The only inbound holes it ships are LocalSend’s 53317 and a Docker DNS rule scoped to the bridge address:
sudo ufw allow in on tailscale0 to any port 22 proto tcp sudo ufw reloadThat is the same shape Omarchy’s own Sunshine installer uses for its ports.
-
If an exit node is selected and unreachable, clear it:
tailscale exit-node list tailscale set --exit-node=
Verify it worked
tailscale status --json | jq -r '.Health[]?' # should print nothing
tailscale ping <machine> # end to end path
resolvectl query <machine>.<tailnet>.ts.net # MagicDNS name resolves
resolvectl status tailscale0 # per-link DNS and routing domains
An empty Health array with a resolving MagicDNS name is the real all clear. The bar panel agreeing is not evidence of anything by itself.
Why it happens
The Linux defaults are accept DNS on, accept routes off. That combination is fine until your tailnet points DNS at nameservers that only exist behind an advertised subnet route. Tailscale then rewrites your resolvers to addresses you have no route to, and every lookup fails, not just tailnet names. z23 documented this in issue #6962 on a ThinkPad X1 Carbon running 4.0.0, and confirmed tailscale set --accept-routes restored DNS.
Omarchy makes it easy to land in that state. Nothing in 4.0.4 passes --accept-routes except the installer script. The bar panel’s own connect action runs a flagless tailscale up (loginPlan in shell/plugins/panels/tailscale/Model.js), which applies stock Linux defaults on a node that never got the installer’s flag. thomas-trijindev added journal evidence on the same issue that a bare up also rewrites the full preference set, so a later toggle can undo an --accept-routes you set yourself.
The false Disconnected is separate. Service.qml arms a 15 second pollWatchdog when a poll starts but never stops it when the poll finishes, so it kills whatever is in flight when it fires. When a status poll needs several seconds to return, as it does on big tailnets, the watchdog reaps that healthy poll, the non zero exit path runs, and the panel resets to Disconnected. iskakaushik reproduced this against a slow status stub in issue #7774. The watchdog in 4.0.4 still has no stop() in any of the process exit handlers.
The CLI detection bug is simpler. The plugin shells out to which tailscale, and which is a standalone Arch package that Omarchy does not install.
If that did not work
- Taildrop receives nothing and the journal repeats
getting WaitingFiles: Access denied: file access denied. Migration1785101000.shenabledomarchy-tailscale-receive.serviceon existing installs without setting an operator, reported in issue #8484. Runsudo tailscale set --operator="$USER", orsystemctl --user disable --now omarchy-tailscale-receive.serviceif you do not want it. - The network panel shows a fake Ethernet connection.
omarchy-network-statuspicks the device that owns the default route and treats anything without awirelesssysfs entry as wired, so a tunnel becomes Ethernet. Cosmetic, tracked in issue #10107, and the fix is still an open pull request. - You removed Tailscale and it half went. Cancelling the sudo prompt in Remove > Service > Tailscale still prints success while leaving the package and
tailscaledin place, per issue #9526. Finish it withsudo systemctl disable --now tailscaled.serviceandomarchy pkg drop tailscale. - You edited
/etc/nsswitch.confor restored a pacnew over it. Omarchy ships ahosts:line without[!UNAVAIL=return]afterresolve, a change made in v3.1.0 specifically for Tailscale split DNS and still present in 4.0.4. Restoring stock Arch ordering can break tailnet name resolution again. See pacnew and pacsave files after an update. - Check the system DNS override.
omarchy dnsprints the current provider. Picking Cloudflare, Google, or Custom writes/etc/NetworkManager/conf.d/20-omarchy-dns.conf, pins DNS on every NetworkManager connection, and rewrites/etc/systemd/resolved.conf.omarchy dns DHCPdeletes the drop-in, clears the per connection servers, and resetsresolved.confto a stub, which hands DNS back to your network.
On 3.x this looked different, because the stack was iwd and systemd-networkd rather than NetworkManager. Reports there mixed Tailscale with plain post suspend DNS loss (issue #2925, issue #3664), and users worked around it by toggling the DNS provider or restarting tailscaled. DHH closed both in July 2026 as superseded by Quattro’s NetworkManager stack, and asked on #3664 for a new issue if it reproduces there. Neither has been reopened. The evidence for a genuine 4.x suspend and Tailscale interaction is thin, so if you hit one, file it.
Related
Upstream threads about this error
50 issues on the Omarchy tracker match this error cluster. Newest fixes often appear as comments on the most-discussed threads.
| Issue | State | Comments | Opened |
|---|---|---|---|
| #1281 Consider optional encryption | closed | 17 | 2025-08-29 |
| #2925 Wifi (DNS?) doesn't work after suspending for a while | closed | 10 | 2025-10-28 |
| #1998 Waybar Custom Widget Persistence | closed | 6 | 2025-09-27 |
| #1624 Improve docker daemon.conf defaults to work better for containers using resources over tailscale tunnel on host · fixed by #19 | closed | 4 | 2025-09-12 |
| #3664 DNS sometimes disappears | closed | 4 | 2025-11-27 |
| #11862 X web app launched from the Super+Space app menu exits silently within seconds; same web app via Super+Shift+X or a terminal is fine | open | 4 | 2026-09-14 |
| #8608 Bar icons render at ~half size with Iosevka Nerd Font Mono | open | 2 | 2026-08-27 |
| #10107 Network panel shows fake "Ethernet" instead of Wi-Fi when a VPN/tunnel owns the default route (hides Wi-Fi QR share button) | closed | 3 | 2026-09-04 |
| #10956 Top Bar Click Areas Become Vertically Misaligned After Tray/Widget Changes | closed | 3 | 2026-09-09 |
| #13956 Shell shortcuts (SUPER+SPACE menu etc.) stop working after monitor disconnect/reconnect via KVM until rescanPlugins | open | 3 | 2026-10-01 |
Accepted answers upstream
- Install tailscale and uv through pacman instead of curl · answered by nojaf
- WireGuard bar widget · answered by glafeara
- WireGuard bar/panel indicator widget · answered by mrtnd
Questions people ask
- Why does the Tailscale panel say Connected while nothing resolves?
- The panel reads BackendState from `tailscale status --json` and ignores the Health array, so it cannot see the daemon reporting that it cannot reach the DNS servers the tailnet pushed. Check Health yourself.
- Should I just turn on --accept-routes everywhere?
- No. Accepting routes installs every prefix a subnet router advertises into your routing table, which can overlap your own LAN. Use `--accept-dns=false` instead if you only want your local resolvers back.
- Can I reach SSH or a dev server on my laptop over the tailnet?
- Not until you open it. Omarchy's ufw default is deny incoming, and the only port it opens to the outside is LocalSend's 53317, so add a rule such as `sudo ufw allow in on tailscale0 to any port 22 proto tcp`.
Sources and credit
Fixes on this page were worked out by z23 (Traced the silent DNS break to the widget's flagless tailscale up and the Linux accept-dns / accept-routes default), thomas-trijindev (Showed with tailscaled journal output that a bare tailscale up resets prefs set earlier with tailscale set), iskakaushik (Found the poll watchdog that kills healthy status polls and paints the panel Disconnected), anupanup2001 (Identified the missing which package behind the CLI not on PATH message), cking-bot (Reported the Taildrop receiver enabled without operator permission by migration 1785101000). Text here is our own paraphrase; follow the links for the original threads.
- issueIssue #6962: Tailscale widget reports Connected while tailnet DNS is unreachable · z23 · 2026-08-15
- issueIssue #7774: tailscale: pollWatchdog kills healthy in-flight status polls, panel shows TAILSCALE IS DISCONNECTED · iskakaushik · 2026-08-22
- issueIssue #7354: Tailscale panel reports "CLI is not installed or not on PATH" when the which package is absent · anupanup2001 · 2026-08-18
- issueIssue #8484: Taildrop migration enables receiver without Tailscale operator permission on existing installs · cking-bot · 2026-08-27
- issueIssue #9526: Remove Tailscale reports success after cancelling sudo, and still tears down plugin/webapp · AtypicalMike · 2026-09-01
- issueIssue #10107: Network panel shows fake "Ethernet" instead of Wi-Fi when a VPN/tunnel owns the default route · sal-he · 2026-09-04
- issueIssue #5400: Tailscale not automatically connecting after fresh install of Omarchy 3.6.0 · eddownes · 2026-04-23
- issueIssue #3664: DNS sometimes disappears · Jamesking56 · 2025-11-27
- issueIssue #2925: Wifi (DNS?) doesn't work after suspending for a while · luposlip · 2025-10-28
- releaseRelease v3.1.0: Fix Tailscale split DNS compatibility by removing [!UNAVAIL=return] · jardahrazdera · 2025-10-19
- manualOmarchy Manual: Networking