Tunnel Doctor (Tailscale × Proxy Conflict Fixer)
A macOS network-debugging skill that isolates and fixes Tailscale conflicts with Shadowrocket/Clash/Surge/OrbStack — route hijacks, proxy env vars, SSH double tunnels, Docker proxy propagation and stalled DNS.
Dev & CodingAdvanced★ 1,323⑂ 212AI score 9/10Last updated: Aug 8, 2026
What it does
- Maps contradictory symptoms (
tailscale pingworks but SSH times out; browser gets 503 while curl gets 200;git pushdies intermittently) onto five independent conflict layers: route table, HTTP proxy env vars, system proxy, SSH ProxyCommand double tunnel, and VM/container proxy propagation. - Gives exact verification commands and fixes: add
.ts.net+100.64.0.0/10toNO_PROXY(including the Gonet/httpCIDR caveat), setskip-proxyin Shadowrocket, identify whichutunowns the CGNAT route viaroute -n getand MTU (1280 = Tailscale, 4064 = Shadowrocket), point OrbStack'sdocker.jsonathost.internal, or build with--network host. - Covers hard failure modes too: 60-second
getaddrinfostalls from a dead supplemental resolver, TUN DNS hijack to198.18.x.xfake IPs, "TUN DIRECT split-brain" where every DIRECT-routed site fails at once, and a Windows host TUN black-holing WSL and Tailscale. - Includes a "measurement contamination" table explaining which probes lie under TUN (
nc -zat 0.00s, sub-ms pings,%{remote_ip}) and which to trust (time_appconnect,time_starttransfer). - Ships
scripts/quick_diagnose.pyfor an automated sweep of proxy env, system-proxy exceptions, direct-vs-proxy paths and local TLS trust.
Who it's for
- macOS developers doing remote dev over Tailscale (Mac mini, WSL box, home server) while a proxy/VPN app is always on.
- Shadowrocket/Clash/Surge users hit by flaky
git pushordocker pull/buildTLS timeouts. - Anyone who wants evidence-based layer isolation instead of guessing at the network.
Example uses
- "Browser shows 503 for
http://100.x.x.x:3010but curl returns 200" → diagnosed as system-proxy bypass; add the CGNAT range toskip-proxy(nottun-excluded-routes). - "
ssh -T git@github.comworks butgit pushfails withfailed to begin relaying via HTTP" → double tunnel; dropProxyCommand connect -Hand usessh.github.com:443. - "
RUN apk addindocker buildfails with Connection refused in 0.2s" → OrbStack transparent proxy broken by TUN; fix with--network hostor ahost.internalproxy config. - "
nslookupis instant but ssh/curl hang 60s" → per-nameserver bisection pinpoints the dead resolver inscutil --dns.
· · · Install guide · · ·
Try it now, no install
Paste this into Claude to use the skill without installing anything.
Read the instructions in this file and follow them to help me: https://raw.githubusercontent.com/daymade/claude-code-skills/HEAD/tunnel-doctor/SKILL.md What I want: (describe your task here)
If Claude can't open the link, open it yourself and paste the contents instead.
↓ If it works for you, download the ZIP below and install it. Then it runs on its own — no pasting each time.
Install in the Claude app (no terminal)
- Download the ZIP with the button below.
- In Claude, open Settings → Capabilities and turn on 'Code execution and file creation'. (one time)
- Go to Customize → Skills → + → 'Upload a skill' and upload the ZIP.
Install in Claude Code
Let Claude do it — paste this into Claude Code
Install the skill I found on Claude Skill Mart. Copy the tunnel-doctor folder from the GitHub repo daymade/claude-code-skills into my ~/.claude/skills/tunnel-doctor/. When it's done, tell me in one line what this skill can do.
Install with a command instead
git clone https://github.com/daymade/claude-code-skills.git && mkdir -p ~/.claude/skills && cp -r claude-code-skills/tunnel-doctor ~/.claude/skills/⚠ This is a third-party skill. Check the source repository before installing.
- Open a terminal.
- Clone the repository:
git clone https://github.com/daymade/claude-code-skills.git - Create the skills directory if needed:
mkdir -p ~/.claude/skills - Copy this skill in:
cp -r claude-code-skills/tunnel-doctor ~/.claude/skills/ - (Recommended) also copy the base skill it references:
cp -r claude-code-skills/debugging-network-issues ~/.claude/skills/ 2>/dev/null - Verify Python 3 exists for the helper script:
python3 --version - Restart Claude Code, then describe your symptom (e.g. "tailscale ping works but ssh times out") to trigger the skill.
- Because it can edit routes,
~/.zshrc,~/.ssh/configand proxy-app settings, back those files up and review each suggested command before running it.
View source on GitHub ↗License: MIT