连接排障 · Clash 技术博客

OpenClash IPv6 节点域名解析失败怎么办?

OpenClash 节点解析失败,公网 IPv6 DNS 返回 198.18.x?核对 OUTPUT 计数及 v0.47.156 修复。升级后验证解析、代理与直连,异常时恢复原设置。

  • OpenClash
  • IPv6
  • DNS 劫持
  • SmartDNS
  • 节点解析
本文目录

路由器自己的域名查询出错,和家中某台设备没有网络,需要查看的证据不同。这里要检查的是本应从公网解析器取得的回答,是否变成了代理的虚拟地址。查询结果与防火墙计数必须对应,才能进入插件升级或临时规避,而不是把所有相关功能一起关闭。

查询公网 IPv6 DNS,却收到 198.18.x

核对 OpenClash 的 IPv6、路由本机代理、本地 DNS 劫持和 Fake-IP 状态。上述功能开启时,再检查路由器上 SmartDNS 等解析器向公网 IPv6 DNS 查询是否收到 198.18.x,以及使用域名作为服务器地址的代理节点是否同时无法连接。

普通终端打不开网页、LAN 设备拿不到 IPv6、订阅下载失败或 DNS 端口被 AdGuard Home 占用,并不能直接证明是同一问题。先确认故障发生在路由器本机发往公网 IPv6 DNS 的查询,不要一看到 IPv6 就关闭全网功能。

只有同时满足这些条件才继续

  • OpenClash 版本低于已收录修复的 v0.47.156,或升级后尚未重启服务
  • 系统使用 fw4/nftables 或 legacy ip6tables,并开启路由本机代理
  • 本地 DNS 劫持和 Fake-IP 已启用,路由器本机还有 SmartDNS 等解析器
  • 该解析器配置了公网 IPv6 DNS 上游,节点服务器地址使用域名

保存插件包、DNS 设置与管理入口

记录插件和内核版本、运行模式及 SmartDNS 上游;按下面步骤保存设置、配置和安装包,便于升级失败时恢复。

测试期间不要同时改订阅、规则、DNS 上游和运行模式。一次只动一项,并保留修改前后的查询结果;否则节点恢复后也无法判断是哪一步起作用。

准备回退材料

  1. 导出插件设置

    在配置文件管理中备份设置和当前配置,下载到路由器之外的设备保存。

  2. 保留原安装包

    保存当前版本对应的官方 IPK 或 APK,并记下系统使用 opkg 还是 apk。

  3. 记录触发开关

    抄下 IPv6、路由本机代理、本地 DNS 劫持、Fake-IP 与 SmartDNS IPv6 上游状态。

  4. 准备直连入口

    确认能通过 LAN 管理路由器;远程维护时不要在没有备用连接的情况下修改 DNS 和防火墙。

在路由器上对照 DNS 回答与规则计数

在路由器终端直接指定一个当前可达的公网 IPv6 DNS 查询真实域名。正常结果应是域名的公开 A 或 AAAA 记录;如果返回 198.18.0.0/16,并且执行前后对应的 IPv6 OUTPUT DNS Hijack 规则计数增加,查询就被错误送回了本地 Clash DNS。

OpenClash issue #5251 的复现使用 2400:3200::1。这个地址是否适合你的网络仍要先确认;若 IPv6 路由本身不可达,超时只能说明上游不可用,不能证明发生了劫持。查询域名也可换成你明确知道有公开记录的普通域名。

在路由器 SSH 终端读取计数,按本机实际使用的防火墙选择下方一条命令:fw4/nftables 用第一条,legacy ip6tables 用第二条。不要只因两种命令都存在就混用;查询前后各执行一次,不清零、不删除规则。

fw4/nftables:只列出路由本机 DNS 规则
nft list chain inet fw4 nat_output
legacy ip6tables:只读取 OUTPUT 的精确计数
ip6tables -t nat -nvxL OUTPUT --line-numbers

fw4 输出中,找到 IPv6、UDP 的 53 端口、redirect 和 OpenClash DNS Hijack 标记同时对应的规则,比较同一行 counter 的 packets 与 bytes。规则也可能合并 TCP/UDP;不要把整个 OUTPUT 的总量当成查询证据。

legacy 输出中,对照带 OpenClash DNS Hijack 标记的 IPv6 UDP/53 REDIRECT 规则,读取同一行的 pkts 与 bytes。旧规则的目标范围为 ::/0;修复后的规则仅匹配 ::1,公网查询不应增加这条规则的计数。

找不到相应规则或不能读取计数时,保存版本和查询结果,停止按这一故障升级;单有 198.18.x 回答还不足以证明同一问题。规则输出可能含网络信息,对外求助前先脱敏。

在路由器上指定实际可达的公网 IPv6 DNS
nslookup www.nic.ad.jp 2400:3200::1

按结果决定下一步

查询结果规则计数结论
返回 198.18.xIPv6 OUTPUT 计数增加符合已确认的路由本机 IPv6 DNS 劫持
返回真实 A 或 AAAA计数不增加该路径正常,转查订阅中的节点解析 DNS
查询超时计数不增加先检查 IPv6 路由和所选 DNS 是否可达
LAN 设备异常但路由器查询正常无对应变化转查 RA、DHCPv6、RDNSS 或浏览器安全 DNS

