CLASH KNOWLEDGE BASE

作者: longuser

客户端教程、配置说明与问题排查资料。

教程

第三方软件怎么通过API控制Clash vpn?

在ClashVPN中,第三方软件通过调用RESTfulAPI即可实现程序化控制。首先在配置文件中启用external-controller:127.0.0.1:9090并设置secret密钥,第三方软件通过HTTP请求调用/proxies切换节点、/connections查看连接、/configs切换模式、/traffic获取流量数据等核心接口。各编程语言可通过HTTP客户端库直接调用API,或使用社区封装的SDK库(如Rust的clashctl-core)简化集成。第三方软件可实现自动化节点健康检查和自动切换、多实例统一管理以及与企业运维系统的集成。控制器类采用异步设计封装所有API交互,包含重试机制和异常处理。WebSocket方式订阅/traffic和/logs端点可获取实时流量和日志流。通过API集成的第三方软件让Clash从手动切换节点的工具演变为可自动维护网络出站路径的本机网络服务。配置并启用Clash的外部控制器在配置文件中开启API服务第三方软件通过API控制ClashVPN的前提是Clash已启用外部控制器功能,该功能通过external-controller字段在配置文件中开启。在config.yaml中添加external-controller:127.0.0.1:9090即可启用API服务,其中127.0.0.1为监听地址,9090为端口号。为保护API安全,建议同时设置secret:"your-secure-key"作为访问认证密钥,所有API请求需在请求头中添加Authorization:Beareryour-secure-key。配置完成后重启Clash使修改生效。API访问的安全配置建议为确保API不被未授权访问,external-controller应优先绑定到127.0.0.1,使只有本机程序和面板能够连接。若需远程管理,应通过防火墙、VPN或明确的局域网规则开放,避免将控制器端口直接暴露到公网。即使设置了secret密钥,也不应忽略防火墙和反向代理的保护措施。管理密钥应放在脚本的环境变量中,而不是直接写入会同步到版本控制系统的文件。确认API服务是否正常运行配置完成后,可通过简单请求验证API是否已正常启用。在浏览器中访问http://127.0.0.1:9090/或使用curlhttp://127.0.0.1:9090/命令,若返回包含hello字段的JSON响应,则说明API服务正在运行。若配置了secret密钥,需在请求头中添加Authorization:Beareryour-secure-key才能通过认证。API服务运行后,第三方软件即可通过调用HTTP接口实现对Clash的程序化控制。第三方软件调用API的核心操作切换代理节点的接口调用方法第三方软件可通过向/proxies/{selector}端点发送PUT请求来切换节点,其中{selector}为策略组名称。请求示例为curl-XPUT-H"Content-Type:application/json"-d'{"name":"HongKong"}'http://127.0.0.1:9090/proxies/Proxy,将名为Proxy的策略组切换到HongKong节点。若配置了secret密钥,需额外添加Authorization:Beareryour-secure-key请求头。该操作返回204状态码表示切换成功,是实现自动化节点轮换的核心接口。获取节点列表和延迟信息第三方软件通过GET/proxies接口可获取所有节点和策略组的完整列表,包括每个节点的类型、当前选中的节点和可用节点列表。通过GET/proxies/{name}/delay接口可测试指定节点的延迟,支持通过url和timeout参数控制测试目标和超时时间。这些接口可用于健康检查和自动选线脚本,例如当检测到当前节点不可用时自动切换到备用节点。延迟测试结果返回JSON格式的delay和meanDelay字段。切换运行模式和查看连接第三方软件通过PATCH/configs接口可切换Clash的运行模式(Rule、Global、Direct),请求体示例为{"mode":"global"}。通过GET/connections接口可获取当前所有活跃连接列表,DELETE/connections可强制关闭所有连接。WebSocket方式订阅/traffic和/logs端点可获取实时流量数据和日志流。这些接口使得第三方软件能够实现完整的Clash实例管理功能。编程语言SDK与封装库的使用Rust生态中的clashctl-core库Rust生态中存在clashctl-core等crate,提供了ClashAPI方法的完整封装。该库提供了get_proxies获取节点列表、set_proxygroup_selected切换策略组选中节点、get_connections获取活跃连接等核心方法。开发者只需在Cargo.toml中添加依赖即可快速集成ClashAPI,无需自行处理HTTP请求和JSON解析的底层细节。此类封装库减少了第三方软件的开发工作量,提高了代码的可维护性。Python异步控制器类的实现Python开发者可使用aiohttp等异步HTTP库构建控制器类,封装代理切换、模式配置和端口检测等操作。控制器类的初始化接受API端点URL和可选的secret密钥,配置包含Bearer认证和JSON内容类型的请求头,这些请求头将应用于所有后续API调用。核心方法包括switch_proxy(切换节点)、set_mode(切换运行模式)、get_running_port(动态检测当前监听端口)和get_proxies(获取节点列表),所有方法均采用异步方式防止网络操作阻塞。Node.js与Go语言的集成方案Node.js开发者可使用axios或node-fetch库调用ClashAPI,封装为服务类供其他模块调用。Go语言开发者可使用标准库的net/http包或第三方HTTP客户端库构建API客户端。跨语言集成的核心逻辑一致:构建HTTP请求(含认证头和JSON体)、发送至ClashAPI端点、解析响应状态和JSON数据。各语言的实现差异主要在语法和异步模型上,但调用模式和接口契约保持一致。异步控制器模式的实现控制器类的设计与初始化成熟的第三方集成通常采用异步控制器模式,通过一个控制器类封装所有API交互逻辑。控制器类的初始化接受API端点URL和可选的secret密钥,配置包含Bearer认证和JSON内容类型的请求头,这些请求头将应用于所有后续API调用。控制器类还支持动态检测Clash进程端口,若配置文件中的端口被占用或已发生变化,控制器可自动适配新的端口号。核心方法的异步实现控制器类的核心方法包括switch_proxy(切换节点)、set_mode(切换运行模式)、get_running_port(动态检测当前监听端口)和get_proxies(获取节点列表),所有方法均采用异步方式防止网络操作阻塞。switch_proxy方法接受策略组名称和目标节点名称,内部构建PUT请求发送至/proxies/{selector}端点。set_mode方法接受模式参数(rule/global/direct),发送PATCH请求至/configs端点。所有方法均返回解析后的JSON数据供上层调用。异常处理与重试机制在API调用失败时,异步控制器应实现合理的异常处理和重试机制。常见错误包括网络不可达(Clash进程未运行)、认证失败(secret密钥错误)和请求参数错误(策略组不存在)。控制器应在遇到网络错误时进行指数退避重试,在收到400/401/404等客户端错误时抛出明确异常。重试机制确保在Clash重启或网络短暂中断后第三方软件仍能恢复对API的控制,避免因临时故障导致整个自动化流程中断。自动化工作流与场景集成节点健康检查与自动切换第三方软件可将ClashAPI集成到节点健康检查工作流中,实现节点不可用时的自动切换。典型流程为:通过GET/proxies枚举所有可用节点,通过GET/proxies/{name}/delay测试当前节点延迟,当延迟超过阈值或返回超时时通过PUT/proxies/{selector}自动切换到备用节点。该流程可部署为定时任务或与外部监控系统联动,确保Clash始终使用最优可用节点。多实例统一管理在拥有多台Clash设备的环境中,第三方软件可通过API实现集中管理。将每台设备的external-controller监听地址设为0.0.0.0并配置防火墙放行后,管理软件可通过不同API地址连接所有Clash实例。每个实例在管理软件中可配置为一个独立的“环境”,支持统一切换节点、查看状态和重载配置。多实例管理适合企业网络或家庭网关场景,能有效提升运维效率。与现有运维系统的集成ClashAPI可集成到现有的监控、告警和自动化运维系统中。将节点延迟和连接数数据纳入监控面板,在节点不可用时触发告警并自动执行恢复脚本。通过API获取的流量数据可用于生成带宽使用报告,辅助容量规划。WebSocket订阅的日志流可接入日志聚合系统,便于集中查看和分析Clash的运行日志。这种集成将Clash从独立工具转变为可纳入企业级运维体系的标准组件。常见问题FAQ

教程

