比较 Clash 关闭与开启接管时的局域网访问,对象是同一台主机、同一个已知地址的内网目标,观察可达性如何随 Tun 开关、自动路由、排除网段和严格路由变化。文档里与接管直接相关的是 enable 与 auto-route:后者会自动设置全局路由,把全局流量路由进入 tun 网卡。比较的是路由归属,不是速率或稳定性数值。
适用条件
适用:可以在配置中切换 tun.enable 或 auto-route;有一台地址明确、平时可访问的局域网目标;每次只改变一类开关并记录该目标是否仍可达。auto-route 为 false 或不启用 tun 时,不应再用 route-exclude-address 解释「为何内网正常」,因为排除项是在启用 auto-route 时才排除自定义网段。
auto-redirect 仅支持 Linux,且需要 auto-route 已启用。比较 Android 通过热点或中继共享连接时,文档写明仅转发本地 IPv4 连接,并指向 VPNHotspot;该场景不能与桌面关闭接管的对比混写。MacOS 上 device 只能使用 utun 开头的网卡名,名称不合格时先不要进入对比。
比较步骤与判断依据
- 先做关闭接管的基线。将
enable设为 false,或保持 tun 关闭,访问局域网目标并记录可达性。后续任何「开启后失败」都必须能对照这份基线,否则无法证明问题来自接管。 - 仅开启 tun、不自动路由。
enable为 true 而auto-route为 false 时,不会按官方描述自动把全局流量送进 tun。若结果与基线相同,说明故障尚未被自动路由触发。 - 开启 auto-route,暂不写排除。再次访问同一地址。失败则可判断自动全局路由已覆盖该目的;仍成功则可能未进入被改写的路由范围,或仍从其他接口直达。此时结合
auto-detect-interface是否在多出口时选错网卡,以及include-interface、exclude-interface是否把局域网接口排除。后两者冲突,不可一起配置,比较时只能保留一种。 - 开启 auto-route 并设置
route-exclude-address。把实际局域网 CIDR 写入排除列表,文档示例为192.168.0.0/16。比较「未排除 / 已排除」两次结果。判断依据:排除覆盖实际地址时,开启接管后应仍有与基线同类的直达机会;排除未覆盖则开启后失败不能当成意外。也可用route-address改为只接管自定义前缀,再看局域网是否从默认路由中拿掉。旧的 inet4/inet6 路由字段即将废弃,对比记录里应注明用的是现行字段还是旧写法。 - 再叠加
strict-route比较一次。Linux:让不支持的网络无法到达,将所有连接路由到 tun,防止地址泄漏。Windows:添加防火墙规则以阻止普通多宿主 DNS 解析行为造成的 DNS 泄露,并可能使 VirtualBox 等无法正常工作。判断依据:仅在严格路由打开后局域网失败,原因记在严格路由,而不是笼统记成 Tun 损坏。 - Linux 且 auto-redirect 可用时,可再比较 MAC 级、UID 级包含与排除。一次只改一类列表,避免与地址排除同时改动导致无法归因。协议栈方面,文档列出 system、gvisor、mixed、mips;若打开了防火墙,则无法使用 system 和 mixed。比较过程中若同时开了防火墙,应先按各平台放行内核、应用或 TUN 网卡出站,否则比较的是防火墙拦截而不是接管。
失败时下一步
开启接管后局域网不可达、关闭后基线正常时,按顺序单独关闭 strict-route、补全 route-exclude-address、检查接口过滤,每次只改一项并对照基线。IPv6 目标异常时,核 inet6-address 以及顶层 ipv6 是否为 true;启动时会检查系统其他网卡是否有 IPv6,不存在会禁用该功能,需要强制开启时设置 SKIP_SYSTEM_IPV6_CHECK=1。DNS 名称可解析但连接失败时,记住 MacOS / Windows 无法自动劫持发往局域网的 dns 请求,改用 IP 再比较一次开关。Linux 上规则集绕过未生效时,确认 nftables、auto-redirect 以及与 routing-mark 的冲突限制。比较记录应包含:开关组合、排除 CIDR、严格路由真假、目标地址、可达与否。不要把某一次恢复写成效果保证。