Linux 部署 Clash:桌面客户端与 mihomo 命令行两种方式

覆盖 Linux 桌面图形客户端的安装,以及无界面服务器上用 mihomo 二进制和 systemd 常驻运行、配置目录与端口的设置。

一、按运行环境选择部署方式

Linux 上使用 Clash 分流配置,有两条常见路径:桌面客户端负责订阅、节点选择和系统代理;mihomo 命令行内核直接读取 YAML,由 systemd 管理后台进程。mihomo 是 Clash Meta 项目延续使用的内核名称,不是必须配合图形界面才能工作的程序。

日常在 GNOME 或 KDE 桌面浏览网页,优先使用图形客户端。没有桌面环境的服务器、开发机或长期运行的主机,可以直接部署内核。两种方式都需要有效配置,安装客户端或二进制本身不会提供代理节点。

对照项桌面客户端mihomo 命令行
适用环境GNOME、KDE 等图形桌面无界面服务器、后台主机
配置入口配置或订阅管理页面本例为 /etc/mihomo/config.yaml
节点选择代理组页面操作配置默认顺序,或通过控制接口管理
自动运行客户端开机启动选项systemd 系统服务
代理范围系统代理或 TUN先使用本地代理端口,按需配置 TUN

二、桌面客户端安装与订阅导入

确认发行版、CPU 架构与包格式

先运行下面两条命令。x86_64 通常对应 x64 或 amd64 包,aarch64 通常对应 arm64 包。包管理器不会把错误架构的程序自动转换成可运行文件。

uname -m
cat /etc/os-release

可在下载中心选择 Clash Verge Rev 或 FlClashs 等提供 Linux 包的客户端。Ubuntu、Debian 通常使用 DEB;Fedora 等系统通常使用 RPM。具体是否支持当前系统,还要看该客户端发布说明中的系统与运行库要求。

下面演示本地包安装:先将下载的对应架构安装包重命名为 client.deb 或 client.rpm,放入下载目录。两条安装命令按发行版二选一,不要全部执行。

cd ~/Downloads

# Debian / Ubuntu:仅执行这一条
sudo apt install ./client.deb

# Fedora:仅执行这一条
sudo dnf install ./client.rpm

若选择 AppImage,通常需要先赋予执行权限。AppImage 能否启动还受 FUSE 与桌面依赖影响;遇到缺少共享库的提示,应按该客户端说明补齐依赖,避免直接以 root 身份运行整个图形程序。

按“导入、启用、选线、代理”顺序操作

  1. 启动客户端,在“配置”或“订阅”页面导入服务提供方给出的 Clash/mihomo 配置地址。菜单名称随客户端变化,不能把任意节点分享链接当作完整 YAML。
  2. 更新后将该配置设为当前使用项。确认节点列表、代理组与规则已加载,而不是只保存了一个订阅名称。
  3. 进入代理组,选中一个可用节点并进行延迟测试。显示超时可能是测试地址不可达,也可能是节点失败,需要结合实际访问判断。
  4. 选择规则模式,再打开系统代理。检查客户端显示的本地监听端口,后文的 7890 只是统一示例。

以 GNOME 为例,可在“设置”→“网络”→“网络代理”核对手动代理地址。若客户端使用 mixed-port: 7890,HTTP 与 HTTPS 代理均可填写 127.0.0.1、端口 7890。其他桌面环境的设置路径不同。

系统代理不是所有应用都遵守的流量接管机制。浏览器通常会读取桌面代理设置,终端工具、容器和部分独立应用可能不会。遇到“浏览器可用、终端失败”,先为终端显式指定代理,不必立即切换全局模式。

三、安装 mihomo 内核与配置目录

准备二进制与完整 YAML

无界面部署需要与 CPU 架构、系统环境匹配的 mihomo Linux 二进制。压缩包应先解压,再将其中的可执行文件重命名为 mihomo。以下命令从当前目录安装该文件,随后查看实际版本;记录版本号有助于排查配置字段兼容问题。

sudo install -m 0755 ./mihomo /usr/local/bin/mihomo
/usr/local/bin/mihomo -v

本例把静态配置与运行数据分开:/etc/mihomo/config.yaml 存放完整配置,/var/lib/mihomo 存放缓存、规则资源等可写数据。使用独立的 mihomo 系统用户运行,不让普通代理服务拥有整台机器的管理权限。

getent passwd mihomo >/dev/null || sudo useradd \
  --system --user-group --home-dir /var/lib/mihomo \
  --shell /usr/sbin/nologin mihomo

