一次“Google 能打开,FlexTV 打不开”的 DNS 故障排查:从 curl 超时到完整证据链

最近遇到一个很有代表性的网络问题:

同一台电脑上,https://www.google.com/ 可以正常打开,但 https://www.flextv.cc/ 无法访问。

看到这种现象,很多人的第一反应是"FlexTV 网站挂了"。但"某个网站打不开"只是表象,真正的故障可能发生在 DNS、TCP、TLS、HTTP、CDN、代理,甚至浏览器扩展中的任何一层。

这篇文章记录一次完整的定位过程:如何通过 curlnslookup--resolve 建立证据链,证明问题发生在 DNS 解析阶段,并给出 Windows、macOS 和路由器端的解决方法。

一、先说结论

本次排查得到的结论是:

当前网络使用的 DNS 服务器 192.168.8.1 无法及时解析 www.flextv.cc;改用 1.1.1.18.8.8.8 后可以正常获得 CDN 地址。绕过默认 DNS、直接连接 CDN 后,FlexTV 返回 HTTP 200

因此,本次故障发生在当前网络的 DNS 解析链路,而不是 FlexTV 首页服务或 HTTPS 证书整体不可用。

这里特意使用"当前网络的 DNS 解析链路异常",而不是直接说"运营商屏蔽"或"路由器 Bug"。客户端测试可以定位故障层级,但仅凭这些证据,还不能唯一确定路由器内部究竟是缓存异常、上游 DNS 故障、过滤规则,还是转发程序问题。

二、打开一个 HTTPS 网站时,系统做了什么

浏览器访问下面这个地址:

text 复制代码
https://www.flextv.cc/

通常要经过以下步骤:

  1. DNS 解析 :把 www.flextv.cc 转换成一个或多个 IP 地址。
  2. TCP 连接:连接目标 IP 的 443 端口。
  3. TLS 握手:协商加密连接,并校验服务器证书。
  4. HTTP 请求:发送请求,服务器或 CDN 返回状态码和内容。
  5. 浏览器渲染:加载 HTML、CSS、JavaScript、图片和接口数据。

这几个步骤存在明确的先后关系:如果 DNS 没有返回 IP,客户端就不知道该连接哪台服务器,后面的 TCP 和 TLS 自然无法开始。

因此,排查时最重要的事情不是反复刷新浏览器,而是先回答一个问题:请求到底失败在哪一层?

三、第一步:用 curl 对比两个网站

在 Windows PowerShell 中执行:

powershell 复制代码
curl.exe -I -sS -L --max-redirs 5 --connect-timeout 10 --max-time 20 https://www.flextv.cc/
curl.exe -I -sS -L --max-redirs 5 --connect-timeout 10 --max-time 20 https://www.google.com/

FlexTV 的关键输出是:

text 复制代码
curl: (28) Resolving timed out after 10008 milliseconds

Google 则正常返回:

text 复制代码
HTTP/1.1 200 OK

Resolving timed out 说明了什么

这里最关键的词是 Resolving

它表示 curl 在等待域名解析结果时超时,还没有取得 www.flextv.cc 对应的 IP 地址。所以本次请求尚未进入 TCP 连接阶段,也没有开始 TLS 证书校验。

不同错误通常对应不同的故障层:

错误表现 更可能的故障层
Resolving timed out DNS 解析
Could not resolve host DNS 解析
Failed to connect TCP、路由或防火墙
Connection refused 端口未监听或被主动拒绝
certificate problem TLS 或证书
HTTP 403/404/500 已到达 HTTP/应用层

Google 能返回 200 说明同一台电脑具备基本联网能力,但这并不能单独证明 FlexTV 是 DNS 问题。接下来还需要直接查询 DNS。

四、第二步:对比默认 DNS 和公共 DNS

先使用系统当前配置的 DNS:

powershell 复制代码
nslookup www.flextv.cc
nslookup flextv.cc
nslookup www.google.com

本次环境的默认 DNS 是:

text 复制代码
Server:  UnKnown
Address: 192.168.8.1

查询 www.flextv.cc 时出现超时:

text 复制代码
DNS request timed out

但查询 www.google.com 可以返回多个地址,说明这个 DNS 并不是完全不可用,而是对特定域名或特定解析链路出现了问题。

接下来跳过默认 DNS,直接查询 Google DNS 和 Cloudflare DNS:

