Tailscale 与 Clash 并存:路由与 DNS 分步核对(2026)
很多人同时装有 Tailscale(要回家、要打公司内网、要 Exit Node)又开着 Clash(要规则分流/TUN 调度),一开就:整机上不了网、国内站莫名其妙走出国门、或控制台里看得到节点但浏览器「一直在解析」。这跟「订阅坏了」往往不是一回事,而是路由表谁写默认网关、谁抢 0.0.0.0/0,以及 MagicDNS/系统 resolver 与 Clash DNS、fake-ip 三件事叠在了一起。本文与站内侧重 WSL2、Docker、Hyper‑V、纯 Linux systemd-resolved 的专文错位互补:只讲「组网工具 + 规则代理」并存时的分层核对顺序与常见分流例外写法;请仅在合法合规、且你有权使用的网络环境里操作。
读完这篇你能独立完成什么
你将拿到一套可复制的工作流:先隔离变量判断是Tailscale在改默认路由/出口,还是 Clash 的 TUN 或绕过大陆/GEOIP在吃流量;再在操作系统里读出当前生效路由表与DNS 问询顺序;随后在 Clash 配置里前移针对 Tailscale 地址空间与subnet routing回程网段的直连规则,避免整条 mesh 被撞进全局代理或不合适的策略组;最后单独验证 MagicDNS 后缀与 Clash DNS 段是否自相矛盾。文末有一段可照着勾的简短清单,适合你边改边记在纸上,而不是在社区帖子里随机搜关键词试错。
为什么会出现「上不了网/国内走错隧道/解析怪怪的」
第一,Tailscale 一旦启用全网出口/Exit Node或使用某些「让本机看起来像在别的网络」的设置,等价于有人往系统路由表塞进新的默认或高优先级前缀;而 Clash 若在 TUN 模式下同样接管默认路由语义,两边就有概率先后顺序不稳定——表现就是「重启后变好」「睡眠唤醒又坏」,本质往往是谁后起来谁覆盖谁,而不是玄学。
第二,subnet routing(子网路由通告)会把公司局域网、机房网段、家庭路由器后面的 /24从另一个节点「拉」到你的机器上。若 Clash 侧规则过于激进(例如 GEOIP 非 CN 一刀切进代理),这些本应走 Tailscale overlay 的包可能被错误地塞进某个海外节点再绕回来,轻则延迟爆炸,重则直接黑洞。站内国内直连与 GEOIP 核对清单能帮你看规则顺序是否正确,但本篇额外强调:Tailscale 引入的是「第二张网」,要在规则里为它单列一支。
第三,MagicDNS会在你的 tailnet 里提供一套可读的机器名后缀解析;当它叠加到系统自带的 resolver、路由器 DNS、浏览器 DoH 与 Clash 的 nameserver-policy 之上时,常见症状是:dig 或系统解析器看见的是一串与 Clash fake-ip 不兼容的中间结果,应用在连接建立阶段却拿着占位地址乱撞。别把这类问题误判成分流顺序问题;先固定 DNS 叙事,再回到规则。
第一步:关掉「二分法」,用隔离变量拆开 Tailscale / Clash
真正省时间的做法,是永远只做一组对照:先暂停 Exit Node与「强制所有流量经由 Tailscale」(不同客户端文案略有差异);再临时把 Clash 从 TUN 切到规则较保守的系统代理或直接关闭内核接管,仅用浏览器扩展层验证出站是否恢复。若这样能立刻恢复正常,你已证明矛盾集中在默认路由争抢而不是远程节点质量。
反之,若在「只开 Tailscale、不开 Clash」下访问 tailnet 内服务正常,一开 Clash 立刻异常,十有八九是 Clash 没有为 Tailscale 使用的地址族放置足够靠前的 DIRECT/专用策略。此时不要急着重写整份 YAML,请先往下看第三步的网段与白名单写法;需要 DOMAIN 粒度时对照自定义规则教程把例外前移。
第二步:读出「是谁在写路由表」(比猜客户端开关可靠)
在排查阶段,请务必打开终端看实际路由结果,而不是只靠托盘图标。Windows 上可用route print 或 Get-NetRoute 观察默认路由条目是否出现重复的 0.0.0.0、更低的跃点数、或意想不到的接口。macOS 与桌面 Linux 则用 netstat -rn 或 ip route/ip -6 route,重点盯住default 与指向 utun/tailscale 一类接口的路径。
若你看到两套默认出口各自指向Tailscale 虚拟接口与Clash 虚拟网卡,接下来要在不改变各自功能目标的前提下,想清楚业务优先级:哪些前缀必须永远不经过 Clash 策略栈(典型是 tailnet/子网回程),哪些可以交给 Clash 做 GEOIP但要注意顺序。这不是「选一个关掉另一个」的假问题,而是用更细前缀消掉歧义。路由表在这里只是物证链:它告诉你系统在发包之前到底想把包扔给哪张网卡。
第三步:在 Clash 里为 Tailscale/子网放回「直连快车道」
实务中最常见、也最容易被遗忘的一条,是给 Tailscale分配的 IPv4 空间与官方文档列出的IPv6 ULA前缀写上直连规则,并排在 GEOIP 或「FINAL→PROXY」等大规则之前。原因很简单:这些目的地本该在加密封装层以内完成选路;你若把它交给远端代理节点,等价于让一个根本不知道你 tailnet 拓扑的主机替你决定下一站。
同时,一旦你在 tailnet 上开启了subnet routing,请把通告方声明给 mesh 的子网前缀(例如某公司 10.0.0.0/8 片段、库房 192.168.x.0/24)逐条记在纸上,再在 Clash 里用IP-CIDR/IP-CIDR6放行进 DIRECT 或你希望使用的局域网专用策略组。Tailscale 管理后台里关于路由是否被批准、是否在客户端接受,也要与物理网络是否可达分开理解:批准了路由≠你的 Clash 规则不会劫持。
若你希望「局域网/专网语义」更清晰,可把相关前缀整理成单独的 rule-provider 或 RULE-SET,由版本管理工具维护——但起步阶段用显式前缀足够把大问题砍成十分之一;细节语法仍以你当前 Mihomo/Meta 内核版本文档为准。分流例外是否生效,请以 Clash 连接日志里目的地 IP与选中策略组为准,而不要只看仪表盘延迟数字。
第四步:MagicDNS 与 Clash DNS 对齐,避免「三套解析叙事」
当你在浏览器里打一个 MagicDNS 后缀的主机名,请求路径可能是:操作系统 stub → 路由器 → Tailscale 注入的上游;而同机的 Clash 若启用劫持 DNS/TUN 级 DNS redir,则会再裁剪一遍。要与 Pure Linux 场景的 systemd-resolved 专文类比,可看Linux 侧 resolved 与 Clash DNS 分步核对的思路:核心是只保留一层「对外提问」的真相来源,其它层只做缓存或封装。
如果你使用 fake-ip,要确保 tailnet后缀、mDNS/.local、公司与家庭拆分 DNS(split horizon)相关后缀出现在合适的 fake-ip-filter 或等价 bypass 名单中;否则内核会给应用一串占位地址,而应用在 TLS/HTTP 层面的 SNI/Host 却仍指向真实主机名——这类「半真半假」的状态非常像DNS 坏了,实际上只是两套 fake 语义打架。
快速验收建议:在同一个终端中对出问题主机名跑明文解析指令(随系统而异),再开一个仅用 Clash 上游的解析探测(若你的客户端提供),比对CNAME/AAAA链是否分叉;分叉点在哪里,就在那里收敛配置。尽量不要把 MagicDNS 与远端 DoH(经过代理)混成一串「绕圈圈」链路。
第五步:TUN/系统代理模式下与 Windows 宿主机的特例
许多读者在Windows 11 上同时使用两者:Tailscale GUI 勾选出口,Clash Verge/同类客户端打开 TUN。此时除了路由,还要顺带确认允许局域网/allow-lan、WFP 过滤与 Defender 防火墙对虚拟网卡类别的影响——当你在 tailnet 上访问 sibling 主机时,SYN 可能因为本机出站被错误分类而被拦。可先阅读Windows 11 下首次安装与断网排查与局域网代理与防火墙,把宿主侧链路跑通后再回来看 Tailscale 叠加。
若你还有 WSL2、Hyper‑V VM、Android 模拟器等第二张 NAT 世界,请参考站内WSL2 共用代理与Hyper‑V 网关教程,始终把「宿主可达性」与「tailnet/子网路由」区分开写进你的笔记本:否则你会在工单里写上「上不了网」,而工程师看见的却是五层拓扑同时存在。
第六步:Docker/Linux Server 场景:谁是「宿主」谁在容器里反问 DNS
在伺服器上使用 Tailscale只对宿主机入网时,常见问题反而是docker0/bridge 后面的容器仍按默认网关出去,与你的 tailnet 策略无关;但一旦你在宿主机配置了iptables/nft 或 Clash 的TUN 转发,就要检查回程(reverse path)是否不对称。若在容器里反问 MagicDNS,而容器自带的 /etc/resolv.conf仍指向宿主 stub,可能得到与宿主机完全不同的 NXDOMAIN行为。
这类问题请先回到第二层原则:每个网络命名空间里,只允许一条解析故事。需要把宿主 tailnet中继给容器网络时,应显式写明 DNS 伺服器与网关,而不是指望 Clash 自动「猜到你的 mesh 拓扑」。与Docker Desktop 与宿主机对齐一文类似:代理与组网各管一层,混谈就会浪费时间。
一份可勾选的分步核对清单(建议打印)
路由层:Tailscale 是否启用 Exit/全隧道等价能力;关掉后瞬时恢复吗?路由表里默认出口是否唯一且符合预期口径?subnet routing 批准后,是否真的能在无 Clash 时 ping 通子网网关?
Clash 规则层:Tailscale 典型 IPv4 空间与ULA IPv6前缀是否前移直连?通告的子网前缀是否整段放行到 DIRECT/专组?GEOIP/FINAL 等大规则是否太晚才看到直连例外?对照GEOIP/绕过大陆核对时,别把 tailnet误判成「异国」。
DNS 层:MagicDNS 打开与否对症状是否二进制开关级别影响?是否存在浏览器 DoH 与系统/Clash 上游各说各话?fake-ip-filter 是否漏了 tailnet 后缀?逐项只改一档,复述一遍谁在问谁。
宿主杂项:防火墙/WFP 是否把虚拟网卡当公共网络;WSL/VM 是否要单独写静态路由或代理环境变量。Tailscale ACL 与管理员批准路由是否只是「远端策略允许」,并不等于你本机 Clash就会自动礼貌让路。
典型症状一页纸对照(用来快速归因)
A. 仅MagicDNS后缀打不开,换成 IP(若你知道)却可以:DNS 链路问题优先。B. 只有出走 Exit Node/全隧道模式后国内变慢:默认路由语义问题。C. 只有开 Clash TUN 后访问 tailnet 失败:多数是没有把 overlay 前缀前移直连。D. 浏览器正常、CLI 怪异:多半是不同工具走了不同解析器/代理环境变量,对齐终端与桌面会话。
安全、合规与现实边界
请在你有权配置的设备上使用 Tailscale/Clash,并遵守公司及当地合规要求。Exit Node 可能把出站流量转嫁到受托朋友或家庭带宽之上,这既涉及法律责任也可能违背对方 ISP 条款;请勿把他人节点当匿名跳板。本文不涉及破解、规避监管或攻击性用途,仅描述自用设备共存排错思路;若你希望了解 Clash内核与社区的公开维护状态,可于正文外自行查阅开源仓库与发行说明。安装包分发仍以本站下载页为面向普通读者的主入口。
小结
Tailscale 改的是你与 mesh/子网的拓扑关系和路由事实,Clash 改的是在既定五元组上如何选节点;两者叠乘时最大的坑,是用过粗的规则尾部把本该走 overlay/专网前缀的流量误判进代理。先做路由表取证,再做 MagicDNS/系统 DNS/Clash DNS 的单一路径收敛,最后用前置直连例外落实 subnet routing 与Tailscale 常见地址空间的DIRECT语义,就能把「玄学断网」压成可逐项勾掉的工程问题。
若你已习惯用规则客户端把流量拆精细,并希望从本站获取维护积极的发行版与可读教程链路,可走下载页配合总览教程建立自己的「网络变更日志」。相比零散论坛回帖式试错,把这种组网 + 分流场景写进一页核对表,长期来看更省事。→ 立即免费下载 Clash,开启流畅上网新体验。