杂乱的知识

Pixel 国内 Wi-Fi 显示无法访问网络的解决方案:自建 generate_204 检测地址

2026-07-31 #Pixel#Android#ADB#Nginx#Wi-Fi

我的 Pixel 手机连接国内 Wi-Fi 后,一直显示:

已连接,但无法访问互联网
Connected, no internet
网络连接受限

这类问题通常不是 Wi-Fi 本身损坏,而是 Pixel 使用的 Android 网络连通性检测地址在当前网络环境下无法正常访问。它默认的地址是国外的,国内无法访问导致。

最终我通过 1Panel 和 Nginx 自建了一个 generate_204 检测地址,再用 ADB 修改 Pixel 的 Captive Portal 配置,成功解决了这个问题。

本文记录完整的成功过程。


一、原理说明

Android 连接 Wi-Fi 后,会请求一个网络检测地址。

如果该地址直接返回:

1
HTTP 204 No Content

系统就会认为当前 Wi-Fi 可以正常访问互联网。

如果检测地址无法访问,或者返回了下面这些状态:

1
2
3
4
5
301
302
307
403
500

Android 就可能认为当前 Wi-Fi:

  • 无法访问互联网;
  • 网络连接受限;
  • 需要进行网页认证;
  • 只能部分联网。

因此,自建检测地址时最重要的要求是:

1
2
3
4
5
HTTP 地址直接返回 204
HTTPS 地址直接返回 204
不能发生重定向
不能返回网页正文
不能出现验证码或访问认证

我最终使用的检测域名是:

1
wifi.mcpq.cc

完整地址:

1
2
http://wifi.mcpq.cc/generate_204
https://wifi.mcpq.cc/generate_204

也可以直接用我部署的这个。


二、准备条件

需要准备:

  • 一台安装了 1Panel 的服务器;
  • 一个已经解析到服务器的域名;
  • Pixel 手机;
  • 一台 Windows 电脑;
  • Android Platform Tools;
  • Pixel 已开启开发者选项和 USB 调试。

我的 ADB 路径是:

1
C:\Apps\KaiFaHuanJin\platform-tools

我的检测域名是:

1
wifi.mcpq.cc

三、配置域名解析

在域名 DNS 中添加一条记录:

1
2
3
类型:A
名称:wifi
内容:服务器公网 IPv4 地址

最终解析结果:

1
wifi.mcpq.cc

如果域名托管在 Cloudflare,需要注意:

1
代理状态:仅 DNS

也就是灰色云朵。

不要让该子域名经过 Cloudflare 橙色云代理,否则 Cloudflare 的强制 HTTPS、WAF、质询或重定向规则可能影响 generate_204 的返回结果。


四、在 1Panel 创建网站

进入 1Panel:

1
2
3
网站
→ 创建网站
→ 静态网站

域名填写:

1
wifi.mcpq.cc

创建完成后,为该网站申请 HTTPS 证书。

需要注意:

1
2
不要开启强制 HTTPS
不要开启 HTTP 自动跳转 HTTPS

因为 Android 的 HTTP 检测地址也必须直接返回 204。


五、修改 Nginx 配置

完整配置如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
server {
listen 80;
listen 443 ssl;
server_name wifi.mcpq.cc;

location = /generate_204 {
add_header Cache-Control "no-store, no-cache, must-revalidate" always;
add_header Pragma "no-cache" always;
add_header Expires "0" always;
return 204;
}

index index.php index.html index.htm default.php default.htm default.html;
access_log /www/sites/wifi.mcpq.cc/log/access.log main;
error_log /www/sites/wifi.mcpq.cc/log/error.log;

location ~ ^/(\.user.ini|\.htaccess|\.git|\.env|\.svn|\.project|LICENSE|README.md) {
return 404;
}

location ^~ /.well-known/acme-challenge {
allow all;
root /usr/share/nginx/html;
}

if ($uri ~ "^/\.well-known/.*\.(php|jsp|py|js|css|lua|ts|go|zip|tar\.gz|rar|7z|sql|bak)$") {
return 403;
}

root /www/sites/wifi.mcpq.cc/index;
error_page 404 /404.html;

http2 on;

ssl_certificate /www/sites/wifi.mcpq.cc/ssl/fullchain.pem;
ssl_certificate_key /www/sites/wifi.mcpq.cc/ssl/privkey.pem;
ssl_protocols TLSv1.3 TLSv1.2;
ssl_ciphers ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:!aNULL:!eNULL:!EXPORT:!DSS:!DES:!RC4:!3DES:!MD5:!PSK:!KRB5:!SRP:!CAMELLIA:!SEED;
ssl_prefer_server_ciphers off;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;

error_page 497 https://$host$request_uri;
proxy_set_header X-Forwarded-Proto https;
}

保存配置后,1Panel 会自动检查并重载 Nginx。


六、验证检测地址

在 Windows CMD 中执行:

1
curl.exe -s -o NUL -w "HTTP=%{http_code} REDIRECT=%{redirect_url}\n" http://wifi.mcpq.cc/generate_204

我的返回结果:

1
HTTP=204 REDIRECT=

再测试 HTTPS:

1
curl.exe -s -o NUL -w "HTTP=%{http_code} REDIRECT=%{redirect_url}\n" https://wifi.mcpq.cc/generate_204

返回:

1
HTTP=204 REDIRECT=

这说明:

  • HTTP 返回 204;
  • HTTPS 返回 204;
  • 两个地址都没有重定向;
  • 检测服务配置正确。