powershell 复制代码
nslookup www.flextv.cc 8.8.8.8
nslookup www.flextv.cc 1.1.1.1

两者都能返回结果,关键内容类似:

text 复制代码
Name:    www.flextv.cc.queniuaa.com
Aliases: www.flextv.cc
Addresses: 多个 CDN 边缘 IP

这一步说明:

  • www.flextv.cc 的公共 DNS 记录存在;
  • 域名通过 CNAME 指向 CDN;
  • 公共递归 DNS 可以继续解析 CNAME 并返回多个边缘节点 IP;
  • 当前默认 DNS 192.168.8.1 没有及时完成同样的解析。

为什么 flextv.ccwww.flextv.cc 的结果不同

排查中还发现:默认 DNS 能解析根域名 flextv.cc,但解析 www.flextv.cc 超时。

这是完全可能的,因为它们是两条不同的 DNS 记录:

text 复制代码
flextv.cc
www.flextv.cc

根域名可能直接使用 A 记录,而 www 子域名可能使用 CNAME 接入 CDN。能够解析根域名,并不代表一定能够正确处理 www 的 CNAME 链。

五、第三步:绕过 DNS 验证 HTTPS 和网站服务

现在已经知道公共 DNS 能返回 CDN IP,但还需要回答另一个问题:

即使 DNS 有问题,FlexTV 的 HTTPS 服务本身是否正常?

可以使用 curl 的 --resolve 参数,为单次请求临时指定域名和 IP 的对应关系:

powershell 复制代码
curl.exe -I -sS --connect-timeout 10 --max-time 20 `
  --resolve www.flextv.cc:443:43.109.161.39 `
  https://www.flextv.cc/

在 macOS 或 Linux 中,可以写成一行:

bash 复制代码
curl -I -sS --connect-timeout 10 --max-time 20 --resolve www.flextv.cc:443:43.109.161.39 https://www.flextv.cc/

本次返回:

text 复制代码
HTTP/1.1 200 OK
Server: Tengine
Content-Type: text/html;charset=utf-8

为什么 --resolve 的证据很重要

--resolve 只为这一次 curl 请求提供临时映射,不会修改系统 hosts 文件。

虽然连接使用了指定 IP,但请求 URL 仍是 https://www.flextv.cc/,因此:

  • HTTP Host 仍然是 www.flextv.cc
  • TLS SNI 仍然携带 www.flextv.cc
  • curl 仍会按照 www.flextv.cc 校验证书。

最终返回 HTTP 200,说明在这个测试节点上,TCP、TLS、CDN 和 HTTP 首页服务都能工作。

至此证据链完整了:

  1. 默认访问 FlexTV:DNS 解析超时;
  2. 默认访问 Google:返回 HTTP 200;
  3. 默认 DNS 查询 FlexTV:超时;
  4. 两个公共 DNS 查询 FlexTV:均成功;
  5. 绕过默认 DNS:FlexTV 返回 HTTP 200。

所以,问题可以定位到当前 DNS 解析链路。

注意:上面的 CDN IP 是本次排查时的临时结果,后续可能变化。不要把它长期写入 hosts 文件。

六、确认 Windows 当前使用的 DNS

在 PowerShell 中执行:

powershell 复制代码
Get-DnsClientServerAddress -AddressFamily IPv4 |
  Where-Object { $_.ServerAddresses.Count -gt 0 } |
  Format-Table -AutoSize InterfaceAlias,InterfaceIndex,ServerAddresses

本次输出为:

text 复制代码
InterfaceAlias  InterfaceIndex  ServerAddresses
以太网          8               {192.168.8.1}

192.168.8.1 是局域网私有地址,通常代表路由器。电脑把查询交给路由器后,由路由器的 DNS 代理继续向上游服务器查询。

因此,"默认 DNS 是路由器"并不意味着真正出问题的一定是路由器硬件,还可能是:

  • 路由器 DNS 转发程序异常;
  • 路由器缓存了错误或不完整的记录;
  • 路由器配置的上游 DNS 异常;
  • 家长控制、广告拦截或安全策略匹配了域名;
  • VPN、代理或安全软件接管了 DNS;
  • CNAME 链在某一层被错误处理。

七、Windows 解决方法

