Linux 科学上网教程:Clash Verge Rev、mihomo 命令行与系统代理
Linux 上分两种情况:有桌面环境(Ubuntu、Fedora、Arch 等日常用)直接装 Clash Verge Rev,和 Windows / Mac 体验一致;无桌面的服务器用 mihomo 命令行内核,配合 systemd 常驻,再用环境变量让 apt、pip、Docker 走代理。两种方法都只需要一条机场的 Clash 订阅。
桌面:Clash Verge Rev
安装
Releases 页提供 .deb(Debian / Ubuntu)、.rpm(Fedora)和 AppImage(通用)。
sudo dpkg -i Clash.Verge_x.x.x_amd64.deb
缺依赖时 sudo apt -f install。Fedora 用 sudo rpm -i。Arch 用 AUR 的 clash-verge-rev-bin。AppImage 加执行权限后直接运行,不需要安装但没有桌面图标。打不开 GitHub 看 解决方法。
导入与开启:分步骤
- 机场用户中心复制 Clash 订阅。没有订阅先看 机场推荐排行榜。
- 「订阅」页粘贴,导入。预期:出现机场卡片,显示流量和到期。
- 「代理」页选规则模式和节点,先测速。预期:节点显示延迟。
- 「设置」页开系统代理。预期:Firefox / Chrome 打开 Google 正常。
设置项逐项说明
- 系统代理:GNOME 和 KDE 会写入桌面环境的代理设置,大部分 GUI 程序自动生效;其他桌面环境(XFCE、i3)不一定识别,需要用环境变量,见后文。
- TUN 模式:需要内核文件有
CAP_NET_ADMIN权限,设置页有「授权内核」按钮,点一次输入密码即可。开 TUN 后终端命令也走代理,不用再配环境变量。 - 开机自启:写入用户的 autostart。
- 订阅自动更新:卡片右键编辑,间隔 1440 分钟。
- DNS 覆写:网页打不开时开启,填
https://1.1.1.1/dns-query。 - 混合端口:默认 7897,终端配代理时用。
服务器:mihomo 命令行
安装与配置:分步骤
- 从 GitHub
MetaCubeX/mihomo的 Releases 下载对应架构的二进制(x86_64 选linux-amd64,ARM 服务器选linux-arm64),解压放到/usr/local/bin/mihomo,chmod +x。预期:mihomo -v输出版本号。 - 建目录
/etc/mihomo,把机场的 Clash 订阅内容保存为config.yaml:
curl -L -A "clash" "订阅链接" -o /etc/mihomo/config.yaml
加 -A "clash" 是因为部分机场按 User-Agent 返回不同格式。预期:文件以 port: 或 mixed-port: 开头的 YAML。
- 下载 GeoIP / GeoSite 数据:首次运行 mihomo 会自动下载到
/etc/mihomo,服务器连不上 GitHub 时手动下载geoip.dat、geosite.dat放进去。 - 写 systemd 服务
/etc/systemd/system/mihomo.service:
[Unit]
Description=mihomo
After=network.target
[Service]
ExecStart=/usr/local/bin/mihomo -d /etc/mihomo
Restart=always
[Install]
WantedBy=multi-user.target
systemctl enable --now mihomo,然后systemctl status mihomo看是否 active。默认混合端口 7890,具体看配置文件里的mixed-port。- 验证:
curl -x http://127.0.0.1:7890 https://www.google.com -I,预期返回 HTTP 200。
定时更新订阅
crontab -e 加一行,每天凌晨 4 点更新并重启:
0 4 * * * curl -L -A "clash" "订阅链接" -o /etc/mihomo/config.yaml && systemctl restart mihomo
选节点
命令行没有界面,三种办法:在 config.yaml 里把策略组默认节点改掉;通过 RESTful API(配置里 external-controller: 127.0.0.1:9090)用 curl 切换;或者装一个 Web 面板(metacubexd)连到这个端口,在浏览器里选。
三种订阅格式的处理
| 格式 | Clash Verge Rev | mihomo 命令行 |
|---|---|---|
| Clash 订阅 | 直接导入 | 直接 curl 保存 |
| 通用订阅 | 能导入但无策略组 | 需 订阅转换 |
| sing-box 订阅 | 不能 | 不能,换用 sing-box 内核,见 sing-box 教程 |
区别见 订阅链接说明。
让程序走代理
export https_proxy=http://127.0.0.1:7890 http_proxy=http://127.0.0.1:7890 all_proxy=socks5://127.0.0.1:7890
写进 ~/.bashrc 或 ~/.zshrc 就长期生效。各工具单独设置:
- apt:
/etc/apt/apt.conf.d/proxy.conf写Acquire::http::Proxy "http://127.0.0.1:7890";和 https 一行。 - git:
git config --global http.proxy http://127.0.0.1:7890;SSH 方式的 git 需要在~/.ssh/config里给 github.com 加ProxyCommand nc -X 5 -x 127.0.0.1:7890 %h %p。 - pip:
pip config set global.proxy http://127.0.0.1:7890。 - Docker 守护进程:
/etc/systemd/system/docker.service.d/proxy.conf里加[Service]和Environment="HTTP_PROXY=http://127.0.0.1:7890" "HTTPS_PROXY=http://127.0.0.1:7890" "NO_PROXY=localhost,127.0.0.1",然后systemctl daemon-reload && systemctl restart docker。 - docker run 内部:传
-e HTTP_PROXY=http://172.17.0.1:7890,并在 mihomo 配置开allow-lan: true。 - snap:
sudo snap set system proxy.http=http://127.0.0.1:7890。
常见报错表
| 症状 | 原因 | 处理 |
|---|---|---|
| Clash Verge 在 Wayland 下窗口空白 | WebKit 合成问题 | 启动时加 WEBKIT_DISABLE_COMPOSITING_MODE=1,或用 AppImage |
| mihomo 报 unsupported proxy type | 内核旧不支持协议 | 更新内核;见 机场协议区别 |
| curl 订阅得到的不是 YAML | 复制了通用订阅 | 换 Clash 订阅或转换 |
| systemd 启动失败 | 配置语法错或端口占用 | journalctl -u mihomo -e 看日志 |
| 终端能走代理但 GUI 不能 | 桌面环境不识别系统代理 | 开 TUN 或设环境变量 |
| geoip 下载失败 | 服务器连不上 GitHub | 手动下载 dat 文件 |
| Docker 拉镜像仍超时 | 只设了 shell 变量没设守护进程 | 按上文配 docker.service.d |
| 延迟低但速度慢 | 线路问题 | 见 晚高峰慢怎么办 |
常见问题
服务器在国外,还需要机场吗?
访问国外资源不需要。有人用机场在国外服务器上回国访问国内资源,那是另一个场景。
怎么只让某些域名走代理?
编辑 config.yaml 的 rules 段,规则写法见 Clash 规则进阶。
命令行能看流量和到期吗?
订阅响应头里有 subscription-userinfo,curl -I 能看到;Clash Verge 会自动显示。
树莓派能跑吗?
可以,下载 linux-arm64 或 armv7 内核,流程相同。做全屋代理更建议 OpenWrt,见 软路由教程。
多台服务器共用一个订阅?
可以,注意机场设备数限制,见 多设备共用说明。
WSL 里怎么用?
WSL2 默认走 Windows 主机的代理需要镜像网络模式;简单做法是在 Windows 端 Clash Verge 开「允许局域网」,WSL 里把代理指向 Windows 主机 IP。
怎么开机自动连接并选最快节点?
配置里把默认策略组设为 url-test 类型,mihomo 启动后自动测速选最快。
Windows 和 Mac 用户看 电脑如何翻墙。