Clash VPN的RESTful API通过配置文件中的external-controller字段启用,默认监听地址为127.0.0.1:9090。该API提供多个管理端点,包括获取配置(GET /config)、获取节点列表(GET /proxies)、切换节点(PUT /proxies/:name)、查看连接(GET /connections)和关闭连接(DELETE /connections)等功能。通过访问Dashboard面板(如http://yacd.haishan.me)并填入API地址即可进行可视化管理。若需局域网访问,将external-controller改为0.0.0.0:9090并确保防火墙放行端口。跨域问题时可通过SSH端口转发(ssh -L 9090:服务器IP:9090)将远程API映射到本地访问。secret字段用于设置API访问密钥,保护远程管理安全。

RESTful API的配置与基础信息
配置文件中的external-controller字段
Clash VPN的RESTful API通过配置文件中的external-controller字段启用,该字段定义了API服务的监听地址和端口号。在config.yaml文件中添加external-controller: 127.0.0.1:9090即可启用API服务,其中127.0.0.1为监听地址,9090为端口号。配置完成后重启Clash内核使配置生效。若需要从其他设备访问API,可将监听地址改为0.0.0.0:9090,让API监听所有网络接口。
默认地址与端口值
Clash RESTful API的默认监听地址为127.0.0.1,端口号为9090。该端口与HTTP代理端口(7890)、SOCKS5代理端口(7891)是独立的,专门用于接收API管理请求。在配置文件中确认external-controller字段的值即可查看当前API地址和端口。部分客户端可能使用非标准端口(如ClashRS使用6170端口),需以实际配置文件为准。
secret认证密钥的配置
为保护API访问安全,可在配置文件中通过secret字段设置认证密钥,防止未授权访问。配置示例为secret: "your-password",连接API时需要提供该密钥才能执行管理操作。若secret留空或不配置,API无需认证即可访问,适合本地使用场景。在公开网络环境中建议设置secret,避免他人通过API修改代理配置。
RESTful API的调用方法
通过浏览器访问Dashboard面板
RESTful API最常用的方式是配合Web管理面板(Dashboard)使用,通过浏览器可视化管理Clash代理。访问http://clash.razord.top或http://yacd.haishan.me等第三方Dashboard页面,在设置中填入Clash API的地址(如127.0.0.1:9090)和密钥即可连接。连接成功后可在面板中切换节点、查看连接状态、修改代理模式等,无需操作配置文件。部分用户也可通过本地部署的Dashboard容器访问。
使用curl命令调用API接口
通过curl命令可直接调用RESTful API的各个端点,实现自动化管理。获取当前配置信息的示例为curl http://127.0.0.1:9090/config,获取节点列表的示例为curl http://127.0.0.1:9090/proxies,切换代理节点的示例为curl -X PUT http://127.0.0.1:9090/proxies/策略组名 -d '{"name":"节点名称"}'。若配置了secret认证,需在请求头中添加Authorization: Bearer your-password。具体端点列表可参考Clash API文档。
常用的API端点功能
RESTful API提供多个功能端点,覆盖Clash的主要管理操作。GET /config获取当前配置状态,PUT /config重新加载配置文件。GET /proxies获取所有节点列表,GET /proxies/:name/delay测试指定节点的延迟。GET /connections查看当前活跃连接,DELETE /connections关闭所有连接。GET /rules查看当前规则列表。通过组合这些端点可实现自定义的管理界面或自动化脚本。
局域网访问与跨域配置
修改监听地址实现远程访问
默认的127.0.0.1监听地址仅允许本机访问,若需要在局域网中其他设备上通过API管理Clash,需将监听地址改为0.0.0.0。配置示例为external-controller: 0.0.0.0:9090,修改后局域网其他设备可通过http://服务器IP:9090访问API。同时需确保系统防火墙已放行9090端口,否则外部设备连接会被拦截。此配置在OpenClash和Docker部署中常见。
跨域问题的解决方法
当通过浏览器访问Dashboard且Clash API与浏览器不在同一设备时,可能遇到跨域请求被拒绝的问题。解决方法包括将external-controller监听地址改为0.0.0.0解决跨域IP限制,或使用SSH端口转发将远程API端口映射到本地。命令示例为ssh -L 9090:服务器IP:9090 用户名@服务器IP,映射后浏览器访问127.0.0.1:9090即可连接远程API,避免跨域问题。
Docker环境中的端口映射
在Docker中运行Clash时,需将容器的9090端口映射到宿主机才能访问API。Docker配置示例为ports: - "9090:9090"将宿主机的9090端口映射到容器的9090端口。若宿主机9090端口被占用,可映射到其他端口,如ports: - "9098:9090",然后通过宿主机IP:9098访问API。同时需确保配置文件中的external-controller设为0.0.0.0:9090,让容器监听所有接口。
RESTful API的常见使用场景
通过Dashboard切换代理节点
Dashboard面板通过RESTful API实时获取节点列表和延迟数据,用户可在可视化界面中切换代理节点。访问Dashboard页面并连接API后,在“代理”或“Proxies”页面中点击任一节点即可切换。切换操作通过PUT /proxies/:name接口实现,Dashboard自动调用无需手动处理。该功能让无图形界面的Linux服务器也能通过浏览器管理Clash代理。
自动化脚本与程序集成
RESTful API支持通过脚本或程序自动化管理Clash,例如定时切换节点、监控连接状态或重载配置。使用curl命令结合cron定时任务可定期执行节点切换,curl -X PUT http://127.0.0.1:9090/proxies/默认组 -d '{"name":"最优节点"}'。也可通过API监控当前流量和连接数,用于自动化运维场景。API的标准化接口使得Clash易于集成到现有的管理系统中。
远程管理和多设备同步
在局域网或远程环境中,可通过API远程管理Clash实例,无需登录服务器操作。将external-controller设为0.0.0.0并配置防火墙放行后,可从其他设备访问Dashboard页面进行节点切换和配置重载。多台设备上的Clash可通过API统一管理,但需注意各实例的API端口不能冲突。远程管理时建议配置secret认证保护API安全,避免未授权访问修改代理配置。
常见问题FAQ
RESTful API的默认端口是多少?
默认端口为9090,在配置文件中通过external-controller: 127.0.0.1:9090指定。该端口独立于HTTP代理端口(7890)和SOCKS5代理端口(7891),专门用于API管理请求。部分客户端可能自定义端口,以实际配置为准。
如何让其他设备访问Clash的RESTful API?
将配置文件中的external-controller地址从127.0.0.1改为0.0.0.0,例如external-controller: 0.0.0.0:9090。修改后局域网其他设备通过http://服务器IP:9090访问API。同时需确保系统防火墙已放行9090端口,否则连接会被拦截。
API连接Dashboard时提示跨域错误怎么办?
将external-controller改为0.0.0.0可解决IP跨域问题。若跨域仍存在,可通过SSH端口转发将远程API映射到本地,命令为ssh -L 9090:服务器IP:9090 用户名@服务器IP,然后通过127.0.0.1:9090访问API。
RESTful API的secret密钥如何设置?
config.yaml中添加secret: "your-password"即可设置认证密钥。设置后连接API时需在请求头中添加Authorization: Bearer your-password,或在Dashboard面板中输入密钥才能访问。若secret留空,API无需认证即可访问。