本文目录
关掉窗口后,代理内核或其他本机程序可能还在占用同一个端口。新程序启动不了,并不说明订阅已经损坏;修复的起点是把实际端口和占用进程对应起来,随后只处理确认冲突的程序,保留仍在工作的连接。
address already in use:哪个实际端口无法绑定?
先保留日志中的 address already in use、Bind failed 或 Start Mixed(http+socks) server error,并记下它们指向的本地端口。出现这些错误时,新程序没有完成端口绑定。
端口是程序接收请求的入口编号;使用自己日志中的 mixed-port、DNS 或 external-controller 数值,报告里的 7890 和 1053 只是示例。
Mihomo 文档说明,mixed-port 是同时接受 HTTP(S) 与 SOCKS 请求的本地入口。新内核无法绑定它,表示新内核没有接管该入口;已有监听者仍可能处理请求,所以还要核对实际占用进程与连接记录。
Clash Verge Rev issue #7861 记录了 macOS 服务模式下 GUI 异常结束后,root 用户运行的 verge-mihomo 继续占用 mixed-port 与 DNS 端口。Issue #6741 则记录了 Linux 重新登录时新旧内核争用 mixed-port。
两项目前仍是 open issue,根因分析来自报告者,不能写成维护者已经确认的普遍结论。
Start Mixed(http+socks) server error: listen tcp :7890: bind: address already in use
Start DNS server(TCP) error: listen tcp 0.0.0.0:1053: bind: address already in use
Start DNS server(UDP) error: listen udp 0.0.0.0:1053: bind: address already in use按第一条错误分流
| 日志或现象 | 更可能的方向 | 下一步 |
|---|---|---|
| 只有 mixed-port 报 address already in use | 旧客户端、其他程序、残留内核或 Windows 保留端口 | 查实际监听者 |
| mixed-port 与 DNS 端口同时失败 | 另一份内核同时持有整组端口的可能性较高 | 查进程属主与启动时间 |
| 只有 external-controller 端口冲突 | 控制接口或 Dashboard 使用相同端口 | 单独检查控制端口 |
| 日志只有 connection refused,没有 bind 错误 | 目标端口未监听,不是端口已被占用 | 排查内核启动与配置 |
| 只有一个网站打不开 | 规则、DNS 或节点问题 | 不要按本文结束进程 |
退出客户端后,端口是否已经释放?
关闭 TUN 与系统代理,确认设备不依赖 Clash Verge Rev 也能联网,从托盘完整退出。保存当前 Profile、端口设置和首条故障日志,期间不更新订阅或改规则;公开反馈前隐藏订阅 URL、密码与 secret。
退出后等待几秒并重新检查端口。若监听已经消失,先只启动一次客户端观察;只有端口仍被占用,才继续查占用者。
根据 PID、运行账户和路径确认占用端口的程序
不能只凭进程名称判断谁占用了端口。先找到 PID(进程编号),再核对进程名、属主(运行账户)、启动时间和程序路径,才能区分当前正常工作的内核、退出后残留的旧内核与无关程序。
下面的 7890、1053 和 12345 都是示例。执行前替换为日志中的端口和刚查到的 PID;只读查询没有结果时,不要为了得到结果而随意结束进程。
$Port = 7890
$Tcp = Get-NetTCPConnection -LocalPort $Port -State Listen -ErrorAction SilentlyContinue
$Tcp | Select-Object LocalAddress, LocalPort, OwningProcess
$Tcp | ForEach-Object {
Get-Process -Id $_.OwningProcess | Select-Object Id, ProcessName, Path
}
Get-NetUDPEndpoint -LocalPort 1053 -ErrorAction SilentlyContinue |
Select-Object LocalAddress, LocalPort, OwningProcessPORT=7890
sudo lsof -nP -iTCP:${PORT} -sTCP:LISTEN
sudo lsof -nP -iUDP:1053
ps -o user,pid,ppid,lstart,command -p 12345sudo ss -ltnp 'sport = :7890'
sudo ss -lunp 'sport = :1053'
ps -o user,pid,ppid,lstart,cmd -p 12345端口被其他程序或残留内核占用时,怎样处理?
端口属于另一款 Clash、VPN、开发服务器或本地代理
从该程序自己的界面正常退出,或让两款程序使用不同端口;不要结束未知系统进程。
Clash Verge Rev 已退出,端口仍属于 verge-mihomo
这符合残留内核特征。保存 PID 与属主后,按下面对应平台的方法只终止这一 PID,不结束其他同名进程。
进程属于 root 或管理员,结束后马上再次出现
不要反复强杀,转到客户端的服务模式修复或重装流程。
重新登录或快速重启客户端后偶发冲突
可能是新内核启动时,旧内核还没完成退出;先关闭重复自启动入口,并只启动一次客户端验证。
Windows 查不到监听者但仍无法绑定
检查端口是否落入 Windows excluded port range。
只有确认 PID 是客户端退出后残留的 verge-mihomo,才终止该进程并复查端口。macOS/Linux 先发送 TERM;Windows 的 Stop-Process 会直接终止,-Confirm 只增加确认提示。不要使用宽泛的 pkill,也不要结束仍在正常转发的内核。
# 把 12345 换成刚才确认的 PID
sudo kill -TERM 12345# 把 12345 换成刚才确认的 PID
Stop-Process -Id 12345 -ConfirmWindows 没有监听者时检查保留端口
Issue #6947 的 Windows 记录中,更换端口并重启系统代理后恢复使用;项目协作者同时建议先看 Mihomo 日志中的 Bind failed,并检查 Windows 或 Hyper-V 的保留端口。这个分支只适用于没有查到监听进程、但日志仍明确绑定失败的情况。
如果当前 mixed-port 落在保留范围内,在 Clash Verge Rev 的端口设置中选择一个没有监听、也不在保留范围内的新端口,再返回首页重新启用系统代理。只改端口而不核对占用者,不能处理仍在运行的残留内核。
netsh interface ipv4 show excludedportrange protocol=tcp
netsh interface ipv4 show excludedportrange protocol=udp
netsh interface ipv6 show excludedportrange protocol=tcp
netsh interface ipv6 show excludedportrange protocol=udp# 17890 只是示例,不能保证每台电脑都可用
Get-NetTCPConnection -LocalPort 17890 -ErrorAction SilentlyContinue
Get-NetUDPEndpoint -LocalPort 17890 -ErrorAction SilentlyContinue残留内核反复出现时修复服务模式
Clash Verge Rev v2.5.2 源码提供服务安装、卸载、重装和 repair 命令;repair 路径会执行强制重装并等待服务 IPC 恢复。不同系统和构建的按钮名称可能不同,应使用当前客户端设置中的服务模式入口,不要手动删除服务文件。
v2.5.2 发布说明提到更健壮的服务生命周期管理,但这不能证明后续报告的残留内核和端口竞态已被稳定版彻底修复。本文提供的是故障恢复路径,不是版本修复公告。
服务模式恢复顺序
保持直连
关闭系统代理与 TUN,确认客户端停止时系统仍可联网。
保存诊断结果
记录端口、PID、进程属主、客户端版本和第一条 bind 错误。
使用客户端入口
可从当前客户端的服务模式设置中停用或卸载旧服务。Windows 上只有确认所用服务组件符合官方安全公告的修复要求,才可修复、重装或启用;未确认时保持停用。其他系统沿用客户端的卸载、修复或重装入口,等待权限提示与操作完成。
必要时重启系统
若管理员内核仍持有端口,重启后先确认端口已释放,再启动客户端。
只恢复一项功能
先启动原 Profile 和系统代理;确认正常后,再按需要恢复 TUN。
修复后验证端口、代理与退出释放
# 把 7890 换成当前 mixed-port
curl -I -x http://127.0.0.1:7890 https://example.com完成标准
- 启动前目标端口没有未知监听者
- 启动后 mixed-port 只由一份预期的 verge-mihomo 监听
- 新日志不再出现 address already in use 或 Bind failed
- 通过 mixed-port 的 curl 请求能收到 HTTP 响应
- 系统代理指向当前实际端口,Connections 能看到测试请求
- 正常退出客户端后端口释放,系统代理也能恢复
- 再次启动或重新登录后没有出现第二份残留内核
系统代理的真实 HTTPS 请求通过后才按需启用 TUN。若只在 TUN 开启后断网、日志又没有绑定错误,转查 DNS 与路由,不继续换 mixed-port。
改端口或重装服务无效时,恢复直连并保留证据
更换端口或重装服务后若问题更严重,先关闭系统代理和 TUN,让设备保持直连。只有旧端口已经释放时才恢复原端口;服务重装失败时先保持服务模式关闭,不要继续手动删除系统文件。
向官方反馈时,把本机结论写成观察结果,而不是替维护者宣布根因。不要上传完整配置、订阅 URL、节点密码、控制器 secret 或未脱敏日志。
提交官方 issue 前保留
- Clash Verge Rev 完整版本与安装来源
- 操作系统版本和 CPU 架构
- 是否启用服务模式、TUN 和开机自启
- GUI 是正常退出、崩溃还是被强制结束
- 第一条 address already in use 日志及实际端口
- 监听者的 PID、属主、启动时间和程序路径
- 退出客户端后端口是否释放,修复服务后是否复现