Clash vpn能获取实时的流量统计数据吗?

在ClashVPN中获取实时流量统计数据,可通过RESTfulAPI的GET/traffic接口获取当前上传和下载速度(单位字节/秒),默认地址为http://127.0.0.1:9090/traffic,若配置了secret密钥需在请求头中添加Authorization:Beareryour-password。通过WebSocket协议订阅ws://127.0.0.1:9090/traffic可实现流量的实时推送,适合在Dashboard面板中绘制动态速度曲线。GET/connections接口返回每条连接的累计上传和下载流量,可用于统计当前会话的流量总量。ClashVergeRev等图形化客户端内置了流量监控模块,ClashPlus等移动端应用也提供了实时流量仪表板。NekoDash等第三方Clash控制器应用通过API连接实现完整的流量监控功能。ClashAPI不保存历史流量数据,需通过脚本定期采集并存储才能实现长期监控和分析。通过RESTfulAPI获取实时流量数据调用GET/traffic接口获取流量统计ClashVPN的RESTfulAPI提供了GET/traffic接口,用于获取当前会话的实时流量统计数据。使用curl-XGEThttp://127.0.0.1:9090/traffic命令即可调用,返回的JSON数据包含up(上行速度,单位字节/秒)和down(下行速度,单位字节/秒)两个核心字段。若配置了secret密钥,需在请求头中添加Authorization:Beareryour-password。该接口返回的是瞬时速度值,调用频率越高越能反映实时的流量波动。通过WebSocket实现流量数据的实时推送相较于轮询HTTP接口,ClashAPI支持通过WebSocket协议订阅流量数据的实时推送,无需频繁发送请求即可持续接收速度更新。WebSocket连接地址为ws://127.0.0.1:9090/traffic,连接后会持续推送流量数据包,包含当前的上行和下行速度。在ClashVergeRev等客户端中,流量监控图表就是通过WebSocket订阅/traffic数据实现的。该方式适合需要实时展示速度曲线的场景,延迟通常在100毫秒以内。在Dashboard面板中查看实时流量图表对于普通用户,通过WebDashboard面板(如YACD或zashboard)查看实时流量数据是最便捷的方式。在Dashboard中填入ClashAPI地址和secret密钥后,面板会自动通过WebSocket或轮询方式订阅/traffic接口数据,在界面中以折线图或数字形式展示当前的上传和下载速度。流量图表通常支持显示最近一段时间内的速度变化趋势,帮助用户直观了解网络使用情况。通过GET/connections获取累计流量统计查看当前连接的流量累计数据GET/connections接口返回每条活跃连接的upload和download字段,记录了该连接从建立到当前时刻的累计上下行流量(单位字节)。通过解析connections数组,可获取所有连接的流量数据并求和,得到当前会话的累计总流量。若配置了secret密钥,同样需在请求头中添加认证信息。该数据反映的是流量累计值而非瞬时速度,适合统计已使用的流量总量。使用jq工具提取流量汇总数据在自动化脚本中,可使用jq工具从GET/connections的返回数据中提取并汇总流量统计。执行curl-shttp://127.0.0.1:9090/connections|jq'{total_upload:[.connections[].upload]|add,total_download:[.connections[].download]|add}'可输出所有连接的上传和下载累计流量总和。若配置了secret,需在curl命令中添加认证头。该方法适合将流量数据纳入监控或计费系统。Dashboard面板中查看累计流量统计多数Dashboard面板除了显示实时速度外,也会展示当前会话的累计流量统计数据。在面板的“连接”或“流量”页面中,通常会有“总上传”和“总下载”的数字显示,部分面板还支持统计流量使用的起始时间。该数据来源于GET/connections接口中所有连接流量字段的汇总计算,让用户在不使用命令行的情况下即可了解当前会话的流量消耗情况。通过图形界面客户端获取流量统计ClashVergeRev中的流量监控模块ClashVergeRev等图形化客户端内置了流量监控模块,可直接在软件界面中查看实时流量数据。该模块通过WebSocket订阅ClashAPI的/traffic接口,将速度数据以动态折线图形式呈现。用户打开客户端的“流量”或“监控”页面即可看到实时的上传/下载速度曲线和当前速度数值,无需手动调用API或配置Dashboard。移动端Clash客户端的流量统计功能ClashPlus等移动端Clash客户端内置了实时流量仪表板,可直接查看即时的上传/下载速度、活跃连接数及累计流量统计。ClashMetaforAndroid同样支持通过API获取流量数据并在界面中展示。移动端客户端的流量统计功能与桌面端类似,用户在主界面即可获得流量使用情况的直观概览。第三方Clash控制器应用的流量监控NekoDash等第三方Clash控制器应用通过连接Clash的RESTfulAPI,提供了完整的流量监控功能。用户可在应用中查看实时的上传和下载速度、活跃连接列表以及每条连接的流量统计,并支持通过Widget在手机桌面上快速查看速度状态。ClashXPro等服务器管理工具同样支持通过API实时监控服务器连接状态和流量数据。流量数据的格式与使用场景/traffic接口返回数据的解析GET/traffic接口返回的JSON格式为{"up":12345,"down":67890},其中up和down的单位为字节/秒(B/s)。为便于人工阅读,通常需将数值除以1024转换为KB/s或除以1048576转换为MB/s。Dashboard面板和图形客户端会自动完成单位换算,以直观的数字和图表形式展示。该接口适合用于实时速度监控、流量异常告警以及网络质量评估。流量统计数据在排查网络问题中的应用实时流量数据可帮助用户判断ClashVPN的代理通道是否正常工作。当发现流量速度长期为0但浏览器无法访问时,说明代理链路可能中断;当速度极低但节点延迟正常时,可能遇到节点带宽限制或国际出口拥堵。流量数据结合连接列表,可识别哪些应用或域名占用了大量带宽,辅助分流规则和节点选择的优化。流量统计数据的保存与长期监控ClashAPI本身不保存历史流量数据,仅提供当前会话的实时统计和累计值。如需长期记录流量使用情况,需通过脚本定期调用API将数据存入日志或数据库。可编写cron任务每分钟调用GET/traffic记录速度值,或每隔5分钟调用GET/connections汇总累计流量并记录。这些历史数据可用于分析网络使用趋势、生成流量报告或触发自动化告警。常见问题FAQ

教程

Clash VPN怎么通过API查看当前活跃的连接数?