方法一:通过图形界面修改

  1. 打开"设置"→"网络和 Internet"。
  2. 进入当前使用的"以太网"或"Wi-Fi"。
  3. 找到 DNS 服务器分配,点击"编辑"。
  4. 选择手动 IPv4。
  5. 首选 DNS 设置为 1.1.1.1
  6. 备用 DNS 设置为 8.8.8.8
  7. 保存后关闭并重新打开浏览器。

方法二:使用管理员 PowerShell

先查看接口名称:

powershell 复制代码
Get-DnsClientServerAddress -AddressFamily IPv4

假设接口名为"以太网",执行:

powershell 复制代码
Set-DnsClientServerAddress `
  -InterfaceAlias "以太网" `
  -ServerAddresses "1.1.1.1","8.8.8.8"

如果使用 Wi-Fi,需要把接口名改成实际名称,例如:

powershell 复制代码
Set-DnsClientServerAddress `
  -InterfaceAlias "Wi-Fi" `
  -ServerAddresses "1.1.1.1","8.8.8.8"

然后清除 DNS 缓存:

powershell 复制代码
Clear-DnsClientCache

也可以使用传统命令:

cmd 复制代码
ipconfig /flushdns

Windows 回滚为自动 DNS

如果需要重新使用 DHCP 或路由器下发的 DNS:

powershell 复制代码
Set-DnsClientServerAddress `
  -InterfaceAlias "以太网" `
  -ResetServerAddresses

Clear-DnsClientCache

八、macOS 解决方法

方法一:通过系统设置修改

  1. 打开"系统设置"→"网络"。
  2. 选择当前使用的 Wi-Fi,点击"详细信息"。
  3. 进入"DNS"。
  4. 添加 1.1.1.18.8.8.8
  5. 保存并重新打开浏览器。

旧版本 macOS 的入口可能是"系统偏好设置"→"网络"→"高级"→"DNS"。

方法二:使用终端

先查看所有网络服务:

bash 复制代码
networksetup -listallnetworkservices

如果当前服务名是 Wi-Fi,执行:

bash 复制代码
sudo networksetup -setdnsservers "Wi-Fi" 1.1.1.1 8.8.8.8

刷新 DNS 缓存:

bash 复制代码
sudo dscacheutil -flushcache
sudo killall -HUP mDNSResponder

如果使用网线,服务名可能是 EthernetUSB 10/100/1000 LAN 或其他名称,需要按 networksetup -listallnetworkservices 的实际输出替换。

macOS 回滚为自动 DNS

bash 复制代码
sudo networksetup -setdnsservers "Wi-Fi" Empty
sudo dscacheutil -flushcache
sudo killall -HUP mDNSResponder

其中 Empty 表示清除手动 DNS,恢复使用网络自动下发的配置。

九、多台设备都失败时,应该修改路由器

如果同一 Wi-Fi 下的 Windows、Mac、手机都无法访问 FlexTV,逐台修改 DNS 只能治标,更合理的做法是修复路由器。

进入路由器后台,在 WAN、Internet、DHCP 或 DNS 页面中设置:

text 复制代码
首选 DNS:1.1.1.1
备用 DNS:8.8.8.8

保存后根据路由器说明重新连接 WAN 或重启路由器,然后让终端设备重新连接网络。

如果是公司网络,不建议自行绕过内部 DNS。企业 DNS 可能承担内部域名解析、审计和访问控制,应把 nslookupcurl 输出提供给网络管理员处理。

十、修改 DNS 后如何验证

不要只看浏览器是否"偶尔能打开"。建议分层验证。

1. 验证 DNS

Windows:

powershell 复制代码
nslookup www.flextv.cc

macOS:

bash 复制代码
nslookup www.flextv.cc
dig www.flextv.cc

期望看到 CNAME 或 IP,而不是 DNS request timed out

2. 验证 HTTPS

Windows:

powershell 复制代码
curl.exe -I -sS --connect-timeout 10 --max-time 20 https://www.flextv.cc/

macOS:

bash 复制代码
curl -I -sS --connect-timeout 10 --max-time 20 https://www.flextv.cc/

返回 200 最理想。返回 301302 也说明 DNS、TCP 和 TLS 已经成功,应继续检查重定向目标。

有些网站不支持 HEAD 请求,可能对 curl -I 返回 405 Method Not Allowed。这时可以使用普通 GET,只丢弃响应正文:

Windows:

powershell 复制代码
curl.exe -sS -o NUL -w "%{http_code}`n" https://www.flextv.cc/

