Configuration Practices · Clash Technical Blog

Resolving Tailscale and Clash Conflicts: TUN, LAN, and Route Priority

If Tailscale and Clash work separately but fail together, compare routes and resolution. Test tailnet addresses, device names, advertised subnets, and public access separately, define the default exit and actual exclusions, and avoid both tools competing for the same route.

  • Tailscale
  • TUN
  • Local Network
On this page

When combining remote access with an everyday proxy, it can be hard to tell whether the failure affects a device address, a device name, or internet access. Record each result separately to identify whether routing, name resolution, or the default outbound connection needs attention. Even when both tools work alone, their interaction still needs testing on the same device.

Connection Fails Only When Both Run: Compare Routes and Name Resolution

Use the table below to check shared routes, DNS, and the default outbound connection only when the failure occurs with Tailscale and Clash TUN running together. If either tool also fails alone, troubleshoot that tool’s own configuration instead of treating it as a conflict between them.

Record three states separately: only Tailscale, only Clash, and both enabled. In each state, test one tailnet IP, one tailnet device name, one LAN address, and one public address. Different results for the IP and device name already separate routing problems from MagicDNS problems.

What the three comparisons reveal

ResultMore likely issue
Neither the 100.x address nor the device name worksThe Tailscale subnet is captured by TUN or a default route
The 100.x address works, but the device name does notMagicDNS or the capture order of Clash DNS
The tailnet works, but public internet access failsBoth tools are competing for the default egress or exit node
Only one LAN subnet is unreachableA Tailscale subnet route overlaps the local subnet

The routing table reveals which adapter captured the target subnet

Tailscale assigns devices addresses in 100.64.0.0/10, may also receive administrator-approved subnet routes, and installs default routes when an exit node is selected. Clash TUN writes routes too, so you cannot diagnose the conflict by looking at two toggles.

While the problem is present, save the output of the commands below for your OS and compare it with each tool running alone. On Linux, use ip route show table all with ip rule to inspect policy routing rather than only the main table.

Check the interfaces for 100.64.0.0/10, advertised subnets, the home LAN, and the default route, and how the tables and rules select them. Compare metric values for identical prefixes within the same table.

View routes by operating system
# Windows
route print

# Linux
ip route show table all
ip rule

# macOS
netstat -rn

Assign the default internet route to only one tool

Both a Tailscale exit node and Clash TUN can affect default internet traffic. If the goal is only to reach a home NAS through Tailscale while Clash handles public routing, do not select a Tailscale exit node on this device.

If your company requires all internet traffic to use a specified Tailscale exit node, limit Clash to specific apps or proxy ports and confirm that combining them complies with organizational policy. When both tools set a default exit, occasional success may only reflect route priority (metric) working temporarily; it does not show that the configuration is stable.

tailnet Exclusions and Overlapping Subnets

In clients such as Clash Verge Rev that support custom subnet exclusions for TUN, add 100.64.0.0/10, the home LAN actually in use, and the advertised routes approved in the Tailscale admin console to the exclusion list.

Do not copy every private subnet from someone else. An overly broad exclusion sends connections that should be handled by Clash directly out of the tunnel.

Mihomo rules can also mark these subnets as DIRECT, but a routing-layer exclusion and rule-layer DIRECT are not identical: a connection must first reach the core before a rule can evaluate it. If the 100.x request never appears in Clash connection records, inspect system routing directly; if it appears and matches a proxy, adjust the rule.

Fill in values for your own network

  • 100.64.0.0/10 tailnet address range
  • The actual LAN subnet at home or in the office
  • Subnet routes approved in the Tailscale console
  • Subnets in Docker, WSL, or virtual machines that actually overlap the tailnet

If a Tailscale subnet route advertises 192.168.1.0/24 while the current coffee shop or home also uses 192.168.1.0/24, the system cannot determine which side you mean from the address alone. Docker and WSL2 add private subnets of their own, so the conflict may occur only inside a container or subsystem.

For overlapping subnets, first change the address plan of a LAN, Docker network, or virtual machine you control. Repeatedly raising route priority for the same subnet is not a lasting solution; it may fail again after switching networks, waking, or upgrading.

If the IP works but the device name fails, address MagicDNS rather than routing

Successful direct access to a 100.x address means the route to the tailnet largely exists. If device-name resolution still fails, Clash DNS, browser DoH, or the system resolver probably is not handing the tailnet name to Tailscale's DNS configuration.

Use tailscale status to obtain the target device’s address, then compare its short and full tailnet names with the operating system’s native resolver. On some platforms, nslookup does not read system DNS settings, so its result alone does not show that MagicDNS has failed.

On macOS, run dscacheutil -q host -a name DEVICE_NAME, replacing DEVICE_NAME with the short name. Read name and ip_address, then repeat the query with the returned full tailnet name and compare the addresses with the target device.

During troubleshooting, disable the browser’s independent DoH and check Clash nameserver-policy or local-domain exclusions. Do not forward tailnet names to public DNS.

If Access Fails After Wake or a Wi-Fi Change, Compare Routes and Resolution After Reconnection

After the laptop wakes, switches from Ethernet to Wi-Fi, or connects to a phone hotspot, wait for both clients to reconnect, then compare routes and name-resolution results. Recovery after restarting one tool in a fixed sequence is a clue to investigate startup or reconnection. Compare the before-and-after records to identify what changed; recovery alone does not establish the cause.

If the problem keeps recurring after both clients are updated, reduce competition during automatic startup: let the system network become ready before starting the required tunnels, and avoid automatically selecting a Tailscale exit node at the same time. Do not run a full network reset each time, because it clears settings unrelated to the failure.

Do Tailscale Private-Network Access and Clash Internet Routing Both Work?

Verify everything in the same test cycle

  1. Access a tailnet IP

    Proves that the 100.x route still belongs to Tailscale.

  2. Access a tailnet name

    Proves that MagicDNS or the dedicated resolver still works.

  3. Access an advertised subnet

    Confirms that the approved subnet route was not captured by Clash.

  4. Access the public internet and inspect Clash records

    Proves that ordinary routing still uses the intended policy.

If a tailnet IP, device name, advertised subnet, or public internet request fails, check the corresponding route, DNS, subnet, or default exit.

References