OpenClash Fake-IP 出问题时,先别换订阅,也别把 OpenWrt 的 DNS 页面全部改一遍。最小可控的做法是:LAN 设备只问路由器,路由器的 53 端口仍由 dnsmasq 承接,OpenClash 负责需要进入 Mihomo DNS 的那部分查询,本地域名和设备发现域名不要拿 Fake-IP。
这篇只处理 OpenWrt / iStoreOS 路由器上的 OpenClash DNS 冲突。官方 OpenClash 仓库把它定位为运行在 OpenWrt 上的 Mihomo/Clash 客户端,并在依赖里列出 dnsmasq-full;Mihomo DNS 文档则提供 fake-ip、redir-host、fake-ip-filter、nameserver-policy 等字段。路由器上的麻烦通常不是单个字段写错,而是这些组件同时接管了 DNS 入口。
先把家庭 DNS 入口定下来
家庭网关上不要让手机、电视、NAS 各自拿不同 DNS。排查阶段先把 LAN 设备的 DNS 统一成 OpenWrt 路由器地址,例如 192.168.1.1。这样浏览器打不开、电视应用超时、NAS 主机名失效时,你能从路由器日志里看到同一条链路。
| 位置 | 排查阶段建议 | 看到异常时说明什么 |
|---|---|---|
| LAN 设备 DNS | DHCP 下发路由器 IP | 设备拿到公共 DNS 时,查询可能绕开 OpenClash |
| dnsmasq | 保留 DHCP 和 53 入口 | dnsmasq 停掉后,.lan、主机名、DHCP 租约都可能乱 |
| OpenClash DNS | 只接收被转交的查询 | 日志没有 DNS 记录,说明查询没进 OpenClash |
| 上游 DNS | 不指回路由器 53 | 指回本机容易形成 DNS 回环 |
OpenWrt 的 dnsmasq 文档说明它承担 DHCP 和 DNS 功能。路由器作为主网关时,dnsmasq 不只是一个解析器,它还关系到设备租约、主机名、本地域名和 DHCP 选项。Fake-IP 排错时直接关 dnsmasq,往往会把一个 DNS 问题扩大成整段 LAN 的设备问题。
dnsmasq、Fake-IP、上游 DNS 三张表要分开看
这类冲突最容易被误判成“DNS 不好用”。更准确的拆法是:入口、映射、上游三层分别是谁负责。
| 层级 | 负责对象 | 正常状态 | 常见冲突 |
|---|---|---|---|
| dnsmasq | LAN 设备入口、DHCP、路由器本地域名 | LAN 查询先进路由器 53,再按配置转交 | 设备被手动填了别的 DNS,或 dnsmasq 没读到 OpenClash 片段 |
| Fake-IP | 给被代理域名下发 198.18.0.0/16 这类虚拟地址 | 外部域名进入 Mihomo 映射表,连接阶段可按规则处理 | NAS、打印机、路由器后台、.lan 也被映射成 Fake-IP |
| 上游 DNS | 真实解析器、DoH/DoT 或按域名分流的解析策略 | OpenClash 查询外部域名时能拿到真实解析结果 | 上游写成本机或路由器 53,查询绕回 dnsmasq |
nameserver-policy | 特定域名走指定解析器 | 内网、国内外服务、特殊域名各走明确路径 | 规则太宽,把本地域名送到远端上游 |
Mihomo DNS 文档里的 enhanced-mode 可以用 fake-ip,也可以用 redir-host。Fake-IP 的优势是规则阶段更容易接管连接,但它要求 fake-ip-filter 写得足够克制。OpenWrt 上尤其要避开这些对象:
dns:
enable: true
ipv6: false
enhanced-mode: fake-ip
fake-ip-range: 198.18.0.0/16
fake-ip-filter:
- "*.lan"
- "*.local"
- "+.home.arpa"
- "localhost"
- "router.lan"
- "openwrt.lan"
- "time.windows.com"
这段不是让你照抄进生产配置,而是提供一个排错基线。你家的 NAS 域名、软路由管理域名、打印机发现域名、HomeKit 或 Chromecast 相关域名,都可能需要单独加入过滤。
OpenClash 日志里没有 DNS,先查转交链路
OpenClash 页面显示运行,不代表 LAN 设备的 DNS 已经进了 OpenClash。先在路由器 SSH 里看监听和日志:
netstat -lntup | grep ':53'
logread -e dnsmasq
logread -e openclash
uci show dhcp.@dnsmasq[0]
如果 logread -e dnsmasq 能看到设备查询,但 OpenClash 日志完全没有 DNS 记录,问题多半发生在 dnsmasq 到 OpenClash 的转交。此时看 OpenClash 是否写入了 dnsmasq 片段、端口是否一致、服务重启后片段是否还在。
如果 OpenClash 日志有 DNS 查询,但设备仍打不开网页,再看 Fake-IP 映射和连接阶段。Fake-IP 下发成功只是 DNS 阶段完成,不代表后续连接一定命中正确规则。可以同时看:
nslookup example.com 192.168.1.1
nslookup openwrt.lan 192.168.1.1
ip neigh
logread -e openclash | tail -n 80
example.com 返回 Fake-IP 不一定是坏信号;openwrt.lan、NAS 主机名或打印机域名返回 Fake-IP 才需要处理。
上游 DNS 不要绕回路由器
OpenClash 的上游 DNS 如果写成 127.0.0.1:53、192.168.1.1:53 或路由器 LAN 地址,容易出现回环:LAN 设备问 dnsmasq,dnsmasq 转 OpenClash,OpenClash 又问回 dnsmasq。轻则网页间歇超时,重则所有域名都卡在等待解析。
排查阶段把上游分清:
| 需求 | 可用写法 | 不建议写法 |
|---|---|---|
| 普通外部域名 | 明确的 UDP DNS、DoH 或 DoT 上游 | 路由器 LAN IP 的 53 端口 |
| 本地域名 | 由 dnsmasq 或 OpenWrt 本机处理 | 送到远端公共解析器 |
| 特定服务域名 | nameserver-policy 指向专用上游 | 用一个兜底上游处理所有域名 |
| 路由器自身更新 | 保持可解析的系统 DNS | 依赖尚未启动的 OpenClash DNS |
如果你维护多端配置,订阅可以用兼容 Clash / Singbox / V2Ray 的订阅做格式基线;但路由器 DNS 冲突仍要在 OpenWrt 本机排,不要把上游回环、dnsmasq 片段缺失或 Fake-IP 过滤漏项归到订阅本身。
LAN 设备验证表:别只测路由器自己
软路由上 nslookup 正常,不代表手机、电视和 NAS 都正常。路由器本机、LAN 设备、无线 AP 下的设备,可能拿到不同 DNS 或走不同网关。
| 设备 | 验证动作 | 正常结果 | 异常时看哪里 |
|---|---|---|---|
| OpenWrt 路由器 | nslookup example.com 127.0.0.1 | 本机能解析,日志有记录 | 系统 DNS、OpenClash 服务、上游 DNS |
| Windows / macOS 笔记本 | nslookup example.com 192.168.1.1 | 返回可用结果,OpenClash 或 dnsmasq 有日志 | DHCP 下发 DNS、浏览器 DoH、手动 DNS |
| iPhone / Android | 断开重连 Wi-Fi 后访问常用网页 | 不再间歇等待解析 | 私人 DNS、旧 DHCP 租约、旁路由网关 |
| NAS | 用主机名访问管理页 | 主机名解析为 LAN 真实 IP | fake-ip-filter、dnsmasq 租约、本地域名 |
| 电视 / 盒子 | 打开应用商店或系统更新页 | DNS 查询不再超时 | 设备硬编码 DNS、防火墙重定向、IPv6 |
| 打印机 / IoT | 手机能发现设备 | mDNS、本地域名不被 Fake-IP 改写 | .local、组播、AP 隔离 |
这张表的重点是 LAN 真实 IP。内网设备名、.lan、.local、home.arpa 和路由器后台域名,不应该被 Fake-IP 池替换。只要这些名字返回 198.18.x.x,就先补过滤,不要继续改上游。
改配置时一次只动一层
OpenClash、dnsmasq、DHCP、上游 DNS、Fake-IP 过滤都能影响同一个现象。排错时按这个顺序动:
- 保存当前 OpenClash 配置、OpenWrt 网络配置和 DHCP/DNS 页面截图。
- 让 LAN 设备 DNS 只指向路由器。
- 保留 dnsmasq 入口,确认 53 端口没有被其他插件抢走。
- 清理 OpenClash 上游 DNS,避免指回路由器。
- 把内网域名和设备发现域名加入
fake-ip-filter。 - 重启 dnsmasq 和 OpenClash,再让一台 LAN 设备重新获取 DHCP。
对应命令可以简化成:
/etc/init.d/dnsmasq restart
/etc/init.d/openclash restart
logread -f
不要同时启用多个透明代理插件接管 DNS。PassWall、SmartDNS、AdGuard Home、MosDNS、OpenClash 可以共存于同一台 OpenWrt,但排错阶段必须知道 53 入口是谁、上游是谁、谁负责返回 Fake-IP。
哪些 DNS 故障不该硬套 OpenClash Fake-IP
这篇没有测试所有固件分支,也没有覆盖运营商光猫、企业 AC、校园网认证、IPv6-only、旁路由双网关和 Docker 版 Mihomo。iStoreOS 的菜单和预装插件可能和原版 OpenWrt 不同,但 DNS 链路仍然要回到 DHCP、dnsmasq、OpenClash 和上游解析器。
还有两类情况要单独处理:
- 如果只有某个应用打不开,但系统域名解析正常,继续查规则命中、SNI、应用内 DoH 或该应用的缓存。
- 如果所有 LAN 设备都拿不到 IP,先修 DHCP;DNS 和 Fake-IP 还没开始工作。
OpenClash DNS 排完后继续看哪些页面
- OpenClash 和 PassWall 都开过接管时,看 OpenClash 和 PassWall 规则模式冲突。
- dnsmasq、SmartDNS、PassWall 同时存在时,看 PassWall、dnsmasq 和 SmartDNS 端口冲突。
- 不确定 Fake-IP 是否适合当前规则时,看 Fake-IP 和 Redir-Host 在规则模式里怎么选。