macOS:

bash 复制代码
curl -sS -o /dev/null -w '%{http_code}\n' https://www.flextv.cc/

3. 验证浏览器

  • 完全关闭浏览器后重新打开;
  • 使用无痕窗口测试;
  • 检查安全 DNS(DoH)配置;
  • 暂时断开 VPN 或代理进行对比;
  • 检查扩展、内容过滤器和安全软件;
  • 确认页面图片、样式和接口也能正常加载。

十一、如果仍然打不开,按结果继续分层

检测结果 可能原因 下一步
公共 DNS 也无法解析 权威 DNS、域名状态或到公共 DNS 的网络异常 换网络,查询权威 DNS 和域名注册状态
DNS 正常,但 443 连接超时 路由、防火墙、CDN 节点或服务器不可达 curl -v、换网络、检查防火墙
TCP 成功,但 TLS 失败 证书、SNI、系统时间或中间人代理 检查系统时间、证书链和 HTTPS 代理
curl 正常,浏览器失败 浏览器缓存、扩展、DoH、代理或 HSTS 无痕模式、关闭扩展、检查浏览器策略
只有公司网络失败 企业 DNS、网关或安全产品策略 联系管理员并提交命令输出
只有一台设备失败 单机 DNS、代理、hosts 或安全软件 对比其他设备和网络接口配置

还可以检查 hosts 文件中是否存在旧映射。

Windows:

powershell 复制代码
Get-Content C:\Windows\System32\drivers\etc\hosts |
  Select-String -Pattern "flextv"

macOS:

bash 复制代码
grep -i "flextv" /etc/hosts

这里只建议检查相关条目,不要在不了解用途的情况下删除其他 hosts 配置。

十二、本文所有执行命令的逐条解析

前面的正文更关注排查思路,这一节把实际出现过的命令逐条拆开说明。为了避免误操作,先按性质分为两类:

  • 只读诊断命令curlnslookupdigGet-DnsClientServerAddressGet-Contentgrep。它们只读取或发起测试请求,不会修改 DNS 配置。
  • 配置修改命令Set-DnsClientServerAddressnetworksetup -setdnsservers。它们会改变网络接口的 DNS,需要管理员权限,并应提前了解回滚方法。

1. 两条 curl 对比探测命令

powershell 复制代码
curl.exe -I -sS -L --max-redirs 5 --connect-timeout 10 --max-time 20 https://www.flextv.cc/
curl.exe -I -sS -L --max-redirs 5 --connect-timeout 10 --max-time 20 https://www.google.com/

两条命令只有 URL 不同,目的是在同一台电脑、同一网络、相同参数下进行对照实验。

组成部分 含义
curl.exe 明确调用 Windows 上的原生 curl 程序。写出 .exe 可以避免某些旧版 PowerShell 把 curl 当成其他命令别名。
-I 只请求响应头,通常发送 HTTP HEAD 请求,不下载完整网页正文。适合快速检查状态码、重定向和服务器响应。
-s Silent,隐藏进度条等常规输出。
-S Show error。与 -s 同时使用时,仍显示错误信息,因此组合写成 -sS
-L 自动跟随 301302307308 等重定向。
--max-redirs 5 最多跟随 5 次重定向,防止错误配置导致无限循环。
--connect-timeout 10 连接阶段最多等待 10 秒。该阶段通常包含 DNS 解析、TCP 建连以及建立安全连接所需的前置过程,所以本次 DNS 超时大约在 10 秒后被终止。
--max-time 20 限制整个 curl 操作最多运行 20 秒,包括连接和数据传输。
https://.../ 要测试的完整 URL。使用 HTTPS 表示目标端口通常为 443,并需要进行 TLS 握手。

第一条命令测试 FlexTV,第二条测试 Google。Google 返回 200,而 FlexTV 输出 Resolving timed out,所以差异出现在目标域名的解析路径,而不是所有网络请求都失败。

2. 使用默认 DNS 查询三个域名

powershell 复制代码
nslookup www.flextv.cc
nslookup flextv.cc
nslookup www.google.com

nslookup 的基本语法是:

text 复制代码
nslookup 要查询的域名 [指定的DNS服务器]

当末尾没有指定 DNS 服务器时,它会使用当前系统配置的默认 DNS。本次环境中就是 192.168.8.1

