配置实践 · Clash 技术博客

Clash TUN 模式和系统代理有什么区别?DNS 覆写与 Fake-IP 设置

系统代理只接收愿意读取代理设置的应用,TUN 则从系统网络层接管更多流量。先看失败程序有没有连接记录,再决定是否需要 TUN、DNS 覆写或 Fake-IP。

  • TUN
  • DNS
  • fake-ip
本文目录

系统代理等应用主动交流量,TUN 在系统网络层接住流量

开启系统代理时,Clash 把本地代理地址写进操作系统,愿意读取这项设置的应用再把 HTTP、HTTPS 请求发到该端口。浏览器通常会使用它,终端工具、游戏和部分桌面应用可能不使用;系统代理本身也不能统一接管 UDP。

TUN 创建虚拟网卡,通过系统路由让更多 TCP、UDP 连接进入 Mihomo。它解决“这个进程没有走本地代理端口”的问题,但不会改变节点可用性、规则顺序或服务端返回的 403。

两种入口的核心差别

项目系统代理TUN
谁决定进入 Clash应用是否读取系统设置系统路由与虚拟网卡
UDP通常不接管可以进入 TUN,仍取决于节点和配置
系统权限修改代理设置还需虚拟网卡、服务或网络扩展权限
回退关闭代理开关即可关闭 TUN,并等待路由和接口撤回
系统代理与 TUN 的流量入口
  1. 应用发起连接浏览器、终端、游戏或后台服务
  2. 系统代理或 TUN决定这条流量能否进入内核
  3. 规则与 DNS保留域名并决定直连或代理
  4. 实际出口DIRECT、代理节点或拒绝

入口只负责接住流量。真正走哪个出口,仍由规则、DNS 结果和策略组共同决定。

判断入口,只看原来失败的程序有没有连接记录

用同一动作做前后对照

  1. 固定 Profile、Rule 模式和节点

    避免入口测试被自动切换或配置更新干扰。

  2. 只开系统代理

    在目标程序里重复一个固定动作。

  3. 查看 Connections

    若请求已经出现,入口没有缺失,继续读规则和日志。

  4. 无记录时再开 TUN

    重做同一动作,比较是否出现新连接。

TUN 后新连接出现并成功,说明它补上了接管范围。两种入口下都能看到请求,却同样 timeout,问题应放在节点、DNS 或目标网络,而不是继续切换入口。

auto-route、interface 和 stack 共同决定数据怎么穿过虚拟网卡

Mihomo 的 auto-route 用来把流量路由到 TUN,auto-detect-interface 用来识别真实出口网卡。stack 可选 system、gvisor 或 mixed 等实现;默认值能覆盖目标应用时,不需要为了“更快”随意更换。

从 Wi-Fi 切到热点后突然没网,可能是出口网卡变化;只有 system 或 mixed 在某台电脑被防火墙拦,才针对内核进程调整防火墙。Windows 的 strict-route 还可能影响 VirtualBox 等虚拟网络,使用虚拟机时要单独验证。

TUN 字段片段,需要合并到当前 Mihomo 配置
tun:
  enable: true
  stack: mixed
  auto-route: true
  auto-detect-interface: true
  dns-hijack:
    - any:53

DNS 覆写要把解析请求送进同一条判断路径

应用先把域名解析成地址,再建立连接。如果 DNS 请求绕过 Mihomo,内核可能只看到 IP,域名规则无法按预期工作;也可能得到与代理出口不匹配的解析结果,表现为首页能开、图片失败或同一服务时好时坏。

dns-hijack 用来把匹配的 DNS 流量交给 Mihomo 内部 DNS。它并非在所有系统和所有来源上自动生效:Windows、macOS 无法自动劫持局域网其他设备的 DNS,请求来自路由器或手机时要单独配置;Android 私人 DNS也会绕过普通劫持路径。

Connections 有域名且规则正确
DNS 与嗅探至少提供了可用于规则判断的信息。
只看到 IP,域名规则不命中
检查 DNS 是否进入 Mihomo,以及应用是否使用加密 DNS。
IP 能访问,域名报解析错误
重点比较系统 DNS、Mihomo DNS 和当前网络。

Fake-IP 的作用是保留域名关系,不是凭空加速

