#writing document 00001
sing-box旧版DNS策略迁移与新版配置解析
随着 sing-box 不断迭代更新,DNS 模块的配置方式也经历了较大调整。早期版本中常见的 DNS 配置结构与新版存在明显差异,许多用户在升级后会遇到 DNS 规则失效、解析异常、分流策略不生效等问题。因此,理解 sing-box 旧版 DNS 策略的变化,并掌握新版配置方式,对于稳定运行代理环境具有重要意义。
sing-box DNS配置演进概述
sing-box 的 DNS 系统设计目标是实现灵活的域名解析控制,通过不同 DNS 服务器、规则匹配以及路由策略,实现国内外域名分流解析。
旧版本配置通常围绕 dns.servers 和 dns.rules 展开,通过简单规则指定不同域名使用不同 DNS。例如:
JSON{ "dns": { "servers": [ { "tag": "dns-local", "address": "223.5.5.5" }, { "tag": "dns-remote", "address": "https://dns.google/dns-query" } ], "rules": [ { "geosite": "cn", "server": "dns-local" } ] } }
这种方式虽然直观,但随着功能增加,配置容易变得复杂。当需要处理 FakeIP、DNS 劫持、防污染、分流解析等场景时,旧结构逐渐暴露出维护困难的问题。
新版 sing-box 对 DNS 配置进行了重新设计,引入更加统一的规则匹配机制,使 DNS 与路由系统之间的关联更加紧密。
旧版DNS策略存在的问题
在迁移之前,需要了解旧版配置为什么需要调整。
1. DNS规则结构变化
旧版 DNS 规则通常直接绑定服务器:
JSON{ "domain_suffix": [ "google.com" ], "server": "dns-remote" }
新版更倾向于通过规则集和路由逻辑统一管理,例如结合:
-
domain
-
domain_suffix
-
domain_keyword
-
rule_set
-
geosite
-
geoip
等条件进行匹配。
这种方式减少了 DNS 与路由配置之间的重复定义。
2. DNS服务器定义方式调整
旧版常见写法:
JSON{ "tag": "dns1", "address": "8.8.8.8" }
新版推荐明确指定解析策略,例如:
JSON{ "tag": "google", "address": "https://dns.google/dns-query", "detour": "proxy" }
其中:
-
tag用于规则引用; -
address指定 DNS 服务地址; -
detour控制 DNS 请求走直连还是代理。
这让 DNS 查询本身也可以参与网络分流。
新版sing-box DNS核心配置解析
新版 DNS 配置主要由以下几个部分组成:
-
servers
-
rules
-
final
-
strategy
servers:定义DNS服务器
示例:
JSON"dns": { "servers": [ { "tag": "local", "address": "223.5.5.5" }, { "tag": "remote", "address": "https://cloudflare-dns.com/dns-query", "detour": "proxy" } ] }
其中:
本地 DNS:
223.5.5.5
适合国内域名解析。
DoH DNS:
https://cloudflare-dns.com/dns-query
适合代理环境下访问海外服务。
通过多个 DNS 服务器组合,可以实现更精准的解析策略。
strategy:控制解析地址类型
新版支持通过 strategy 控制 IP 查询类型。
常见配置:
JSON{ "strategy": "prefer_ipv4" }
主要模式:
prefer_ipv4
优先返回 IPv4 地址。
适用于:
-
IPv6 网络不稳定;
-
某些代理节点不支持 IPv6。
prefer_ipv6
优先 IPv6。
适用于:
-
IPv6 网络环境;
-
访问 IPv6 优化服务。
ipv4_only
仅查询 IPv4。
ipv6_only
仅查询 IPv6。
合理设置 strategy 可以减少连接失败概率。
DNS规则迁移方法
旧版规则迁移到新版时,需要重新整理匹配逻辑。
例如旧版:
JSON{ "domain_suffix": [ "google.com" ], "server": "remote" }
新版可以调整为:
JSON{ "domain_suffix": [ "google.com" ], "server": "remote" }
虽然结构类似,但新版更加推荐配合规则集:
JSON{ "rule_set": [ "geosite-google" ], "server": "remote" }
规则集可以集中维护大量域名列表,避免配置文件过于庞大。
final字段的重要作用
新版 DNS 增加了更加明确的默认处理机制。
例如:
JSON"dns": { "final": "local" }
表示:
如果没有任何 DNS 规则匹配,则默认使用 local DNS。
这样可以避免部分域名没有匹配规则时出现解析失败。
推荐配置:
JSON{ "dns": { "servers": [ { "tag": "local", "address": "223.5.5.5" }, { "tag": "proxy", "address": "https://1.1.1.1/dns-query", "detour": "proxy" } ], "rules": [ { "geosite": "cn", "server": "local" }, { "geosite": "geolocation-!cn", "server": "proxy" } ], "final": "local" } }
该配置实现:
-
国内域名使用国内 DNS;
-
海外域名使用代理 DNS;
-
未匹配域名使用默认 DNS。
FakeIP模式迁移注意事项
部分用户升级 sing-box 后发现 FakeIP 功能异常,通常与 DNS 配置迁移有关。
旧版本可能使用:
JSON{ "fakeip": true }
新版需要根据 DNS 服务器类型和路由规则重新调整。
FakeIP 主要用于:
-
提高域名分流准确性;
-
避免提前解析真实 IP;
-
支持基于域名的代理规则。
使用 FakeIP 时需要注意:
-
DNS 服务器必须支持 FakeIP 流程;
-
路由规则需要匹配 FakeIP 地址池;
-
不建议与系统 DNS 混用。
常见迁移错误分析
错误一:升级后DNS完全失效
原因:
-
新旧字段混用;
-
server tag 不一致;
-
final 未设置。
解决:
检查 DNS server 引用名称是否一致。
例如:
定义:
JSON{ "tag": "remote-dns" }
引用必须:
JSON"server": "remote-dns"
不能写:
JSON"server": "remote"
错误二:国内网站解析变慢
原因:
所有请求都发送到海外 DNS。
解决:
增加国内 DNS:
JSON{ "tag": "china", "address": "223.5.5.5" }
并增加规则:
JSON{ "geosite": "cn", "server": "china" }
错误三:代理网站无法访问
原因:
海外域名仍使用国内 DNS。
解决:
将海外域名交给代理 DNS:
JSON{ "geosite": "geolocation-!cn", "server": "remote" }
sing-box新版DNS最佳实践
为了保证长期稳定运行,建议采用以下设计方式:
1. DNS服务器分类管理
不要只配置一个 DNS。
推荐:
-
国内 DNS;
-
海外 DNS;
-
备用 DNS。
2. DNS请求独立分流
海外 DNS 建议:
JSON"detour": "proxy"
避免 DNS 请求被污染。
3. 使用规则集降低维护成本
大量域名规则不要直接写入配置文件。
推荐:
JSONrule_set
统一管理。
4. 配合路由规则使用
DNS 配置不是独立模块。
最佳效果通常来自:
DNS规则 + 路由规则 + 出站策略
三者配合。
总结
sing-box 从旧版 DNS 策略迁移到新版配置体系,本质上是从简单 DNS 分流模式转向更加系统化的规则管理方式。新版通过 servers、rules、final、strategy 等组件,让 DNS 解析拥有更强的控制能力。
迁移过程中,重点需要关注 DNS 服务器标签变化、规则匹配方式调整、FakeIP兼容问题以及默认解析策略设置。合理规划 DNS 分流结构,不仅能够提升访问速度,还能减少解析污染,提高整个代理环境的稳定性。
对于长期使用 sing-box 的用户来说,掌握新版 DNS 配置逻辑,是完成版本升级和优化网络体验的重要步骤。
[sing-box, DNS配置, DNS策略迁移, 网络代理, 分流规则]