三条命令分别承担不同作用:

命令 为什么执行
nslookup www.flextv.cc 查询实际打不开的 www 子域名,确认默认 DNS 是否能返回 CNAME 或 IP。
nslookup flextv.cc 查询根域名,与 www 子域名对比,判断是否只有某一条 DNS 记录或 CNAME 链异常。
nslookup www.google.com 使用相同默认 DNS 查询一个已知可访问域名,验证默认 DNS 是否完全失效。

nslookup 输出中的常见字段含义:

输出 含义
Server / Address 实际接收本次查询的 DNS 服务器名称和地址。
Name 最终解析到的规范名称。
Aliases 查询名称是别名,即 CNAME。
Addresses 返回的 IPv4 或 IPv6 地址。
Non-authoritative answer 答案来自递归 DNS 的查询或缓存,而不是直接由权威 DNS 服务器返回;通常不是错误。
DNS request timed out DNS 服务器在等待时间内没有返回有效答复。它说明查询链路超时,但不能仅凭这一行断定是路由器、上游 DNS 还是过滤策略。

3. 指定公共 DNS 服务器查询

powershell 复制代码
nslookup www.flextv.cc 8.8.8.8
nslookup www.flextv.cc 1.1.1.1

这两条命令中的第二个参数指定"把问题交给哪台 DNS 服务器回答":

  • 8.8.8.8 是 Google Public DNS;
  • 1.1.1.1 是 Cloudflare 公共 DNS。

指定服务器后,nslookup 不再使用系统默认的 192.168.8.1。两台独立公共 DNS 都能返回结果,可以降低"单个公共 DNS 恰好缓存了特殊结果"的可能性。

这些命令只改变本次查询的目标服务器,不会修改 Windows 或 macOS 的永久 DNS 配置。

4. 使用 curl --resolve 临时绕过 DNS

Windows PowerShell 写法:

powershell 复制代码
curl.exe -I -sS --connect-timeout 10 --max-time 20 `
  --resolve www.flextv.cc:443:43.109.161.39 `
  https://www.flextv.cc/

macOS/Linux 写法:

bash 复制代码
curl -I -sS --connect-timeout 10 --max-time 20 --resolve www.flextv.cc:443:43.109.161.39 https://www.flextv.cc/

新增部分的含义如下:

