← ClaudeAtlas

china-network-diagnosticslisted

Diagnose network access on macOS in mainland China: why a VPN client can be "running but not connected", the difference between system-proxy mode and TUN mode, why command-line tests disagree with the browser, how to verify the exit IP through the proxy port, and how to fetch GitHub / YouTube resources when direct connections fail.
wlkerwong-boop/china-network-diagnostics · ★ 0 · AI & Automation · score 76
Install: claude install-skill wlkerwong-boop/china-network-diagnostics
# 国内网络连通性诊断(macOS) > 适用:在中国大陆的 macOS 上判断"外网到底通不通",以及在直连失败时拿到 GitHub / YouTube 的资源。 > 本文只讲**诊断方法与公开通道**,不含任何节点、订阅、服务商配置。 ## 一、最容易误判的一件事:程序开着 ≠ 已连接 客户端有两种工作模式,**先分清模式,再下结论**: | 模式 | 接管范围 | 命令行(curl/git)会走它吗 | |---|---|---| | **TUN / 全局接管** | 所有流量,进程级 | 会 | | **系统代理模式** | 只改 macOS 系统代理设置 | **不会**(除非显式指定 `-x` 或 `http_proxy`) | 由此产生三个必然现象,全属正常: 1. 浏览器能打开外网,`curl https://www.google.com` 却超时; 2. `curl` 直连查出口 IP 显示国内 IP,但浏览器出口其实是国外的; 3. 系统代理模式下,桌面客户端显示"已连接",而命令行测试显示"不通"——**两者并存不是故障**。 **铁律:禁止用命令行直连的结果断言"VPN 没连上"。** 必须走代理端口重测一遍再下结论。(曾因凭直连结果下结论而两次误报,向用户道歉纠正——这是本技能存在的原因。) ## 二、诊断序列(严格按顺序) ```bash # 1. 系统代理是否启用、端口是多少 scutil --proxy | grep -E "HTTPEnable|HTTPPort|HTTPProxy|HTTPSEnable|HTTPSPort|SOCKSEnable|SOCKSPort" # 2. 直连测试(预期可能不通,仅作对照) curl -s -o /dev/null -w "直连: %{http_code} (%{time_total}s)\n" --max-time 6 https://www.google.com # 3. 走代理端口实测(模拟浏览器视角)——这一步才是结论依据 curl -s -o /dev/null -w "走代理: %{http_code} (%{time_total}s)\n" --max-time 10 -x http://127.0.0.1:<HTTPPort> https://www.google.com # 4. 走代理看出口 IP(显示国外 = 分流生效) curl -s --max-time 10 -x http://127.0.0.1:<HTTPPort> https://myip.ipip.net # 5. 进程活着不代表隧道建立:看有没有 ESTABLISHED 连接 lsof -nP -i -a -p <pid> ``` 判定口径: - 步骤 3 返回 `200` = 真的通;返回 `000`/超时 = 真的不通(此时才可以说"没连上")。 - 直连不通 + 走代理通 = 系统代理模式在正常工作,浏览器可用。 - 走代理也 000 → 再看步骤 1 是否有端口、步骤 5 是否有 ESTABLISHED,才是"隧道没建立"。 一键探针:`scripts/vpn-probe.sh`(自动读系统代理端口,也支持手动传端口:`bash vpn-probe.sh 7890`)。 ## 三、GitHub 下载(直连失败时) 症状:`git clone` 卡死 / 超时,而 `api.github.com` 偶尔还能通(不同域名不同待遇)。**不要反复重试