Linux 配置 clash 代理
创建并配置服务文件
编辑 /etc/systemd/system/clash_meta.service,内容示例如下(需根据实际路径调整):
1 | [Unit] |
关键参数说明:
- ExecStart:指定 clash_meta 的启动命令和配置目录。
- Restart=always:确保服务崩溃后自动重启
启用开机自启
执行以下命令使配置生效:
1 | sudo systemctl daemon-reload # 重新加载配置 |
命令的作用分析
- sudo systemctl daemon-reload
重新加载 systemd 的配置文件(如 .service 文件),仅对本次修改生效,不影响开机自启。
(例如:修改了 /etc/systemd/system/clash_meta.service 后需执行此命令使配置生效)
- sudo systemctl enable clash_meta
关键命令:将 clash_meta 服务添加到开机自启列表,下次开机会自动启动。
(实际效果:在 /etc/systemd/system/multi-user.target.wants/ 下创建服务符号链接)
- sudo systemctl start clash_meta
立即启动服务,但仅对当前会话有效,不直接影响开机行为。
验证是否成功:
1 | systemctl is-enabled clash_meta # 输出应为 "enabled" |
验证自启动机制
检查服务状态:
1 | systemctl list-unit-files | grep clash_meta # 确认状态为 "enabled" |
查看日志:
1 | journalctl -u clash_meta -f # 实时跟踪日志 |
常见问题
- 路径错误:确保 ExecStart 中的路径正确(如 /usr/local/bin/clash_meta 是否存在)
- 权限不足:服务文件需以 root 权限创建,或通过 User= 指定运行用户
- 依赖未满足:若依赖网络,需在 [Unit] 中添加 After=network.target
bash 的配置
1 | # Clash 代理端口 |
VMWare 的 Linux 虚拟机共享 Windows 主机的 VPN
方案 2:NAT 模式 + Windows 网络共享
另一种方式是保持 VMware 使用 NAT 模式,并通过 Windows 主机的网络共享功能,将 VPN 流量共享给虚拟机。
步骤:
在 Windows 上启用网络共享:
确保 Clash 在 Windows 主机上运行,并已连接到 VPN。
打开 控制面板 > 网络和共享中心 > 更改适配器设置。
右键点击你的 VPN 连接(通常是一个以 Ethernet 开头的适配器),选择 属性。
在 共享 标签页,勾选 允许其他网络用户通过此计算机的 Internet 连接连接。
选择虚拟机使用的网络适配器(例如 VMware 的 VMnet8 适配器),然后点击确定。
配置虚拟机网络为 NAT:
在 VMware 中,确保虚拟机的网络适配器设置为 NAT(这通常是默认设置)。
在 NAT 模式下,虚拟机会通过 Windows 主机访问网络,但流量会被路由到共享的网络适配器。
验证虚拟机是否可以通过 VPN 访问网络:
启动虚拟机,测试网络连接。
如果虚拟机连接成功并通过 VPN 访问互联网,那么配置就完成了。
WSL1 通过主机的 clash 客户端访问网络
方法一:配置环境变量(适用于普通网络请求)
适合 curl、wget、apt、pip、git 等命令行工具走代理。
1 | echo 'export http_proxy=http://127.0.0.1:7890' >> ~/.bashrc |
验证代理是否有效:
1 | curl cip.cc |
这个网站会返回你的公网 IP。
1 | curl https://www.google.com |
应该会返回网页。
临时开启:
如果你只想暂时走代理一次,不想改 .bashrc,你可以直接这样运行:
1 | # 方法1 |
方法二:使用 proxychains 全局转发(适用于所有程序,包括二进制)
安装 proxychains,让任意程序走 Clash 的代理。
- 安装 proxychains
1 | sudo apt update |
- 编辑配置 /etc/proxychains.conf
1 | sudo vim /etc/proxychains.conf |
在文件末尾加一行或修改为:
1 | socks5 127.0.0.1 7890 |
注意:不要改成 http,要用 socks5。
使用 proxychains(只代理你想代理的程序):
1 | proxychains curl https://www.google.com |
优点:
- 精准控制哪些程序走代理。
- 不影响系统其他设置。
缺点:
- 每次都要手动加 proxychains。
方法三:为单独的程序配置代理
- 配置 git 使用代理
执行以下命令设置全局代理(只设置一次即可):
1 | git config --global http.proxy http://127.0.0.1:7890 |
若你之后想关闭 git 代理,可运行:
1 | git config --global --unset http.proxy |
- 配置 pip 使用代理
在主目录创建 pip 配置文件:
1 | mkdir -p ~/.config/pip |
添加内容:
1 | [global] |
- 配置 apt 使用代理
编辑 apt 的配置文件:
1 | sudo mkdir -p /etc/apt/apt.conf.d |
粘贴以下内容(假设 HTTP 代理端口是 7890):
1 | Acquire::http::Proxy "http://127.0.0.1:7890"; |
方法四:配置 iptables + redsocks(实现真正的全局转发)
适合高级用户,WSL2 使用 TUN 模式实现系统级全局代理。这比较复杂,建议在需要所有流量强制走代理时使用。TODO
mihomo(clash meta内核)
下载地址: https://github.com/MetaCubeX/mihomo/releases (clash meta内核)
架构示意图:
1 | 你的浏览器(客户端) → localhost:7890 (Clash监听) → 外网代理服务器 → 目标网站 |
- 启动:
1 | INFO[2025-11-28T11:21:31.004426816+08:00] RESTful API listening at: [::]:9090 |
可以看到clash创建了前置代理,http代理端口为:7890 ,socks5代理端口为:7891 ,RESTful API的端口是9090 (这些端口不同版本可能不一样,实际以终端输入的为准)
说明:
- 通过访问 http 代理和 socks5 代理都可以让流量经过代理。
- RESTful API 可以用于控制 VPN 的配置方式。
- 命令行版 mihomo 默认不会自动设置系统代理。
- 设置系统代理或浏览器代理。
方法一:手动设置系统代理(推荐)
在 Windows 系统中:
打开 设置 → 网络和 Internet → 代理
在 手动设置代理 部分,打开开关
填写以下信息:
地址: 127.0.0.1
端口: 7890 (这是 mihomo 的默认 HTTP 代理端口)
点击 保存
在 macOS 系统中:
打开 系统设置 → 网络 → 选择当前网络连接 → 详细信息 → 代理
勾选 网页代理(HTTP) 和 安全网页代理(HTTPS)
服务器填写 127.0.0.1,端口填写 7890
点击 好 应用设置
在 Linux 系统中(GNOME):
打开 设置 → 网络 → 网络代理
选择 手动
在 HTTP 和 HTTPS 代理中填写:
服务器: 127.0.0.1
端口: 7890
点击 应用
完成设置后,Chrome 应该立即就能通过代理访问外网了。
方法二:使用命令行工具设置代理(临时方案)
如果您不想修改系统设置,可以临时设置环境变量:
1 | # 在启动 Chrome 前设置环境变量(Linux/macOS) |
或者在启动命令中直接指定代理:
1 | google-chrome --proxy-server="http://127.0.0.1:7890" & |
方法三:在chrome浏览器或者firefox浏览器的SwitchyOmega或者Zero Omega插件里配置代理
注:浏览器代理只针对当前浏览器,其他应用的流量不会通过代理。
- RESTful 控制台
可以通过web控制面板RESTful API切换节点和模式,可用下面两个来控制。
https://d.metacubex.one/ 或者 https://yacd.metacubex.one/
注:原理说明
步骤 1:用户访问 Yacd 网站
1 | 用户浏览器 → https://yacd.metacubex.one |
- 浏览器加载 Yacd 的静态资源(HTML、JS、CSS)
- 所有代码在浏览器沙箱环境中运行
步骤 2:Yacd 尝试连接本地 API
1 | // Yacd 代码中的连接逻辑 |
步骤 3:浏览器执行 CORS 检查
1 | 浏览器发送 OPTIONS 预检请求到 127.0.0.1:9090 |
步骤 4:建立双向通信
- 配置操作:通过 HTTP PATCH/PUT 请求
- 实时数据:通过 WebSocket 或 Server-Sent Events (SSE)
- 流量监控:持续的 HTTP 流或 WebSocket 连接