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

- 原文地址：https://www.kuddy.cn/archives/208
- 发布时间：2026-05-10 20:00:47
- 更新时间：2026-05-18 02:42:16
- 分类：网络
- 标签：OpenClash, OpenWrt, 代理工具, 网络

> # OpenWrt 旁路由 + OpenClash 实现全屋透明代理 这篇文章记录一套比较常见的家庭网络方案：主路由继续...

---

# 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。