OpenWrt VPN 分流装完全屋上不了网:先停插件,一步分开是插件还是底层(2026 排查表)

Updated on in 消费电子

先说清楚:这是和前一篇完全相反的失败

上周我写过一篇讲「OpenClash 分流为什么只对部分应用管用」,那篇讨论的是部分生效。今天这篇讨论的是另一个更让人抓狂的场景:装完之后,全屋设备一个网站都打不开,连国内网站都不行,但路由器后台还能进。

这两个症状看着像同一个毛病,实际上诊断入口完全相反。部分不生效,说明转发生效了、只是规则没匹配上;全部不生效,说明流量根本没走到代理那一层,或者走到了但回不来。

很多人一遇到全屋断网,第一反应是翻 OpenClash 的日志、换节点、改规则、重装插件,折腾一晚上,最后发现是旁路由的网关填错了。方向错了,越努力越远。

这篇只讲一件事:怎么在五分钟内把「插件挂了」和「底层本来就断」分开,然后各自往哪查。

黄金判据:把插件停掉,看国内网络能不能恢复

这是唯一一个能立刻把问题一刀切开的动作,没有第二种方法比它更省时间。

停掉 OpenClash(服务 → OpenClash → 停止,或者直接在命令行 /etc/init.d/openclash stop),然后做三件事:

  • 手机上打开百度、B 站、微信
  • 在路由器后台 ping 一下外网:ping -c 4 baidu.com
  • 打开任意网页看是否秒开

结果只有两种,对应两条完全不同的路:

结果 A:停掉插件后,国内网络恢复正常。

底层路由是通的,问题 100% 在 OpenClash 侧。往下查 DNS 劫持链路、运行模式、节点健康。不要动防火墙和网关,动了只会在已经正确的地方制造新问题。

结果 B:停掉插件后,国内网络依然打不开。

底层路由本身就是断的。这时候改 OpenClash 的任何设置都不会有效果,哪怕你把插件卸了重装。往上看网关、DNS、防火墙转发这三处。

我建议把这个判据写在纸上贴路由器旁边。它不只能解决这次的问题,以后每次折腾完出故障,第一件事都是跑它。

(实测)在我自己那台 N1 旁路由上,这两种情况的耗时差别是十分钟和三天。第一次全屋断网我直接钻进了 OpenClash 日志,翻了两天才意识到插件压根没启动成功;第二次先停插件,一分钟就定位到是 LAN 网关写成了旁路由自己的 IP。

结果 B 的第一条:LAN 网关填的是主路由,不是自己

旁路由最经典的错误就在这一格。

打开 网络 → 接口 → LAN → 修改,看「IPv4 网关」这一栏。旁路由的网关必须填主路由的 IP,不是自己。

拿 192.168.1.1 当主路由举例:旁路由 IP 设成 192.168.1.2,网关必须填 192.168.1.1。填成 192.168.1.2 就等于「我要上网,请问我自己」,数据包绕一圈回到原点,直接死循环。

另外两个连带容易踩的:

  • IPv4 地址不要落在主路由的 DHCP 分配池里。主路由 DHCP 从 100 开始分,你就别把旁路由设成 192.168.1.100 之后的地址,否则哪天 DHCP 把同一个 IP 分给了一台手机,两边打架,症状是「时好时坏」而不是「一直不通」——这种间歇性故障最难查。
  • DNS 服务器填主路由 IP 或者公共 DNS(223.5.5.5、119.29.29.29 都可以)。留空会很麻烦,因为 OpenWrt 默认可能会用自己的 dnsmasq,而 dnsmasq 在网关不通时解析全废。

改完保存应用,立刻 ping 192.168.1.1 验一下物理连通。这一步不通,后面全部免谈。

结果 B 的第二条:防火墙的「转发」和「IP 动态伪装」

旁路由转发流量,本质上是在做一件不常规的事:数据包从 LAN 进来,再从 LAN 出去。标准路由器的模型是「进来(LAN)→ 出去(WAN)」,旁路由打破了这个模型,所以要额外告诉防火墙两件事。

打开 网络 → 防火墙 → 常规设置:

  • 入站、出站、转发,全部设为「接受」。其中「转发」最关键,设成「拒绝」就是所有跨网段流量被拦,症状是内网能访问路由器后台,但一台设备都上不了网。
  • 在「区域」里,找到 lan 那一行,勾上 **IP 动态伪装(Masquerading)**和 MSS 钳制(MSS clamping)。

