先确认适用范围:过滤 Fake-IP,不是修改代理规则

本文只处理一个问题:某个域名在 OpenClash 的 fake-ip 运行模式下不适合收到 Fake-IP,或者需要明确控制它是否返回 Fake-IP 时,怎样配置 fake-ip-filter。步骤按 OpenClash v0.47.156 稳定版、OpenWrt、Mihomo 内核编写;旧版 OpenClash、其他 Clash 客户端和 redir-host 模式的界面与行为不能直接套用。

Mihomo 的 DNS 文档将 fake-ip-filter 定义为 Fake-IP 映射的过滤条件。它决定 DNS 查询是得到 Fake-IP 还是实际解析结果,并不决定连接最终走 DIRECT 还是 PROXY。流量出口仍由路由规则与策略组决定,因此把域名加入过滤列表不能替代直连规则,也不会自动修复不可用节点。

看不到这个设置时先停下:OpenClash v0.47.156 的界面源码只在当前运行模式为 fake-ip 时显示 Fake-IP Range、持久化 Fake-IP 与 Fake-IP-Filter。不要为了找一个开关就照抄本文到 redir-host 配置。

完整入口通常是「服务 → OpenClash → 覆写设置 → DNS 设置」;不同 LuCI 主题和语言包也可能显示为「Services → OpenClash → Overwrite Settings → DNS Settings」。判断入口时以字段名 Fake-IP-Filter 和 Fake-IP-Filter-Mode 为准,不以按钮颜色或截图位置为准。

先选匹配方向:blacklist、whitelist 与 rule 不能混着理解

进入 OpenClash 的「覆写设置 → DNS 设置」,启用 Fake-IP-Filter 后会看到模式选择。v0.47.156 提供 blacklist、whitelist 与 rule 三项,默认是 blacklist。名称描述的是 Fake-IP 返回范围,不是代理节点的黑白名单。

模式DNS 行为适合的最小场景
blacklist命中时返回真实解析;未命中仍可返回 Fake-IP只排除少量异常域名,推荐先从这里测试
whitelist命中时返回 Fake-IP;未命中返回真实解析只让明确列出的域名使用 Fake-IP
rule执行首条匹配的 fake-ip 或 real-ip;全部未命中时默认 Fake-IP需要按顺序混合两种结果,并能维护完整规则链

最容易犯的错误,是选择 whitelist 后仍把输入框当成「不返回 Fake-IP 的域名清单」。在白名单模式里逻辑正好相反:只有匹配成功才返回 Fake-IP。若你只是修复打印机、企业内网、登录探测或某个应用的一个域名,先使用默认 blacklist,不要一开始就反转整个 DNS 行为。

先记录原状态:保存当前模式、原列表和异常现象。一次只改变一种模式设置或一个域名;同时修改 DNS 上游、绕过大陆、IPv6、规则集和浏览器安全 DNS,会让结果失去诊断价值。

用 blacklist 做一次单域名测试

先选一个可以稳定复现问题的完整域名。下文的 device.example.net 只是不会与随包默认项重叠的占位符,操作时必须替换成日志中确认的实际故障主机名。在 Fake-IP-Filter 输入区每行写一条规则,不要带 YAML 的列表短横线,也不要把说明文字写在域名后面。OpenClash v0.47.156 会把这里的文本保存到 /etc/openclash/custom/openclash_custom_fake_filter.list,再由覆写流程合并进最终配置的 dns.fake-ip-filter。

Fake-IP-Filter · blacklistdevice.example.net
  1. 确认 OpenClash 当前运行模式是 fake-ip,记下修改前的 DNS 结果与失败现象,并按文末方法备份现有列表。
  2. 打开「覆写设置 → DNS 设置」,启用 Fake-IP-Filter,模式保持 blacklist。
  3. 先只加入一个完整域名。准备立即测试时直接点击「应用配置」;它会保存当前更改、启用并重启 OpenClash,无需先点一次「保存配置」。
  4. 等待插件重新运行,先看启动日志是否有 YAML、Fake-IP-Filter 或 DNS 相关错误。
  5. 从使用路由器 DNS 的同一台设备再次查询,并重试原应用;不要在这一步顺手更换节点或代理模式。

