Shadowrocket(小火箭)的 DNS 设置应从当前网络可用性出发:网络正常时先保留系统 DNS;需要明确解析入口时再使用已有的自定义 DNS;需要保护查询传输时核对 DNS over HTTPS。本文面向已经拥有自己的服务商、订阅与可用连接的用户,说明解析、路由与连接的区别,并给出单项修改、日志核对和恢复原配置的方法。
先区分 DNS 解析与 Global Routing 流量去向
DNS(域名系统)负责把域名转换为可连接的地址。打开一个页面时,解析成功只是前置条件,后面还包括规则匹配、建立连接、TLS 握手与传输响应。网页打不开不能直接归因于 DNS;更换解析器也不能修复所有连接超时。
这条流程用于区分排查阶段,不表示所有请求都严格按同一顺序处理。已有缓存、域名规则提前匹配、远端解析以及应用自带解析机制,都可能改变实际过程。尤其是域名规则可以在本地取得 IP 地址之前完成匹配。
Home → Global Routing(全局路由)决定流量采用哪种路由姿态,不等同于 DNS 服务器选择。Config(配置)姿态按当前配置中的规则分流;Proxy(代理)与Direct(直连)用于选择相应的全局出站方式。Scene(场景)用于场景选择;排查时应记录当前场景及其实际使用的配置,不要把它当成一种解析协议。Settings → On Demand(按需连接)控制何时触发连接。测试期间若网络条件改变,连接状态也可能改变,应一并记录。
如果用户已有订阅,更新订阅通常是在更新其中的连接条目,不代表当前 Config 内的 DNS 设置也已更新。排查前分别记录所选连接、当前启用配置与 Global Routing 姿态,避免把三个不同的状态混在一起。
系统 DNS、自定义 DNS 与 DoH 的选择依据
系统 DNS 使用当前系统网络环境提供的解析设置,Wi-Fi 与蜂窝网络可能不同。自定义 DNS 则指定解析入口;若填写普通 DNS 服务器地址,通常使用传统 DNS 传输。DNS over HTTPS(通过 HTTPS 传输 DNS,简称 DoH)改变的是查询传输方式,并不保证返回更快或更适合当前网络的地址。
| 设置方式 | 先满足的条件 | 适合的检查场景 | 主要限制 |
|---|---|---|---|
| 系统 DNS | 当前网络已提供可用解析 | 建立基线、访问局域网名称、完成网络登录 | 切换网络后解析入口可能改变 |
| 自定义普通 DNS | 已有服务器地址且当前网络可达 | 固定解析入口、对比不同网络的解析差异 | 普通查询本身不提供传输加密 |
| DNS over HTTPS | 已有完整端点、有效证书与可用 HTTPS 路径 | 需要保护到解析端点之间的查询传输 | 依赖端点连通性、域名引导解析及 TLS 握手 |
DoH 端点可能使用显式指定的其他端口;“能访问某个 HTTPS 网站”也不能证明某个 DoH 端点可达。服务器的域名、端口、请求路径与证书必须匹配。查询传输加密后,解析端点仍能处理并看到查询,不能据此推导所有流量均已隐藏。
结论:先保留可用基线,再改变解析入口
若系统 DNS 已能稳定访问目标,先记录结果,不为追求更低的单次耗时同时更换解析器与出站连接。确有解析失败时,每轮只修改一个 DNS 选项,再复测同一域名。
从当前 Config 核对 DNS,再进行单项修改
先进入 Config(配置)确认当前启用的文件,再查看其中的 [General](通用设置)与 dns-server(DNS 服务器)项。应用内 DNS 选项可从 Settings → DNS(DNS 设置)核对;不要只修改一个未启用的配置文件,随后误认为解析器没有生效。
- 保留原值。复制当前配置作为回退副本,记录 DNS 字段、Global Routing 姿态及当前网络。配置中如含凭据,副本应妥善保存。
- 确认测试对象。选一个已知可以正常访问的公开域名,以及一个确实出现问题的域名。局域网名称单独测试,不与公开域名混为一组。
- 只修改解析设置。在启用配置中核对
dns-server,或在对应 DNS 设置入口检查已有值。不要同时修改出站、规则、IPv6 与 On Demand。 - 保存并重新连接。结束当前连接后重新开启,随后产生新的请求。已打开页面、已有连接与缓存命中不适合作为唯一验证依据。
- 对照失败阶段。核对是解析超时、连接超时还是证书错误;若结果变差,恢复原配置并再次重连。
下面两段只展示同一个字段的两种写法,不能把两段重复追加进同一配置。保留实际文件中其他必要设置;不要为了套用示例而用几行文字覆盖完整配置。
[General]
dns-server = system
[General]
dns-server = https://resolver.example.com/dns-query
若已有配置由远端更新管理,应先确认更新是否覆盖本地修改。测试应在保留副本的基础上进行,更新后重新检查启用文件中的实际值,而不是根据上次输入内容判断当前状态。
DoH 地址与普通 DNS 地址怎样填写和核对
普通 DNS 地址与 DoH URL 不是可以随意互换的格式。前者描述服务器地址,后者还包含协议、主机名与请求路径。把普通 DNS 地址前面加上 https://,并不会使该服务器自动支持 DoH。
普通 DNS 地址核对
- 地址示例
192.0.2.53- 常用端口
53,检查 UDP 与 TCP 路径- 填写位置
- 当前配置的
dns-server项 - 前置条件
- 已有可用服务器及网络访问权限
192.0.2.53 属于文档示例地址,不能直接用于测试。
DoH 端点核对
- 协议
https://- 主机示例
resolver.example.com- 路径示例
/dns-query,以实际端点文档为准- 证书要求
- 证书有效且与端点主机名匹配
DoH 使用完整 URL;示例只解释结构,不提供解析服务。
以域名表示的 DoH 端点存在引导解析需求:建立 HTTPS 连接之前,需要先得到端点自身的地址。如果引导解析不可用,可能出现“为了查询 DNS,先要解析 DNS 服务器域名”的依赖问题。此时应检查当前网络基础解析与端点连接路径,不应继续叠加更多同样无法建立连接的端点。
- 地址可达不等于协议可用:能连到某个 IP,不代表其指定端口提供 DoH。
- HTTP 响应不等于查询成功:浏览器打开端点出现错误页,不能单独证明 DoH 服务失效;浏览器普通访问不等同于合规 DNS 查询。
- 证书失败应查原因:检查设备时间、主机名与网络登录状态,不以关闭证书验证作为解决步骤。
规则、IPv6 与局域网解析为什么会影响结果
DNS 返回地址后,流量仍需经过适用的路由决策。DOMAIN-SUFFIX(域名后缀匹配)依据域名;IP-CIDR(IPv4 地址段匹配)与 GEOIP(IP 地理归属匹配)依据地址信息。修改解析器后,返回地址可能变化,命中的地址类规则也可能随之改变。
[Rule]
DOMAIN-SUFFIX,example.com,DIRECT
IP-CIDR,192.0.2.0/24,DIRECT,no-resolve
GEOIP,CN,DIRECT
FINAL,PROXY
上例只说明语法与匹配关系,不是完整配置。DIRECT 表示直连,PROXY 表示代理去向;实际使用时须核对当前配置认可的策略名称。规则自上而下匹配,FINAL(最终规则)承接前面未匹配的流量。地址段是文档示例,不应直接作为日常分流配置套用。
no-resolve表示不为了该条地址规则主动进行域名解析;它不是“关闭所有 DNS”,也不会清除已有解析结果。- 同一域名的
A与AAAA记录可能指向不同地址。获得 AAAA 记录只说明解析返回 IPv6 地址,不说明当前 IPv6 连接路径可用。 - 公司或家庭网络的内部域名可能依赖本地解析器。换成外部解析器后,公开网站正常而内部域名失败,是需要单独检查的现象。
- 部分应用会使用自身的加密解析或缓存机制。不能因为某一应用行为未改变,就认定 Shadowrocket 的 DNS 配置未保存。
访问需要网页登录的 Wi-Fi 时,应先完成网络认证,再评估自定义解析。认证未完成时,HTTPS 端点不可达、证书异常或所有外部请求超时,往往是网络准入问题,而不是 DNS 字段写法有误。
修改后如何验证:记录失败阶段而不是只看能否打开
验证应在同一网络、同一出站和同一路由姿态下进行。先用原设置建立基线,再换成候选设置。每轮记录请求时间、目标域名、是否得到地址,以及后续连接的结果;不要将缓存命中的瞬时响应与首次建立 DoH 连接的耗时直接比较。
| 观察现象 | 优先检查 | 下一步操作 |
|---|---|---|
| 记录中没有得到地址,随后超时 | 解析器可达性、端点格式与引导解析 | 恢复系统 DNS,保持其他设置不变后复测 |
| 已得到地址,但建立连接超时 | 规则命中、出站路径与目标端口 | 核对实际策略,不先重复更换 DNS |
| 公开域名正常,内部名称失败 | 是否依赖本地网络解析 | 回到原网络与原解析设置对照测试 |
| Wi-Fi 正常,蜂窝网络失败 | 两种网络的端点可达性与连接状态 | 分别重连并记录,检查 On Demand 条件 |
| 重连后仍显示先前地址 | DNS 缓存、应用缓存与已有连接 | 重新发起请求,区分缓存结果与新查询 |
应用内日志能辅助定位,但不同请求未必都显示相同字段。日志中没有新的 DNS 行,既可能是缓存命中,也可能是解析发生在其他位置。需要结合实际请求时间与路由记录判断,不能只凭一行缺失给出结论。
- 在可重复的问题域名上,分别记录原设置和新设置的表现。
- 检查是否得到 A 或 AAAA 记录,再看连接最终采用的地址及策略。
- 若涉及隐私验证,只使用自己控制的测试域名与服务端记录;不同解析出口地址不一定代表异常。
- 完成对照后只保留已经验证的改动,删除测试值并保留回退副本。
结论:已有地址时,转查连接与规则
若记录表明地址已经返回,而失败发生在后续连接阶段,就先核对命中策略与目标路径。继续替换 DNS 会引入新的地址变量,使原来的故障更难定位。
常见问题:设置保存后仍不生效怎么办
改了 DNS,为什么还是原来的结果?
先在 Config 确认修改的是当前启用文件,再保存并重新连接。随后关闭旧页面并发起新请求,对照日志时间。还要检查配置更新是否覆盖修改,以及目标应用是否保留缓存或使用自己的解析机制。
用了 DoH,所有请求就一定通过代理吗?
不是。DoH 描述查询的 HTTPS 传输方式,不等于代理策略。先核对 Home → Global Routing,再检查当前配置对端点连接与目标流量的处理;解析请求路径和网页请求路径应分别验证。
节点延迟正常,但域名始终打不开,要先换 DNS 吗?
先确认日志中有没有返回地址。延迟测试只能反映相应测试过程,不能证明目标域名解析与网页连接均正常。只有确认失败在解析阶段后,才在保持出站不变的情况下对照系统 DNS。
设置后完全无法访问,怎么恢复?
切回修改前保留的配置,核对 dns-server 原值并重新连接。如果当前网络需要登录,先完成网络认证;若每次切换网络都会重新触发连接,再检查 Settings → On Demand 的现有条件。