sudo install -d -m 0750 -o root -g mihomo /etc/mihomo
sudo install -d -m 0750 -o mihomo -g mihomo /var/lib/mihomo

# 当前目录的 config.yaml 必须是已经准备好的完整配置
sudo install -m 0640 -o root -g mihomo \
  ./config.yaml /etc/mihomo/config.yaml

如果系统已经存在同名用户,应先确认其主组和目录权限,不要重复套用账户假设。配置中可能包含节点凭据、订阅地址和控制密钥,不应授予所有本机用户读取权限,也不要放入公开仓库。

只合并监听设置,不丢失节点与规则

在已有完整配置中核对下列顶层字段。此片段用于合并,不能替代整份订阅配置;保留原有的 proxies、proxy-providers、proxy-groups 和 rules 等内容。同一个 YAML 映射内不要重复定义相同字段。

mixed-port: 7890
allow-lan: false
bind-address: 127.0.0.1
mode: rule
log-level: info
tun:
  enable: false
  • mixed-port 在一个端口上接受 HTTP 代理与 SOCKS5 请求,不代表所有系统流量都会自动经过该端口。
  • allow-lan: false 与回环监听用于本机访问,不为公网提供代理入口。
  • mode: rule 使用配置中的规则分流。规则引用的策略组必须真实存在,末尾通常需要合适的兜底规则。
  • 首次部署保持 TUN 关闭,避免把节点、路由、DNS 和权限问题叠在一起排查。

以服务账户执行配置检查。-d 指定运行数据目录,-f 指定配置文件,-t 用于测试配置。若配置依赖外部规则或地理数据,还要确认资源能够获取且路径可读;语法检查成功并不等于节点连接成功。

sudo -u mihomo /usr/local/bin/mihomo \
  -t -d /var/lib/mihomo -f /etc/mihomo/config.yaml

四、用 systemd 常驻运行 mihomo

配置检查通过后,创建 /etc/systemd/system/mihomo.service。下面的单元面向普通本地代理端口,不授予 TUN 所需的网络管理能力。network-online.target 表示启动顺序依赖,不保证节点或互联网已经可达。

sudo tee /etc/systemd/system/mihomo.service >/dev/null <<'EOF'
[Unit]
Description=mihomo local proxy service
Wants=network-online.target
After=network-online.target

[Service]
Type=simple
User=mihomo
Group=mihomo
WorkingDirectory=/var/lib/mihomo
ExecStart=/usr/local/bin/mihomo -d /var/lib/mihomo -f /etc/mihomo/config.yaml
Restart=on-failure
RestartSec=5
UMask=0077
NoNewPrivileges=true
PrivateTmp=true

[Install]
WantedBy=multi-user.target
EOF

sudo systemctl daemon-reload
sudo systemctl enable --now mihomo
sudo systemctl status mihomo --no-pager
sudo journalctl -u mihomo -b -n 80 --no-pager

active (running) 只说明进程仍在运行。继续检查日志中是否出现配置解析失败、资源下载失败或 address already in use。如果客户端也在使用 7890,先关闭其中一个,或明确为两个进程设置不同端口。

修改 config.yaml 后,先重新执行配置测试,再重启服务。本单元没有定义 ExecReload,因此不要假定 systemctl reload mihomo 能完成重载。只有修改 service 文件时才需要重新执行 daemon-reload。

sudo -u mihomo /usr/local/bin/mihomo \
  -t -d /var/lib/mihomo -f /etc/mihomo/config.yaml

# 上一条检查成功后再执行
sudo systemctl restart mihomo
sudo journalctl -u mihomo -b -n 40 --no-pager

五、验证端口、终端代理与规则命中

先检查监听,再发送显式代理请求

下面第一条命令检查 7890 的 TCP 监听地址。预期应看到 127.0.0.1:7890;若出现公网地址或 0.0.0.0,先回头核对监听配置。第二条命令显式经过 HTTP 代理访问本站,20 秒超时是请求上限,不是节点延迟指标。

sudo ss -lntp 'sport = :7890'

curl --proxy http://127.0.0.1:7890 \
  --connect-timeout 10 --max-time 20 \
  --output /dev/null --show-error \
  --write-out 'HTTP %{http_code}\n' \
  https://clash-system.com/

收到 HTTP 响应说明请求经过本地代理入口,但仍不能据此断言它经过了远端节点:规则可能选择了 DIRECT。同时查看日志中的目标域名、匹配规则和实际策略;若配置引用代理组,还需确认组内选中了哪个节点。

为当前终端设置代理变量

