## 诊断流程样例:Surge DNS 与代理连通预检
### 输入
- 用户现象:连接公司内网时 Surge 代理不可用
- 当前环境:macOS + Surge
- 探测 URL:`https://www.apple.com` 或公司允许访问的内网站点
### Step 1. 检查 Surge 本地代理是否存在
```bash
pgrep -fl Surge
lsof -nP -iTCP:6152 -sTCP:LISTEN
lsof -nP -iTCP:6153 -sTCP:LISTEN
```
通过信号:Surge 进程存在,`127.0.0.1:6152` 和 `127.0.0.1:6153` 正在监听。
失败信号:进程不存在或端口未监听,此时优先重启 Surge 或恢复本地代理端口配置。
### Step 2. 检查 macOS 系统代理是否接入 Surge
```bash
networksetup -getwebproxy Wi-Fi
networksetup -getsocksfirewallproxy Wi-Fi
```
通过信号:Web Proxy 指向 `127.0.0.1:6152`,SOCKS Proxy 指向 `127.0.0.1:6153`。
失败信号:系统代理为空,说明普通应用没有经过 Surge,需要打开 Surge 的“系统代理”。
### Step 3. 检查 DNS/DoH 状态
| 检查项 | 期望状态 | 失败含义 |
|---|---|---|
| DNS 模式 | 使用系统 DNS 服务器 | 公司内网 DNS 策略可能被绕开 |
| 加密 DNS URL | 为空 | DoH 可能导致内网不支持或解析失败 |
| 应用状态 | 已应用/已落盘 | UI 显示正确但配置未生效 |
### Step 4. 代理连通性探测
```bash
curl -I --proxy http://127.0.0.1:6152 https://www.apple.com --max-time 10
curl -I --socks5 127.0.0.1:6153 https://www.apple.com --max-time 10
```
通过信号:HTTP 和 SOCKS 探测返回 `HTTP/2 200` 或其他 2xx/3xx。
失败信号:超时、连接拒绝、DNS 解析失败或证书错误;根据错误回到端口、系统代理、DNS 或网络证书层定位。
### Step 5. 解释最终状态
- 若 DoH 关闭、系统代理打开、curl 成功,但 Surge 配置是 `FINAL,DIRECT`:结论是“Surge 已接管流量但直连”,适合解决公司内网不支持 DoH 的问题。
- 若需要真正走远程代理节点:还需要切换到包含远程节点和非 DIRECT 规则的 Surge 配置。