在ClashVPN中通过API查看当前活跃连接数,可直接调用GET/connections接口,默认地址为http://127.0.0.1:9090/connections,返回的JSON数据中connections数组的长度即为当前连接数。若配置了secret密钥,需在请求头中添加Authorization:Beareryour-password。使用curl-shttp://127.0.0.1:9090/connections|jq'.connections|length'可直接输出连接数量,适合脚本处理。通过YACD或zashboard等WebDashboard面板填入API地址和密钥后,可在“连接”页面直观查看连接总数和每条连接的详细信息。连接数据中的metadata字段包含目标地址和协议类型,rule字段显示命中的规则名称,upload和download记录该连接的流量统计。DELETE/connections接口可强制关闭所有连接,切换节点后调用该接口可让新连接立即使用新节点。通过watch-n2命令结合curl和jq可实现连接数的实时刷新监控,帮助排查代理连接异常。通过GET/connections接口获取连接列表调用API端点获取活跃连接数据调用ClashVPN的GET/connections接口是获取当前活跃连接信息的标准方法,该接口返回所有连接状态的JSON数据集。使用curl-XGEThttp://127.0.0.1:9090/connections命令即可调用,若配置了secret密钥需在请求头中添加Authorization:Beareryour-password。响应数据中的connections数组包含了当前所有活跃连接的详细信息,数组长度即为活跃连接数,通过解析该数组可获取每条连接的目标地址、协议类型和传输速率等关键信息。在浏览器中直接访问API查看连接快照对于快速查看连接状态的场景,可直接在浏览器地址栏输入http://127.0.0.1:9090/connections访问API端点,页面会显示当前连接快照的JSON数据。若配置了secret密钥,浏览器访问时需通过扩展或插件添加认证头,否则推荐使用Postman等API测试工具。返回的JSON数据中connections数组的根级字段可快速获取连接总数,每条连接的详细数据在数组内逐条列出,方便人工浏览和初步排查。在Dashboard面板中自动获取并展示连接数对于不熟悉命令行操作的用户,可通过WebDashboard面板直观地查看当前连接数,无需手动调用API或解析JSON数据。在YACD或zashboard等面板中,填入ClashAPI地址(如http://127.0.0.1:9090)和secret密钥后,Dashboard会自动调用GET/connections接口获取数据。面板的“连接”页面会实时显示当前活跃连接总数,并以表格或列表形式展示每条连接的详细信息,包括目标地址、协议类型、传输速率和命中的规则名称等。返回数据的结构与关键字段解读connections数组与连接总数统计GET/connections接口返回的JSON数据包含downloadTotal(总下载流量)、uploadTotal(总上传流量)和connections(活跃连接数组)三个主要字段。connections数组的长度即为当前活跃连接的总数,通过程序解析该数组的长度即可获得连接数,无需手动统计。该数组中的每个元素代表一条独立的活跃连接,包含该连接从建立到当前时刻的全部状态信息。单条连接的详细字段说明connections数组中的每个连接对象包含id(连接唯一标识)、metadata(包含源地址、目标地址、协议类型的元数据)、upload和download(该连接的流量统计)、start(连接建立时间)、chains(经过的代理链路)和rule(命中的规则名称)。metadata中的host字段为目标域名,network字段为协议类型(tcp/udp),type字段为连接类型(Direct/Proxy)。通过这些字段,用户不仅能获知连接数量,还能追踪具体的流量去向和规则匹配情况。通过流量字段统计连接的传输数据量每条连接中的upload和download字段记录了该连接从建立到当前时刻的累计上下行流量(单位为字节)。用户可通过GET/connections接口获取所有连接的流量数据,对全部连接的upload和download求和可得到当前会话的总流量。该数据在Dashboard面板中通常以图表或数字形式展示,帮助用户了解当前的流量使用情况。若需统计历史总流量,还需结合GET/traffic接口配合使用。使用jq工具提取和统计连接数通过jq命令获取连接数量在自动化脚本或数据处理场景中,可使用jq命令行工具从API返回的JSON数据中精准提取连接数量。执行curl-shttp://127.0.0.1:9090/connections|jq'.connections|length'可直接输出当前活跃连接数,无需手动数数组元素。若配置了secret密钥,命令为curl-s-H"Authorization:Beareryour-password"http://127.0.0.1:9090/connections|jq'.connections|length'。该命令输出一个纯数字,便于赋值给变量或存入日志文件。提取指定字段进行进一步分析除了统计连接数量,jq还可提取connections数组中的特定字段进行深入分析。执行curl-shttp://127.0.0.1:9090/connections|jq'.connections[]|{host:.metadata.host,rule:.rule}'可提取每条连接的目标域名和命中的规则名称。该命令输出为JSON格式的字段列表,方便排查特定域名的连接是否走代理,或统计每个规则匹配的连接数量。结合grep或sort命令可进一步筛选和聚合数据。将连接数纳入监控脚本在需要持续监控连接数峰值的场景中,可将curl和jq命令封装为监控脚本,定期记录连接数到日志文件。脚本示例为#!/bin/bashCOUNT=$(curl-shttp://127.0.0.1:9090/connections|jq'.connections|length');echo"$(date):$COUNT">>/var/log/clash_connections.log。配合cron定时任务每分钟记录一次,可建立连接数的历史趋势数据,用于分析代理使用模式和发现异常流量高峰。使用watch命令实现实时刷新监控watch命令的基本用法对于需要持续观察连接数变化趋势的场景,可通过watch命令结合curl和jq实现自动刷新监控。在终端中执行watch-n2'curl-shttp://127.0.0.1:9090/connections|jq".connections|length"',每隔2秒自动刷新显示当前的活跃连接数。该命令在排查代理连接异常、统计并发连接数峰值或调试规则配置时较为实用,无需手动重复输入命令即可持续观察连接数的动态变化。调整刷新间隔适应不同场景watch命令的-n参数控制刷新间隔(单位为秒),用户可根据实际需求调整该值。在排查连接异常时,可将间隔设为1秒以获取更高的实时性;在长期监控时,可将间隔设为5-10秒减少系统开销。命令示例为watch-n5'curl-shttp://127.0.0.1:9090/connections|jq".connections|length"',每5秒刷新一次。较短的刷新间隔会增加CPU使用率,但可捕捉到快速的连接波动。结合Dashboard面板实现可视化监控若命令行环境不便于观察,可通过Dashboard面板实现连接数的可视化实时监控。在YACD或zashboard面板中,连接页面会自动刷新并更新连接列表,无需手动操作即可观察连接数的变化。Dashboard面板的刷新频率通常由面板自身的设置控制,用户可在面板设置中调整刷新间隔。Dashboard的可视化界面比命令行更适合非技术用户,且能同时展示连接详情和流量统计。通过DELETE/connections关闭所有连接调用DELETE接口关闭所有活跃连接除查看连接数外,API还支持通过DELETE/connections接口关闭所有当前活跃连接,或通过DELETE/connections/:id关闭指定连接。执行curl-XDELETEhttp://127.0.0.1:9090/connections可强制断开所有连接,若配置了secret需添加认证头。该操作在切换代理节点后需要新连接立即使用新节点时尤为有用,关闭后应用会自动重新建立连接,新的连接将使用切换后的节点。关闭指定连接的精确控制通过DELETE/connections/:id接口可关闭指定的单条连接而不影响其他连接。先执行GET/connections获取所有连接的id列表,再执行curl-XDELETEhttp://127.0.0.1:9090/connections/{id}关闭特定连接。该功能适用于需要断开特定应用或特定目标地址连接的场景,例如某条连接卡死或流量异常时,可精准关闭而不干扰其他正常连接。关闭连接后的网络行为执行DELETE/connections后,Clash会立即断开所有TCP连接,已关闭连接的应用会收到连接重置信号,自动尝试重新建立连接。新的连接将重新经过Clash的规则匹配流程,若用户在关闭前已切换了代理节点,新的连接将使用新节点。该操作不会影响Clash的运行状态或配置,仅刷新当前的连接池,是切换节点后确保新连接立即生效的有效手段。常见问题FAQ

教程

Clash vpn的API需要设置secret密钥吗?不设安全吗?

