⌨ 技术

域名未备案为何WiFi能访问而移动流量被拦

问题背景

我的博客项目部署在腾讯云服务器上,域名 minthats.cn 已解析到服务器,但备案尚未通过。在访问测试时发现一个诡异的现象:

  • 移动宽带(WiFi):通过域名 minthats.cn 可以正常访问网站

  • 联通移动流量:通过同一域名访问,被跳转到腾讯云的未备案拦截页面

同一个域名、同一个服务器 IP,两条网络路径结果截然不同。这篇文章记录完整的排查过程和最终根因。

现象描述

拦截页面的 URL 为:

https://dnspod.qcloud.com/static/webblock.html?d=minthats.cn

dnspod.qcloud.com 是腾讯云旗下 DNSPod 的域名,说明拦截来自腾讯云的未备案拦截系统,而非运营商。

排查过程

注:文中 x.x.x.x 代表我的服务器公网 IP,已做脱敏处理。

第一步:确认 DNS 解析是否一致

首先怀疑是 DNS 解析差异 —— 不同运营商的 LocalDNS 可能返回不同的 IP。在两种网络下分别执行 nslookup

移动宽带下:

C:\Users\min>nslookup minthats.cn

服务器:  UnKnown

Address:  211.138.24.66

DNS request timed out.

    timeout was 2 seconds.

非权威应答:

名称:    minthats.cn

Address:  x.x.x.x

联通流量下:

C:\Users\min>nslookup minthats.cn

服务器:  bogon

Address:  10.98.58.120

非权威应答:

名称:    minthats.cn

Address:  x.x.x.x

两边解析结果完全一致,都是 x.x.x.x。DNS 层面没有差异,排除了 "DNS 缓存" 或 "智能解析" 的可能。

同时 ping 在两种网络下均 100% 超时,这是腾讯云服务器默认禁用 ICMP 的常规操作,不影响 HTTP 服务。

第二步:用 IP 直接访问(排除服务器本身问题)

在联通流量下,直接通过 IP 访问服务器:

http://x.x.x.x

可以正常打开网站。 这说明服务器的 80 端口、Web 服务本身都正常,问题只出现在 "带域名访问" 时。

第三步:curl 带 Host 头验证(关键证据)

在联通流量下,用 curl 手动指定 Host 头访问服务器 IP:

curl -v -H "Host: minthats.cn" http://x.x.x.x

输出:

\*   Trying x.x.x.x:80...

\* Established connection to x.x.x.x (x.x.x.x port 80) from 10.98.58.45 port 49754

\* using HTTP/1.x

\> GET / HTTP/1.1

\> Host: minthats.cn

\> User-Agent: curl/8.21.0

\> Accept: \*/\*

\>

\* Request completely sent off

< HTTP/1.1 302 OK

< Connection: Keep-Alive

< Location: https://dnspod.qcloud.com/static/webblock.html?d=minthats.cn

\* no chunk, no close, no size. Assume close to signal end

<

\* shutting down connection #0

关键信息:

  1. TCP 连接成功建立(Established connection),说明网络层可达。

  2. 服务器返回 302Location 指向 DNSPod 的未备案拦截页面。

  3. 响应头没有 Content-Length,也没有 Transfer-Encoding,靠直接断开连接标记结束 —— 这不是标准 Web 服务器(Nginx/Apache)的行为,而是网络中间设备注入的简易响应。

第四步:排除浏览器缓存

在移动宽带下用浏览器无痕模式访问 minthats.cn,仍然可以正常进入。排除了 "浏览器缓存了旧页面" 的可能。

根因分析

综合以上证据,可以确定:

拦截发生在 HTTP 应用层,而非 DNS 层

DNS 解析两边一致,目标 IP 相同,但带 Host: minthats.cn 的 HTTP 请求得到了 302 重定向。说明腾讯云在网络边界对 HTTP 流量做了 DPI(深度包检测)

  • 读取 HTTP 请求头中的 Host 字段(HTTPS 则读取 TLS 握手中明文的 SNI 扩展)

  • 当检测到该域名未备案时,边界设备不将请求转发给用户的服务器,而是直接伪造一个 302 响应,重定向到未备案提示页

  • 用户的服务器(Nginx)根本没有收到这个请求

为什么移动宽带能访问、联通流量被拦

同一个目标 IP、同一个 Host 头,两条路径结果不同,说明腾讯云的未备案拦截规则对不同运营商来源 IP 段的覆盖进度不同

  • 联通流量的来源 IP 段已经命中拦截规则,请求被边界设备劫持并返回 302

  • 移动宽带的来源 IP 段尚未被该规则覆盖,请求透传到了用户的真实服务器

这不是缓存,也不是运营商差异,而是腾讯云未备案拦截系统按运营商 IP 段逐步推送规则导致的暂时现象。随着规则全量覆盖,移动宽带下最终也会被拦截。

为什么说 302 是中间设备伪造的

正常的 Nginx 返回 302 时,响应头一定包含 Content-Length(即使 body 为空也会是 Content-Length: 0)或 Transfer-Encoding: chunked。而本次响应两者皆无,直接靠关闭连接结束 —— 这是 DPI / 防火墙类设备注入响应的典型特征,实现简单且不遵循完整的 HTTP 规范。

结论

问题 答案
拦截来自哪里 腾讯云边界设备的未备案域名拦截系统(DNSPod)
拦截在哪一层 HTTP 应用层,基于 Host 头 / SNI 的 DPI 检测
为何 WiFi 能进 移动宽带来源 IP 段尚未被拦截规则覆盖
为何流量被拦 联通来源 IP 段已命中拦截规则,返回 302 重定向
服务器是否正常 正常,IP 直接访问不受影响
是否需要处理 完成备案后拦截自动解除,无需额外配置

后续建议

  1. 备案完成前:使用服务器公网 IP 直接访问(http://x.x.x.x),IP 访问不带未备案域名的 Host 头,不触发 DPI 拦截。

  2. 备案完成后:腾讯云的拦截规则会自动解除该域名,所有运营商路径统一放行。

  3. 如果使用了腾讯云 CDN / 负载均衡等接入服务,未备案域名在这些服务上也会被统一拦截,与本次边界 DPI 拦截相互独立。

一句话总结

域名未备案时,腾讯云在网络边界通过 DPI 检测 HTTP Host 头并返回 302 重定向;不同运营商来源 IP 段的规则覆盖进度不同,导致同一域名在 WiFi 下能访问、在移动流量下被拦 —— 这是暂时现象,备案通过后自动解决。

评论区

共 0 条
🍃 还没有评论,沙发虚位以待~
🚇

穿越虫洞?

虫洞会把你随机传送到另一位陌生博主的网站——
可能是技术大佬,也可能是诗歌爱好者,开盲盒的时间到了。

森林精灵