这两个勾选项解决的是两个不同的病,很多人分不清,我列一下:

勾选项不勾的症状原理
IP 动态伪装能 ping 通外网 IP,但网页打不开、App 连不上回程数据包找不到路,主路由不认识内网网段,直接丢弃
MSS 钳制网页能打开但一直转圈、加载到一半卡死、大文件下不动隧道或转发路径的 MTU 变小,但 TCP 还按 1500 发大包,被中间设备丢弃

第二个症状特别有欺骗性。因为它不是「全断」,是「能连上但很卡」,很多人会误判成宽带问题、DNS 慢、甚至怪运营商。判据很简单:ping 通、ping -s 1400 不通或者大量丢包,基本就是 MTU/MSS 的锅。

(来源:OpenWrt 官方文档 Firewall 章节)对 masquerading 的说明是「让旁路由后面的设备看起来像是从旁路由发出」,对 MSS clamping 的说明是「自动调整 TCP MSS 以适配较小的 MTU」。这两个配置在官方文档里是分开描述的,但实际排查时经常一起勾、一起漏。

还有一条:清空「自定义规则」里手写的 iptables 命令。上面已经在图形界面勾了伪装,OpenWrt 会自动生成对应规则,你再手写一条 iptables -t nat -I POSTROUTING -o eth0 -j MASQUERADE,两条规则打架,重启后配置还会莫名失效。这条规则在十年前的老教程里到处都是,现在不需要了。

结果 A 的三条:DNS 劫持、运行模式、节点健康

停掉插件能上网,说明底层没问题,往下看这三个。

第一,DNS 劫持链路断了。

OpenClash 的工作前提是「把 DNS 请求接过来自己答」。在 网络 → DHCP/DNS 里,「DNS 转发」如果还指着运营商的 DNS,或者「重定向 53 端口到 dnsmasq」被关掉了,插件拿不到 DNS 请求,就不知道该把哪个域名分给哪条策略。症状是全部域名走默认策略,或者干脆解析失败。

一条命令就能看当前 DNS 是谁在答:

# 在 OpenWrt 上执行,看实际在应答的 DNS 服务器
cat /etc/resolv.conf
nslookup www.google.com
# 对比:强制走公共 DNS,如果这个能解析而上面不能,说明劫持链路有问题
nslookup www.google.com 223.5.5.5

第二,运行模式选错。

OpenClash 有「规则模式 / 全局模式 / 直连模式」,还有「Fake-IP 增强 / Redir-Host 增强」这一组。新手最容易踩的是:切了全局模式但节点是坏的,或者 Fake-IP 模式下客户端缓存了旧的假 IP 一直不放。

遇到全屋断网,先切「直连模式」试一下。直连模式下插件不代理任何流量,如果这时全屋恢复,说明是代理链路本身的问题(节点、内核、规则),不是路由。

第三,订阅节点全部失效。

这个很常见但很少被想到:订阅链接过期、机场跑路、节点全部超时。OpenClash 在没有任何可用节点的情况下,如果策略是「代理」,那所有流量都会卡在连接建立阶段,表现就是全屋断网。

代理 → 节点管理 → 点一次「健康检查」。如果全红,问题不在配置,在订阅。

(实测)有一次我排查了三个小时的防火墙问题,最后发现是机场到期自动停了。健康检查这个动作十秒钟,应该放在最前面。

一个容易漏掉的前置:旁路由还是主路由

这两个部署方式,出错的位置完全不同,很多人连自己用的是哪种都说不清。

主路由模式:OpenWrt 直接拨号(PPPoE)或者接光猫做 NAT,所有设备都连它。这种情况下「全屋断网」通常是 WAN 侧没起来——看 网络 → 接口 → WAN 有没有拿到 IP,没拿到就是拨号账号或者物理连接的问题,跟 OpenClash 一点关系都没有。

旁路由模式:主路由照常拨号,OpenWrt 挂在旁边,设备的网关指向 OpenWrt。这种情况下断网九成在上面讲的那三条(网关、防火墙、DNS)。

判断方法:登录 OpenWrt,看 网络 → 接口 里 WAN 有没有 IPv4 地址。有地址是主路由模式,没有或者显示「未连接」的是旁路由(WAN 口没插线或者没配置)。

还有个细节:旁路由只改一部分设备的网关,还是全屋都改? 如果只改了电脑的网关,那手机断网跟 OpenWrt 无关,你可能在修一个不存在的问题。这个听起来很傻,但我见过不止一次。

四个常见误解,逐条拆