ClashVPN的API(外部控制器)通过external-controller启用,默认监听127.0.0.1:9090。secret字段用于设置API访问认证密钥,配置示例为secret:"your-strong-password"。不设置secret时,任何能访问API端口的人员均可通过GET/proxies获取节点列表、PUT/proxies/:name切换节点、GET/connections查看实时连接、PUT/config重新加载配置,存在节点信息泄露和代理被干扰的安全风险。当external-controller监听0.0.0.0:9090暴露在局域网或公网时,必须设置强secret保护API安全,否则攻击者可完全控制Clash。仅监听127.0.0.1时风险较低,但建议仍设置secret以防御本机恶意程序或未授权访问。设置secret后所有API调用需携带Authorization:Bearer<secret>请求头,Dashboard面板需在登录时填入密钥。使用强密码并定期更换secret是安全最佳实践。若需在不设secret的情况下保护API,可通过防火墙限制访问来源IP或将监听地址设为127.0.0.1不对外暴露。secret密钥的作用与配置方式secret是API访问的身份验证凭证ClashVPN外部控制器(ExternalController)的secret字段是一个可选的认证密钥,用于验证访问API的请求是否具有合法权限。当secret被设置后,所有向API端点发起的请求都需要在HTTP头中包含Authorization:Bearer<secret值>才能成功执行。该机制通过简单的密钥认证保护API免受未授权访问,防止攻击者通过API获取Clash的运行状态、修改代理配置或切换节点。secret的配置在config.yaml中的secret:"your-password"字段完成。secret的配置位置与格式secret字段与external-controller位于config.yaml的同一层级,格式为secret:"your-strong-password"。配置示例为external-controller:127.0.0.1:9090和secret:"mySecurePassword2024",两者配合使用。配置完成后需重启Clash内核使修改生效。secret推荐使用包含大小写字母、数字和特殊字符的强密码,避免使用123456、admin等简单密码。若secret留空或不配置该字段,API无需认证即可访问,任何能连接到API端口的人都能执行管理操作。设置secret后的API调用方式配置secret后,所有API调用都需在请求头中添加认证信息才能成功。使用curl命令时添加-H"Authorization:Beareryour-password"参数,例如curl-H"Authorization:Bearermypass"http://127.0.0.1:9090/proxies。在WebDashboard面板(如YACD)中,登录时需要在设置页面填入API地址和secret密钥,面板会在后续请求中自动添加认证头。若请求未携带正确的secret,API会返回401Unauthorized状态码,拒绝访问。不设置secret的安全风险未授权访问导致节点信息泄露当secret未设置时,任何能访问ClashAPI端口(默认9090)的人均可通过GET/proxies接口获取完整的节点列表和策略组信息。这些信息包括节点名称、服务器地址、端口、加密方式等敏感配置,若API暴露在局域网或公网中,这些信息可能被外部人员获取。攻击者可利用这些信息了解用户的代理网络结构,或识别可攻击的目标节点。攻击者可通过API修改代理配置未设置secret的API允许任意请求执行PUT/config重新加载配置,或通过PUT/proxies/:name切换节点,攻击者可借此干扰用户的代理服务。攻击者可将用户的代理切换至不可用节点导致网络中断,或切换至恶意节点实施中间人攻击。若攻击者能访问PUT/config端点,还可能上传恶意配置文件完全控制Clash的行为,包括将所有流量重定向至攻击者控制的服务器。Dashboard面板被他人操控的风险在同一局域网环境中,若其他设备能访问本机的9090端口且未设置secret,这些设备上的浏览器可通过Dashboard面板直接操控本机的Clash。他人可随意切换节点、查看浏览记录对应的目标地址、关闭当前连接或修改代理模式,严重影响用户隐私和网络稳定性。在公共网络或多人共享的家庭网络中,这一风险尤为突出。不同使用场景下的安全性分析仅本机访问时的安全评估当external-controller监听127.0.0.1:9090时,API仅允许本机访问,外部设备无法连接。在此场景下,不设置secret的安全风险相对较低,因为只有本机用户和运行在本机的程序能访问API。但本机上的其他用户账户或恶意软件仍可访问API,若电脑存在多用户登录或安全风险,设置secret仍有必要。多数桌面用户在127.0.0.1模式下不设置secret也可正常使用,但建议养成良好的安全习惯。局域网或公网暴露时的严重风险当external-controller监听0.0.0.0:9090允许局域网访问,或通过端口转发暴露在公网时,不设置secret存在严重安全隐患。任何能访问该端口的设备和人员均可完全控制Clash,获取所有节点信息、查看实时连接记录、切换节点等。在公网暴露的情况下,攻击者扫描到9090端口后可通过简单请求确认ClashAPI的存在,并执行未授权操作。此种配置下必须设置强secret,否则应避免将API暴露在公网。容器环境中的安全考量在Docker或Kubernetes容器中运行Clash时,若将9090端口映射到宿主机,且external-controller设为0.0.0.0,同样存在API暴露风险。容器环境中的API可能被同一宿主机上的其他容器访问,或被集群内其他服务调用。建议在容器部署时设置secret,并仅在需要外部管理时才映射端口。若仅需本地管理,可将端口映射绑定到127.0.0.1而非0.0.0.0,例如-p127.0.0.1:9090:9090,限制仅本机访问。secret密钥的最佳实践使用强密码作为secret值secret的强度直接影响API的安全性,应使用包含大小写字母、数字和特殊字符的长字符串作为密钥。推荐使用密码生成器创建16位以上的随机字符串,如kL8#mP2$qR9@nS5!,避免使用admin、password、123456等常见弱密码。强secret可有效抵御暴力破解攻击,确保API认证机制的有效性。定期更换secret也是良好的安全习惯。定期更换secret避免长期泄露secret密钥与API访问权限绑定,若密钥长期使用且未更换,一旦泄露将导致攻击者长期持有Clash的控制权。建议每隔3-6个月更换一次secret,或在发现API可能被异常访问时立即更换。更换secret后需同步更新所有使用该API的工具和Dashboard面板的密钥配置,否则它们将无法连接API。定期更换密钥可在泄露后限制攻击窗口。不同环境使用不同secret在开发环境、测试环境、生产环境或多台Clash设备之间,应使用不同的secret值。同一密钥在多环境中复用会放大泄露后的影响范围,攻击者获得一个secret即可控制所有使用该密钥的Clash实例。为每个环境分配独立的secret可隔离风险,确保某个环境的泄露不会波及其他环境。记录各环境的secret值并妥善保管。不设置secret的替代保护方案使用防火墙限制API访问来源若不设置secret,可通过防火墙规则限制API端口的访问来源,仅允许信任的IP地址连接。在Linux中使用iptables配置iptables-AINPUT-ptcp--dport9090-s127.0.0.1-jACCEPT和iptables-AINPUT-ptcp--dport9090-jDROP仅允许本机访问。在Windows防火墙中可创建入站规则,仅允许特定的IP地址或子网访问9090端口。防火墙方案可有效防止未授权的网络访问,但无法防御本机恶意程序。更改external-controller的默认端口将external-controller端口从默认的9090改为其他端口,可减少被扫描和发现的风险。配置示例为external-controller:127.0.0.1:9876,将端口改为9876。改端口虽然不能作为唯一安全措施,但可降低自动化扫描工具发现API的概率,减少被盲目探测的风险。建议将改端口与secret设置或防火墙限制结合使用。仅本地监听不对外开放若不需要远程管理Clash,将external-controller的监听地址固定为127.0.0.1,不让API暴露在局域网或公网。配置示例为external-controller:127.0.0.1:9090,外部设备无法连接该端口。在此配置下,不设置secret的风险大幅降低,但仍需考虑本机其他用户或恶意程序的访问风险。仅本地监听是最安全的部署方式,适合大多数桌面用户。常见问题FAQ

教程

Clash vpn外部控制器怎么用?GUI界面在哪?