组成部分 含义
PowerShell 行尾的反引号 ````` PowerShell 的续行符,表示下一行仍属于同一条命令。反引号后不要再放空格。也可以把整条命令写在一行。
--resolve 为单次 curl 请求提供临时的"域名:端口:IP"映射,不修改系统 DNS 和 hosts 文件。
www.flextv.cc 保留真实请求域名,用于 HTTP Host、TLS SNI 和证书校验。
443 此临时映射适用的目标端口;443 是 HTTPS 默认端口。
43.109.161.39 本次公共 DNS 返回的一个 CDN 边缘 IP,只是当时的测试样本。
最后的 HTTPS URL curl 仍按这个 URL 发起请求并校验证书,而不是直接访问 https://IP/

如果该命令返回 HTTP 200,说明指定节点上的 DNS 后续链路------TCP、TLS、HTTP------能够工作。它不能证明所有地区的每个 CDN 节点都正常,但足以说明"默认 DNS 失败"是本次客户端故障的重要原因。

5. 查看 Windows 网络接口的 DNS 配置

完整命令:

powershell 复制代码
Get-DnsClientServerAddress -AddressFamily IPv4 |
  Where-Object { $_.ServerAddresses.Count -gt 0 } |
  Format-Table -AutoSize InterfaceAlias,InterfaceIndex,ServerAddresses

这是一条 PowerShell 管道命令,应从左向右理解:

组成部分 含义
Get-DnsClientServerAddress 读取本机各网络接口的 DNS 客户端配置,不会修改配置。
-AddressFamily IPv4 只显示 IPv4 DNS 地址,避免 IPv6 结果干扰本次观察。
` `
Where-Object { ... } 按花括号中的条件过滤对象。
$_ 当前正在经过管道的那一个网络接口对象。
$_.ServerAddresses 读取当前接口的 DNS 服务器地址集合。
.Count 取得该集合中的地址数量。
-gt 0 Greater than 0,即只保留至少配置了一个 DNS 地址的接口。
Format-Table 把最终对象格式化成表格,方便人阅读。
-AutoSize 根据内容自动计算控制台列宽。
InterfaceAlias 网络接口显示名称,例如"以太网"或"Wi-Fi"。
InterfaceIndex Windows 分配给网络接口的数字索引。
ServerAddresses 该接口当前使用的 DNS 服务器列表。

正文中还使用了简化命令:

powershell 复制代码
Get-DnsClientServerAddress -AddressFamily IPv4

它不进行过滤和表格字段选择,会列出所有 IPv4 网络接口,主要用于在修改配置前确认正确的 InterfaceAlias

6. 在 Windows 中设置 DNS

以"以太网"为例:

powershell 复制代码
Set-DnsClientServerAddress `
  -InterfaceAlias "以太网" `
  -ServerAddresses "1.1.1.1","8.8.8.8"

以 Wi-Fi 为例:

powershell 复制代码
Set-DnsClientServerAddress `
  -InterfaceAlias "Wi-Fi" `
  -ServerAddresses "1.1.1.1","8.8.8.8"
组成部分 含义
Set-DnsClientServerAddress 修改指定网络接口的 DNS 客户端配置。通常需要管理员 PowerShell。
-InterfaceAlias 按接口显示名称选择要修改的网络接口。名称必须和查询结果完全一致。
"以太网" / "Wi-Fi" 示例接口名称;带引号可以安全处理名称中的空格或非 ASCII 字符。
-ServerAddresses 指定要写入的 DNS 服务器地址集合。
"1.1.1.1","8.8.8.8" PowerShell 使用逗号构造两个元素的数组。系统通常优先使用第一个,在需要时尝试第二个。

这是会修改系统配置的命令。如果接口名称写错,命令通常会报找不到接口;如果公共 DNS 在当前网络被限制,修改后可能导致其他域名也无法解析,因此必须保留下面的回滚命令。

7. 清理 Windows DNS 缓存

PowerShell 命令:

powershell 复制代码
Clear-DnsClientCache

传统命令:

cmd 复制代码
ipconfig /flushdns

两条命令都用于清除 Windows DNS 客户端的本地缓存,使后续访问重新查询 DNS。

  • Clear-DnsClientCache 是 PowerShell 的 DNS 客户端命令;
  • ipconfig 是 Windows 网络配置工具;
  • /flushdnsipconfig 的"清空 DNS 缓存"参数。

它们不会修改 DNS 服务器地址,也不会清除浏览器自己的全部缓存。通常执行其中一条即可,正文同时列出是为了兼容不同操作习惯。

8. Windows 回滚为自动 DNS

powershell 复制代码
Set-DnsClientServerAddress `
  -InterfaceAlias "以太网" `
  -ResetServerAddresses

Clear-DnsClientCache

-ResetServerAddresses-ServerAddresses 的作用相反:它删除该接口的手动 DNS 设置,让 Windows 重新使用 DHCP 或系统默认方式获得 DNS。第二条命令随后清理旧缓存,避免回滚后继续使用之前的解析结果。

如果实际接口是 Wi-Fi,同样要替换 -InterfaceAlias 的值。

9. 列出 macOS 网络服务

bash 复制代码
networksetup -listallnetworkservices
组成部分 含义
networksetup macOS 自带的网络配置命令行工具。
-listallnetworkservices 列出系统中所有网络服务名称,例如 Wi-FiEthernet

这是一条只读命令。后续设置 DNS 时使用的是"网络服务名称",所以应先执行它,而不是猜测接口名称。

10. 在 macOS 中设置 DNS

bash 复制代码
sudo networksetup -setdnsservers "Wi-Fi" 1.1.1.1 8.8.8.8
组成部分 含义
sudo 以管理员权限运行后面的命令,终端可能要求输入当前管理员密码;输入密码时不会显示字符。
networksetup macOS 网络配置工具。
-setdnsservers 为指定网络服务写入 DNS 服务器列表。
"Wi-Fi" 要修改的网络服务名称。使用网线时应替换为实际名称。
1.1.1.1 8.8.8.8 按顺序设置的两个 DNS 地址。Bash 使用空格分隔参数,不使用 PowerShell 的逗号数组写法。

这条命令会修改 Wi-Fi 服务的 DNS 配置,需要使用后面的 Empty 命令回滚。

11. 刷新 macOS DNS 缓存

bash 复制代码
sudo dscacheutil -flushcache
sudo killall -HUP mDNSResponder

第一条命令:

  • dscacheutil 是 macOS 目录服务缓存工具;
  • -flushcache 请求清空相关缓存,其中包括 DNS 解析缓存;
  • sudo 用管理员权限执行。

第二条命令:

  • killall 按进程名称发送信号;
  • -HUP 表示发送 Hang Up 信号,通知服务重新加载;
  • mDNSResponder 是 macOS 负责 DNS/mDNS 解析的重要系统服务。

这里并不是永久"杀掉"DNS 服务。系统会让 mDNSResponder 继续运行或自动恢复,目的是促使缓存和解析状态刷新。两条命令通常没有成功提示,返回终端提示符不代表没有执行。

12. macOS 回滚为自动 DNS

bash 复制代码
sudo networksetup -setdnsservers "Wi-Fi" Empty
sudo dscacheutil -flushcache
sudo killall -HUP mDNSResponder

Emptynetworksetup 在这里使用的特殊值,表示删除该网络服务的手动 DNS 列表,恢复使用 DHCP 等自动配置。后两条命令负责刷新缓存和解析服务状态。

13. 使用 nslookup 和 dig 做修复后验证

bash 复制代码
nslookup www.flextv.cc
dig www.flextv.cc
  • nslookup www.flextv.cc 使用当前默认 DNS 做简洁查询,适合快速确认是否仍然超时;
  • dig www.flextv.cc 会显示更完整的 DNS 报文信息,包括状态、记录类型、TTL、应答服务器和查询耗时;
  • 两条命令都没有指定 DNS 服务器,所以验证的是修改后的系统默认解析路径

如果想让 dig 直接查询某台 DNS,可以使用:

bash 复制代码
dig @1.1.1.1 www.flextv.cc

其中 @1.1.1.1 表示把查询直接发送给 1.1.1.1。这是补充用法,不会修改系统 DNS。

14. 使用 curl 验证 HTTPS

Windows:

powershell 复制代码
curl.exe -I -sS --connect-timeout 10 --max-time 20 https://www.flextv.cc/

macOS:

bash 复制代码
curl -I -sS --connect-timeout 10 --max-time 20 https://www.flextv.cc/

参数含义与第 1 小节相同。这里没有 --resolve,所以 curl 会使用刚刚修改后的系统 DNS。其目的不是重复测试网页内容,而是验证新的 DNS 路径是否能继续完成 TCP、TLS 和 HTTP。

如果返回 301302,表示服务器要求重定向,但 DNS、TCP 和 TLS 通常已经成功。想自动跟随重定向,可以再加入 -L

15. 使用 GET 请求只输出 HTTP 状态码

Windows:

powershell 复制代码
curl.exe -sS -o NUL -w "%{http_code}`n" https://www.flextv.cc/

