8.0 KiB
Tailscale Mesh Connectivity Test
Last tested: 2026-03-31
Test Method
Full tailscale ping from each SSH-accessible host to all other online Headscale nodes. This tests WireGuard tunnel establishment and reports whether the connection is direct (peer-to-peer) or relayed via DERP.
Results
All 10 online hosts can reach all other online hosts. No failures.
Connection Type Matrix
D = direct, R = DERP relay, — = self
| From \ To | Atlantis | Calypso | Pi-5 | Homelab | Matrix-Ubuntu | Setillo | NUC | Guava | Seattle | PVE |
|---|---|---|---|---|---|---|---|---|---|---|
| Atlantis | — | D | D | D | D | D | D | D | D | D |
| Calypso | D | — | D | D | D | R | D | D | D | D |
| Pi-5 | D | D | — | D | D | D | D | D | D | D |
| Homelab-VM | D | D | D | — | D | R | D | D | D | D |
| Matrix-Ubuntu | (tested inbound) | — | ||||||||
| Setillo | D | D | D | R | R | — | ||||
| NUC | D | D | D | D | R | D | — | R | D | R |
| Guava | (no CLI) | — | ||||||||
| Seattle | D | D | D | D | D | D | R | D | — | D |
| PVE | D | D | D | D | D | D | D | D | D | — |
Notes
- Atlantis/Calypso: Tailscale binary at
/var/packages/Tailscale/target/bin/tailscale(Synology package) - Setillo: Tailscale binary at
/usr/local/bin/tailscale - Guava: Tailscale runs via TrueNAS built-in management; no
tailscaleCLI in PATH. Confirmed reachable via inbound pings from all other hosts. - Matrix-Ubuntu: SSH via LAN IP (192.168.0.154) was unreliable during testing due to table 52 LAN interception (since fixed). Confirmed reachable via Tailscale IP and inbound pings.
- DERP relays (NUC ↔ some peers, Setillo ↔ homelab/matrix-ubuntu): Normal for nodes behind different NATs. Adds 15-60ms latency but does not affect reliability. Connections may upgrade to direct over time.
ICMP Ping Notes
Standard ICMP ping from the OS (not tailscale ping) fails for Atlantis, Calypso, and Setillo because those hosts have ICMP blocked at the firewall level. This does not indicate a connectivity problem — tailscale ping and SSH both work.
Tailscale Health Warnings
After fixes applied on 2026-03-31:
| Host | Health |
|---|---|
| Homelab-VM | none |
| Pi-5 | none |
| NUC | none |
| Seattle | none |
| PVE | none (was --accept-routes is false, fixed) |
| Matrix-Ubuntu | none (was --accept-routes is false, fixed) |
Fixes Applied (2026-03-31)
LAN Routing (table 52 interception)
- Pi-5: Enabled
--accept-routes, added LAN routing rule (priority 5200), persistent via dispatcher script + cron - Matrix-Ubuntu: Enabled
--accept-routes, added LAN routing rule (priority 5200), persistent via dispatcher script + cron. Enabling--accept-routeswithout the rule broke LAN connectivity (SSH via 192.168.0.154 timed out). - PVE: Enabled
--accept-routes, added LAN routing rule (priority 5200), persistent via cron @reboot
See LAN Routing Fix for full details on the table 52 issue.
Kuma monitors
- Switched all 20 Calypso monitors from Tailscale IP (
100.103.48.78) to LAN IP (192.168.0.250) in the Kuma SQLite DB. Pi-5 (where Kuma runs) is on the same LAN, so using Tailscale IPs added unnecessary fragility. - Added LAN-based monitors for Rustdesk (ID:124) and Rackula (ID:125).
- Fixed corrupted
accepted_statuscodes_jsonfield ([200-299]→["200-299"]) that prevented the Kuma UI from loading. - Fixed ntfy notifications by setting
primaryBaseURLtohttps://kuma.vish.gg— the "view" action button was missing a URL.
Calypso Tailscale 5-minute disconnect (root cause)
Symptom: Calypso's disco key rotated every 5 minutes, dropping all peer WireGuard sessions for ~30 seconds.
Root cause: A cron job in /etc/crontab ran /usr/local/bin/tailscale-fix.sh every 5 minutes (*/5 * * * *). The script checked for the tailscale0 TUN device, but Calypso runs Tailscale in --tun=userspace-networking mode (Synology DSM7), which has no TUN device. The script also checked tailscale status --json which returned empty state when run as the tailscale user. So every 5 minutes:
- Script detects "tailscale0 missing" or "state empty"
- Runs
configure-host+ full service restart viasynosystemctl - Re-authenticates with
tailscale up --reset - New disco key generated → all peers tear down and re-establish connections
Fix: Rewrote /usr/local/bin/tailscale-fix.sh to check if tailscaled process is running and can tailscale ping a known peer (Atlantis), which works in both TUN and userspace-networking modes.
Additional changes on Calypso (not the root cause but good hygiene):
- Disabled Docker IPv6 on all bridge interfaces via
sysctl(77 routes removed) - Updated
dockerd.jsonwith"ipv6": false, "ip6tables": false(persistent after Docker restart) - Added
TS_DEBUG_NETMON_SKIP_INTERFACE_REGEXPSandTS_DEBUG_NETMON_NO_ROUTE_MONITORINGenv vars to Tailscale startup script - Added
/etc/hostsentry:192.168.0.250 headscale.vish.ggto avoid hairpin NAT for control plane
GL.iNet router Tailscale fixes
GL-MT3000 (Hawaii, via Jellyfish at 192.168.12.1):
- Tailscale was pointed at
https://controlplane.tailscale.com(official) instead of Headscale - Re-registered with preauth key:
tailscale up --login-server=https://headscale.vish.gg:8443 --authkey=<key> --hostname=gl-mt3000 --accept-routes --accept-dns=false --advertise-routes=192.168.12.0/24 --reset - Auto-start verified:
/etc/init.d/tailscale-up(S81) runstailscale upwith correct flags after 10s delay - State file at
/etc/tailscale/tailscaled.statehasWantRunning: true,ControlURL: headscale.vish.gg:8443
GL-BE3600 (Home gateway at 192.168.0.1):
- Was already connected to Headscale correctly, no fix needed
- SSH not available on LAN port 22 — accessible via Tailscale IP (
100.105.59.123) - Auto-start verified:
/etc/init.d/tailscale-up(S99) waits up to 120s for network, then connects with--advertise-routes=192.168.68.0/22,192.168.8.0/24
Speedtest results (Ookla official CLI, staggered)
Tests run sequentially per WAN to avoid bandwidth contention. Tested 2026-03-31.
| Host | Location | NIC | ISP | Download | Upload | Latency | Loss |
|---|---|---|---|---|---|---|---|
| Calypso | Home | 10GbE | Sonic | 8,080 Mbps | 6,847 Mbps | 3 ms | 0% |
| Atlantis | Home | 10GbE | Sonic | 6,079 Mbps | 6,908 Mbps | 3 ms | 0% |
| Matrix-Ubuntu | Home | virtio (on Atlantis) | Sonic | 3,537 Mbps | 3,666 Mbps | 4 ms | 0% |
| GL-MT3000 | Hawaii | 1GbE | Spectrum | 1,051 Mbps | 37 Mbps | 8 ms | 0% |
| NUC | Concord | 1GbE | Comcast | 943 Mbps | 357 Mbps | 14 ms | 3.7% |
| GL-BE3600 | Home (gateway) | 2.5GbE | Comcast | 781 Mbps | 71 Mbps | 25 ms | 0% |
| Homelab-VM | Home | 1GbE virtio | Sonic | 616 Mbps | 933 Mbps | 3 ms | 0% |
| Pi-5 | Home | 1GbE | Sonic | 551 Mbps | 936 Mbps | 3 ms | 0% |
| Seattle VPS | Seattle | VPS | Nubes LLC | 197 Mbps | 197 Mbps | 1 ms | 0% |
| Setillo | Remote | Starlink | Starlink | 72 Mbps | 27 Mbps | 27 ms | 0% |
iperf3 benchmarks (all hosts → Calypso)
All tests against Calypso's iperf3 server (192.168.0.250:5201 for LAN, 100.103.48.78:5201 for Tailscale). Run staggered to avoid contention. Tested 2026-03-31.
| Source | Link | NIC / Tunnel | Streams | Throughput | Retransmits |
|---|---|---|---|---|---|
| Atlantis | LAN | 10GbE | 4 | 9.30 Gbps | 0 |
| Guava | LAN | 10GbE | 4 | 8.54 Gbps | 24 |
| Homelab-VM | LAN | 1GbE virtio | 1 | 940 Mbps | 0 |
| PVE | LAN | 1GbE | 1 | 938 Mbps | 0 |
| Pi-5 | LAN | 1GbE | 1 | 887 Mbps | 451 |
| Seattle | Tailscale | WireGuard | 1 | 454 Mbps | 410 |
| NUC | Tailscale | WireGuard | 1 | 252 Mbps | 2 |
Notes:
- 10GbE hosts (Atlantis, Guava) saturate REDACTED_APP_PASSWORD 4 parallel streams
- 1GbE hosts cap at ~940 Mbps as expected; Pi-5 slightly lower with retransmits
- Tailscale/WireGuard tunnel adds overhead: Seattle gets ~450 Mbps, NUC ~250 Mbps
- Calypso not tested (it's the server)