当前网络解析正常时,先保留系统 DNS;需要固定解析服务器时,再测试自定义 DNS;需要加密客户端到解析器之间的查询传输时,考虑 DNS over HTTPS。本文适合已在 Shadowrocket(小火箭)中载入自己已有配置的用户,重点说明 dns-server 的修改位置、三种方式的边界,以及如何区分解析失败、规则误匹配和连接失败。
1. 先区分 DNS 解析与连接分流
DNS 的任务是把域名解析为 IP 地址。例如访问 www.example.com 时,解析器可能返回 IPv4 的 A 记录或 IPv6 的 AAAA 记录。拿到地址之后,客户端还需要根据当前路由模式与规则决定如何建立连接。因此,“解析成功”和“网页能够打开”是两个不同的检查点。
这条流程描述常见的域名解析检查顺序,不代表每个请求都会重新查询 DNS。应用缓存、客户端缓存,以及由远端处理域名的连接方式,都可能改变实际查询位置。域名规则也可能在本地解析前完成匹配,不能把 DNS 当作所有规则之前必经的独立步骤。
在 Home 查看 Global Routing 时,应把模式与解析设置分开理解:Config 使用当前配置中的规则,Proxy 与 Direct 改变整体连接策略,Scene 按场景设置工作。切换模式不能替代修复错误的解析器地址;配置了 DoH,也不等于所有业务连接都经过代理。
DOMAIN-SUFFIX,example.com,DIRECT:按域名后缀匹配,不以某个固定 IP 为判断条件。IP-CIDR,192.168.0.0/16,DIRECT:按目标地址网段匹配;判断是否需要解析,还取决于请求形态与规则参数。GEOIP,CN,DIRECT:按目标 IP 的地理数据库归属匹配,不能仅凭域名判断。FINAL,PROXY:作为前序规则未匹配时的最终策略,不是 DNS 服务器设置。
2. 三种 DNS 方式如何选择
“系统 DNS”和“自定义 DNS”主要回答使用哪个解析器;“DNS over HTTPS”还规定了查询的传输方式。三者并非完全同一层面的分类:手动指定一个 DoH 端点,本身也是一种自定义解析设置。选择时先确认解析目标、网络可达性,再考虑传输加密。
| 方式 | 解析路径 | 适用条件 | 主要检查项 |
|---|---|---|---|
| 系统 DNS | 使用系统当前网络提供的解析器信息。 | 网络解析正常,或需要解析局域网内部名称。 | 更换 Wi-Fi 或蜂窝网络后,解析器可能变化。 |
| 自定义传统 DNS | 向手动指定的 DNS 地址发起查询。 | 已有可用解析器,需要固定查询目标。 | 地址是否可达、是否支持目标域名、查询传输是否受限。 |
| DNS over HTTPS | 通过 HTTPS 向指定端点提交 DNS 查询。 | 需要加密查询传输,且端点与证书可正常验证。 | 端点路径、TLS、端点域名的初始解析与实际出站路径。 |
DoH 加密的是客户端到 DoH 解析器之间的查询传输,解析器仍需处理域名查询。它不负责改变网站自身的 HTTPS 行为,也不保证访问更快。增加 TLS 建连可能使首次查询耗时上升;连接复用和缓存又会影响后续结果,不能只用一次网页加载判断优劣。
结论:先保留可用基线,再替换解析器
若系统 DNS 下相同域名能够稳定解析,先保存这一配置作为回退点。之后每轮只修改 dns-server,不同时更换规则、连接策略和服务端参数,才能判断变化来自哪里。
3. 在 Config 中修改 dns-server
修改前先在 Config 找到当前使用的配置,保留副本,再进入该配置的文本编辑入口。目标是 [General] 段中的 dns-server 字段,而不是 Home 中某个连接条目的 Address。编辑动作以当前界面提供的菜单为准,避免把服务器地址误当成 DNS 地址修改。
- 在 Config 确认当前选用的配置名称,记录原来的
dns-server值;如果原本没有该字段,也记录这一状态。 - 打开配置文本,找到已有的
[General]段;同一配置已有此段时,在原段内修改,不重复添加整段。 - 只保留一条本次测试需要的
dns-server设置,保存后重新选用该配置。 - 回到 Home,将 Global Routing 设为 Config 以测试配置规则,并在允许短暂断网的情况下断开再连接,让修改后的设置重新载入。
- 重新访问固定测试域名,记录解析与连接现象;失败时先恢复原值,而不是连续叠加多个解析器。
系统 DNS:作为第一轮基线
[General]
dns-server = system
system 表示使用系统 DNS 信息,并不承诺一定由路由器直接回答,也不代表其他应用的解析一定采用完全相同的路径。切换网络后应重新验证,尤其是需要先完成网络登录的 Wi-Fi。
自定义传统 DNS:使用已确认可达的地址
[General]
dns-server = 192.168.1.1
192.168.1.1 是局域网示例地址,仅在该设备确实提供 DNS 服务且当前网络可达时才有效。网关地址不一定就是 DNS 地址;也不能把家用网络里的私有地址原样带到蜂窝网络。实际填写值应来自用户已有网络或解析服务的配置说明。
DoH:填写完整端点而不是网站首页
[General]
dns-server = https://dns.example.com/dns-query
上面的 dns.example.com 是说明格式的假值,不能直接用于连接。应替换为用户已经确认可用的 DoH 完整端点;路径不一定是 /dns-query,以该解析服务的说明为准。普通 HTTPS 网页即使能打开,也不意味着它能够处理 DNS 查询。
4. 同时核对端点、网络与出站条件
DoH 端点通常以域名表示,建立 HTTPS 连接前可能先需要解析端点自身的地址。如果初始解析不可用,查询还没有到达 DoH 服务就会失败。这类问题不能仅靠把更多域名形式的端点填入列表解决,还要检查端点初始解析、路由与当前网络的可达性。
传统 DNS 核对项
- 配置字段
- dns-server
- 示例地址
- 192.168.1.1,仅用于对应局域网
- 常用端口
- UDP 53 / TCP 53
- 网络条件
- 当前接口可达,目标确实提供 DNS 服务
先确认服务器角色,再检查域名是否能得到回答。
DoH 核对项
- 地址格式
- HTTPS 完整端点,包含服务要求的路径
- 默认端口
- TCP 443
- TLS 条件
- 证书与端点域名匹配,设备时间正确
- 初始解析
- 端点域名能够在建连前获得地址
HTTPS 表示传输加密,不表示查询必然经过代理。
不要用关闭证书验证来处理 DoH 失败。先检查完整地址、设备日期与时间,以及网络是否处于需要登录的状态。对于“只有开着 Shadowrocket 才失败”的情况,应同时核对 Config 中的规则和端点出站条件,避免把端点本身送入不可达路径。
- 局域网内部名称依赖内部解析器时,直接换成外部解析器可能得到不存在记录的回答。
- AAAA 记录能够返回,不代表当前 IPv6 连接路径一定可用;解析结果与连接能力需要分别验证。
- 应用若使用自己的 DoH 或长期缓存,修改客户端 DNS 后可能看不到对应的新查询。
- 部分请求的域名由远端处理,不能把本地日志中缺少查询记录直接判定为设置失效。
5. 用固定顺序验证 DNS 是否生效
验证时应保留同一个网络、同一份规则和同一个连接条目。先用系统 DNS 建立记录,再替换成一个自定义解析器;每轮都使用相同的目标域名。不要同时刷新已有订阅、切换网络和修改 DNS,否则即使恢复访问,也无法定位真正生效的变化。
- 记录基线:记下网络类型、启用的配置、Global Routing 模式、测试域名,以及修改前是解析超时还是连接超时。
- 确认重新载入:保存后重新选用配置并重连;如果访问应用仍在复用旧连接,完全退出该应用后再打开测试。
- 看解析阶段:在可用的诊断或日志信息中寻找同一域名的查询、回答或超时。已有缓存时未必会产生新查询,不要据此直接判断失败。
- 看连接阶段:若已经有目标 IP,却在随后建连时超时,继续检查匹配策略、目标端口和已有连接条目的可用性。
- 重复比较:在相同条件下重复访问数次,区分首次查询和缓存命中。一次偶然成功不应作为长期稳定的依据。
| 观察到的现象 | 优先检查 | 下一步操作 |
|---|---|---|
| 查询超时,没有收到回答 | 解析器地址、网络可达性、DoH 端点路径 | 恢复 system 对照,再单独测试一个已知可用端点。 |
| 返回 NXDOMAIN | 拼写、域名是否存在、是否依赖内部 DNS | 核对完整域名,用相同网络的基线配置复查。 |
| 已返回 IP,但连接超时 | 规则策略、目标服务与实际连接路径 | 查对应连接的策略记录,不继续盲目更换 DNS。 |
| Wi-Fi 正常,蜂窝网络失败 | 是否填写了私有解析地址、端点能否跨网络访问 | 先排除局域网专用地址,再在蜂窝网络重新建立基线。 |
结论:用阶段证据决定下一步
看到解析回答后,应把排查重点移到连接策略与目标服务;只有查询本身失败时,才继续调整解析器、端点或其出站条件。不要把全部“打不开”都归为 DNS 问题。
6. DNS 设置常见问题
改完 dns-server,为什么看起来没变化?
先在 Config 核对修改的是当前启用的配置,再保存、重新选用并重连。随后退出测试应用重新访问。若应用复用了地址缓存或自己处理解析,单看网页结果不足以证明客户端设置没有生效,应结合查询日志判断。
填了 DoH,DNS 查询就一定经过代理吗?
不一定。DoH 决定查询使用 HTTPS 传输,实际出站还受到客户端 DNS 处理逻辑、当前模式和相关配置影响。检查端点连接的实际路径,不要仅凭地址以 https 开头就下结论。
为什么换 DNS 后家里的内部域名打不开了?
外部解析器通常不了解家用路由器或单位网络里的内部记录。先恢复 system,并在原 Wi-Fi 下测试同一个完整名称;若恢复正常,再按内部网络要求设计解析设置,不把外部解析器当作所有名称的替代。
更新已有订阅,为什么没有修好 DNS?
连接条目订阅与 Config 中的 dns-server 是不同配置对象。回到 Config 检查实际启用文件中的字段;如果更新的是远程配置文件,还要核对本地修改是否被替换。不要通过反复更新连接列表来代替检查 DNS。
测试时刚断开就自动连上,怎么做对照?
先查看 Settings → On Demand,记录当前条件,必要时暂时停用自动连接后再测试,完成后恢复原设置。On Demand 负责连接触发,不负责选择解析器;对照期间应避免连接状态自行变化。