分享技术 · 探索极限 · Code is Art
Linux 发布 2026-05-10 382阅读 约 11分钟阅读

OpenWrt 旁路由 + OpenClash 实现全屋透明代理:配置流程、NAT/MSS 排障与插件推荐

OpenWrt 旁路由 + OpenClash 实现全屋透明代理

这篇文章记录一套比较常见的家庭网络方案:主路由继续负责拨号和无线 AP,OpenWrt 作为旁路由接管全屋默认网关,OpenClash 负责国内外分流和透明代理。

文章里使用一组常见示例地址,实际使用时按自己的网络替换即可:

主路由 / AP:192.168.1.1
OpenWrt 旁路由:192.168.1.2
可选 DNS / AdGuardHome:192.168.1.3
局域网网段:192.168.1.0/24

本文重点不是“把所有功能都堆到 OpenWrt 上”,而是整理一套稳定、清晰、方便排障的全屋代理配置。

一、适用场景

这套方案适合:

  • 主路由继续拨号,不想改动太多。
  • OpenWrt 作为旁路由部署在软路由、虚拟机或小主机上。
  • 想让手机、电脑、电视、平板都自动走规则代理。
  • 不想每台设备单独安装代理客户端。
  • 可选使用 AdGuardHome 作为 DNS 过滤和查询日志。

不适合:

  • 完全不想改 DHCP 网关。
  • 不希望 OpenWrt 成为全屋网络关键节点。
  • 家里没有可稳定运行的 OpenWrt 设备。
  • 需要企业级多出口、复杂 VLAN、严格安全隔离的环境。

二、最终网络结构

最终流量路径:

手机 / 电脑 / 电视
        ↓ 默认网关
OpenWrt 旁路由:192.168.1.2
        ↓ 出口
主路由:192.168.1.1
        ↓
Internet

DNS 路径可以有两种。

如果不使用独立 DNS:

客户端 → OpenWrt / 主路由 DNS → 上游 DNS

如果使用 AdGuardHome:

客户端 → AdGuardHome 192.168.1.3 → 上游 DNS

AdGuardHome 是可选项,不是全屋代理必须组件。如果你不想增加复杂度,可以先不用它。

三、主路由 DHCP 配置

主路由继续负责拨号和无线 AP,同时 DHCP 下发:

默认网关:192.168.1.2
DNS:192.168.1.3

如果不使用独立 DNS,可以把 DNS 下发为:

DNS:192.168.1.2
或
DNS:192.168.1.1

DHCP 地址池示例:

192.168.1.100 - 192.168.1.250

核心是:客户端默认网关必须指向 OpenWrt 旁路由。

四、OpenWrt 旁路由基础配置

OpenWrt LAN 接口建议:

IP 地址:192.168.1.2
子网掩码:255.255.255.0
默认网关:192.168.1.1
DNS:192.168.1.3 或公共 DNS
DHCP:关闭

OpenWrt 自己的默认路由应该是:

ip route

正常类似:

default via 192.168.1.1 dev br-lan
192.168.1.0/24 dev br-lan

如果 OpenWrt 自己的默认网关写成了自己,例如 192.168.1.2,就会出现 OpenWrt 自己出不了网的问题。

五、最关键:LAN 区域开启 NAT 和 MSS 钳制

旁路由作为全屋默认网关时,OpenWrt 的 lan 防火墙区域建议开启:

IP 动态伪装:开启
TCP MSS 钳制:开启

位置:

网络 → 防火墙 → 区域 → lan → 编辑

这是旁路由全屋代理里非常关键的一步。

如果没有开启,可能出现:

  • Google、GitHub 等代理网站能访问。
  • 百度、淘宝、B站等国内网站打不开。
  • DNS 查询正常。
  • 抓包时只看到客户端发 SYN,看不到服务器返回 SYN-ACK。

命令行方式可以这样检查 lan 区域编号:

uci show firewall | grep "=zone"

找到 name='lan' 的区域后,例如是 firewall.@zone[0],再执行:

uci set firewall.@zone[0].masq='1'
uci set firewall.@zone[0].mtu_fix='1'
uci commit firewall
/etc/init.d/firewall restart

注意:@zone[0] 只是示例,请以自己系统中 lan 区域的实际编号为准。

六、OpenClash 推荐配置

稳定优先建议:

运行模式:Redir-Host 或混合
代理模式:规则
区域绕过:大陆
域名嗅探:启用
DNS 代理:启用
流媒体解锁:按需开启

如果家里设备多,尤其有小米手机、电视、IoT、投屏设备,建议先用 Redir-Host 或混合模式,不要一开始就上 Fake-IP。

模式选择可以简单理解为:

  • Redir-Host:真实 DNS,兼容性最好。
  • TUN:接管更彻底,适合 UDP、游戏、语音。
  • 混合:Redir-Host + TUN 的折中。
  • Fake-IP:分流精准,但兼容性和排障成本更高。

如果目标是家庭稳定使用,优先选择 Redir-Host 或混合。

七、AdGuardHome 可选配置

如果你使用独立 AdGuardHome,例如:

AdGuardHome:192.168.1.3

可以让主路由 DHCP 下发:

DNS:192.168.1.3

AdGuardHome 上游先保持简单,例如:

https://dns.alidns.com/dns-query
https://doh.pub/dns-query

