本文适合已经在 Shadowrocket 中导入自己的订阅、希望排查域名解析问题的用户。先区分解析器地址、查询传输方式与连接出站,再通过当前配置的 [General] 和 dns-server 做单项修改,最后用同一域名、同一网络与记录结果验证;不要仅凭网页是否打开判断 DNS 是否生效。
一、DNS 设置决定什么,不决定什么
Shadowrocket(小火箭)中的 DNS 设置用于影响域名解析:把域名转换为后续连接需要的 IP 地址。系统 DNS 指使用当前系统网络提供的解析器;自定义 DNS 通常指明确指定解析器地址;DNS over HTTPS 则说明查询通过 HTTPS 传输。这三个说法不是完全互斥的分类,因为手动指定的解析器也可以采用 DNS over HTTPS。
DNS 与代理出站是不同环节。解析得到地址,并不表示后续连接一定使用 Proxy;使用加密 DNS,也不表示所有 DNS 请求一定经过已有服务器。实际行为还取决于当前配置、Global Routing、解析请求自身的路由,以及目标域名是否交由远端解析。
上面的流程用于区分职责,不代表每次连接都必须先在本地完成查询。具备域名信息时,DOMAIN-SUFFIX 等域名规则可直接参与匹配;部分连接也可能把域名交给远端处理。IP-CIDR、GEOIP 等依赖地址信息的规则,则需要结合实际解析和规则选项理解。
二、系统 DNS、自定义 DNS 与 DNS over HTTPS 的选择
先保留能稳定工作的基线。当前网络提供的 DNS 能正确解析所需域名时,系统 DNS 便于适应 Wi-Fi、蜂窝网络以及内部网络。需要排查特定解析器,或希望固定查询目标时,再测试自定义 DNS;需要加密客户端到解析器之间的查询传输时,再评估 DNS over HTTPS。
| 设置方式 | 查询目标与传输 | 适用检查 | 主要边界 |
|---|---|---|---|
| 系统 DNS | 使用系统当前提供的解析器;传输由实际网络设置决定。 | 保留网络默认行为,检查内部域名和登录网络。 | 切换网络后,解析器与解析结果可能改变。 |
| 自定义传统 DNS | 指定 IP 地址;普通 DNS 通常使用 UDP 53,必要时使用 TCP 53。 | 对比默认解析器与指定解析器的可达性和回答。 | 明确指定地址本身不提供传输加密。 |
| DNS over HTTPS | 指定 HTTPS 查询端点,通常使用端口 443。 | 验证加密查询通道以及端点连通性。 | 依赖 HTTPS 建连、证书验证与端点可用性。 |
DNS over HTTPS 保护的是到解析器这一段的查询传输,解析器仍然能够处理查询内容。它不会替代访问网站时的 HTTPS,也不能保证更低延迟。首次建立加密连接、网络阻断、解析器距离与缓存状态,都可能影响查询耗时。
结论:按故障目标选择,不按名称判断速度
默认解析正常时保留基线;默认解析异常时先测试一个明确的解析器;需要验证查询传输加密时再单独切换 DoH,并保持其余配置不变。
三、在 Config 中修改 dns-server
先在 Home → Global Routing 确认当前模式,再到 Config 核对实际启用的配置。以下验证过程以 Config 模式为基线。Proxy、Direct 会改变连接处理方式;若使用 Scene,应先确认当前场景对应的配置与路由姿态,避免切换网络时基线随之变化。
- 在
Config中识别当前使用的配置,先保留一份原配置副本,记录原有dns-server值。 - 打开该配置的编辑菜单,进入
Edit Plain Text。查找已有的[General]段,不要重复新增同名段落。 - 在已有
[General]中替换dns-server的值。下列三种写法是替代关系,不要同时粘贴三行同名字段。 - 保存并确认启用的是修改后的配置,重新连接,再发起新的域名访问。不要只刷新一个仍在复用旧连接的页面。
系统 DNS 写法
[General]
dns-server = system
system 表示使用系统提供的解析器,不是一个固定地址。切换 Wi-Fi 与蜂窝网络后,系统能够获得的 DNS 信息可能不同。若内部域名只在单位或家庭网络中有效,改用公共解析器可能失去这类解析能力。
指定传统 DNS 地址
[General]
dns-server = 1.1.1.1
此处地址用于展示字段语法,不代表对解析服务的推荐或速度结论。需要填写多个解析器时,可使用逗号分隔,例如 dns-server = 1.1.1.1, 1.0.0.1;不要把列表顺序当作“第一个失败才查询第二个”的保证。为便于定位问题,首次测试只保留一个解析器。
DNS over HTTPS 写法
[General]
dns-server = https://1.1.1.1/dns-query
此端点仅用于说明完整 URL 的写法。DoH 地址必须是解析服务实际提供的 HTTPS 查询端点,不能把普通网站首页当作 DNS 服务器。使用 IP 地址形式的 HTTPS 端点时,服务证书必须覆盖该 IP;不要把任意域名端点替换成解析出来的 IP,也不要通过关闭证书验证处理失败。
配置写入检查
- 入口
- Config → 当前配置 → Edit Plain Text
- 段落
[General]- 字段
dns-server- 修改范围
- 每轮仅替换一个 DNS 值
在原配置中修改对应行,不要用片段覆盖整个配置。
生效条件检查
- 配置
- 启用刚刚保存的配置
- 模式
- 确认 Home → Global Routing
- 连接
- 重新连接后发起新请求
- 自动连接
- 核对 Settings → On Demand
On Demand 负责按条件连接,不负责选择 DNS 解析器。
四、用可重复步骤验证 DNS 是否生效
网页能够打开,只能说明这次访问完成,不能独立证明查询使用了哪一个解析器。浏览器可能复用已有连接,应用可能保留地址缓存,部分应用还会使用自己的加密解析。验证应把“查询是否发生”“查询得到什么”和“随后如何连接”分开记录。
- 固定测试条件。使用同一台设备、同一网络、同一个已有服务器与同一个 Global Routing 模式。记录配置文件名和当前
dns-server值。 - 保留系统基线。先用
system测试一个已知正常的域名与一个出现问题的域名,分别记录成功、超时或域名不存在等结果。 - 只修改 DNS。改为单个自定义解析器,重新连接,结束测试应用后再打开并重试。新连接有助于减少连接复用影响,但不等于清除了所有系统和应用缓存。
- 检查可用记录。在 Shadowrocket 提供的日志或请求记录中,查找测试域名、查询类型、返回地址与失败提示;若能看到解析器或出站信息,一并记录。
Data中流量增加本身不是 DNS 生效证据。 - 最后测试 DoH。替换为 HTTPS 端点,重复同一流程。端点返回网页、HTTP 错误或 TLS 错误时,先处理端点问题,不要同时更改规则。
| 记录项 | 应记录的内容 | 用途 |
|---|---|---|
| 网络与配置 | Wi-Fi 或蜂窝、配置名、Global Routing 模式 | 排除测试条件变化 |
| 查询 | 域名、A 或 AAAA、成功或具体错误 | 区分地址族与查询失败 |
| 回答 | 返回 IP、可见的 TTL、是否来自缓存 | 识别缓存与结果变化 |
| 后续连接 | 命中规则、出站策略、连接结果 | 区分 DNS 与路由问题 |
不同解析器返回不同 IP 不一定是错误。CDN 调度、解析器位置、缓存更新和网络环境都可能改变回答。应结合目标能否建立连接、证书是否正确,以及故障能否重复出现判断,不以两次 IP 不一致直接认定解析异常。
五、按故障现象缩小检查范围
出现故障时先回到刚才的单变量测试。尤其不要同时修改 DNS、Global Routing、已有服务器和规则文件,否则即使恢复访问,也难以确定是哪一项起了作用。
- 系统 DNS 正常,自定义 DNS 超时:检查当前网络是否允许访问该解析器的 UDP/TCP 53。能够访问普通 HTTPS 网站,不等于传统 DNS 端口也可达。
- 传统 DNS 正常,DoH 失败:检查端点路径、端口 443、设备时间和证书错误。若端点使用域名,首次连接还需要获得端点本身的地址,这属于引导解析问题。
- 内部域名失效:先恢复
system验证。公共解析器通常不知道局域网或组织内部的名称;加密传输不能弥补缺少相应解析数据。 - 返回地址但网页仍超时:继续检查实际命中的
DOMAIN-SUFFIX、IP-CIDR、GEOIP或FINAL规则,以及所选出站。DNS 成功不代表目标连接成功。 - 部分网站偶发失败:分别检查 A 与 AAAA 回答及对应网络连通性。AAAA 有结果不等于当前网络的 IPv6 路径可用,不要仅凭一个地址族的回答推断全部正常。
- 修改后行为未变:核对是否编辑了未启用的配置,是否仍在使用旧连接,以及测试应用是否自带解析。若配置来自远程更新,还要检查更新后手工修改是否被覆盖。
结论:有地址但连不上,先停止更换 DNS
确认查询已成功后,把检查重点移到命中规则、出站路径和目标连通性;只有回答错误或解析路径异常时,才继续调整解析器。
六、保存结果与恢复原设置
确定可重复的结果后,再决定是否长期保留修改。系统 DNS 适合依赖当前网络解析的环境;指定解析器适合明确控制查询目标;DoH 适合需要加密查询传输且端点稳定可达的环境。三者都需要结合实际网络验证,不存在仅凭字段名称就能确定的统一最优项。
- 记录有效配置的
dns-server、测试网络和故障现象,不记录已有订阅中的凭据。 - 分别在常用 Wi-Fi 与蜂窝网络复测,确认切网后不会依赖已经不可达的解析器。
- 如果使用远程配置,更新后重新核对
[General];服务器订阅刷新与 DNS 配置修改不是同一项操作。 - 需要撤销时,恢复备份中的原值并重新连接。原先使用系统解析时,可恢复为
dns-server = system。
本文步骤以 iPhone、iPad 上的配置编辑和排查为主。Shadowrocket 是 Apple 平台的付费客户端,唯一获取入口为 App Store;系统要求、其他设备兼容性与通用购买以 App Store 页面标注为准。应用购买与用户已有订阅分别管理,客户端买断 ≠ 线路套餐。