
代理端口监听失败或被占用
端口被其他进程占用导致拒绝连接
当Clash日志中出现connection refused错误时,最常见的原因是Clash的代理端口(默认7890)未被正常监听,或被其他进程占用后导致新连接被拒绝。端口被占用时,Clash虽然显示运行中但实际无法接受任何代理请求,浏览器或应用尝试通过该端口连接时即被拒绝。在命令提示符中执行netstat -ano | findstr :7890查看端口占用情况,若发现被其他进程占用则结束该进程或修改Clash端口,然后重启客户端使新配置生效。
配置文件存在YAML格式错误导致核心启动失败
当config.yaml文件存在YAML格式错误(如缩进不一致、使用Tab键、冒号后缺少空格)时,Clash内核无法解析配置,启动后立即退出,导致代理端口未被监听。此情况下日志中除了connection refused外通常还会出现yaml: unmarshal errors等解析错误提示。检查配置文件缩进是否统一使用空格而非Tab,所有冒号后是否紧跟空格,使用在线YAML验证工具校验格式正确性,修正后重新加载配置。
核心进程被安全软件拦截
Windows Defender防火墙或第三方杀毒软件可能将Clash核心进程识别为可疑程序并拦截其网络通信,导致核心进程无法正常监听端口。被拦截后Clash界面可能显示运行正常但实际代理端口拒绝所有连接。将Clash的安装目录和核心可执行文件添加至防火墙和安全软件的排除列表或白名单中,确保核心进程的网络通信被放行后重新启动Clash。
DNS污染导致解析到不可达IP
运营商DNS对敏感域名返回错误地址
在大陆网络环境下,运营商DNS会对特定境外域名实施DNS污染,返回一个无法访问的错误IP地址。Clash尝试连接该错误IP时因目标端口没有服务而返回connection refused。此时节点延迟测试可能显示正常,但特定境外域名(如Google、ChatGPT)始终报错,且错误信息同时包含connection refused和证书不匹配相关提示。
DNS死锁导致代理链路中断
配置DNS over HTTPS(DoH)或DNS over TLS(DoT)时,若使用域名形式的服务器地址(如https://dns.google/dns-query),Clash需要先解析该域名才能连接DNS服务器,但该解析请求本身需要走代理通道,形成循环依赖导致DNS死锁。DNS死锁导致所有境外域名解析失败,Clash返回connection refused错误。改用纯IP地址形式的DoT服务(如tls://1.1.1.1:853)可彻底避免DNS死锁,或在Clash配置中使用IP地址而非域名的DoH端点。
启用内置DNS并将解析请求走代理通道
修复DNS污染和死锁的通用方案是启用Clash内置DNS,将境外域名的解析请求通过代理通道发送。在config.yaml中设置dns.enable: true和enhanced-mode: fake-ip,将fallback配置为纯IP地址的DoT服务器,并通过proxy: Proxy参数强制境外域名解析走代理通道。配置生效后,之前因DNS污染而connection refused的域名应恢复正常访问。
节点不可用或协议配置错误
节点自身已失效或端口被服务端关闭
当Clash尝试连接代理节点时,若节点服务器已关闭、端口被防火墙封锁或节点已过期,服务端会主动拒绝连接,Clash日志中显示connection refused。此时所有通过该节点的连接均失败,切换至其他节点后可正常使用。在Clash客户端中对各节点执行延迟测试,若该节点显示超时或红色状态,则该节点已不可用,需切换至其他节点或更新订阅获取最新节点列表。
代理协议参数填写错误导致握手被拒
手动添加节点时,若协议类型、加密方式、密码或UUID等参数填写错误,节点服务端在握手阶段会因认证失败而拒绝连接,Clash同样返回connection refused。检查节点配置中的type、cipher、password、uuid等字段是否与服务端信息完全一致,特别是大小写和特殊字符。可从订阅链接重新导入该节点,确保所有参数自动填充正确。
订阅链接失效导致节点列表为空
订阅链接过期或服务商更换订阅地址后,Clash更新订阅拉取到的配置文件可能为空或不含有效节点,此时Clash日志中出现connection refused且节点列表为空或全部显示不可用。在浏览器中打开订阅链接验证内容是否有效,若返回404或Invalid token则说明链接已失效,需登录机场面板重新获取新的订阅链接,在Clash中删除旧配置并重新导入。
系统网络配置干扰代理连接
系统代理残留导致请求被错误路由
卸载或非正常退出Clash后,Windows系统代理设置可能残留指向Clash端口(127.0.0.1:7890)的配置,此时Clash若未运行或未在该端口监听,系统尝试通过该代理发送请求时直接返回connection refused。进入Windows「设置→网络和Internet→代理」确认“使用代理服务器”开关已关闭,或在Clash启动后重新开启系统代理再关闭刷新配置。
防火墙阻止Clash核心进程的网络访问
Windows Defender防火墙或第三方安全软件可能阻止Clash核心进程的入站或出站连接,导致代理服务虽在运行但外部连接被拒绝。在防火墙的“允许应用通过防火墙”列表中确保Clash相关程序的“专用”和“公用”复选框均已勾选。若使用第三方安全软件,将Clash程序添加至排除列表,并在HTTPS扫描功能中将Clash设为例外。
网络环境本身对特定IP或端口的封锁
在校园网、企业网络或特定运营商网络环境中,网络管理员可能对代理常用端口(如7890、443、1080)实施了封锁策略,Clash绑定本地端口虽然成功,但外部网络请求被防火墙拦截返回connection refused。尝试将Clash的代理端口修改为其他未被封锁的高位端口(如10809),在浏览器中通过其他网络出口(如手机热点)测试代理是否正常,若热点正常则确认原网络存在端口封锁。
应用程序未正确配置代理地址
应用尝试连接错误的代理地址
浏览器或应用程序配置的代理地址若指向错误的IP或端口(如将127.0.0.1:7890误写为127.0.0.1:7891),Clash因在该端口未监听而返回connection refused。检查浏览器代理插件(如SwitchyOmega)中的代理地址和端口是否与Clash实际配置一致,确认地址为127.0.0.1且端口与Clash的HTTP代理端口匹配。终端环境变量中的http_proxy和https_proxy也需同步检查。
Python等程序未正确传递代理参数
使用Python requests等库发送请求时,若未在代码中显式传递proxies参数,请求可能仍直连网络而非通过Clash代理。若目标网站需要代理才能访问,直连请求因无法到达目标服务器而返回connection refused。在Python代码中定义proxies = {'http': 'http://127.0.0.1:7890', 'https': 'http://127.0.0.1:7890'}并在requests请求中设置proxies=proxy参数,确保请求通过Clash代理发出。
VS Code等开发工具代理配置不当
VS Code的ssh-remote等扩展在通过代理连接远程服务器时,若Clash的代理规则将远程服务器地址错误地标记为直连或拒绝,可能导致XHR failed错误(表现为连接被拒绝)。在Clash配置中为远程服务器的IP或域名添加直连或代理规则,或在VS Code设置中配置remote.SSH.useLocalServer: false绕过部分代理限制。
常见问题FAQ
Clash界面显示运行正常但日志报connection refused,怎么排查?
先执行netstat -ano | findstr :7890确认端口是否被Clash正常监听。若端口未监听,检查配置文件是否有YAML格式错误,查看任务管理器中Clash核心进程是否在运行。若端口正常监听,检查防火墙是否拦截了外部连接,以及应用配置的代理地址和端口是否与Clash一致。
所有节点都报connection refused,但节点延迟测试正常,是什么原因?
节点延迟正常但所有连接均被拒绝,通常指向DNS污染或防火墙干扰。检查Clash内置DNS是否已启用,境外域名的解析请求是否走代理通道。若在校园网或企业网络中,尝试切换至手机热点测试代理是否正常,排除网络环境对代理端口的封锁。
特定境外网站报connection refused但国内网站正常,怎么解决?
特定境外网站被拒且国内网站正常,高度指向DNS污染。启用Clash内置DNS,将fallback配置为纯IP地址的DoT服务(如tls://1.1.1.1:853),并通过proxy: Proxy参数强制境外域名解析走代理通道,修复DNS污染后该域名应恢复正常。