Skip to Content
功能介绍内置 DNS 服务

内置 DNS 服务

自定义上游 DNS 服务器

Stash 支持同时配置多个 DNS 服务器。在进行查询时,Stash 会并发请求所有服务器,并采用最快响应的结果。Stash 支持以下 DNS 协议:

  • 使用系统提供的 DNS:system
  • DNS over UDP:8.8.8.8 或 udp://8.8.8.8
  • DNS over TCP:tcp://8.8.8.8
  • DNS over TLS :tls://8.8.8.8:853
  • DNS over HTTPS :https://1.1.1.1/dns-query
  • DNS over HTTP/3:'https://1.1.1.1/dns-query#h3=true'
  • DNS over QUIC :quic://dns.adguard.com:853

Stash 会对 DNS 查询使用 LRU 算法进行本地缓存。当本地缓存过期时,Stash 会继续沿用缓存结果,并在后台静默更新记录,这会有效降低 DNS 缓存过期引发的请求延迟。

DNS over HTTP/3

DNS over HTTP/3 使用 QUIC 传输 DoH 请求。它与普通 DNS over HTTPS 使用相同的 URL 格式,在末尾添加 #h3=true 即可指定使用 HTTP/3;该片段不会成为 DNS 查询路径的一部分。

dns: nameserver: - 'https://1.1.1.1/dns-query#h3=true'

配置时必须用引号包裹完整地址,否则 YAML 会将 #h3=true 识别为注释。

加密 DNS Bootstrap

iOS/tvOS3.6+macOS4.3+

default-nameserver 可以使用加密 DNS 解析其他 DNS 服务器的域名。除 system 外,服务器地址必须使用 IP。

dns: default-nameserver: - 'https://1.1.1.1/dns-query#h3=true'

代理服务器域名解析

iOS/tvOS3.6+macOS4.3+

proxy-server-nameserver 用于指定解析代理服务器域名的 DNS 服务器。该配置使用独立的 DNS 查询链路,不会跟随代理规则,可避免连接代理服务器时产生递归查询。

dns: proxy-server-nameserver: - 223.5.5.5 - https://dns.alidns.com/dns-query

proxy-server-nameserver 支持与 nameserver 相同的 DNS 协议。配置多个服务器时,Stash 会并发查询并采用最先成功返回的结果。

基于域名的自定义 DNS 服务

nameserver-policy 可以对指定域名或域名集合使用特定的 DNS 服务器。它支持精确域名、通配域名、geosite:<name> 形式的 geosite 集合,以及 rule-set:<name> 形式的规则集合。

dns: # 对部分域名使用单独的 DNS 服务器 nameserver-policy: 'www.baidu.com': 114.114.114.114 '+.internal.crop.com': system '*.example.com': - https://dns.alidns.com/dns-query - https://doh.pub/dns-query 'geosite:cn,private': - 223.5.5.5 - 119.29.29.29 'rule-set:company-domains': 10.0.0.53 rule-providers: company-domains: behavior: domain url: https://example.com/company-domains.txt

nameserver-policy 的值可以是单个 DNS 服务器,也可以是 DNS 服务器数组。配置多个 DNS 服务器时,Stash 会并发查询并采用最先成功返回的结果。

一个键里可以用逗号列出多个集合,例如 geosite:cn,private 等同于分别为 geosite:cn 和 geosite:private 写同一组服务器。

当同一个域名同时命中多条 policy 时,优先级为:精确域名 > 通配域名 > 集合。若同时命中多个集合 policy,则使用配置顺序中最先命中的一条。

引用规则集合

iOS/tvOS3.6+macOS4.3+

rule-set:<name> 引用在 rule-providers 中声明的规则集合,按集合中的域名条目匹配,推荐使用 domain 类型。fake-ip-filter 同样接受 geosite: 和 rule-set: 条目,便于与分流规则共用同一份域名列表。

回退 DNS

fallback 指定一组回退 DNS 服务器,fallback-filter 决定哪些查询采用回退服务器的结果。常见用法是让国内域名走国内 DNS、其余域名走境外 DNS,避免国内 DNS 对境外域名返回污染或非最优的解析结果。

dns: nameserver: - 223.5.5.5 fallback: - https://1.1.1.1/dns-query fallback-filter: geoip: true geoip-code: CN ipcidr: - 240.0.0.0/4 domain: - '+.google.com' - '+.youtube.com'

配置了 fallback 后,Stash 会同时向 nameserver 和 fallback 发起查询,再按 fallback-filter 决定采用哪一个结果:

  • domain 中列出的域名直接只向 fallback 查询。
  • 其余域名先看 nameserver 的结果:当结果为空,或任一解析地址命中 ipcidr,或开启 geoip 且地址不属于 geoip-code 指定的国家时,改用 fallback 的结果;否则采用 nameserver 的结果。

geoip-code 默认为 CN。未配置 fallback 时,fallback-filter 不生效,所有查询都由 nameserver 回答。

Fake-IP

Stash 默认以 Fake-IP 模式回答应用的 DNS 查询:先返回一个保留网段内的虚拟地址,待连接建立时再由规则决定是否需要真实解析。相关配置:

  • fake-ip-range:虚拟地址所用的网段,默认为 198.18.0.1/16。
  • fake-ip-filter:不使用虚拟地址、直接返回真实解析结果的域名列表。支持通配域名,以及 geosite: 和 rule-set: 集合。
dns: fake-ip-range: 198.18.0.1/16 fake-ip-filter: - '+.stun.*.*' - '*.n.n.srv.nintendo.net' - 'geosite:private' - 'rule-set:real-ip-domains'

IPv6 解析

iOS/tvOS3.6+macOS4.3+

未配置时,Stash 根据当前网络是否可用 IPv6 自动决定是否解析和返回 AAAA 记录。两个开关都只在设为 false 时产生作用:

  • 顶层 ipv6: false:Stash 自身发起的连接只解析 IPv4,回答应用的 DNS 查询时也不返回 AAAA 记录。
  • dns.ipv6: false:只对应用的 DNS 查询不返回 AAAA 记录,Stash 自身的连接仍可使用 IPv6。
ipv6: false dns: ipv6: false

自定义 Hosts

# 支持通配符域名 (例如: *.clash.dev, *.foo.*.example.com ) # 不使用通配符的域名优先级高于使用通配符的域名 (例如: foo.example.com > *.example.com > .example.com ) # 注意: +.foo.com 的效果等同于 .foo.com 和 foo.com hosts: '*.clash.dev': 127.0.0.1 '.dev': 127.0.0.1 'alpha.clash.dev': '::1'

DNS 查询跟随规则

默认情况下,Stash 发出的 DNS 查询均会直接出站,而不经由任何代理规则转发。开启 follow-rule 选项后,Stash 会根据代理规则进行 DNS 查询的转发。

⚠️

绝大部分场景下,不需要开启此配置。DNS 查询由代理转发后,可能会破坏云服务商的 CDN 全球优化策略,导致静态资源加载缓慢。DNS 查询请求进入 Stash 网络引擎,也会导致轻微的延迟上升。

请仅在必要时开启此配置。

⚠️

由于连接代理服务器可能需要进行 DNS 解析,DNS 查询由代理转发后,会存在递归查询的问题。开启此配置前请确保满足以下其中一项条件:

  • 转发 DNS 请求的代理地址为 IP 地址,而不是域名
  • DNS 服务器地址为 IP 地址,而不是域名
  • 使用 proxy-server-nameserver 为代理服务器域名配置独立的 DNS 解析
Last updated on