你看到的错误:本质都是「本机入站地址:端口 已被别人占用」
在 Windows 上,无论是 Clash 内核还是承载它的 Clash Verge Rev 等图形客户端,启动时都要在本地打开一个或数个入站(监听)端口。若你更新版本、从别的客户端换过来、或本机还跑着旧实例,最常见的提示就是端口已被占用,典型数字包括 7890、7891、9090 等——具体以你配置为准。
从操作系统视角,这与「被墙」「节点挂了」不是一类问题:TCP 在绑定 0.0.0.0:端口 或 127.0.0.1:端口 时,如果该四元组范围内已有一个进程在 LISTEN,新进程再绑同一处就会失败。所以排查的第一步永远是:找出当前占用者是谁,再谈改配置或杀进程是否安全。
为什么大家总提 7890,以及 mixed-port 是什么
在 Clash 系配置中,mixed-port 表示在同一端口上同时提供通常意义上的 HTTP 代理与 SOCKS5 入站能力(以你所用的内核与客户端实现为准,菜单里有时写作「混合端口」或「Mixed」)。很多教程、面板说明和默认模板习惯把这一端口设成 7890,于是你在文章、截图和论坛里会反复看到「Clash 7890 端口」这种说法——它并不是魔法数字,只是约定俗成;真正生效的是你当前正在使用的 YAML 与 GUI 中保存的值。
部分旧配置或从别的工具迁移时,仍可能把 HTTP 的 port 与 socks-port 分开写。若你只改了 mixed-port 却漏掉另两个字段、或某第三方覆写里仍写死 7890,就会继续撞车。后文会提示你在同一份正在被内核加载的配置里做一次全面检索。
第一步:在 Windows 上用 netstat 查 PID
以管理员身份打开「命令提示符」或 PowerShell(右键「以管理员身份运行」),能避免部分系统上查看他人进程时权限不足。下面以最常见的 7890 为例,把 7890 换成你报错里或配置里写明的端口即可。
REM List listeners and owning PID for TCP port 7890
netstat -ano | findstr :7890
在输出中关注状态为 LISTENING 的行,最右侧一列是 PID(进程 ID)。若同一端口出现多行,通常对应双栈或多次绑定,仍以 PID 为线索即可。没有输出则说明当前没有进程在该端口上监听,此时若 Clash 仍报占用,要核对你搜的端口号与配置里的是否一致、以及冲突是否发生在你改端口之前的残留日志上。
第二步:用 PID 找到「到底是谁」
知道 PID 后,可以用任务管理器:「详细信息」页打开「PID」列,按数字查找;或在命令行执行(把 12345 换成你的 PID):
tasklist /FI "PID eq 12345"
常见情况包括:上一次未退出的 Clash 或同名内核、其它代理/VPN/抓包软件、以及误当成「空闲」但其实已被本机开发服务器(例如某次本地起的 HTTP 调试端口)占住。若占用者就是另一个 Clash 相关进程,多数场景下在托盘彻底退出、或在任务管理器里结束该进程后,新实例就能正常 bind;若是你明确还需要运行的软件,就应避免与之抢同一端口,改为调整 Clash 的 mixed-port,而不是强杀对方。
第三步:是结束进程,还是改 mixed-port?
若你确认占用者是自己的旧 Clash 实例、且不需要双开,优先用客户端自带的「退出」与「结束内核」做干净收尾,比直接强杀更不容易留下孤儿子进程。若你需要同时开两个会监听端口的程序,则必须保证端口不重叠:要么关其中一个入站,要么给 Clash 换端口。
对多数用户,更稳的做法是:选定一个你记得住、又不易与常见服务冲突的端口(例如 7892、10808 等,避开已用端口即可),在配置里把 mixed-port 改成该值,并一路同步到系统代理和依赖该端口的所有工具。只改 YAML 而忘记 Windows 设置里仍是 127.0.0.1:7890,会出现「Clash 已启动,但浏览器仍去连一个没人听的端口」的假象。
第四步:在配置中修改 mixed-port,并通篇搜一遍 7890
在正在使用的 config.yaml(或你使用的 GUI 的「覆写/合并」里最终参与加载的那份)中,将:
mixed-port: 7890
改为你选定的未占用端口,例如:
mixed-port: 7892
同时用编辑器的「全文搜索」在本配置及关联覆写中查找 7890 或旧端口,避免策略组、脚本或外部工具里写死了旧值。若仍保留独立的 port / socks-port 字段,请确保它们与预期一致且彼此不要互相冲突或与 mixed 重复(以你使用客户端的说明为准,有的版本在启用 mixed 后仍会校验其它入站行)。
使用 Clash Verge Rev 的读者,可在应用设置、内核与端口相关页面核对「与 YAML 是否一致」:有些操作会把界面里的端口写回文件,或反之。改完后建议保存 → 重载/重启内核,并在日志中确认已在新端口 LISTEN,而不是只改了磁盘上的字。
第五步:把 Windows 系统代理和 Clash「设置系统代理」改成同一组地址
在 Windows 的「设置 → 网络和 Internet → 代理」里,若你使用手动代理,请把地址与端口改为你现用的 127.0.0.1 加新 mixed-port。在 Clash 系客户端中,常有一键「系统代理」开关:其写入系统的内容必须与当前内核监听一致,否则会出现只有部分应用走对、或仍然指向旧端口的错配。
若你同时开启 TUN 模式 或依赖虚拟网卡的全局接管,与「本机入站环回端口」是两条并行的技术路径。本文只聚焦 mixed-port + 系统代理 这条最常被 7890 卡住的线;TUN 仍报错时,需要另看网卡、路由与驱动冲突,而不仅是端口数字。
第六步:若你有 WSL2 或其它写死过端口,要一并改
在 WSL2 里把 HTTP_PROXY 等变量指向 宿主机IP:7890 是常见习惯;你在 Windows 上把 mixed-port 改掉了,就务必同步更新 WSL2 侧引用的端口。具体写法与取宿主机 IP 的方式见本站 WSL2 与 Windows 宿主机 Clash 端口 一文。否则会出现「WSL2 里 curl 失败、Windows 浏览器却正常」的割裂,让人误以为是 WSL2 或 DNS 坏了。
选新端口的注意点与简单自检
避免选择已被其它常驻软件占用的低位端口,改完后可再次 netstat -ano | findstr :新端口 确认先由你的 Clash 在 LISTEN。若你启用了「允许局域网」与防火墙规则,改端口后也要相应放行新端口,而不仅是沿用旧 7890 的放行条目。
当一切对齐后,代理路径上的体验应与平时一致。若你仍对规则命中、连接日志有疑问,可结合 连接日志与规则命中 做下一步排查。
小结:端口冲突=先取证,再动刀
把流程压成一条线:netstat 找占用 → 用 PID 辨进程 → 关多余实例或给 Clash 换新 mixed-port → 在 YAML、GUI、Windows 系统代理、WSL2/其它工具中统一新端口。少做哪一步,都容易留一半旧配置。相比反复重装客户端,把「谁占了 7890、我现在到底该连哪个端口」说清楚,能省掉大量无效折腾。
需要核对字段说明或更完整的 YAML 语义时,可打开 使用文档中心 对照。若你尚未从本站获取安装包,也建议用固定下载入口装稳定版本,再按上文步骤自测端口与系统代理。开源仓库适合查版本与提 Issue,日常安装与分发仍以本站 Clash 客户端下载页 为主路径。完成下载与基础配置后,把 mixed-port 与系统代理设成同一句 127.0.0.1:端口,再跑一次 netstat 复核,新环境下就不容易被「端口被占用」反复绊住。
→ 立即免费下载 Clash,开启流畅上网新体验