ClashVPN的外部控制器(ExternalController)是通过external-controller配置启用的RESTfulAPI服务,默认监听127.0.0.1:9090。该服务本身不提供GUI界面,用户需通过第三方WebDashboard面板(如YACD(http://yacd.haishan.me)、zashboard连接API来获得可视化管理界面,配置API地址和secret密钥即可进行节点切换、延迟测试、连接查看和配置管理等操作。在Linux无图形界面服务器上,用户也可通过curl命令直接调用API端点(如GET/proxies获取节点列表、PUT/proxies/:name切换节点、GET/connections查看连接)实现命令行管理。若需远程访问,将external-controller设为0.0.0.0:9090并放行防火墙端口即可从外部设备通过Dashboard管理Clash。secret字段用于设置访问密钥保护API安全。本地部署Dashboard面板可将静态文件托管在内部HTTP服务器上,实现离线管理。外部控制器的基本概念与配置方法外部控制器是Clash的API管理接口ClashVPN的“外部控制器”(ExternalController)本质上是一个通过HTTP协议暴露的管理API接口,用于让外部程序或Web界面与Clash内核进行交互。外部控制器本身不包含图形界面,而是将Clash的管理能力(如切换节点、查看连接、重新加载配置)封装为标准的HTTP端点,供第三方GUI管理面板或自动化脚本调用。通过在配置文件中启用external-controller字段,用户可开启该管理接口,实现对Clash的远程或本地管理。在配置文件中启用外部控制器在config.yaml配置文件中添加external-controller:127.0.0.1:9090即可启用外部控制器,该配置定义了API服务的监听地址和端口号。127.0.0.1表示仅允许本机访问,9090为默认端口。若需局域网或远程访问,将监听地址改为0.0.0.0:9090。配置完成后需重启Clash内核使修改生效。该端口与HTTP代理端口(7890)和SOCKS5代理端口(7891)独立,专用于管理请求。secret认证密钥的配置为保护外部控制器的访问安全,可在配置文件中通过secret字段设置认证密钥。配置示例为secret:"your-password",连接API时需要提供该密钥才能执行管理操作。若secret留空或不配置,API无需认证即可访问,适合本地使用场景。在开放网络环境中建议设置secret,避免他人通过API修改代理配置或获取敏感信息。通过WebDashboard访问GUI界面YACD面板的访问与配置YACD(YetAnotherClashDashboard)是最常用的ClashWeb管理面板之一,访问http://yacd.haishan.me即可打开该页面。在YACD面板的登录设置中,填写ClashAPI的地址(如127.0.0.1:9090或服务器IP:9090)和secret密钥(若有配置),点击连接即可进入管理界面。连接成功后,YACD会通过外部控制器的API获取Clash的全部运行状态数据,并在界面中呈现为可视化操作面板。zashboard面板的使用方法zashboard是另一款常用的ClashWeb管理面板,提供与YACD类似的功能但界面风格和交互方式有所不同。访问部署好的zashboard页面(如自建或公共实例),在设置中填入API地址和密钥即可连接。zashboard支持节点切换、延迟测试、连接查看和配置管理等核心功能,用户可根据个人偏好选择使用YACD、zashboard或Clash.razord.top等不同面板。Dashboard面板连接失败时的排查Dashboard无法连接外部控制器时,首先检查external-controller配置是否已正确添加到config.yaml并重启了Clash。确认API地址和端口是否与配置中的external-controller值一致。若配置了secret密钥,检查Dashboard登录时是否已正确填入该密钥。若Clash运行在Docker容器中,确认容器的9090端口已映射到宿主机(如ports:-"9090:9090")。排查外部访问时还需检查防火墙是否已放行9090端口。通过命令行使用外部控制器API使用curl获取节点列表通过curl命令可直接调用外部控制器的API端点,获取Clash的运行状态数据。执行curlhttp://127.0.0.1:9090/proxies可获取当前所有节点和策略组的完整列表,返回的数据为JSON格式。若配置了secret密钥,需在请求头中添加Authorization:Beareryour-password。该命令在Linux无图形界面的服务器上尤为实用,用户无需登录Dashboard即可通过命令行获取节点信息。使用curl切换代理节点外部控制器支持通过PUT请求切换当前使用的代理节点,格式为curl-XPUThttp://127.0.0.1:9090/proxies/策略组名-d'{"name":"节点名称"}'。示例为curl-XPUThttp://127.0.0.1:9090/proxies/Proxy-d'{"name":"香港节点01"}',将名为Proxy的策略组切换到香港节点01。该操作实时生效,无需重新加载配置。此功能可通过脚本实现自动化节点切换,例如在节点不可用时自动切换到备用节点。查看活跃连接和关闭连接外部控制器提供GET/connections端点查看当前所有活跃连接,以及DELETE/connections端点关闭所有连接。执行curlhttp://127.0.0.1:9090/connections可查看当前Clash处理的所有网络连接的详细信息,包括目标地址、协议类型、传输速率等。执行curl-XDELETEhttp://127.0.0.1:9090/connections可强制关闭所有活跃连接,在切换节点后需要立即生效的场景中尤为有用。外部控制器的GUI界面所在地外部控制器本身不包含GUI界面外部控制器(ExternalController)的本质是一个RESTfulAPI服务,其本身不提供任何图形界面。它只负责接收和响应HTTP请求,将Clash的运行状态以JSON数据格式返回,或执行管理操作。用户需要通过第三方GUI面板(如Dashboard网页)或命令行工具来调用这个API,才能获得可视化的操作界面。因此“外部控制器的GUI界面”并不存在于Clash软件内部,而是由第三方前端页面提供。第三方Dashboard是主要的GUI方案YACD(http://yacd.haishan.me)和zashboard是Clash社区最常用的两种WebDashboard面板,它们通过调用外部控制器API将管理功能呈现为可视化界面。这些Dashboard面板完全在浏览器端运行,不依赖Clash自带的任何UI组件,只需配置API地址和密钥即可连接。此外,ClashVergeRev等图形界面客户端也通过外部控制器API连接内核,其内置的「代理」页面和「连接」面板本质上也是外部控制器API的可视化呈现。本地部署Dashboard面板除了使用公共的Dashboard页面(如http://yacd.haishan.me),用户也可将Dashboard面板的静态文件部署到本地或内部服务器上。从GitHub下载YACD或zashboard的发布文件,通过Nginx或任意HTTP服务器托管静态文件后,即可通过内网地址访问Dashboard,无需依赖外部网络。本地部署的Dashboard可同时管理多个Clash实例,在局域网或内网环境中配置更加灵活。外部控制器的典型使用场景远程管理无图形界面的Linux服务器在Linux服务器上,Clash通常以命令行方式运行,没有图形界面。用户可通过外部控制器API,在任意设备的浏览器中访问Dashboard面板(如http://yacd.haishan.me),填入服务器的API地址和密钥即可远程管理Clash。这种方式让命令行环境下的Clash管理变得直观便捷,降低了Linux服务器的使用门槛。自动化脚本与节点轮换外部控制器API可通过curl命令或程序调用,轻松集成到自动化脚本中。例如在数据采集程序中,可编写脚本定期检测当前节点是否返回429状态码,若触发则自动调用PUT/proxies/:name接口切换至下一个可用节点,实现IP的自动轮换。这种自动化能力让Clash不再只是一个手工操作的工具,而是可以作为程序化网络管理的组件使用。多设备集中管理在拥有多台Clash设备的环境中,外部控制器API可实现集中管理。将每台设备的external-controller监听地址设为0.0.0.0并配置防火墙放行后,管理员可在任一设备上通过Dashboard面板连接所有Clash实例的API,实现统一管理和监控。每个实例在Dashboard中可配置为一个独立的“环境”,方便在不同设备间快速切换管理。常见问题FAQ

教程

Clash vpn的API控制台能做什么?切换节点、查看连接?

ClashVPN的RESTfulAPI控制台通过external-controller配置启用,默认监听127.0.0.1:9090。该API提供完整的代理管理能力,包括切换节点(PUT/proxies/:name)、查看连接(GET/connections)、关闭连接(DELETE/connections)、获取节点列表(GET/proxies)、测试节点延迟(GET/proxies/:name/delay)、重新加载配置(PUT/config)和查看规则列表(GET/rules)等核心功能。用户可通过WebDashboard面板(如YACD、zashboard)以图形化界面使用API,也可通过curl命令调用API端点实现命令行管理。在Linux无图形界面服务器上,Dashboard面板是管理Clash的主要方式。自动化脚本可通过API检测和切换节点,实现智能节点轮换。在局域网或远程环境中,将external-controller改为0.0.0.0并放行端口后,可从其他设备通过Dashboard远程管理Clash实例。API控制台的核心功能总览一个功能完备的远程管理接口ClashVPN的RESTfulAPI提供了一套完整的管理接口,覆盖了代理日常使用中的绝大部分操作需求。通过API,用户可以查看节点列表、切换代理节点、查看活跃连接、关闭指定连接、重新加载配置、查看规则列表以及测试节点延迟等。API控制台本质上是将Clash内核的管理能力暴露为标准的HTTP接口,供Dashboard面板、自动化脚本或第三方工具调用。通过可视化Dashboard面板使用API对于大多数用户,API控制台通过WebDashboard面板(如YACD、zashboard以图形化界面形式呈现。用户只需在Dashboard设置中填入ClashAPI的地址(如127.0.0.1:9090)和密钥(若有设置secret),即可在浏览器中可视化管理Clash,完全无需接触命令行或配置文件。Dashboard面板会将API的各个端点转化为直观的按钮、列表和开关,让管理操作变得简单。无图形界面的命令行管理方式在Linux服务器或无图形界面的环境中,用户可通过curl命令直接调用API端点实现对Clash的管理。以获取节点列表为例,执行curlhttp://127.0.0.1:9090/proxies即可返回所有节点的JSON数据;切换节点执行curl-XPUThttp://127.0.0.1:9090/proxies/策略组名-d'{"name":"目标节点"}'。这种方式适合自动化运维和数据采集等场景,可集成到脚本中实现智能节点切换。节点切换与延迟测试实时切换代理节点和策略组API控制台最核心的功能是通过/proxies端点实时切换当前使用的代理节点或策略组。在Dashboard面板的“代理”或“Proxies”页面中,用户点击任一节点即可完成切换,操作实时生效,无需重新加载配置。对于select类型的手动策略组,切换操作通过PUT/proxies/:name接口实现,指定目标节点名称即可。该功能在Linux无图形界面环境中尤为实用,用户可通过命令行或脚本快速切换节点。对节点进行延迟测试API控制台支持通过/proxies/:name/delay端点对单个节点进行延迟测试,帮助用户判断当前节点的网络响应状况。在Dashboard面板中,右键点击节点卡片选择“测速”即可触发延迟测试,测试结果以毫秒数值显示。该测速功能与客户端内置的延迟测试原理一致,均通过向预设URL发送请求并计时响应时间实现。延迟测试可用于筛选当前网络环境下的最优节点,辅助手动或自动切换决策。获取完整的节点列表和状态通过GET/proxies接口,API控制台可获取当前配置中所有节点和策略组的完整列表及其状态信息。返回的JSON数据包含每个节点的名称、类型、当前是否被选中以及所属的策略组等信息。在Dashboard面板中,该数据被渲染为可视化的节点卡片列表,用户可一目了然地看到全部可用节点及其组织关系。该接口也是自动化脚本实现节点轮换功能的基础数据来源。连接管理功能实时查看当前活跃连接API控制台通过/connections端点可实时查看Clash当前处理的所有活跃网络连接。在Dashboard面板的“连接”页面中,用户可看到每条连接的详细信息,包括目标地址、协议类型、传输速率和连接时长等。连接列表支持卡片和表格两种视图模式,PC端推荐使用表格视图,移动端推荐使用卡片视图,点击任意连接行可查看更详细的连接信息。该功能可帮助用户了解当前的流量分布和代理使用情况。主动关闭指定或全部连接API控制台支持通过DELETE/connections端点关闭当前所有连接,或通过DELETE/connections/:id端点关闭指定的单条连接。在Dashboard面板中,用户可点击“断开所有连接”按钮一次性清理所有活跃连接,或点击某条连接的关闭按钮单独断开该连接。该功能在切换节点后需要立即生效的场景中尤为有用——关闭所有连接可让新建立的连接立即使用新节点,无需等待旧连接自然超时。连接信息对排查问题的帮助在ClashVPN出现特定网站无法访问或分流异常时,连接面板可帮助用户快速定位问题。通过查看某条连接命中的规则名称、目标地址和当前状态,用户可判断该流量是否被正确代理,以及是否匹配了预期规则。该信息与Clash客户端的「连接」面板功能一致,但通过API方式可远程查看,适合管理远程服务器上的Clash实例。配置管理与规则查看查看和重新加载配置文件API控制台通过/config端点支持获取当前配置状态和重新加载配置文件。GET/config返回当前加载的配置摘要信息,PUT/config触发Clash重新读取config.yaml文件并应用新的配置。该功能在无图形界面的Linux服务器上尤为实用,用户修改配置文件后无需重启Clash进程,通过API调用即可使新配置生效,实现配置的热更新。查看当前生效的分流规则API控制台通过/rules端点可获取当前正在生效的分流规则列表。返回的规则列表按配置文件的顺序排列,每条规则显示其类型(如DOMAIN-SUFFIX、GEOIP)、匹配值和目标动作(如PROXY、DIRECT、REJECT)。在Dashboard面板中,该数据帮助用户理解特定流量被如何路由,是排查规则配置问题的重要辅助工具。该功能与Clash客户端的规则查看功能相对应。远程修改代理运行模式部分API客户端(如ClashXPro的服务器管理应用)支持通过API远程切换Clash的代理运行模式。用户可在Dashboard面板或管理应用中在规则模式(Rule)、全局模式(Global)和直连模式(Direct)之间切换,无需登录服务器修改配置文件。该功能在Clash部署于远程服务器且需要根据不同使用场景快速切换模式时非常方便。API控制台的使用场景无图形界面Linux服务器的管理在Linux服务器上,Clash通常以命令行方式运行,没有图形界面。用户可通过WebDashboard(如http://yacd.haishan.me)连接服务器的API端口,在浏览器中完成节点切换、连接查看和配置管理等全部操作。这种方式让命令行环境下的Clash管理变得直观便捷,降低了Linux服务器的使用门槛。自动化脚本与程序集成API控制台支持通过标准HTTP请求调用,可轻松集成到自动化脚本和程序中。例如在数据采集程序中,可编写脚本定期检测当前节点是否返回429状态码,若触发则自动调用API切换至下一个可用节点,实现IP的自动轮换。这种自动化能力让Clash不再只是一个手工操作的工具,而是可以作为程序化网络管理的组件使用。多设备远程统一管理在拥有多台Clash设备的环境中,API控制台可实现集中管理。将每台设备的external-controller监听地址设为0.0.0.0并配置防火墙放行后,管理员可在任一设备上通过Dashboard面板连接所有Clash实例的API,实现统一管理和监控。多设备集中管理在企业网络或家庭网关场景中能有效提升运维效率。常见问题FAQ

教程

Clash vpn的RESTful API怎么用?地址和端口是什么?

ClashVPN的RESTfulAPI通过配置文件中的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-L9090:服务器IP:9090)将远程API映射到本地访问。secret字段用于设置API访问密钥,保护远程管理安全。RESTfulAPI的配置与基础信息配置文件中的external-controller字段ClashVPN的RESTfulAPI通过配置文件中的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监听所有网络接口。默认地址与端口值ClashRESTfulAPI的默认监听地址为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修改代理配置。RESTfulAPI的调用方法通过浏览器访问Dashboard面板RESTfulAPI最常用的方式是配合Web管理面板(Dashboard)使用,通过浏览器可视化管理Clash代理。访问http://clash.razord.top或http://yacd.haishan.me等第三方Dashboard页面,在设置中填入ClashAPI的地址(如127.0.0.1:9090)和密钥即可连接。连接成功后可在面板中切换节点、查看连接状态、修改代理模式等,无需操作配置文件。部分用户也可通过本地部署的Dashboard容器访问。使用curl命令调用API接口通过curl命令可直接调用RESTfulAPI的各个端点,实现自动化管理。获取当前配置信息的示例为curlhttp://127.0.0.1:9090/config,获取节点列表的示例为curlhttp://127.0.0.1:9090/proxies,切换代理节点的示例为curl-XPUThttp://127.0.0.1:9090/proxies/策略组名-d'{"name":"节点名称"}'。若配置了secret认证,需在请求头中添加Authorization:Beareryour-password。具体端点列表可参考ClashAPI文档。常用的API端点功能RESTfulAPI提供多个功能端点,覆盖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且ClashAPI与浏览器不在同一设备时,可能遇到跨域请求被拒绝的问题。解决方法包括将external-controller监听地址改为0.0.0.0解决跨域IP限制,或使用SSH端口转发将远程API端口映射到本地。命令示例为ssh-L9090:服务器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,让容器监听所有接口。RESTfulAPI的常见使用场景通过Dashboard切换代理节点Dashboard面板通过RESTfulAPI实时获取节点列表和延迟数据,用户可在可视化界面中切换代理节点。访问Dashboard页面并连接API后,在“代理”或“Proxies”页面中点击任一节点即可切换。切换操作通过PUT/proxies/:name接口实现,Dashboard自动调用无需手动处理。该功能让无图形界面的Linux服务器也能通过浏览器管理Clash代理。自动化脚本与程序集成RESTfulAPI支持通过脚本或程序自动化管理Clash,例如定时切换节点、监控连接状态或重载配置。使用curl命令结合cron定时任务可定期执行节点切换,curl-XPUThttp://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

教程

Clash vpn中的DNS解析失败后怎么回退到系统默认DNS?

ClashVPN内置DNS解析失败后,临时回退到系统DNS可通过三种方式实现。将nameserver改为系统DNS地址(如通过ipconfig/all查看)或114.114.114.114等公共DNS可快速恢复域名解析,配置示例为nameserver:-114.114.114.114。通过nameserver-policy为解析失败的特定域名指定可用的DNS服务器可实现精准回退,不影响全局配置。若Fake-IP模式下解析持续失败,可将enhanced-mode切换为redir-host模式,直接返回真实IP避免Fake-IP兼容性问题。关闭Clash后网络仍异常时,检查系统代理设置是否残留指向Clash端口(127.0.0.1:7890),执行ipconfig/flushdns和netshwinsockreset清理系统DNS缓存和网络堆栈后重启电脑。系统DNS服务完全失效时,检查注册表HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Dnscache\Parameters\DnsPolicyConfig\WhiteNrpt下的GenericDNSServers值是否被篡改为私有IP地址,改回正常DNS地址即可恢复。Clash内置DNS解析失败的直接表现解析失败时所有域名无法访问当Clash内置DNS发生解析失败时,用户会观察到所有通过Clash代理的网站均无法访问,浏览器长时间停留在“正在解析主机”状态,最终显示“无法解析服务器地址”或“ERR_NAME_NOT_RESOLVED”错误。此时Clash界面可能显示节点连接正常且延迟测试通过,但实际无法访问任何网站。造成DNS解析失败的原因包括DNS服务器不可达、DNS死锁(DoH/DoT服务器域名无法解析)、fallback配置不当导致境外域名被污染等。DNS死锁是解析失败的最常见原因DNS死锁是指Clash需要解析DoH/DoT服务器的域名才能建立加密DNS连接,但该域名本身又需要通过该DNS通道解析,形成循环依赖。当default-nameserver未配置或配置了DoH/DoT地址而非纯IP地址时,Clash无法解析https://dns.google/dns-query中的dns.google域名,导致所有DNS解析请求全部超时。DNS死锁的典型表现是Clash启动后所有网站都无法访问,节点连接显示正常,日志中无明确的DNS错误提示,仅显示解析超时。特定域名解析失败的场景部分情况下,解析失败仅针对特定域名而非全部域名,表现为某些网站(通常为境外网站)无法访问而其他网站正常。这种场景通常与fallback配置不当有关——境外域名的解析请求未能正确通过代理通道发送到可用的国外DNS服务器,导致解析请求被运营商DNS污染。在Clash的Debug日志中可看到针对这些域名的failedtoresolve或contextdeadlineexceeded错误信息。临时回退到系统DNS的方法将nameserver直接改为系统DNS地址当Clash内置DNS解析失败时,最直接的临时回退方案是将Clash配置中的nameserver改为操作系统的默认DNS服务器地址。在Windows系统中,可在命令提示符中执行ipconfig/all查看当前网络适配器的DNS服务器地址(通常为192.168.1.1或运营商DNS),然后在Clash的config.yaml中将nameserver改为该地址。配置示例为nameserver:-192.168.1.1,这样Clash的DNS解析请求将直接发送到路由器的DNS服务,绕过Clash内置DNS的故障链路。使用公共DNS作为nameserver的快速回退如果无法获取系统DNS地址或系统DNS本身也受到污染,可将nameserver快速切换为稳定的公共DNS(如114.114.114.114或223.5.5.5),这些DNS服务器在国内响应速度快且稳定性高。配置示例为nameserver:-114.114.114.114-223.5.5.5。该回退方案可让Clash在不依赖DoH/DoT加密通道的情况下恢复基本的域名解析能力,虽然无法解决DNS污染问题,但可作为临时恢复访问的应急手段,待问题定位后再优化回加密DNS配置。关闭Clash内置DNS完全回退到系统解析在Clash内置DNS解析持续失败且上述方法均无效的极端情况下,可将dns.enable设为false完全关闭Clash内置DNS,让所有域名解析请求回退到操作系统默认的DNS解析流程。配置示例为dns:enable:false。此方案会彻底放弃Clash的DNS解析优化和防污染能力,但可快速恢复网站访问。需要注意的是,关闭内置DNS后,Clash的Fake-IP模式也将失效,DOMAIN等基于域名的规则匹配效率会下降,且境外域名可能因运营商DNS污染而无法正常访问。通过nameserver-policy为特定域名回退为解析失败的域名指定直连DNSnameserver-policy允许为特定域名指定专用的DNS解析服务器,是精准回退DNS解析而不影响全局配置的最佳方案。当某个特定域名在Clash内置DNS中解析失败时,可在nameserver-policy中为该域名指定一个可用的DNS服务器(如系统DNS或114.114.114.114)。配置示例为nameserver-policy:"example.com":"114.114.114.114",这样只有example.com及其子域名的解析请求会使用114.114.114.114,其他域名仍使用Clash内置DNS的原有配置。该方案适用于内网域名或特定第三方服务域名解析失败需要单独回退的场景。使用Geosite分类批量回退国内域名当国内域名普遍解析失败但国外域名正常时,可通过nameserver-policy配合Geosite分类批量将国内域名的解析回退到系统DNS或国内公共DNS。配置示例为nameserver-policy:"geosite:cn":"114.114.114.114",表示所有属于cn分类(国内常用域名)的域名均使用114.114.114.114进行解析。该方案可批量解决国内域名在DoH/DoT加密DNS链路故障时的解析问题,同时保留境外域名通过代理通道解析,实现国内境外域名的隔离回退。redir-host模式作为最后回退方案当Fake-IP模式下DNS解析持续失败且无法通过配置调整恢复时,可将enhanced-mode从fake-ip切换为redir-host模式。redir-host模式不使用Fake-IP虚拟地址,而是直接返回真实的DNS解析IP地址,可避免Fake-IP模式下的兼容性问题和部分虚拟IP映射失败导致的解析异常。配置示例为enhanced-mode:redir-host。redir-host模式虽然会略微增加DNS解析的等待时间(需等待真实IP返回),但兼容性更好,适合作为Fake-IP模式无法正常工作的最后回退方案。通过系统网络重置解决DNS故障DNS缓存清理与网络堆栈重置当ClashVPN解析失败后,即使关闭Clash,系统DNS可能仍然异常,通常是因为系统的DNS缓存残留了无效解析记录或网络堆栈中存在冲突配置。在命令提示符中以管理员身份执行ipconfig/flushdns清理DNS缓存,执行netshwinsockreset重置Winsock网络堆栈。执行完成后重启电脑,系统DNS服务恢复到初始状态。此操作可解决因Clash非正常退出或DNS缓存残留导致的系统级DNS异常,使回退到系统DNS后能够正常工作。检查系统代理设置是否残留指向Clash当Clash内置DNS失败且已关闭Clash后浏览器仍无法上网时,可能是系统代理设置残留指向了Clash的端口。进入Windows「设置→网络和Internet→代理」检查“使用代理服务器”开关是否仍处于开启状态且地址指向127.0.0.1:7890。若存在残留,手动关闭代理开关后浏览器即可恢复正常直连网络。这一步骤在Clash非正常退出时尤为必要,因为系统代理残留会持续将浏览器请求发送到已关闭的Clash端口,导致DNS解析和网络连接均无法正常工作。检查注册表中DNSCache配置是否被篡改代理软件非正常关闭可能修改Windows注册表中的DNSCache相关配置,导致系统DNS服务失效。在注册表路径HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Dnscache\Parameters\DnsPolicyConfig\WhiteNrpt下检查GenericDNSServers值,若被改为一个非正常的本地IP地址(如10.x.x.x),会导致所有DNS查询失败。将该值改回正常的DNS地址(如114.114.114.114或8.8.8.8)后,系统DNS服务即可恢复正常,无需重装系统。常见问题FAQ

教程

Clash vpn自定义HOSTS能通过Clash实现吗?

在ClashVPN中,通过config.yaml顶层的hosts字段可实现自定义域名解析映射,格式为hosts:"域名":"IP地址",支持泛域名解析(如*.clash.dev)和IPv6地址。hosts配置仅在dns.enable:true时生效,且优先级高于Fake-IP虚拟地址分配和DNS缓存。典型应用场景包括广告屏蔽(将广告域名映射到127.0.0.1)、内网服务解析(将内网域名映射到内网IP)和强制域名使用固定IP。直接在订阅配置中添加hosts会在更新时被覆盖,需通过ClashVergeRev的Merge功能或Parsers预处理将hosts配置叠加到订阅配置之上持久保存。Clash的hosts配置与操作系统hosts文件的区别在于生效范围(仅Clash代理流量)和修改便利性(无需管理员权限)。配置hosts时需注意域名映射可能影响GEOIP等基于IP的规则匹配结果,若将境外域名映射到国内IP可能导致分流错误。在Clash配置文件中直接添加hosts字段hosts字段的配置位置与格式ClashVPN支持在配置文件中通过hosts字段实现自定义域名解析映射,效果与操作系统中的hosts文件类似但作用范围仅限于Clash代理环境。在config.yaml文件的顶层字段中添加hosts条目,格式为域名:IP地址,例如hosts:"example.com":"1.2.3.4"表示将example.com域名解析为1.2.3.4这个IP地址。该配置生效后,Clash在处理DNS解析请求时会优先使用hosts中定义的映射关系,而非向DNS服务器发起查询。泛域名解析与通配符支持Clash的hosts字段支持使用通配符*进行泛域名解析,可匹配所有子域名。配置示例为"*.clash.dev":"127.0.0.1"会将clash.dev的所有子域名(如a.clash.dev、b.clash.dev)均解析到127.0.0.1。静态域名的优先级高于泛解析规则,例如同时配置"foo.clash.dev":"1.2.3.4"和"*.clash.dev":"127.0.0.1"时,foo.clash.dev会解析到1.2.3.4,其他子域名解析到127.0.0.1。泛域名解析支持IPv4和IPv6地址的混合使用。hosts配置在Clash中的生效范围hosts字段仅在Clash内置DNS开启(dns.enable:true)时才生效,若未启用内置DNS则hosts配置无效。在Fake-IP模式下,hosts中的映射优先于Fake-IP虚拟地址分配,当hosts中包含某个域名的映射时,该域名不会获得198.18.x.x的虚拟IP而是直接返回配置的真实IP。hosts配置的作用范围仅限于Clash代理环境,不影响操作系统本身的hosts文件,关闭Clash后这些映射即失效。hosts配置的优先级与执行机制hosts优先于DNS查询的解析顺序Clash在解析域名时遵循固定的优先级顺序,hosts字段中定义的映射优先级最高,其次是DNS缓存,最后才是向nameserver或fallback发起真实的DNS查询。当用户访问一个域名时,Clash首先检查hosts中是否存在该域名的映射条目,若存在则直接返回对应的IP地址,不再进行后续的DNS解析步骤。这种优先级机制使得hosts成为覆盖DNS解析结果的最直接手段,可用于强制特定域名走指定的IP地址。Fake-IP模式下的hosts处理逻辑在Fake-IP模式下,hosts中的映射在Fake-IP虚拟地址分配之前生效,因此配置了hosts的域名不会获得198.18.x.x的虚拟IP地址。当某个域名在hosts中定义为1.2.3.4时,Clash直接将该IP地址返回给应用,应用向1.2.3.4发起连接,Clash根据该域名匹配规则系统进行路由决策。这种处理方式使得hosts成为Fake-IP模式下确保特定域名走真实IP的补充手段。hosts配置与规则系统的交互hosts中配置的域名映射会影响规则系统的匹配结果,因为规则匹配基于hosts解析后的IP地址或Fake-IP虚拟地址。当某个域名在hosts中被映射到特定的公网IP时,GEOIP等基于IP的规则会基于该公网IP做出分流决策。若将某个境外域名映射到国内IP地址,GEOIP,CN,DIRECT规则可能将其识别为国内IP而直连放行,导致代理失效。因此在配置hosts时需考虑其对规则匹配结果的潜在影响。hosts配置的典型应用场景屏蔽特定域名或广告服务器通过将广告或追踪服务器的域名映射到127.0.0.1或0.0.0.0,可在DNS层面实现广告屏蔽效果。配置示例为hosts:"ads.example.com":"127.0.0.1""tracker.example.net":"0.0.0.0",将这些域名的解析请求指向本地回环地址,应用无法建立连接从而达到屏蔽效果。这种方式的屏蔽粒度在域名层面,比浏览器插件更早生效,适用于所有经过Clash代理的流量。但该方法仅屏蔽DNS解析,不能替代专业的广告过滤规则(如GEOSITE,ads,REJECT)。强制特定域名使用固定IP地址当某个域名的DNS解析结果不稳定或因CDN调度返回了非最优节点时,可将该域名映射到已知的最佳IP地址。例如将github.com映射到某个响应快速的CDN节点IP,配置为"github.com":"140.82.112.3"。这种强制映射可绕过DNS解析环节的不确定性,确保每次访问都使用指定的服务器。但需注意该IP地址的可用性会随时间变化,若映射的IP失效则该域名将无法访问。内网服务解析的便利配置在局域网环境中,通过hosts将内网服务的域名映射到内网IP地址,可避免内网域名被公共DNS错误解析或泄露。配置示例为"nas.local":"192.168.1.100""printer.local":"192.168.1.101",将内网设备的域名解析映射到对应的内网IP。这些内网域名通过hosts直接解析,无需经过DNS服务器,解析速度快且不依赖外部网络。配合IP-CIDR,192.168.0.0/16,DIRECT等直连规则,可确保内网流量的正确路由。hosts配置与操作系统hosts文件的对比生效范围的区别Clash的hosts配置仅对经过Clash代理的流量生效,而操作系统的hosts文件对所有网络流量生效。当Clash未开启或某个应用绕过了Clash代理时,Clash的hosts配置不会产生任何作用。操作系统的hosts文件则影响系统级别的所有DNS解析,无论应用是否使用代理。在Clash中配置hosts的优势是不需要修改系统文件,且可根据不同的代理配置使用不同的映射规则,在移动端等无法修改hosts文件的场景中尤为便利。修改便利性与风险程度Clash的hosts配置通过编辑config.yaml文件或客户端的设置界面即可修改,无需管理员权限,修改后重新加载配置即可生效。操作系统的hosts文件(Windows的C:\Windows\System32\drivers\etc\hosts,Linux/macOS的/etc/hosts)需要管理员权限才能修改,且语法错误可能导致系统级DNS解析异常。Clash的hosts配置修改风险较低,配置错误只会影响Clash代理环境内的域名解析,不会波及系统其他部分。配置持久性与兼容性Clash的hosts配置在订阅更新时若直接写在订阅配置中会被覆盖而丢失,需要通过Merge或Parsers方式持久保存。操作系统的hosts文件不受任何订阅更新的影响,配置一旦写入永久有效直到手动修改。Clash的hosts配置在Fake-IP模式和redir-host模式下均可生效,但需要在dns.enable:true的前提下才能工作。操作系统hosts文件不受任何代理模式影响,在所有网络环境下均可使用。在订阅配置中持久保存hosts设置使用Merge功能添加hosts配置直接在订阅配置中添加hosts字段会在订阅更新时被覆盖而丢失,需通过ClashVergeRev的Merge功能将hosts配置叠加到订阅配置之上。在Merge的YAML编辑框中添加hosts:"example.com":"1.2.3.4",保存后每次加载配置时自动合并到订阅配置中。Merge规则存储在独立文件中,不随订阅更新被覆盖,从而实现hosts配置的持久保存。配置多个域名映射时在hosts字段下逐条列出即可。通过Parsers预处理添加hostsClash的Parsers预处理机制可在订阅更新时向配置文件中插入hosts字段,同样可实现持久化。在Parsers配置中指定订阅链接和要添加的YAML内容,包括hosts字段及其映射条目,如parsers:-url:订阅链接yaml:hosts:"example.com":"1.2.3.4"。每次订阅更新时Parsers会将hosts字段合并到拉取的配置中,确保自定义映射在每次更新后自动恢复。hosts配置与自定义规则的一并保存hosts配置通常与相关的规则配置一起使用,建议将两者一并保存在Merge或本地配置中。例如在hosts中将某个域名映射到特定IP后,在rules中为该域名配置对应的分流规则,两者放在同一个Merge配置中可保持一致性。配置示例为hosts:"internal.company.com":"10.0.0.1"配合rules:-DOMAIN-SUFFIX,company.com,DIRECT,确保内网域名解析到正确IP且直连不走代理。常见问题FAQ