对遵守代理环境变量的程序,可以在当前 shell 中设置以下变量。访问 HTTPS 网站时,HTTP 代理地址仍写 http://127.0.0.1:7890,工具会通过 CONNECT 建立隧道,不应仅因为目标网站是 HTTPS 就把代理地址协议改为 HTTPS。

export http_proxy=http://127.0.0.1:7890
export https_proxy=http://127.0.0.1:7890
export no_proxy=localhost,127.0.0.1,::1

# 需要测试 SOCKS5 且让代理端解析域名时
curl --proxy socks5h://127.0.0.1:7890 \
  --connect-timeout 10 --max-time 20 \
  --output /dev/null --show-error \
  https://clash-system.com/

# 恢复当前终端环境
unset http_proxy https_proxy no_proxy

这些变量只影响当前 shell 及其后续子进程,不会自动传给所有 systemd 服务,sudo 也可能清理它们。容器中的 127.0.0.1 指向容器自身,不能直接把宿主机回环地址当作容器代理入口;需单独设计可达地址与访问限制。

六、TUN、DNS 与远程管理的边界

TUN 不是普通端口代理的必选项

TUN 通过虚拟网络设备配合路由接管流量,适合处理不遵守系统代理的应用。它需要内核提供 TUN 支持,并涉及设备访问、网络管理权限以及路由设置。前文的低权限 systemd 单元不能只把 tun.enable 改为 true 就直接使用。

  • 先用 ls -l /dev/net/tun 检查设备,再按当前 mihomo 文档配置服务权限与 TUN 参数。
  • 在远程服务器上启用自动路由前,准备控制台或其他恢复通道,避免影响 SSH 管理连接。
  • 排查 DNS 时同时检查系统解析器、mihomo 的 DNS 配置和 TUN 的 DNS 接管方式,避免解析循环或上游不可达。
  • 不要同时开启桌面客户端的 TUN 和另一个内核服务的自动路由。

普通 HTTP 代理、SOCKS5、TUN 的域名解析路径并不完全相同。比如 socks5h 会把目标域名交给代理端解析,单纯测试本机 getent hosts 的结果不能覆盖所有代理请求。遇到“IP 可访问、域名失败”,应先分清故障发生在哪条解析路径上。

控制接口与代理端口分开管理

external-controller 是管理 API,不是供浏览器上网的 HTTP 代理。常见示例使用 127.0.0.1:9090,与 mixed-port: 7890 的职责不同。确需开启时应设置独立的强 secret,保持回环监听;本例不默认启用控制接口。

远程操作可以通过 SSH 转发本地代理端口。例如在个人电脑执行下面的命令,把电脑的 17890 转发到服务器的 7890。命令使用 SSH 配置中已经定义好的 proxy-server 主机别名;需先在个人电脑的 SSH 配置中为该别名填写真实主机和用户。

ssh -N -L 127.0.0.1:17890:127.0.0.1:7890 proxy-server

此时个人电脑应用应连接 127.0.0.1:17890。SSH 转发不会自动开启服务器上的代理服务,也不会自动修改电脑的系统代理。不要为了远程访问而直接向互联网开放 7890 或控制端口。

七、订阅更新与常见故障处理

桌面客户端通常提供订阅更新操作;独立运行的 mihomo 不会仅因读取了一份本地 YAML 就自动刷新整份远程订阅。配置中的 proxy-providers 和 rule-providers 可以按各自设置更新资源,但这不等于替换完整配置文件。

更新整份配置时,先保存旧文件,将新内容写入候选文件,再使用同一服务账户测试。测试成功后再安装到 /etc/mihomo/config.yaml 并重启。不要用一次失败的网络下载直接覆盖正在使用的配置,也不要在日志或工单中公开订阅地址。

现象优先检查处理方向
Exec format erroruname -m 与下载架构解压并安装对应架构的二进制
Permission denied可执行权限、目录权限、服务用户确认二进制可执行,配置可读,运行数据目录可写
7890 已被占用ss 输出中的进程停用重复实例,或更换监听端口
进程运行但请求失败节点状态、规则命中、DNS 日志区分本地入口成功与远端节点连接成功
浏览器可用而终端失败终端是否使用代理使用 curl --proxy 或环境变量验证
重启后配置变化客户端订阅更新、服务 -f 路径明确配置来源,避免直接修改会被覆盖的文件

部署完成的判断顺序应是:二进制能运行、配置测试通过、服务稳定、回环端口监听正常、请求进入内核、规则选择符合预期。把这六步分开验证,再增加自动更新或 TUN,后续维护会更容易定位问题。

Clash最新版下载