误解一:全屋断网就是 OpenClash 装坏了,重装一遍。

重装会清空你的所有配置,包括那些本来就对的。先做「停插件」判据,再决定要不要动它。在没定位到原因之前重装,等于把现场破坏了。

误解二:勾了 IP 动态伪装就够了。

伪装解决回程,MSS 解决大包。两个是两件事。只勾伪装,会出现「能打开网页但视频一直转圈」这种半残状态,比全断更难查。

误解三:能 ping 通就说明网络是好的。

ping 用的是 ICMP,包很小(默认 56 字节)。链路 MTU 出问题时,小包能过、大包被丢,所以 ping 通但网页打不开是典型组合。要有意义地测,得指定包大小:ping -s 1400 -M do 8.8.8.8(Linux)或者 ping -l 1400 -f 8.8.8.8(Windows)。带「不分片」标志的大包过不去,就是 MTU 问题。

误解四:改了配置重启一下路由器最保险。

OpenWrt 上「重启网络」比「重启设备」安全得多,因为重启设备可能触发一些开机脚本重新加载旧配置。改完配置用 /etc/init.d/network restart 或者界面上的「应用」按钮,别动电源。

日志只读三行,别从头翻

OpenClash 的日志滚动很快,一晚上能刷几千行,从头看必然放弃。实际上定位全屋断网只需要关注三类行。

打开 服务 → OpenClash → 运行日志,用浏览器搜索这几个关键词:

搜 dns:看 DNS 查询有没有正常返回。如果满屏 dns resolve failed 或者 no such host,直接跳到 DNS 劫持那条去查,别的都不用看。

搜 dial 或 connect:看连接有没有建立成功。全是 connection refused 或者 i/o timeout,是节点的问题;有部分成功部分失败,是规则的问题。

搜 reject:如果大量出现 匹配规则 REJECT,说明你的规则集把不放行的流量全拒了,包括本该直连的国内域名。这种情况的典型表现是「国外的能开、国内的打不开」,和全屋断网很像但方向相反——先确认国内网站是真的打不开,还是加载了但很慢。

一个实用的判断技巧:先看日志的时间戳是不是在跳。 如果日志停在几分钟前不动,说明进程已经卡死了,这种情况任何配置都不会生效,直接重启插件。日志不动的人去改规则,改一天也没用。

一张自查表,按顺序走

步骤动作通过标准
1停掉 OpenClash,测国内网站能开 → 问题在插件(跳到 5);不能开 → 继续 2
2看 LAN 的 IPv4 网关是主路由 IP,不是自己
3看防火墙转发 + 伪装 + MSS三项都开了
4ping -s 1400 -M do 8.8.8.8不丢包 → 底层正常
5切「直连模式」全屋恢复 → 代理链路问题
6节点健康检查不是全红
7看 /etc/resolv.conf 和 nslookupDNS 能正常解析

这七步走完还没解决的情况我基本没见过。如果真遇到了,把每一步的实际输出记下来,问题就在输出里。

我推荐的做法:先把底层配成一个「没有代理也能活」的路由器

折腾软路由这些年,我最后悔的是早期那种「所有东西都靠插件撑着」的配置方式。插件一崩,全家断网,老婆孩子一起骂。

现在我的原则是:底层路由必须独立自洽,代理只是锦上添花。

具体到操作就是一条验收标准:关掉所有代理插件,国内网络必须完全正常。 这一条不满足,就不许启动代理。这样即使 OpenClash 哪天崩了,最坏结果只是「上不了外网」,而不是「全屋断网」。

如果你正在折腾,建议先按这个标准把底层跑通,再装插件。顺序反了,出问题时你会分不清是自己手抖还是插件的问题——而这正是大部分人在这一步耗掉整晚的原因。

关于分流规则本身怎么调、为什么部分应用不走代理,我写在另一篇里了:OpenClash 分流不生效:openwrt vpn 分流规则为什么只对部分应用管用。底层通了之后再看那个,顺序不能倒。

如果你想从零开始装,或者想搞清楚 OpenVPN 和 OpenClash 两条路的区别,OpenWrt 安装 OpenVPN 和 OpenClash 实现分流那篇的配置顺序是对的,可以照着走。

一句话总结

全屋断网先停插件——能上网就是插件的问题,不能上网就是底层的问题。这一句话能省掉你 90% 的排查时间。剩下的靠 MSS 钳制、IP 动态伪装、LAN 网关这三项,它们是旁路由的三个必过关口,少一个就断。