还可以检查响应体大小:

1
curl.exe -sS -o NUL -w "CODE=%{http_code} BODY=%{size_download} REDIRECT=%{redirect_url}\n" http://wifi.mcpq.cc/generate_204

理想结果:

1
CODE=204 BODY=0 REDIRECT=

其中:

1
CODE=204

表示状态码正确。

1
BODY=0

表示没有返回正文。

1
REDIRECT=

表示没有发生重定向。


七、Pixel 开启 USB 调试

进入 Pixel:

1
2
3
设置
→ 关于手机
→ 连续点击版本号 7 次

开启开发者选项后,进入:

1
2
3
4
设置
→ 系统
→ 开发者选项
→ USB 调试

如果手机弹出 USB 调试授权提示,勾选:

1
始终允许使用这台计算机进行调试

然后点击允许。


八、确认 ADB 已识别 Pixel

进入 ADB 工具目录:

1
cd /d C:\Apps\KaiFaHuanJin\platform-tools

执行:

1
adb devices

一开始我的设备列表为空:

1
List of devices attached

重新连接手机、开启文件传输并确认 USB 调试授权后,再次执行:

1
adb devices

成功显示:

1
2
List of devices attached
4C061JEBF07939 device

只要状态是:

1
device

就说明 ADB 已经连接成功。


九、查看 Pixel 当前的检测地址

执行:

1
adb shell settings get global captive_portal_http_url

返回:

1
http://wifi.joyb.cc/generate_204

这是我之前配置的旧地址,你的应该是空的或者其它类似。

查看 HTTPS:

1
adb shell settings get global captive_portal_https_url

返回:

1
https://wifi.joyb.cc/generate_204

查看检测模式:

1
adb shell settings get global captive_portal_mode

返回:

1
null

这说明手机中还保留着以前设置的旧域名,并且没有手动设置检测模式。


十、修改为新的检测地址

执行:

1
adb shell settings put global captive_portal_http_url http://wifi.mcpq.cc/generate_204

执行:

1
adb shell settings put global captive_portal_https_url https://wifi.mcpq.cc/generate_204

再启用正常检测模式:

1
adb shell settings put global captive_portal_mode 1

这里的:

1
1

表示启用 Android 正常的 Captive Portal 网络检测。


十一、确认配置写入成功

执行:

1
2
3
adb shell settings get global captive_portal_http_url
adb shell settings get global captive_portal_https_url
adb shell settings get global captive_portal_mode

最终返回:

1
2
3
http://wifi.mcpq.cc/generate_204
https://wifi.mcpq.cc/generate_204
1

说明配置已经成功写入。


十二、重启 Pixel

执行:

1
adb reboot

手机重启后:

1
2
3
4
关闭移动数据
关闭 Wi-Fi
重新打开 Wi-Fi
重新连接当前网络

重新连接后,Pixel 不再显示:

1
已连接但无法访问互联网

至此问题解决。


十四、本次完整命令

检查检测地址

1
2
3
curl.exe -s -o NUL -w "HTTP=%{http_code} REDIRECT=%{redirect_url}\n" http://wifi.mcpq.cc/generate_204

curl.exe -s -o NUL -w "HTTP=%{http_code} REDIRECT=%{redirect_url}\n" https://wifi.mcpq.cc/generate_204

连接 Pixel

1
2
cd /d C:\Apps\KaiFaHuanJin\platform-tools
adb devices

查看当前配置

1
2
3
adb shell settings get global captive_portal_http_url
adb shell settings get global captive_portal_https_url
adb shell settings get global captive_portal_mode

写入自建地址

1
2
3
adb shell settings put global captive_portal_http_url http://wifi.mcpq.cc/generate_204
adb shell settings put global captive_portal_https_url https://wifi.mcpq.cc/generate_204
adb shell settings put global captive_portal_mode 1

验证配置

1
2
3
adb shell settings get global captive_portal_http_url
adb shell settings get global captive_portal_https_url
adb shell settings get global captive_portal_mode

重启手机

1
adb reboot

captive_portal_mode 返回 null

执行:

1
adb shell settings get global captive_portal_mode

返回:

1
null

表示没有人为写入该配置,系统使用默认模式。

为了明确启用,我最终执行:

1
adb shell settings put global captive_portal_mode 1

十六、恢复系统默认设置

以后如果想恢复 Android 默认设置,连接 ADB 后执行:

1
2
3
4
adb shell settings delete global captive_portal_http_url
adb shell settings delete global captive_portal_https_url
adb shell settings delete global captive_portal_mode
adb reboot

重启后,系统会重新使用默认的网络检测配置。


最终结果

最终配置:

1
2
3
4
5
6
7
检测域名:wifi.mcpq.cc
HTTP 地址:http://wifi.mcpq.cc/generate_204
HTTPS 地址:https://wifi.mcpq.cc/generate_204
HTTP 状态码:204
HTTPS 状态码:204
重定向:无
Pixel 检测模式:1

Pixel 重启并重新连接 Wi-Fi 后,“已连接但无法访问互联网”的提示成功消失。

这次解决问题的关键不是单纯修改 ADB 地址,而是先确保自建的检测服务满足:

1
2
3
4
HTTP 直接返回 204
HTTPS 直接返回 204
响应正文为空
没有任何重定向

只有服务端和 Pixel 端都配置正确,Android 的联网检测才能正常通过。

评论
分享

评论