本文适用于已在 Shadowrocket(小火箭)中导入自己已有配置、需要调整域名解析的用户。先区分解析与流量出站,再对照系统 DNS、自定义 DNS 和 DoH 的适用条件;随后备份 Config、修改 dns-server,并用同一网络下的单变量测试判断是否保留改动。
DNS 解析与规则分流分别处理什么
DNS 用于把域名查询为 IP 地址等记录。打开一个网站时,解析只是连接过程的一部分;解析得到地址后,还要完成路由选择、传输连接、TLS 握手及网页资源加载。因此,“改 DNS 后能打开”可以作为排查线索,但“网页打不开”不能直接等同于 DNS 故障。
Shadowrocket 的 dns-server 指定解析上游;规则里的 DIRECT、PROXY 指定匹配流量的处理策略。两者不是同一个开关。使用加密解析不等于网站流量必定走代理,使用系统 DNS 也不等于网站流量必定直连。
上面的链条表示需要区分的排查阶段,并不表示所有规则都要等待解析完成。DOMAIN-SUFFIX 可以直接按域名后缀匹配;IP-CIDR 和 GEOIP 按 IP 地址匹配,在只有域名信息时可能涉及解析。规则按顺序评估,末尾的 FINAL 承接未命中的流量;改动 DNS 不会自动重排这些规则。
系统 DNS、自定义 DNS 与 DoH 的选择边界
“系统”与“自定义”描述解析器从哪里取得;DoH 描述查询如何传输。两种分类并不完全平行:手动填写一个 DoH 地址,本质上也是自定义解析上游。选择时应同时考虑网络可达性、内部域名需求以及查询传输方式,而不是只比较名称。
| 设置方式 | 适用条件 | 主要边界 |
|---|---|---|
| 系统 DNS | 当前 Wi-Fi 或蜂窝网络解析正常;需要访问由当前网络解析的内部域名。 | 解析来源随网络变化,实际行为还受系统配置与网络管理策略影响。 |
| 自定义普通 DNS | 需要固定解析器,且其 IP 地址在当前网络可达。 | 普通 DNS 通常使用 UDP 53,也可使用 TCP 53;查询本身不提供传输加密。 |
| DNS over HTTPS | 已有可信、可达的 DoH 端点,且需要对客户端到解析端点的查询传输加密。 | 依赖 HTTPS 连通性、有效证书及端点启动解析;解析服务仍能处理查询内容。 |
结论:先保留可用基线,再决定是否固定解析上游
当前网络能正常解析且需要内部域名时,先保留系统 DNS;只有在明确需要固定解析器或加密查询传输时,再单独测试自定义 DNS 或 DoH,并保留可恢复的原配置。
在 Config 中修改前,先确认当前配置
本文以编辑配置文件中的 [General] 段为操作基准,不依赖某个界面版本的按钮位置。Home 用于查看连接状态及 Global Routing,Config 用于管理配置文件,Settings 用于应用设置。只编辑一个未启用的文件,通常不会改变当前连接所用的配置。
- 在 Home 记录当前连接项与 Global Routing 的取值。若要按规则测试,使用
Config姿态,并确认当前启用的配置。 - 进入 Config,备份或复制当前配置。保留原来的 DNS 行及其他 General 参数,避免同时修改多个变量。
- 打开该文件的编辑功能,定位
[General]。已有dns-server时修改原行,不要追加多个同名设置来尝试切换。 - 保存并确认测试文件处于启用状态,然后断开、重新连接,使后续测试使用新的配置。
- 记录当前使用 Wi-Fi 还是蜂窝网络、测试域名、现象及恢复方法,再开始比较。
[General] 段 dns-server 的三种写法
以下是三个互斥的最小片段:每次只选择一个,用于替换当前配置中对应的设置。不要用这些短片段覆盖整个配置文件,否则会丢失原有规则及其他参数。用户已有配置若包含专门的域名映射或 DNS 相关选项,还需要一并核对其作用。
沿用系统 DNS
[General]
dns-server = system
system 表示使用系统提供的 DNS。它适合作为对照基线,尤其是在当前网络需要解析内部域名时。这里的“系统”并不承诺某一个固定解析器地址;切换 Wi-Fi、蜂窝网络或系统网络配置后,解析来源可能变化。
填写自定义普通 DNS
[General]
dns-server = 1.1.1.1
1.1.1.1 是普通 DNS 地址写法的示例,不是对其在所有网络中表现的推荐。请使用自己确认可信且可达的解析器地址。仅填写 IP 地址不会把普通 DNS 自动变为 DoH,也不能据此判断查询是否经由代理传输。
填写 DNS over HTTPS 端点
[General]
dns-server = https://dns.example.com/dns-query
dns.example.com 是保留示例域名,上述地址仅用于展示语法,不能直接用于解析。实际使用时,应替换为已有 DNS 服务提供的完整 DoH 端点,包括 https://、主机名及路径。/dns-query 是常见路径,但应以端点的实际要求为准,不要只填服务首页。
普通 DNS 核对项
- 配置段
- [General]
- 键名
- dns-server
- 地址形式
- 解析器 IP 地址
- 常用端口
- UDP / TCP 53
先确认地址在当前网络可达,再比较解析结果。
DoH 核对项
- 配置段
- [General]
- 键名
- dns-server
- 地址形式
- 完整 HTTPS 端点
- 证书要求
- 证书有效且主机名匹配
端点主机名自身也需要完成启动解析,不能只检查 URL 拼写。
DoH 解决查询传输问题,不替代出站检查
DoH 为客户端与解析端点之间的 DNS 查询提供 HTTPS 传输保护,但不隐藏解析服务本身需要处理的查询,也不替代网站连接所需的 TLS。解析器返回的地址可能因地理位置、缓存和服务策略不同而变化,变化本身不能作为错误或更快的证据。
DoH 端点使用域名时,客户端首先需要获得这个端点的地址,这一步通常称为启动解析。如果端点域名不能解析、证书验证失败,或到端点的 HTTPS 连接不通,即使配置文本符合语法,也可能无法正常提供解析。
- 检查解析结果:目标域名是否返回地址,是否返回明确的不存在结果,还是一直超时;三者不能混为一类。
- 检查解析通道:到普通 DNS 的 53 端口或到 DoH 端点的 HTTPS 连接是否可达。
- 检查目标连接:已获得地址后,目标网站的连接、TLS 握手或资源请求是否失败。
- 检查规则命中:在 Global Routing 为
Config时,核对命中的域名规则、IP 规则及最终策略。
不要把 Global Routing 的 Proxy、Direct、Config 与 DNS 类型一一对应。它们是流量处理姿态;Scene 用于场景相关的切换,也不是第四种 DNS 协议。为了得到可比较的结果,测试 DNS 时保持同一姿态、同一连接项与同一规则文件。
按同一组步骤验证,避免缓存造成误判
浏览器、系统及应用都可能保留连接或解析缓存。刚修改设置后,已经打开的页面仍能继续加载,并不能证明新解析器已经生效;第一次打开较慢,也可能包含新连接的握手开销。应对同一组目标重复观察,而不是只凭一次页面加载判断。
- 建立基线:保持当前网络,使用原配置访问一个常用网站与一个当前有问题的网站,分别记录“解析超时”“连接超时”或“页面部分资源失败”等具体表现。
- 只改 DNS:保持连接项、Global Routing 与规则不变,仅替换
dns-server,保存后重新连接。 - 产生新请求:关闭原有页面后重新访问,并结合连接记录或日志中实际可见的信息检查。无痕窗口也不能保证系统 DNS 缓存已被清除。
- 做恢复对照:恢复原 DNS 后再试一次。如果两种设置下都失败,应继续检查目标服务、出站连接与规则,而不是反复更换解析器。
- 单独测试网络变化:最后再切换 Wi-Fi 与蜂窝网络重复测试,不要在修改 DNS 的同一轮同时换网络。
DNS 设置常见问题
换成 DoH 后,所有网站都打不开怎么办?
先恢复备份中的 dns-server,重新连接并确认基线恢复。随后核对 DoH 端点是否为完整 URL、端点域名能否启动解析,以及 HTTPS 证书是否有效。本文的 example.com 地址仅为语法示例,不能作为实际服务使用。
公司内部域名只有系统 DNS 能打开,应该怎么设?
先恢复 dns-server = system,在原公司网络中验证。公共解析器通常不了解内部 DNS 区域,不能因为它能解析公共网站就直接替换内部解析器。需要混合解析时,应先取得网络管理员提供的域名范围与解析要求,再调整已有配置。
DNS 已返回地址,网页还是一直转圈呢?
回到 Home 检查连接状态与 Global Routing。在 Config 姿态下查看目标是否命中预期规则,再检查出站连接和 TLS 错误。此时问题已经可能位于解析之后,继续更换 DNS 不一定有效。
订阅更新以后,之前改的 DNS 不见了?
进入 Config 核对当前启用的文件及 [General] 内容,确认更新的是连接列表还是完整远程配置。完整配置刷新可能替换本地编辑内容;先保留个人副本并比较差异,再决定在哪个文件中维护 DNS 设置。