macOS:

bash 复制代码
curl -sS -o /dev/null -w '%{http_code}\n' https://www.flextv.cc/
组成部分 含义
不使用 -I curl 发送普通 GET 请求,适合不支持 HEAD 的网站。
-o 指定响应正文的输出位置。
NUL Windows 的空设备,写入其中的数据会被丢弃。
/dev/null macOS/Linux 的空设备,作用与 Windows 的 NUL 相同。
-w Write out,在请求结束后按指定格式输出信息。
%{http_code} curl 的输出变量,代表最终 HTTP 状态码。
PowerShell 中的 ```n`` PowerShell 字符串中的换行符。
Bash 单引号中的 \n 由 curl 的 -w 格式解释为换行。

这两条命令仍会执行完整 GET 请求,只是把响应正文丢弃,最后仅显示类似 200301500 的状态码。

16. 检查 Windows hosts 文件

powershell 复制代码
Get-Content C:\Windows\System32\drivers\etc\hosts |
  Select-String -Pattern "flextv"
组成部分 含义
Get-Content 读取文本文件内容。这里读取 Windows hosts 文件,不修改文件。
hosts 路径 Windows 的静态域名映射文件路径。hosts 的优先级通常高于普通 DNS 查询。
` `
Select-String 在文本中搜索匹配内容,作用类似 grep。
-Pattern "flextv" 只显示包含 flextv 的行;默认按正则表达式匹配。

如果没有任何输出,通常表示 hosts 中没有匹配条目。该命令是只读检查,不会删除其他配置。

17. 检查 macOS hosts 文件

bash 复制代码
grep -i "flextv" /etc/hosts
组成部分 含义
grep 在文本文件中搜索匹配行。
-i 忽略大小写,因此 FlexTVFLEXTVflextv 都能匹配。
"flextv" 要搜索的字符串。
/etc/hosts macOS 的静态域名映射文件。

如果命令没有输出,表示没有找到相关行。它同样不会修改 hosts 文件。

18. 文中提到的 curl -v

异常分支中还提到了:

bash 复制代码
curl -v https://www.flextv.cc/

-v 是 verbose,输出详细连接过程,包括代理使用情况、DNS 后的目标地址、TCP 连接、TLS 握手、请求头和响应头。它非常适合继续区分 TCP、TLS 和 HTTP 故障,但输出可能包含 Cookie、Authorization 等敏感请求头,复制到公开工单或博客前应先脱敏。

十三、这次排查带来的几个经验

1. "另一个网站能打开"只能证明部分网络能力正常

Google 能打开,可以排除完全断网,但无法直接判断目标网站是 DNS、TCP、TLS 还是应用层故障。

2. 错误信息中的阶段名称非常重要

Resolving timed out 已经明确指出 curl 卡在 DNS 阶段。先读懂错误,再决定下一条命令,通常比盲目清缓存或重装浏览器更有效。

3. 使用不同 DNS 交叉验证

默认 DNS 超时,而 1.1.1.18.8.8.8 都成功,证据比只测试一个公共 DNS 更可靠。

4. --resolve 是区分 DNS 与 HTTPS 故障的利器

它可以临时绕过 DNS,同时保留正确的 Host、SNI 和证书校验,非常适合验证 CDN 和 HTTPS 服务。

5. 不要长期固定 CDN IP

CDN IP 会随时间、地区、运营商和负载变化。写入 hosts 可能短期有效,但会破坏动态调度,后续还可能再次故障。

总结

面对"网站打不开"时,可以使用下面这套通用思路:

  1. curl 判断失败发生在 DNS、连接、TLS 还是 HTTP;
  2. nslookupdig 对比默认 DNS 与公共 DNS;
  3. 获得可信 IP 后,用 curl --resolve 绕过 DNS 验证 HTTPS;
  4. 根据证据修改电脑或路由器 DNS;
  5. 清理缓存,并从 DNS、HTTPS、浏览器三个层面重新验收;
  6. 保留回滚方案,不把临时 CDN IP 当成永久解决办法。

本次问题最终可以概括为一句话:

默认 DNS 无法正确解析 www.flextv.cc,公共 DNS 可以;绕过 DNS 后网站返回 HTTP 200,因此应修复或替换当前 DNS 解析链路。


说明: 本文中的 DNS 响应和 CDN IP 来自 2026-08-17 的一次实际诊断。DNS/CDN 结果具有时效性,读者应以自己执行命令时的结果为准。

相关推荐
非凡ghost6 小时前
分区助手:Windows 磁盘管理的“瑞士军刀“,分区调整不再怕丢数据
服务器·windows·电脑·软件需求
淡海水11 小时前
01-07-运行时-GC深度剖析-内存分配回收与结构选择
jvm·windows·unity·gc
DAVIED913 小时前
llama.cpp 本地部署完全指南
windows·llama·wsl·llamacpp
月落汀兰13 小时前
Linux Nginx全套实战通关|静态站点/虚拟主机/HTTPS/PHP/反向代理/七层负载均衡,每行命令逐参数拆解
linux·nginx·https
EXI-小洲13 小时前
MacOS 微服务网关双雄:Nacos + Higress 安装与 Dubbo 配置实战
macos·微服务·nacos·dubbo
云上飞4763696214 小时前
Windows WSL2 + Docker 环境下NVIDIA PhysicsNeMo 安装指南
windows·docker·physicsai·physicsnemo
weixin_66815 小时前
取消Windows 11 默认精简的鼠标右键文件夹菜单
windows·计算机外设
love530love15 小时前
彻底清理 Windows 右键“打开方式“中的重复/失效程序项(PyCharm 多版本残留实战 + 自动化脚本)
运维·人工智能·windows·pycharm·jetbrains·toolbox
EXI-小洲16 小时前
MacOS 上使用 IntelliJ IDEA 指定 Main 函数并打包为 JAR 文件
macos·intellij-idea·jar