ChrAlpha's Blog

Tailscale 配合 Mihomo(Clash.Meta) TUN/Quantumult X VPN 共存使用技巧

2025-03-22·便签格

由于没有公网 IP,以往一直通过白嫖 Cloudflare Zero Trust 的方式异地组网。随着需求的增加,以及不久前 Cloudflare 1.1.1.1 DoH 被阻断,担心 不可抗拒因素 导致可用性进一步下降,因此将方案切换成 Tailscale + 自建 derp 服务器。

然而 Tailscale MagicDNS 往往会与代理工具为了防止 DNS 污染而采取的一系列手段相冲突。倘若你的代理工具不仅是以系统代理而是以 TUN 等更深方式还可能与完整 Tailscale 互斥。本文记录了一些解决方案。

最小化 Tailscale──作为 Socks5 节点

默认情况下,Tailscale 会作为 TUN 虚拟网关处理,这可能会与代理工具互斥。Tailscale Userspace networking mode 可以 gVisor 仅作为 Socks5 代理节点加入代理工具的链路。Tailscale 两种工作方式的技术层面对比参考 Tailscale 文档 Technical overviews 部分

tailscaled --tun=userspace-networking --socks5-server=localhost:<socks5-port>

tailscale up --accept-dns=false --auth-key=<auth-key>

此时将 <auth-key>@localhost:<socks5-port> 作为 Socks5 节点手动添加到代理工具中即可。主流代理工具均支持以规则指定节点,亦或是仅在需要时切换至此节点,在设置好 Exit Node 并在 Exit Node 配置好出站代理后一直采用此节点均可。

完整 Tailscale 与代理工具共存

如果日常使用 Tailscale 程度更高、希望 Tailscale 更深入介入,但是又不希望干扰代理工具,经过我的尝试,至少在 Windows/macOS 上,通过以下几步便可实现:

  • 代理工具排除 Tailscale 网段
  • Tailscale 关闭本地 DNS 服务(并非 完全关闭 MagicDNS)
  • 代理工具按需设置 100.100.100.100 DNS

代理工具排除 Tailscale 网段

仅以 Mihomo/Quantumult X 为例具体操作。

Tailscale 会为每个节点分配一个唯一的 100.x.y.z IP,可以单独将这些地址排除在代理之外。特别的,Mihomo 还可以在规则中根据 PROCESS-NAME 来排除 Tailscale 进程、在 TUN 网关中排除 Tailscale interface。

在 Mihomo profile 中插入以下规则:

tun:
  exclude-interface:
    - Tailscale # maybe `utun*` on macOS
  route-exclude-address:
    - 100.64.0.0/10
    - fd7a:115c:a1e0::/48

rules:
  - PROCESS-NAME,tailscale.exe,DIRECT # remove .exe for macOS
  - PROCESS-NAME,tailscaled.exe,DIRECT

对于 Quantumult X,如果你使用公共性质的代理服务商家所提供的配置文件,一般已经在 [general] 中排除了 100.64.0.0/10,但是 Quantumult X 会添加 excluded_routes 路由到默认网关而覆盖 Tailscale 路由。由于路由规则从细到粗,可以尝试将 excluded_routes 排除放大至 100.64.0.0/9 以确保 Tailscale 100.64.0.0/10 路由优先生效。

[general]
excluded_routes = 100.64.0.0/9 ; as well as other routes

Tailscale 关闭本地 DNS 服务

对于 CLI 版本。

tailscale up --accept-dns=false

对于 GUI 版本,可以在 Settings > General 中取消勾选「Use Tailscale DNS settings」。注意不需要完全关闭 MagicDNS,只需要关闭本地 DNS 服务即可。

其实到这一步可以通过 Tailscale IP 的方式连接到其他节点,但是对于 Tailscale 分配的 <machine-name>.<tailnet-name>.ts.net 就无法解析。如果你完全不需要此域名或者自定义域名解析,可以直接跳过下一步。

代理工具按需设置 DNS

一个比较懒的方法是直接在代理工具中全局 DNS 设置为 100.100.100.100 交由 MagicDNS,MagicDNS 在非 Tailscale 域名解析中会自动使用系统 DNS 或其他公共 DNS/DoH 服务,可在面板中设置。

而代理工具往往会提供复杂的 DNS 解析以及回退机制,更加理想的做法是根据 +.<tailnet-name>.ts.net 交由 MagicDNS 其余继续进入代理工具的 DNS 解析链路。

  • Mihomo DNS 配置
dns:
  nameserver-policy:
    "+.<tailnet-name>.ts.net": "100.100.100.100"
  • Quantumult X DNS 配置
[dns]
server = /+.<tailnet-name>.ts.net/100.100.100.100

不过遗憾的是,直接通过 <machine-name> 还是无法解析,如果你设备变化不频繁,也可以直接写进 Hosts 文件。


关于 Tailscale 本体的使用、自建 Derp 服务器等内容,已有很多文章介绍参考,本文不再赘述,仅记录了一些与代理工具共存的技巧。希望对你有所帮助。

Tailscale 配合 Mihomo(Clash.Meta) TUN/Quantumult X VPN 共存使用技巧
本文作者
ChrAlpha
发布日期
2025-03-22
更新日期
2025-03-22
转载或引用本文时请遵守 CC BY-NC-SA 4.0 许可协议,注明出处、不得用于商业用途!
CC BY-NC-SA 4.0