域名未备案为何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
关键信息:
-
TCP 连接成功建立(
Established connection),说明网络层可达。 -
服务器返回
302,Location指向 DNSPod 的未备案拦截页面。 -
响应头没有
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 直接访问不受影响 |
| 是否需要处理 | 完成备案后拦截自动解除,无需额外配置 |
后续建议
-
备案完成前:使用服务器公网 IP 直接访问(
http://x.x.x.x),IP 访问不带未备案域名的 Host 头,不触发 DPI 拦截。 -
备案完成后:腾讯云的拦截规则会自动解除该域名,所有运营商路径统一放行。
-
如果使用了腾讯云 CDN / 负载均衡等接入服务,未备案域名在这些服务上也会被统一拦截,与本次边界 DPI 拦截相互独立。
一句话总结
域名未备案时,腾讯云在网络边界通过 DPI 检测 HTTP Host 头并返回 302 重定向;不同运营商来源 IP 段的规则覆盖进度不同,导致同一域名在 WiFi 下能访问、在移动流量下被拦 —— 这是暂时现象,备案通过后自动解决。
评论区
共 0 条