在 fake-ip 模式下,Mihomo 先向应用返回一段保留地址,并在内部保存“这个假地址对应哪个域名”。应用连接该地址时,内核可以恢复原域名,较早做 DOMAIN、DOMAIN-SUFFIX 和 RULE-SET 判断。

这种方式不会让 DNS 自动变快,也不会改变远程节点质量。某些局域网服务、设备发现、企业软件或直接校验 IP 的程序可能不兼容,需要按具体域名加入 fake-ip-filter,或在验证后选择其他 DNS 增强模式。

Fake-IP 常见结果

表现解释
系统查询得到保留地址可能是正常的 fake-ip 映射,不代表域名被劫持
Connections 能显示原域名映射帮助内核按域名规则判断
某个内网域名在 fake-ip 下失败把准确域名排除并让内部 DNS 解析
所有网站都慢不能仅凭 fake-ip 下结论,继续看节点、DNS 上游和日志

需要真实 IP 的应用,用 redir-host 或准确的 Fake-IP 例外

有些企业软件、局域网服务或设备发现功能会直接使用 DNS 返回的真实地址,不适合拿到 Fake-IP。此时可以让整份配置使用 redir-host,也可以只把明确不兼容的域名加入 fake-ip-filter;前者改变所有域名的解析方式,后者影响范围更小。

redir-host 更接近普通 DNS,应用直接拿到上游返回的真实 IP;代价是 Mihomo 不一定像 Fake-IP 那样早地保留域名映射,域名规则识别还会受客户端、缓存与嗅探设置影响。不要因为一个内网域名失败就把全站切换,先做单域名例外。

需要真实 IP 时怎么选

场景更合适的处理验证结果
只有一个企业内网域名失败加入准确的 fake-ip-filter,并使用内部 DNS返回内网真实 IP,连接命中 DIRECT
一类应用普遍不兼容 Fake-IP用 redir-host 做单独配置对照应用恢复,公网域名规则仍能正确命中
NAS、打印机使用固定私有 IP保留私有网段 DIRECT访问不再绕到代理策略
不知道哪个域名不兼容先从 Connections 与 DNS 日志找目标确认对象后再加例外,不使用大范围通配

DNS 排查需要保留一个不变的请求

遇到域名问题,固定节点和请求,先记录当前 enhanced-mode、上游 DNS 与错误。只改一个变量做对照:例如把某个明确不兼容的内部域名加入 fake-ip-filter,或临时切换 Android 私人 DNS 状态。结果有变化,再保留这项改动。

no such host / DNS lookup failed

检查上游 DNS 可达性和请求是否进入 Mihomo。

局域网域名失效,公网域名正常

保留内部 DNS 路径,并为准确域名设置直连或 Fake-IP 排除。

切网络后才解析异常

比较两张网络的 DNS、IPv6 和出口接口,不要先换所有节点。

域名规则始终显示 MATCH

查看内核是否拿到域名,以及更宽规则是否提前命中。

浏览器用户从系统代理开始,需要 UDP 或补漏再用 TUN

按使用场景选择

使用场景建议起点理由
主要是网页和遵循系统代理的桌面软件系统代理权限少、容易关闭、连接路径清楚
终端、游戏启动器没有 Connections 记录应用代理或 TUN 对照补上不读取系统代理的进程
需要处理 UDP 的应用TUN系统代理无法统一接管 UDP
企业内网、虚拟机和复杂局域网系统代理起步先保留原路由,再逐项验证 TUN 排除范围
某域名规则走错任一已有入口 + 修规则入口扩大不会改变第一条命中规则

选择不是永久的。日常只需浏览器时可以关闭 TUN,回到系统代理;需要特定程序时再开启。切换后都用原目标动作和 Connections 验证,而不是只看开关颜色。

断网时按 TUN、DNS、系统代理的顺序撤回

若刚开 TUN 就全断,先关闭 TUN,保留原 Profile 与节点。系统代理恢复,说明故障在虚拟网卡、路由或 TUN 的 DNS;系统代理也失败,再回到节点和配置。不要直接使用操作系统的网络重置,它会清掉更多无关设置。

若关闭客户端后网页仍打不开,检查系统代理是否残留在 127.0.0.1 的旧端口。清掉残留后应恢复直连。选择可以落到实际结果上:系统代理负责浏览器,TUN 接住原来漏掉的进程,DNS 模式让目标域名稳定命中预期规则。哪一层没有带来需要的结果,就不要长期保留。

参考资料