只有 SmartDNS 查询异常,Mihomo 上游正常

核对进程所属用户组和查询去向;Mihomo 通常使用被规则排除的 GID(用户组编号),其他本机解析器的查询则可能命中 OUTPUT 规则。

所有 DNS 都返回 connection refused

检查本地监听端口和上游配置,不要套用本文的 IPv6 规则修复。

指定 IPv4 DNS 正常,指定 IPv6 DNS 返回 198.18.x

保留这组对照和计数变化,进入版本升级。

路由器本机访问公网 IPv6 DNS 的错误路径
  1. SmartDNS 等本机解析器向公网 IPv6 地址发送 53 端口查询
  2. OpenClash OUTPUT 规则旧版用 ::/0 误匹配所有 IPv6 DNS 目的地址
  3. 本地 Clash DNS被重定向的查询在 Fake-IP 模式下返回 198.18.x
  4. 代理节点域名错误结果使使用域名的节点无法完成拨号

修复把路由本机的 IPv6 DNS 劫持范围从所有地址收窄到回环地址 ::1;LAN 设备的 DNS 接管规则没有被这次修改移除。

为什么公网 IPv6 DNS 会被当成本地查询

旧规则原本只应接管路由器本机发往回环地址的 DNS,却把 IPv6 目的范围写成 ::/0。这个范围包含全部 IPv6 地址,所以 SmartDNS 访问公网 IPv6 DNS 的 TCP 或 UDP 53 端口时,也会被重定向到本地 DNS。

问题不是 PR #5209 新增了 ::/0。该提交分开识别 IPv4 与 IPv6 规则后,让原本被提前跳过的旧分支稳定执行,才使缺陷从 v0.47.117 起更容易暴露。PR #5252 把 nftables 两处和 legacy ip6tables 四处都改为 ::1,并保留 LAN 侧 DNS 接管。

升级到包含修复的 v0.47.156

OpenClash v0.47.156 的官方发布记录已确认包含 #5252。下面按这个固定版本说明升级;已经运行更新版本时,先核对是否仍有相同查询与计数证据,不为照抄步骤降级。

旧的 ::/0 规则可能仍在防火墙中生效。只有重新生成规则,源码中的 ::1 才会真正生效。

一次可回退的升级

  1. 核对系统包格式

    opkg 系统选择官方 IPK,apk 系统选择官方 APK,并确认下载来源是 v0.47.156 Release。不要混用开发分支文件或不同包格式。

  2. 暂停额外改动

    保留原内核、订阅、运行模式和 DNS 设置,只升级 OpenClash 插件。

  3. 安装并重启服务

    完成安装后重启 OpenClash,等待防火墙与 DNS 规则重新生成。

  4. 先查日志再联网

    确认配置测试、内核启动和 DNS 监听成功;失败时恢复原包与备份。

公网查询、本机回环与节点连接的复查

用升级前同一台路由器、同一个域名和同一个公网 IPv6 DNS 再查一次。修复生效后应返回真实 A 或 AAAA,公网查询不再增加 IPv6 OUTPUT DNS Hijack 计数;向本机回环 ::1 发出的查询仍可被 OpenClash 接管。

修复验收清单

  • OpenClash 版本包含 v0.47.156 的修复,服务已在安装后重新启动
  • 指定公网 IPv6 DNS 返回真实 A 或 AAAA,不再返回 198.18.x
  • 公网 IPv6 DNS 查询不再增加路由本机 IPv6 劫持规则计数
  • 查询 ::1 时本地 DNS 接管仍正常,LAN 设备解析没有被破坏
  • 至少一个原节点完成域名解析、拨号与实际页面访问,并有对应连接记录

暂时不能升级时怎么规避和回退

暂时无法升级时,可先从 SmartDNS 移除公网 IPv6 DNS 上游,改用已经验证可达的 IPv4 上游;也可以临时关闭路由本机代理或本地 DNS 劫持中的一个触发项。每种方式都会改变路由器自身流量或 DNS 接管,必须逐项测试,不能当成长期修复。

如果升级后异常扩大,先在管理页停用 OpenClash;若 DNS 仍指向已停止的服务,恢复可达上游。确认 LAN 管理入口可用后,还原原插件包与设置备份并重启,再用升级前的 IPv4/IPv6 查询对照原状态。

公网 IPv6 DNS 已返回真实结果但节点仍失败时,转查 proxy-server-nameserver、订阅内容、TLS 和节点服务器,不再继续改 OUTPUT 规则。

临时方案的影响

操作适合情况必须复查
SmartDNS 改用可达的 IPv4 上游无法立即升级但需要恢复节点解析本地域名、缓存和节点域名都能正常解析
暂时关闭路由本机代理只有路由器自身 DNS 受影响路由器更新、订阅与插件下载的出站路径
暂时关闭本地 DNS 劫持可接受终端按 DHCP 下发 DNSLAN 设备是否绕过预期分流和 DNS 策略
恢复原包与配置升级后服务无法启动或 LAN 断网版本、DNS 监听、防火墙规则和真实访问

参考资料