Clash Verge 外部控制
##必要信息 开始前需要获取用户的clash verge外部监听地址和密钥,并确认clash verge外部监听已打开。
核心原理
Clash Verge 内置 mihomo (Clash.Meta) 内核,通过 RESTful API 实现外部控制,支持切换节点、管理规则、监控连接等操作。
配置文件设置
在 Clash 配置文件中添加:
# 外部控制 (API) 配置
external-controller: 127.0.0.1:9090
# API 访问密钥(强烈建议设置)
secret: "your-secret-key-here"
# CORS 跨域配置
external-controller-cors:
allow-origins:
- '*'
allow-private-network: true
配置说明:
| 配置项 | 说明 |
|---|---|
external-controller | API 监听地址,127.0.0.1 仅本地,0.0.0.0 允许外部访问 |
secret | API 密钥,开启后请求需携带 Authorization: Bearer ${secret} |
常用 API 接口
基础调用格式:
# 无密钥
curl http://127.0.0.1:9090/{endpoint}
# 有密钥
curl -H "Authorization: Bearer ${secret}" http://127.0.0.1:9090/{endpoint}
代理操作
| 操作 | 方法 | 端点 | 说明 |
|---|---|---|---|
| 获取代理列表 | GET | /proxies | 查看所有代理和策略组 |
| 切换节点 | PUT | /proxies/{name} | {"name": "香港节点"} |
| 测试延迟 | GET | /proxies/{name}/delay?url=https://www.google.com&timeout=5000 | 返回延迟(ms) |
策略组操作
| 操作 | 方法 | 端点 | 说明 |
|---|---|---|---|
| 获取策略组 | GET | /group | 列出所有策略组 |
| 获取指定组 | GET | /group/{name} | 查看特定策略组详情 |
| 清除自动选择 | DELETE | /group/{name} | 清除 auto 组 fixed 选择 |
配置操作
| 操作 | 方法 | 端点 | 说明 |
|---|---|---|---|
| 获取配置 | GET | /configs | 查看当前配置 |
| 更新配置 | PATCH | /configs | {"mixed-port": 7890} |
| 重启内核 | POST | /restart | 重载配置 |
| 更新 GEO | POST | /configs/geo | {"path": "", "payload": ""} |
监控操作
| 操作 | 方法 | 端点 | 说明 |
|---|---|---|---|
| 实时日志 | WS | /logs?level=info | WebSocket 获取日志 |
| 流量信息 | WS | /traffic | 实时流量(kbps) |
| 连接列表 | GET | /connections | 查看所有连接 |
| 关闭连接 | DELETE | /connections | 关闭所有连接 |
| DNS 查询 | GET | /dns/query?name=example.com&type=A | 查询 DNS 记录 |
完整 API 参考
详细 API 文档(包含所有端点、参数、返回值)见: references/api_reference.md
代码示例
Python
import requests
API = "http://127.0.0.1:9090"
SECRET = "your-secret-key"
headers = {"Authorization": f"Bearer {SECRET}"}
# 获取代理列表
proxies = requests.get(f"{API}/proxies", headers=headers).json()
# 切换节点
requests.put(
f"{API}/proxies/Proxy",
headers=headers,
json={"name": "香港节点-01"}
)
# 测试延迟
result = requests.get(
f"{API}/proxies/香港节点/delay",
params={"url": "https://www.google.com", "timeout": 5000}
).json()
print(f"延迟: {result.get('delay')}ms")
Node.js
const axios = require('axios');
const API = 'http://127.0.0.1:9090';
const SECRET = 'your-secret-key';
const headers = { Authorization: `Bearer ${SECRET}` };
// 获取代理列表
const { data } = await axios.get(`${API}/proxies`, { headers });
// 切换节点
await axios.put(
`${API}/proxies/Proxy`,
{ name: '香港节点-01' },
{ headers }
);
安全建议
- 使用密钥:生产环境务必设置
secret - 限制监听:仅本地用
127.0.0.1,需要远程访问再改0.0.0.0 - 配合防火墙:开启外部访问时限制 IP
- 使用 HTTPS:敏感网络配置 TLS
官方文档
- Clash Verge Rev: https://github.com/clash-verge-rev/clash-verge-rev
- mihomo API 文档: https://wiki.metacubex.one/api/