理解 Clash 的默认域名服务器,要从它在查询链中的位置入手:default-nameserver 不是给访问目标用的「默认上游」,而是用来解析「DNS 服务器自己的域名」。手册的表述是:默认 DNS,用于解析 DNS 服务器的域名;必须为 IP,可为加密 DNS。适用条件是 dns.enable 为 true,并且 nameserver、fallback、proxy-server-nameserver、direct-nameserver 或各类 policy 中出现了带主机名的上游。若所有上游本身已是 IP,引导负担会下降,但该字段的对象仍然是「DNS 服务器的域名」,不会变成最终答疑服务器。
它只负责启动解析所需的引导
最终目标域名由 nameserver、fallback、nameserver-policy 处理。default-nameserver 只在这些上游写成域名时提供引导,把主机名变成可建连的 IP。判断依据有三条:列表必须是 IP;用途写明为解析 DNS 服务器域名;不能把还需要再解析的域名填回去。加密 DNS 被允许,前提仍是以 IP 表达。把域名再写入该字段会失去引导能力,因为解开它还需要 DNS。
针对「配置里出现主机名上游」的场景,按下列步骤理解并核对。第一,确认 enable 为 true,否则进程使用系统 DNS,引导字段不按内置逻辑工作。第二,检查 default-nameserver 是否全部为 IP,例如手册中的 223.5.5.5。第三,检查其他列表是否含主机名;若含主机名,则引导列表不可为空、不可为域名。ipv6 为 false 时对 AAAA 回应空解析,这只影响最终记录类型,并不改变引导必须为 IP 的约束。listen、cache-algorithm 也不改变这一职责。
不要与节点解析或直连解析混为一谈
proxy-server-nameserver 仅解析代理节点域名;不填则遵循 nameserver-policy、nameserver 和 fallback。节点上游若为域名,仍可能先依赖引导,把「解析节点用的 DNS 服务器」解开。direct-nameserver 服务于 direct 出口,不填同样回退。direct-nameserver-follow-policy 默认不遵守 nameserver-policy,仅当直连列表非空时生效。respect-rules 让 DNS 连接遵守路由规则,需配置 proxy-server-nameserver,强烈不建议与 prefer-h3 共用。这些字段都不替代 default-nameserver 的引导职责。
判断时固定问三个问题:这台服务器是不是用来解开其他 DNS 主机名?地址是不是 IP?最终查询是否另有 nameserver 或 policy?只有前两问为是,才说明默认域名服务器的理解与手册一致。第三问用来防止把引导列表误当成全站解析入口。
理解偏差导致失败时的下一步
若难以连上带主机名的上游,先按引导失败处理:把 default-nameserver 改回 IP,去掉其中的域名。若已是 IP 仍失败,再查 enable 是否为 false。若查询走代理出现循环,按手册为经代理的 DNS 配置 proxy-server-nameserver,避免鸡蛋问题;指定代理时优先使用已有代理,不存在该名称则指定接口,#RULES 等同遵守路由规则。不要把 fallback-filter、fake-ip-filter、fake-ip-ttl 或缓存算法当成引导失败的首要原因;它们处理结果筛选、映射与缓存,不负责把 DNS 主机名变成 IP。下一步只修正引导层,再观察上游能否完成第一次建连。