通过API接口切换节点
调用/proxies端点切换节点
Clash VPN支持通过命令行切换节点,核心方法是调用Clash外部控制器API的/proxies端点。执行curl -X PUT http://127.0.0.1:9090/proxies/策略组名 -d '{"name":"目标节点"}'即可切换指定策略组的节点。该命令向Clash的RESTful API发送PUT请求,将策略组中当前选中的节点切换为目标节点。若配置了secret密钥,需在请求头中添加Authorization: Bearer your-password。切换成功后API返回204状态码,表示操作成功完成,切换操作立即生效,无需重启Clash或重新加载配置。该方式在无图形界面的服务器环境中尤为实用,用户可通过SSH连接到服务器后快速切换节点,而无需登录任何管理面板。
API切换节点的完整命令格式
切换节点的完整命令为curl -X PUT http://127.0.0.1:9090/proxies/{selector} -H "Content-Type: application/json" -d '{"name":"{node}"}'。其中{selector}为策略组名称(如Proxy或🚀 节点选择),{node}为目标节点名称(必须与config.yaml中proxies字段的name完全一致)。若策略组类型为select,切换后该策略组的选中节点立即变更,Clash的代理通道随即使用新节点转发流量。若策略组类型为url-test或fallback,手动切换无效,因为这两类策略组的节点选择由Clash内核的自动逻辑控制,不受API手动干预。在切换前建议先通过curl -s http://127.0.0.1:9090/proxies | jq查看当前策略组的类型和可用节点列表,确认目标策略组支持手动切换后再执行操作。
获取可用节点列表再执行切换
在切换前,可通过GET /proxies接口获取当前所有策略组和可用节点列表,避免因节点名称拼写错误导致切换失败。执行curl http://127.0.0.1:9090/proxies返回所有策略组的详细信息,包括每个select组的当前选中节点和可用节点列表。返回的JSON数据中,proxies对象下的每个策略组包含name(策略组名称)、type(策略组类型)、now(当前选中节点)和all(所有可用节点列表)。获取节点列表后,确认目标节点名称的准确拼写,特别注意大小写和特殊字符(如Emoji、括号等),再执行切换命令。该步骤可避免因节点名称拼写错误导致的切换失败,在节点名称包含特殊字符时尤为必要。
使用第三方命令行工具切换节点
activate-clash-core工具的交互式切换
activate-clash-core是一个零依赖的Linux终端代理工具,专门为无图形界面的服务器环境设计,提供了交互式节点切换功能。安装后执行select-node命令进入交互式选择界面,工具自动调用Clash API获取当前策略组和节点列表,并自动对各节点执行延迟测试,在终端中显示每个节点的名称和延迟数值。用户通过键盘上下键选择目标节点,按回车确认后工具自动调用PUT /proxies接口完成切换。该工具适合习惯命令行操作且需要直观查看节点延迟的用户,无需记忆API命令格式,切换体验接近图形界面的下拉菜单。
clash-kit工具的交互式节点管理
clash-kit是一个Node.js编写的命令行工具,提供了ck use命令进入交互式节点切换菜单。执行ck use后,工具自动连接Clash API获取当前配置中的策略组和节点信息,对各节点执行测速并显示延迟数值,用户通过键盘方向键选择目标节点后自动完成切换。clash-kit还支持ck list查看所有节点列表、ck current查看当前选中的节点、ck speed测试所有节点延迟等功能,提供了较完整的命令行节点管理体验。该工具适合Node.js环境已部署的服务器,安装和配置相对简便。
clash-cli服务管理工具的节点切换
clash-cli是一个Python编写的命令行工具,主要用于启动、停止和管理Clash服务,也支持通过API切换节点。执行clash-cli set-proxy 策略组名 节点名切换指定策略组的节点,例如clash-cli set-proxy Proxy 香港节点。clash-cli还支持clash-cli list-proxies查看节点列表、clash-cli current-proxy查看当前节点等命令,功能覆盖了日常节点管理的基本需求。该工具适合已在Python环境中部署Clash的用户。
切换节点的脚本自动化
编写Shell脚本实现一键切换
将API切换命令封装为Shell脚本,可简化日常操作并支持自动化切换。示例脚本内容为:
#!/bin/bash
if [ -z "$1" ]; then
echo "用法: ./switch_node.sh 节点名称"
exit 1
fi
NODE=$1
curl -X PUT http://127.0.0.1:9090/proxies/Proxy -H "Content-Type: application/json" -d "{\"name\":\"$NODE\"}"
echo "已切换至: $NODE"
保存为switch_node.sh并赋予执行权限(chmod +x switch_node.sh),执行./switch_node.sh 香港节点即可切换。脚本支持通过命令行参数传递节点名称,适合频繁切换节点的场景。若配置了secret密钥,可在脚本中添加-H "Authorization: Bearer your-password"参数。
节点健康检查与自动故障转移
编写自动化脚本定期检测当前节点的连通性,在节点不可用时自动切换至备用节点,实现代理服务的自动故障转移。脚本流程为:通过当前代理节点访问测试URL(如http://www.gstatic.com/generate_204),检查HTTP响应码是否为204。若连续失败超过阈值(如3次),则调用GET /proxies获取策略组的可用节点列表,从列表中选择一个备用节点(排除当前不可用节点),调用PUT /proxies接口切换至备用节点。该脚本可通过cron定时任务每分钟执行一次,在节点故障后1分钟内自动恢复代理服务,大幅减少人工干预需求。
cron定时任务中的定时节点轮换
通过cron定时任务定期执行节点切换脚本,实现节点的定时轮换,分散节点负载。在crontab中添加0 6 * * * /usr/local/bin/switch_node.sh 日本节点每天早上6点切换至日本节点,0 18 * * * /usr/local/bin/switch_node.sh 美国节点每天晚上6点切换至美国节点。定时轮换可避免单一节点长期高负载运行,在不同时段使用地理位置最优的节点(如办公时间使用延迟低的亚洲节点,非工作时间使用带宽更大的欧美节点)。在crontab -e中添加定时任务,确保脚本路径使用绝对路径以避免环境变量问题。
切换节点时的注意事项
节点名称必须完全匹配
API切换节点时,name字段的值必须与config.yaml中proxies字段定义的name完全一致,包括大小写和标点符号。若节点名称为🇭🇰 香港节点01,命令中必须使用"🇭🇰 香港节点01",Emoji和空格均不可省略或替换。名称不匹配时API返回400错误并提示proxy [名称] not found。使用GET /proxies获取节点列表确认准确名称后复制粘贴执行切换,可完全避免名称拼写错误。在脚本中处理包含特殊字符的节点名称时,需正确转义JSON字符串中的引号。
仅select类型策略组支持手动切换
select类型策略组支持通过API手动切换节点,用户可自由选择组内任意节点。url-test类型策略组由Clash内核按延迟测试结果自动选择节点,fallback类型策略组按预设优先级自动切换,两者均不支持手动切换。若尝试对url-test或fallback类型策略组调用PUT /proxies接口,Clash返回400错误。在切换前通过GET /proxies查看策略组的type字段,确认其为select后再执行切换操作。
切换后需验证节点是否生效
切换节点后,可通过访问IP检测网站或查看Clash连接面板验证节点是否已生效。执行curl -x http://127.0.0.1:7890 http://httpbin.org/ip查看当前出口IP是否与目标节点所在地一致。在Clash Dashboard的「代理」页面中查看策略组的当前选中节点是否已更新为目标节点。若切换后出口IP未变化,检查节点名称是否拼写正确、策略组类型是否为select,以及API请求是否携带了正确的认证头(若配置了secret)。
常见问题FAQ
Clash能否通过命令行切换节点?
能。通过调用Clash外部控制器API的/proxies端点实现,执行curl -X PUT http://127.0.0.1:9090/proxies/策略组名 -d '{"name":"目标节点"}'即可切换节点。该方式适合无图形界面的服务器环境。
命令行切换节点需要什么前提条件?
需在config.yaml中启用external-controller(默认127.0.0.1:9090),且目标策略组类型必须为select。若配置了secret密钥,API请求需携带认证头。
url-test类型的策略组能通过命令行切换节点吗?
不能。url-test类型策略组由Clash内核按延迟测试自动选择节点,不支持手动切换。若需切换,可修改配置文件将策略组类型改为select。
命令行切换节点后如何验证是否成功?
执行curl -x http://127.0.0.1:7890 http://httpbin.org/ip查看当前出口IP是否与目标节点所在地一致。也可调用GET /proxies接口查看策略组的now字段确认当前选中节点。
