跳到主要内容

首页 / 博客 / 功能详解

Clash Verge 端口设置详解:混合端口、SOCKS、HTTP 和 API 端口

Clash Verge 端口设置详解:混合端口、SOCKS、HTTP 和 API 端口

Clash Verge 设置里有一堆端口:混合端口、HTTP 端口、SOCKS 端口、重定向端口、外部控制端口。大部分人一辈子不用改,但一旦遇到端口冲突或者要配命令行工具,就得知道它们各自是干什么的。

五个端口分别是什么

端口一览1混合端口 Mixed Port一个端口同时支持 HTTP 和 SOCKS5,默认 7897,日常用它就够2HTTP 端口只接受 HTTP 代理协议,默认 7890 或关闭3SOCKS 端口只接受 SOCKS5,默认 7891 或关闭4重定向端口 Redir透明代理用,Linux5外部控制端口RESTful API,默认 9090,给面板和脚本用
混合端口出现之后,单独的 HTTP/SOCKS 端口基本可以关掉

混合端口(Mixed Port)

这是你 99% 情况下要用的那个。

它的特殊之处在于能自动识别协议:客户端发来 HTTP 请求它就当 HTTP 代理处理,发来 SOCKS5 握手它就当 SOCKS5 处理。所以填地址的时候,不管对方要 HTTP 还是 SOCKS,填同一个端口就行。

HTTP 端口 / SOCKS 端口

历史遗留。在混合端口出现之前需要分开配置。现在保留它们主要是为了兼容某些只认固定端口的老软件。

如果不需要,建议关掉(设为 0 或留空)——少开一个端口少一份暴露面。

重定向端口(Redir Port / TProxy Port)

用于 Linux 和 macOS 上的透明代理(配合 iptables/nftables 规则把流量重定向过来)。桌面用户基本用不上,做软路由才需要。

外部控制端口(External Controller)

默认 9090。这是 Mihomo 的 RESTful API,Clash Verge 界面本身就是通过它和内核通信的。

第三方面板(metacubexd、yacd)也连这个端口。

各类工具该填哪个端口

假设你的混合端口是 7897

工具配置方式
Windows 系统代理127.0.0.1 : 7897
Chrome / Edge跟随系统代理,不用单独配
Firefox设置 → 网络设置 → 手动,HTTP 和 SOCKS 都填 7897
Gitgit config --global http.proxy http://127.0.0.1:7897
npmnpm config set proxy http://127.0.0.1:7897
pippip install --proxy http://127.0.0.1:7897 包名
curlcurl -x http://127.0.0.1:7897 https://example.com
SSH~/.ssh/config 里加 ProxyCommand(见下)
Docker配置 daemon proxy,或直接开 TUN

SSH 走代理

# ~/.ssh/config
Host github.com
  HostName github.com
  User git
  # Windows(需要装 ncat 或用 connect.exe)
  ProxyCommand ncat --proxy 127.0.0.1:7897 --proxy-type http %h %p
  # macOS / Linux
  # ProxyCommand nc -X connect -x 127.0.0.1:7897 %h %p

环境变量一次搞定

大部分命令行工具都认这几个环境变量:

# macOS / Linux
export http_proxy=http://127.0.0.1:7897
export https_proxy=http://127.0.0.1:7897
export all_proxy=socks5://127.0.0.1:7897
export no_proxy="localhost,127.0.0.1,::1,*.local,192.168.0.0/16"
# Windows PowerShell
$env:HTTP_PROXY  = "http://127.0.0.1:7897"
$env:HTTPS_PROXY = "http://127.0.0.1:7897"
$env:NO_PROXY    = "localhost,127.0.0.1,::1,*.local"

端口冲突怎么办

启动时报「端口被占用」「address already in use」,说明有别的程序抢先占了。

找出是谁占的

Windows:

netstat -ano | findstr :7897
# 拿到最后一列的 PID,再查是什么程序
tasklist | findstr <PID>

macOS / Linux:

lsof -i :7897
# 或
ss -tlnp | grep 7897

两条解决路

端口冲突的处理查出占用进程netstat 或 lsof判断是否必要是不是另一个代理软件停掉它 或 改 Clash Verge 端二选一重启 Clash Verge验证
常见的抢端口者:另一个代理客户端、某些国产软件的内置服务

改端口的话,选一个 1024 到 65535 之间、没被占用的数字。常用备选:789878991080810809

一个常见误解:改端口不会提速

有人以为换个端口能绕过限速。不会的——端口只是本机上的一个入口编号,跟你的网络速度、节点质量没有任何关系。

真正影响速度的是节点线路、带宽、和你到节点的网络路径。

关于「允许局域网连接」和端口的关系

打开「允许局域网连接」后,端口的监听地址会从 127.0.0.1 变成 0.0.0.0

监听地址的区别127.0.0.1:7897只有本机能连最安全默认设置0.0.0.0:7897局域网内任何设备都能连需要防火墙配合共享给手机、电视时才开
用 netstat 能直接看到当前监听在哪个地址上

验证方法:

netstat -an | findstr 7897

看到 0.0.0.0:7897 说明局域网可访问,看到 127.0.0.1:7897 说明只有本机可用。

端口相关的排查小技巧

测试代理端口是否真的在工作:

curl -x http://127.0.0.1:7897 -I https://www.google.com

返回 HTTP 状态码说明代理通了。报 Connection refused 说明端口没开或者填错了。

测试外部控制 API:

curl http://127.0.0.1:9090/version

返回 JSON 里带版本号说明内核在正常运行。

这两条命令在排查「到底是客户端问题还是节点问题」时特别有用:如果 API 正常但代理请求失败,问题在节点或规则;如果 API 都连不上,说明内核根本没起来。

小结

  • 日常只用混合端口,HTTP 和 SOCKS 单独端口可以关掉
  • 命令行工具用环境变量,记得配 no_proxy
  • 外部控制端口别暴露公网,要暴露就设 secret
  • 端口冲突时先查占用,改端口是最后手段

相关:局域网共享代理日志与连接页怎么看