DNS 出问题时的表现很有迷惑性:能 ping 通、能连节点,但订阅怎么也更新不了。
DNS 问题导致订阅失败的解决思路
DNS 问题的迷惑性在于它的症状组合很反直觉:
- 网络看起来正常,能 ping 通
- 已有的节点也能连上、能用
- 但订阅怎么都更新不了
如果你遇到这个组合,DNS 的嫌疑非常大。这篇解释为什么,以及怎么处理。
为什么会出现这种组合
关键在于两者用的地址形式不同:
已导入的节点通常直接使用 IP 地址连接,或者使用客户端内部的解析机制。它们不依赖系统 DNS。
订阅地址是一个域名。客户端要访问它,必须先通过 DNS 把域名解析成 IP。
所以当系统 DNS 出问题时,节点照常工作,订阅却取不到——两条路走的不是同一套解析。
三步确认
第一步:在浏览器里打开订阅地址
这是最快的判断方法。
- 浏览器能打开(显示一串编码内容或提示下载)→ 解析正常,问题在客户端设置,转到订阅更新失败的排查步骤
- 浏览器提示无法访问、找不到服务器 → 解析或网络层有问题,继续往下
第二步:直接查询解析结果
nslookup 订阅地址的域名部分macOS 和 Linux 上也可以:
dig 域名 +short判断结果:
| 返回情况 | 说明 |
|---|---|
| 返回了合理的公网 IP | 解析正常 |
| 查询超时 | DNS 服务器不可达 |
返回 127.0.0.1 或 0.0.0.0 | 解析被拦截或 hosts 有条目 |
| 返回明显不属于该服务的地址 | 解析结果不正确 |
第三步:换一个 DNS 再查一次
nslookup 域名 1.1.1.1(用指定的 DNS 服务器查询)
如果换个 DNS 就能拿到正确结果,说明你当前网络下发的 DNS 有问题。
四种处理方式
一、清除本地 DNS 缓存
系统会缓存解析结果。如果缓存里存了错误的结果,即使上游已经恢复,本地仍然用旧数据。
- Windows: 管理员命令提示符执行
ipconfig /flushdns - macOS:
sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder - 手机: 开关一次飞行模式,或重启设备
浏览器也有独立缓存,必要时一并清理。
二、更换系统 DNS
把系统 DNS 改为公共解析服务,绕开当前网络的解析问题。
副作用要知道
更换公共 DNS 后,依赖就近解析的国内 CDN 内容可能被解析到较远的节点,导致国内网站访问变慢。
如果换了之后发现国内站点明显变慢,说明这个副作用比原本的 DNS 问题影响更大,可以改回自动获取。
有一个折中方案:在客户端里配置分流解析(国内域名本地解析、境外域名远程解析),而不是改系统 DNS。
修改位置:
- Windows: 设置 → 网络和 Internet → 当前网络 → 编辑 DNS 服务器分配
- macOS: 系统设置 → 网络 → 当前网络 → 详细信息 → DNS
- iOS: 设置 → 无线局域网 → 当前网络 → 配置 DNS
- Android: 设置 → 网络 → 私人 DNS
三、检查 hosts 文件
如果你(或某个软件)曾经修改过 hosts 文件,其中的条目会优先于 DNS 生效,而且不受缓存清理影响。
- Windows:
C:\Windows\System32\drivers\etc\hosts - macOS / Linux:
/etc/hosts
检查是否有与订阅域名相关的条目。有些"加速工具"会在这里写入内容。
四、临时用另一个网络更新
如果只是想尽快拿到最新的节点列表:
用手机热点更新一次订阅。 不同网络的 DNS 环境不同,往往换一个就能成功。更新完成后切回原网络,节点列表已经拿到了,可以正常使用。
这不解决根本问题,但能快速恢复可用状态。
客户端的 DNS 策略
大多数客户端有自己的 DNS 配置,独立于系统设置:
远程解析 —— 域名交给节点那一端解析。解析结果与访问路径一致,不容易出现"解析到 A 但从 B 访问"的问题。
本地解析 —— 在本机解析后把 IP 交给节点。国内站点可以就近解析,但境外域名可能拿到不合适的结果。
分流解析 —— 按规则区分:国内域名本地解析、境外域名远程解析。这是推荐的默认策略。
更多说明见 DNS 问题排查。
注意事项
- 订阅地址包含账号凭据。在浏览器里测试后,注意浏览器历史记录中会留下这条地址。
- 更换 DNS 会影响所有网络访问,不只是订阅更新,调整前了解副作用。
- 修改 hosts 文件需要管理员权限,操作前先备份。
常见问题
为什么节点能用但订阅取不到?
节点通常用 IP 直连,订阅地址是域名需要解析。两者走的解析路径不同。
换 DNS 会有什么风险?
主要是国内 CDN 就近解析失效导致部分站点变慢。安全性方面,选择知名的公共 DNS 服务通常没有额外风险。
为什么昨天还好好的?
网络环境的 DNS 配置可能变化(运营商调整、路由器重启后拿到不同配置),或者本地缓存了一个错误结果。
手机能更新电脑不行?
两者的 DNS 配置不同。对比一下,或者直接在电脑上换个 DNS 试试。
订阅更新成功但节点还是连不上?
那是另一个问题,见节点全部 Timeout 怎么处理。