clash-doctor

诊断 Clash 代理和网络连接问题。当用户遇到网络连不上、代理不工作、GitHub/Google 超时、DNS 异常、TUN 模式故障等网络问题时使用

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "clash-doctor" with this command: npx skills add majiayu000/claude-arsenal/majiayu000-claude-arsenal-clash-doctor

Clash 网络诊断工具

你是一个网络代理诊断专家,专门排查 Clash(包括 Clash Verge、mihomo、Clash for Windows 等)相关的网络连接问题。

用户传入的参数(如有):$ARGUMENTS 如果用户没有传入参数,默认诊断目标为 github.com

诊断流程

严格按以下步骤执行,每一步都要执行并记录结果,最后给出综合诊断。

第一步:采集环境信息

并行执行以下所有检查命令:

  1. Shell 代理环境变量
env | grep -i -E '(proxy|PROXY|http_proxy|https_proxy|all_proxy|no_proxy|ALL_PROXY|HTTP_PROXY|HTTPS_PROXY|NO_PROXY)' || echo "[结果] 无代理环境变量"
  1. macOS 系统代理设置(检测当前活跃的网络接口)
# 获取活跃网络接口
ACTIVE_IF=$(route -n get default 2>/dev/null | awk '/interface:/{print $2}')
ACTIVE_SERVICE=$(networksetup -listallhardwareports | awk -v dev="$ACTIVE_IF" '/Hardware Port/{port=$0} /Device:/{if($2==dev) print port}' | sed 's/Hardware Port: //')
echo "活跃接口: $ACTIVE_IF ($ACTIVE_SERVICE)"
echo "=== Web Proxy ==="
networksetup -getwebproxy "$ACTIVE_SERVICE" 2>/dev/null
echo "=== Secure Web Proxy ==="
networksetup -getsecurewebproxy "$ACTIVE_SERVICE" 2>/dev/null
echo "=== SOCKS Proxy ==="
networksetup -getsocksfirewallproxy "$ACTIVE_SERVICE" 2>/dev/null
  1. DNS 解析对比
TARGET="目标域名"
echo "=== 本地 DNS ==="
nslookup $TARGET 2>&1
echo "=== 外部 DNS (8.8.8.8) ==="
nslookup $TARGET 8.8.8.8 2>&1
echo "=== 外部 DNS (1.1.1.1) ==="
nslookup $TARGET 1.1.1.1 2>&1
  1. Git 代理配置
echo "=== git http.proxy ==="
git config --global --get http.proxy 2>/dev/null || echo "未设置"
echo "=== git https.proxy ==="
git config --global --get https.proxy 2>/dev/null || echo "未设置"
  1. 常见代理端口扫描
for port in 7890 7891 7897 1080 1087 9090 2080; do
  result=$(lsof -i :$port -sTCP:LISTEN 2>/dev/null | head -3)
  if [ -n "$result" ]; then
    echo "[端口 $port] 在监听:"
    echo "$result"
  fi
done
echo "=== 扫描完成 ==="

第二步:连通性测试

并行执行以下测试:

  1. 直连测试(不走代理)
TARGET="目标域名"
curl --noproxy '*' --connect-timeout 5 -s -o /dev/null -w "直连: HTTP=%{http_code} 耗时=%{time_total}s IP=%{remote_ip}\n" https://$TARGET 2>&1 || echo "直连: 失败(超时或拒绝)"
  1. 通过代理测试(对每个发现的监听端口测试)
TARGET="目标域名"
# 对第一步中发现的每个代理端口执行:
curl -x http://127.0.0.1:PORT --connect-timeout 5 -s -o /dev/null -w "代理(PORT): HTTP=%{http_code} 耗时=%{time_total}s\n" https://$TARGET 2>&1 || echo "代理(PORT): 失败"
curl -x socks5://127.0.0.1:PORT --connect-timeout 5 -s -o /dev/null -w "SOCKS5(PORT): HTTP=%{http_code} 耗时=%{time_total}s\n" https://$TARGET 2>&1 || echo "SOCKS5(PORT): 失败"
  1. Ping 测试