不建议一开始就把链路设计成:

AdGuardHome → OpenClash DNS → AdGuardHome

这会形成 DNS 循环,导致解析异常、超时或设备误判网络不可用。

如果后续要让 OpenClash 参与国外 DNS 分流,需要确认 OpenClash DNS 的上游不要再指回 AdGuardHome。

八、常见问题排查

1. 国外网站能访问,国内网站打不开

先不要急着改 OpenClash 规则,按顺序检查。

第一步,确认 DNS 是否正常。例如在 AdGuardHome 查询日志里看 baidu.com 是否返回正常国内 IP,或者在 OpenWrt 上测试:

drill baidu.com @192.168.1.3

正常应该返回类似百度、运营商或国内 CDN 的真实 IP,而不是 198.18.x.x 这类 Fake-IP。

第二步,检查 OpenClash 连接面板,确认国内网站是否命中 DIRECT。如果百度、淘宝、B站被错误走代理,国内网站可能加载异常。

第三步,抓包确认直连转发是否正常。假设客户端是 192.168.1.100,DNS 返回的百度 IP 是 183.2.172.177

tcpdump -i br-lan host 192.168.1.100 and host 183.2.172.177 and tcp port 443

如果只看到:

192.168.1.100.xxxxx → 183.2.172.177.443: Flags [S]

却看不到:

183.2.172.177.443 → 192.168.1.100.xxxxx: Flags [S.]

通常说明 OpenWrt 旁路由的直连转发路径有问题。优先检查 lan 区域是否开启了 IP 动态伪装和 TCP MSS 钳制。

2. 手机提示 Wi-Fi 无法访问互联网

如果网络实际可用,但手机提示 Wi-Fi 异常,可能是连通性检测域名被拦截、被代理或被 Fake-IP 影响。

常见检测域名包括:

connect.rom.miui.com
connectivitycheck.gstatic.com
www.gstatic.com
clients3.google.com
www.msftconnecttest.com
www.msftncsi.com
captive.apple.com

建议这些域名不要拦截,必要时加入直连规则。

3. AdGuardHome 日志里看不到某个设备的 DNS

可能原因:

  • 客户端没有使用 192.168.1.3 作为 DNS。
  • Android 私人 DNS 绕过了局域网 DNS。
  • 浏览器开启了安全 DNS / DoH。
  • 客户端拿到了 IPv6 DNS。
  • 设备手动设置了其他 DNS。

排查时先让客户端只使用 192.168.1.3,再看 AdGuardHome 查询日志。

4. OpenClash 没有接管某个网段

如果后续部署了 WireGuard,例如 WireGuard 网段是 10.7.0.0/24,并希望外部客户端回家后也走 OpenClash,需要确认 OpenClash 没有把这个来源网段排除。

验证方法:

  1. WireGuard 客户端连接。
  2. 访问 Google 或 GitHub。
  3. 打开 OpenClash 控制面板。
  4. 查看 Connections 中是否出现来源为 10.7.0.x 的连接。

如果看不到,说明 WireGuard 流量可能没有进入 OpenClash 透明代理。

九、推荐安装的排障插件

OpenWrt 25 使用 apk 包管理。

基础工具:

apk update
apk add tcpdump conntrack-tools curl jq drill htop

流量统计:

apk add nlbwmon luci-app-nlbwmon
/etc/init.d/nlbwmon enable
/etc/init.d/nlbwmon start

系统监控:

apk add luci-app-statistics collectd collectd-mod-interface collectd-mod-cpu collectd-mod-memory
/etc/init.d/collectd enable
/etc/init.d/collectd start

VMware / ESXi 虚拟机建议:

apk add open-vm-tools
/etc/init.d/vmtoolsd enable
/etc/init.d/vmtoolsd start

open-vm-tools-fuse 主要用于 VMware 共享文件夹,OpenWrt 软路由一般不需要。

十、最终检查清单

主路由:

  • 继续负责拨号和无线 AP。
  • DHCP 默认网关下发 192.168.1.2
  • DNS 可以下发 192.168.1.3,也可以按需下发主路由或 OpenWrt。

OpenWrt:

  • LAN IP 为 192.168.1.2
  • 默认网关为 192.168.1.1
  • DHCP 关闭。
  • lan 区域开启 IP 动态伪装。
  • lan 区域开启 TCP MSS 钳制。

OpenClash:

  • 代理模式使用规则模式。
  • 稳定优先选择 Redir-Host 或混合。
  • 国内走 DIRECT,国外按规则走代理。
  • 不要让 DNS 链路形成循环。

AdGuardHome:

  • 可选,不是必须。
  • 如果启用,建议作为统一 DNS。
  • 上游先保持简单,后续再做复杂分流。

总结

OpenWrt 旁路由 + OpenClash 全屋透明代理的关键,不是把配置堆复杂,而是把基础链路理清楚:

客户端默认网关 → OpenWrt
OpenWrt 默认网关 → 主路由
OpenWrt LAN 区域 → 开启 NAT 和 MSS
OpenClash → 规则分流
DNS → 避免循环

如果遇到“国外能访问、国内打不开”,优先抓包看是否只有 SYN,没有 SYN-ACK。很多时候问题不是 OpenClash,也不是 DNS,而是旁路由 LAN 区域没有正确做 NAT/MSS。

发表回复