如果完整域名验证有效,再按真实需要决定是否扩大范围。Mihomo 的 Clash 风格域名语法中,*.example.com 只匹配一级子域名,不匹配根域名或更深层级;+.example.com 类似后缀匹配,可包含根域名和多级子域名。Mihomo YAML 中的通配项需要引号,但 OpenClash 这个输入区保存的是逐行纯文本,不要复制 YAML 的引号或列表短横线:

扩大范围前先验证*.device.example.net
+.corp.example.net

不要仅凭「看起来属于同一服务」就加入整个公共后缀。先从日志或实际 DNS 查询确认请求的准确主机名;过宽的过滤会让大量域名改走真实解析,掩盖原本的分流或 DNS 上游问题。

只有目标明确时才使用 whitelist 或 rule 模式

whitelist 适用于「只允许一小组域名获得 Fake-IP,其余域名都返回真实解析」的设计。切换前应明白它会改变未匹配域名的默认结果;这不是 blacklist 的另一种写法。至少先在测试设备上验证登录、局域网服务、常用国内外站点和代理规则,再考虑用于整个网络。

切换前必须备份并审查最终运行列表:whitelist 会让合并列表中已有普通条目的含义反转为「命中才返回 Fake-IP」;rule 模式则要求最终 dns.fake-ip-filter 的每条非注释项目,包括订阅原有过滤项和 OpenClash 生成项,都成为带 fake-ip 或 real-ip 动作的完整规则。末尾 MATCH 不是解析所必需,全部未命中时 Mihomo 默认继续使用 Fake-IP,但仍建议显式写出兜底规则以便审查。下面是独立测试列表,不能直接追加到原有 blacklist 风格条目后面;无法审查最终列表时不要切换 rule。

Fake-IP-Filter · whitelist+.proxy-test.example.net
api.proxy-test.example.net

rule 模式使用与 Mihomo 路由规则相近的自上而下匹配方式,但动作只能围绕 fake-ip 与 real-ip。未命中任何规则时 Mihomo 默认继续使用 Fake-IP;为让结果明确且便于维护,仍建议写出末尾兜底规则。下面只把两个示例域名返回真实地址,其余查询继续使用 Fake-IP:

Fake-IP-Filter · ruleDOMAIN,device.example.net,real-ip
DOMAIN-SUFFIX,corp.example.net,real-ip
MATCH,fake-ip

在 rule 模式里不要继续写成普通 blacklist 列表,也不要把 DIRECT、PROXY 或策略组名当作动作。Mihomo 文档还允许 GEOSITE 与 RULE-SET,但外部集合必须真实存在且类型兼容;无法逐条审查集合内容时,宁可保留两三条明确的 DOMAIN 或 DOMAIN-SUFFIX。

单域名故障优先选择 blacklist:它对其他域名的默认 Fake-IP 行为影响最小,验证失败也最容易回退。只有当需求本身就是「少数 Fake-IP」或「按顺序混合」时,才分别选择 whitelist 或 rule。

应用后从 DNS 结果、日志和真实请求三层验证

v0.47.156 的「保存配置」会保存当前表单和自定义列表,但不会重启 OpenClash;「应用配置」同样会保存设置,另外还会启用并重启 OpenClash,使运行配置重新生成。因此准备测试时直接使用一次「应用配置」即可,无需先另点一次「保存配置」。重启期间短暂断流属于预期现象,但持续无法连接不是。等待插件状态恢复后,先确认生成过程没有报错,再做 DNS 查询。

把地址与域名替换成你的实际值nslookup device.example.net <路由器LAN地址>

先以当前运行配置的 fake-ip-range 为准;OpenClash v0.47.156 的随包默认模板使用 198.18.0.1/16,而覆写项默认不会强制替换订阅中的值。blacklist 命中后应看到上游 DNS 返回的真实地址、内网地址或明确的不存在响应。具体结果取决于你的上游和域名,不能只凭「不再位于 Fake-IP 地址池」就认定应用已经可用。

  1. 确认测试设备确实把路由器作为 DNS,而不是使用浏览器 Secure DNS、应用内 DoH 或另一个手动 DNS。
  2. 查询目标完整域名,记录回答服务器、地址和响应状态。
  3. 检查 OpenClash 运行日志,确认没有过滤规则语法错误或配置回退。
  4. 重新发起原来的登录、发现、访问或连接动作。
  5. 在连接日志中确认域名最终命中了预期的路由规则和策略组。