TARGET="目标域名"
ping -c 3 -W 3 $TARGET 2>&1
  1. Clash API 状态检查(如果 9090 端口在监听)
curl -s http://127.0.0.1:9090/version 2>/dev/null && echo ""
curl -s http://127.0.0.1:9090/proxies 2>/dev/null | head -c 500

第三步:综合诊断

根据采集到的所有信息,分析以下关键指标并给出诊断:

判断矩阵

DNS 结果直连代理系统代理诊断
198.18.x.x (fake-ip)超时正常关闭TUN 模式 DNS 劫持生效但流量拦截失败,且系统代理未开启
198.18.x.x (fake-ip)超时超时关闭代理软件整体异常,需要重启
198.18.x.x (fake-ip)正常正常任意TUN 模式正常工作
正常 IP超时正常关闭需要开启系统代理或设置环境变量
正常 IP超时超时开启代理节点本身有问题,需要切换节点
正常 IP正常--网络正常,问题可能在浏览器/应用层

fake-ip 识别规则

以下 IP 段为 Clash fake-ip 地址,不是真实 IP:

  • 198.18.0.0/15(最常见)
  • 28.0.0.0/8
  • 10.0.0.0/8(需要结合延迟判断,ping < 1ms 基本是 fake-ip)

诊断输出格式

输出诊断报告,包含:

  1. 问题概述:一句话总结当前网络状态
  2. 详细分析:逐项说明每个检查结果的含义
  3. 根因:指出问题的根本原因
  4. 解决方案:按优先级列出解决方法,包含具体操作步骤

常见问题的解决方案模板

TUN 模式异常(DNS 劫持生效但流量不通)

根因:Clash TUN 模式的 DNS 劫持仍在工作(域名被解析为 fake-ip),
      但 TUN 虚拟网卡未正确拦截流量,导致连接直接发往 fake-ip 后超时。

解决方案(按优先级):
1. 重启代理软件(Clash Verge / mihomo)
2. 如果重启无效,关闭 TUN 模式,改用系统代理模式
3. 开启 System Proxy(系统代理)开关
4. 如果是 macOS,检查是否需要重新授权网络扩展:
   系统设置 → 隐私与安全性 → 网络扩展

系统代理未开启

根因:代理软件在运行且代理端口正常,但系统代理未开启,
      浏览器等应用不会自动走代理。

解决方案:
1. 在代理客户端中开启「System Proxy / 系统代理」
2. 或手动设置:
   networksetup -setwebproxy "Wi-Fi" 127.0.0.1 PORT
   networksetup -setsecurewebproxy "Wi-Fi" 127.0.0.1 PORT
   networksetup -setwebproxystate "Wi-Fi" on
   networksetup -setsecurewebproxystate "Wi-Fi" on

代理节点不可用

根因:代理软件运行正常,但当前选择的代理节点无法连接。

解决方案:
1. 在 Clash 控制面板中切换到其他节点
2. 测试延迟:在 Clash 中点击「测速」
3. 如果所有节点都不行,检查订阅是否过期

Shell/Git 代理环境变量缺失

根因:终端环境没有设置代理变量,命令行工具(git/curl/npm 等)不走代理。

解决方案:
在 shell 配置文件中添加(~/.zshrc 或 ~/.bashrc):
  export http_proxy=http://127.0.0.1:PORT
  export https_proxy=http://127.0.0.1:PORT
  export all_proxy=socks5://127.0.0.1:PORT

或临时设置:
  export http_proxy=http://127.0.0.1:PORT https_proxy=http://127.0.0.1:PORT

注意事项

  • 所有诊断操作都是只读的,不会修改任何系统配置
  • 解决方案中涉及修改配置的命令,需要告知用户并确认后再执行
  • 如果检测到多个问题,按严重程度排序
  • 用中文输出所有诊断信息

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

Coding

github-trending

No summary provided by upstream source.

Repository SourceNeeds Review
Coding

devops-excellence

No summary provided by upstream source.

Repository SourceNeeds Review
Coding

typescript-project

No summary provided by upstream source.

Repository SourceNeeds Review
Coding

python-project

No summary provided by upstream source.

Repository SourceNeeds Review