对于很多使用 Clash 等代理工具的高级用户来说,TUN 模式(隧道模式) 是一项非常强大的功能。它可以接管操作系统上的所有网络流量,实现真正的全局代理,这对于一些不遵循系统代理设置的软件或游戏来说尤为重要。然而,很多用户在开启 TUN 模式后会遇到一个令人头疼的问题:突然无法访问局域网(LAN)内的其他设备了。例如,无法连接家里的 NAS 服务器,无法使用网络打印机,甚至无法进入路由器的管理后台。
为什么开启 TUN 模式会导致局域网访问中断?我们又该如何科学、安全地解决这个问题?本文将带你深入了解背后的网络原理,并提供切实可行的路由规则排查与修复指南。
1. 为什么 TUN 模式会影响局域网访问?
要理解这个问题,我们首先需要了解几个关键的网络概念:LAN (局域网)、RFC1918 (私有 IP 地址空间) 以及 TUN (网络隧道)。
局域网 (LAN) 与私有网络 (Private Network)
我们在家庭或办公室中使用的网络通常属于局域网 (Local Area Network, LAN),也就是一种私有网络 (Private Network)。在这个网络内部,设备之间通过私有 IP 地址进行通信。
为了规范私有网络的 IP 分配,互联网工程任务组 (IETF) 在 RFC1918 标准中定义了三个专门用于私有网络的 IPv4 地址段:
10.0.0.0-10.255.255.255(10.0.0.0/8)172.16.0.0-172.31.255.255(172.16.0.0/12)192.168.0.0-192.168.255.255(192.168.0.0/16)
你的路由器、NAS、打印机以及电脑,通常都会被分配上述这些地址段中的 IP。
TUN 模式接管流量的原理
当 Clash 开启 TUN 模式时,它会在系统中创建一个虚拟网卡。同时,Clash 会修改操作系统的路由表 (Route),将其虚拟网卡设置为默认的网关。这意味着,原本应该由物理网卡发送出去的所有网络数据包,现在都会被强制路由到 Clash 的虚拟网卡中。
Clash 接收到这些流量后,会根据你配置的代理规则(Rules)来决定这些流量是应该被发送到代理服务器(Proxy),还是直接放行(Direct)。
问题的根源
如果你发现开启 TUN 模式后无法访问局域网设备,通常是因为以下两个原因之一(或两者兼有):
- 路由劫持过度: Clash 的 TUN 路由设置过于激进,将目标地址为局域网 IP(RFC1918)的流量也劫持到了虚拟网卡,而你的 Clash 规则中没有正确处理这些流量。
- 代理规则错误: 虽然流量进入了 Clash,但你的代理规则(Rules)将局域网的 IP 地址误判为需要代理的流量,将其发送到了国外的代理服务器上。显然,国外的代理节点是无法访问你家里的 NAS 的。
因此,解决问题的核心思路是:告诉系统或 Clash,将目标为私有网络 (Private Network) 的流量进行直连 (Direct) 或绕过 (Bypass) 隧道。
2. 解决方案:路由与规则排查
解决这个问题需要从“系统路由”和“Clash 内部规则”两个层面入手。特别提醒:不建议使用“一键允许所有流量直连”等过于粗暴且危险的方案,这可能会导致不该直连的流量也泄露。 我们应该采取精确的路由控制。
第一步:检查并配置 Clash TUN 的 Bypass 路由
现代版本的 Clash 及其衍生内核(如 Clash Meta/Mihomo)的 TUN 设置中,通常都包含路由绕过(Bypass)的功能。它的作用是在操作系统层面告诉路由表:遇到特定网段的流量时,不要将其送入 TUN 虚拟网卡,而是直接走物理网卡。
这是一种最底层、最高效的解决方法,因为它根本不需要经过 Clash 内核的处理。
在你的 Clash 配置文件(config.yaml)中,找到 tun 相关的配置段落,检查是否有类似 route-exclude、route-address (用于配置仅接管特定网段) 或类似配置项(具体配置项名称取决于你使用的 GUI 客户端或内核版本,例如 Clash for Windows, Clash Verge 等的界面设置)。
在标准的 YAML 配置中,通常应确保局域网 IP 段不被包含在强制路由的范围内。如果是通过客户端界面设置,请寻找 "Bypass"、"排除路由" 或 "绕过局域网" 等选项。
你需要确保将 RFC1918 的三个私网地址段添加到排除列表中。通常,很多客户端在开启 TUN 时默认会排除局域网,如果被不小心清空或修改了,请添加回去:
tun: enable: true stack: system # 或 gvisor / lwip # ... 其他设置 ... # 如果你的内核支持绕过特定网段(例如 Clash Premium 或 Mihomo): # 通常无需手动指定所有 RFC1918,但如果遇到问题,可以检查客户端是否提供了 Bypass LAN 选项。
如果你使用的是一些图形化客户端(如 Clash Verge Rev),在设置中的 TUN 模式选项里,通常会有一个明确的“严格路由 (Strict Route)”选项开关。如果开启了严格路由且没有正确配置排除,就会出现局域网断网的问题。请确保在界面中开启“绕过局域网 (Bypass LAN)”或者在路由排除列表中加入了 192.168.0.0/16, 10.0.0.0/8, 172.16.0.0/12。
第二步:在 Clash 规则中添加 LAN Direct 规则
如果你确认系统路由层面没有问题,流量确实需要进入 Clash 进行分配(例如,你希望使用 Clash 的 DNS 进行局域网域名的解析),那么你就需要在 Clash 的规则列表中明确指出局域网流量必须走 Direct (直连)。
这是为了防止匹配到 MATCH 或最后的默认代理规则。
在你的 config.yaml 文件的 rules 列表中,确保在最前面(或尽可能靠前的位置)包含以下规则:
rules: # 优先放行本机的回环地址 - IP-CIDR,127.0.0.0/8,DIRECT # 放行 RFC1918 私有 IP 地址空间 - IP-CIDR,10.0.0.0/8,DIRECT,no-resolve - IP-CIDR,172.16.0.0/12,DIRECT,no-resolve - IP-CIDR,192.168.0.0/16,DIRECT,no-resolve # 如果你有使用 IPv6 的局域网,也建议放行 ULA 地址 - IP-CIDR6,fc00::/7,DIRECT,no-resolve # 还可以放行局域网多播地址等,这对于某些智能家居设备的发现协议很重要 - IP-CIDR,224.0.0.0/4,DIRECT,no-resolve - IP-CIDR6,fe80::/10,DIRECT,no-resolve # 下面才是你其他的代理规则,例如广告拦截、外网代理等 - DOMAIN-SUFFIX,google.com,Proxy # ... - MATCH,Proxy
为什么需要加 no-resolve 参数?
在匹配 IP-CIDR 规则时,如果遇到一个域名请求,Clash 会尝试先解析该域名的 IP,然后再去匹配规则。如果我们在局域网 IP 规则后加上 no-resolve,意味着 Clash 不要为了匹配这条规则而去强制触发 DNS 解析。这不仅可以加快规则匹配速度,更能避免一些因 DNS 污染或错误配置导致的问题。局域网的 IP 请求本来就是直接的 IP 访问,无需进行额外的 DNS 解析匹配。
第三步:DNS 层面防备:绕过局域网域名
如果你不仅通过 IP 访问 NAS(如 http://192.168.1.100),还通过一些自定义的局域网域名访问(例如你的路由器劫持了 router.asus.com 到管理界面,或者你的 NAS 配置了 mDNS 如 mynas.local),你需要确保 Clash 的 DNS 服务不会将这些局域网专属域名转发给国外的 DNS 服务器(如 8.8.8.8)进行解析。
国外的 DNS 服务器是查不到你家 router.asus.com 的内网 IP 的。
你需要在 Clash 的 DNS 配置中,设置这些局域网域名的解析行为,或者直接在规则层面将其设置为 Direct。
例如,在 rules 中添加:
rules: # 将特定内网域名直连 - DOMAIN,router.asus.com,DIRECT - DOMAIN-SUFFIX,local,DIRECT # mDNS 域名 # ... 接之前的 IP 规则 ...
在有些进阶 DNS 配置(例如 Fake-IP 模式下),为了防止局域网设备被分配到一个虚假的 IP,需要配置 fake-ip-filter,排除这些域名:
dns: enable: true enhanced-mode: fake-ip fake-ip-filter: - '*.lan' - '*.local' - 'router.asus.com' # 添加其他需要使用真实 IP 的内网域名
3. 为什么不要使用“一键全放行”的危险方案?
在网络上搜索解决方案时,你可能会看到有人建议将整个操作系统的默认路由全部放开,或者在防火墙里添加极其宽泛的允许规则。我们强烈不建议这样做。
TUN 模式的核心优势在于其安全性、全面性和防泄漏能力。如果你随意放开大量非 RFC1918 的未知网段,或者允许某些本该走代理的进程绕过 TUN 隧道,就违背了使用 TUN 模式的初衷。
例如,某些恶意软件可能会伪装其通信,如果你的防火墙或路由规则过于宽松,这些流量可能会绕过代理直接暴露你的真实网络环境。
安全原则应当是“默认拒绝,明确允许” (Default Deny, Explicit Allow)。我们只放行明确属于私有网络(RFC1918)且我们信任其安全的网段(如家庭局域网)。
总结
开启 Clash 的 TUN 模式后无法访问局域网 NAS、打印机等设备,是一个典型的路由和代理规则冲突问题。问题的本质是系统试图将局域网内部的通信也强制送入代理隧道。
为了安全、优雅地解决这个问题,我们需要:
- 优先在系统路由层面(TUN Bypass 配置)排除 RFC1918 私有网段,让局域网流量根本不进入虚拟网卡。
- 在 Clash 的代理规则(Rules)的顶部,明确添加对局域网 IP 段(如
192.168.x.x)的DIRECT放行规则,并加上no-resolve参数提高效率。 - 如果使用自定义局域网域名,确保其在 Fake-IP 过滤器中被排除,并在规则中设置为直连。
通过以上科学的排查与配置,你可以在享受 TUN 模式带来的全局代理便利的同时,无缝地访问家中的各种网络设备。