这五步分别验证客户端 DNS 路径、Fake-IP 映射、配置有效性、应用行为和路由出口。只用 ping 判断会误导:有的服务不回应 ICMP,而 Fake-IP 模式下 ping 到保留地址也不必然代表代理请求失败。

列表不生效时按固定顺序排查

如果保存后结果没有变化,先不要继续扩大列表。按下面顺序检查,通常能区分「规则没进入运行配置」与「查询绕过了 OpenClash」:

现象优先检查处理方向
页面没有 Fake-IP-Filter运行模式是否为 fake-ip确认模式和适用范围,不在 redir-host 中硬套
单域名仍返回 Fake-IP开关、模式、拼写、查询的实际主机名回到 blacklist 与完整域名做最小测试
路由器查询正确,浏览器仍异常Secure DNS、应用内 DoH、缓存让测试请求经过路由器 DNS,并清除对应应用缓存
真实 IP 正常但网站仍打不开路由规则、策略组、节点与证书错误把 DNS 映射问题与代理出口问题分开
应用后 OpenClash 启动失败rule 语法、首个日志错误恢复原列表和原模式,再逐条加入

还要检查当前订阅或覆写是否在重启时替换了 DNS 段。OpenClash 的合并脚本只在自定义 Fake-IP-Filter 已启用且运行配置处于 fake-ip 时,把自定义文件中的项目插到原有 dns.fake-ip-filter 前面。脚本会先移除每行从 # 开始的注释并裁剪首尾空白,再仅对规范化后完全相同的字符串去重;*.home.arpa 与 printer.home.arpa 这类语义覆盖仍会同时保留。插件还可能加入其他生成项,因此文本框不等于最终列表,「文件存在」也不能单独证明运行中的配置已使用它。

不要把症状扩大成全域名规则:某个游戏、打印机或企业域名异常时,先从日志找到真实请求域名。未经证据就加入 geosite:cn、整个厂商后缀或公共域名集合,可能改变大量域名的返回方式,并制造更难定位的新问题。

若问题同时涉及 IPv6 节点域名、上游 AAAA 响应或 DNS 劫持,请转到本站的 OpenClash IPv6 节点域名解析分层排查,不要把两类故障都塞进 fake-ip-filter。

保留原列表,按可回退方式维护

第一次修改前,可通过 SSH 把 OpenClash 的自定义列表复制到管理账户可读且不会公开的位置。先确认源文件存在;如果尚未生成,只需记录 LuCI 中的关闭状态和空列表。下面的命令只备份列表、不修改订阅配置,并会覆盖同名目标,已有备份时请先改用新的文件名:

OpenWrt Shellcp /etc/openclash/custom/openclash_custom_fake_filter.list   /root/openclash_custom_fake_filter.list.bak

需要回退时,在 LuCI 中恢复原模式与原文本,或关闭自定义 Fake-IP-Filter,然后点击「应用配置」让 OpenClash 重新生成并重启。若使用下面的 SSH 命令复制备份,先重新加载 LuCI 页面确认文本已经恢复,再点击「应用配置」,避免旧页面内容覆盖文件。确认 DNS 和原应用都恢复后,再决定是否重新尝试更窄的规则。不要为回退一条域名而删除全部订阅、规则集或客户端安装。

仅在确认备份正确后执行cp /root/openclash_custom_fake_filter.list.bak   /etc/openclash/custom/openclash_custom_fake_filter.list

长期维护时,为每一条自定义规则记录「哪个设备或服务需要、出现什么现象、哪天验证」。服务升级或域名变化后,先暂时移除一条并复测;已经不再需要的例外应删除,避免列表不断累积成无法审查的第二份域名库。

完成标准:只改动了一个已确认的域名范围;blacklist、whitelist 或 rule 的方向与需求一致;DNS 查询、OpenClash 日志和真实应用请求都通过;原列表与回退方法仍可用。

需要核对适用平台或获取 OpenClash、Mihomo 相关客户端时,可前往本站 下载页面。下载或升级不会替代本篇的配置备份与单变量验证。

官方来源与版本边界

版本号、文件名和界面文字可能随项目更新而变化,操作前请以链接中的项目文档为准。