先选部署方式:桌面客户端或独立内核

Linux 上使用 Clash 配置,通常有两条路径:桌面环境安装带图形界面的客户端,由客户端管理 mihomo;服务器或精简环境直接运行 mihomo,再交给 systemd 管理进程。mihomo 是代理内核,不是桌面设置窗口。只把二进制文件放进系统,不会自动打开系统代理,也不会让所有终端命令经过代理。

使用场景建议方式需要管理的内容
日常桌面、经常切换配置图形客户端配置导入、策略组、系统代理及登录自启
SSH 服务器、命令行工具mihomo 与 systemd配置文件、服务账号、端口及终端环境变量
需要接管不支持代理的应用进一步配置 TUN虚拟网卡、权限、路由和 DNS

下面的命令以使用 systemd 的 Debian 12、Ubuntu 24.04 一类系统为例,使用本机回环地址 127.0.0.1 和混合端口 7890。先执行 ps -p 1 -o comm=,确认 PID 1 是 systemd。容器、部分 WSL 环境和 OpenRC 系统不能直接照搬服务管理步骤。

桌面 Linux:安装客户端并确认代理入口

按发行版和 CPU 架构选安装包

在客户端下载页选择 Linux 平台,查看 Clash Verge Rev、FlClashs 等客户端的可用包与系统要求。Debian、Ubuntu 通常选择 DEB;Fedora 等发行版通常选择 RPM。先运行下面两条命令,避免把 ARM64 包装到 x86_64 设备上。

uname -m
cat /etc/os-release
  • x86_64 通常对应 x64 或 amd64;aarch64 通常对应 arm64。
  • DEB 或 RPM 可以通过桌面软件安装器打开。遇到依赖错误,应使用发行版包管理器处理,不要随意下载其他系统版本的共享库。
  • 安装成功但窗口打不开时,从终端启动客户端并保留报错。图形运行库缺失和代理配置错误属于不同问题。

先导入配置,再设置系统代理

在客户端的配置或订阅页面导入服务方提供的兼容配置,切换到该配置,再检查连接日志和策略组。不同客户端的菜单名称会变化,以实际界面为准。确认内核运行、7890 正在监听后,再打开客户端的系统代理开关。

如果需要手动设置,GNOME 桌面常见入口为「设置」→「网络」→「网络代理」→「手动」。HTTP 和 HTTPS 代理都可填写主机 127.0.0.1、端口 7890。这里 HTTPS 指 HTTPS 请求使用的代理入口,不代表本地监听端口必须启用 TLS。

桌面系统代理只是向遵循桌面代理设置的程序提供连接参数。浏览器可能使用它,SSH、部分游戏和终端工具则未必使用。退出客户端之前应关闭系统代理;否则桌面仍指向一个已经停止监听的端口,网页就可能打不开。

命令行安装:固定二进制、配置和数据目录

安装可执行文件与专用账号

从 mihomo 项目的发布渠道获取符合设备架构与指令集要求的 Linux 内核,解压后将可执行文件命名为 mihomo,放在当前目录。不要把尚未解压的压缩包直接安装成可执行文件。下面先检查架构和版本,再将内核放入固定路径。

file ./mihomo
chmod u+x ./mihomo
./mihomo -v
sudo install -m 0755 ./mihomo /usr/local/bin/mihomo

getent group mihomo >/dev/null || sudo groupadd --system mihomo
id mihomo >/dev/null 2>&1 || sudo useradd \
  --system --gid mihomo --home-dir /var/lib/mihomo \
  --no-create-home --shell /usr/sbin/nologin mihomo

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

本例让配置位于 /etc/mihomo/config.yaml,运行数据位于 /var/lib/mihomo。配置由管理员维护,服务账号只读;缓存和规则资源写入数据目录。不要依赖启动时所在目录,也不要假设 SSH 用户的 ~/.config 会自动成为系统服务的配置目录。

先用最小配置检查监听

下面的配置只用于验证服务与本机端口,所有请求均直连,不包含代理节点。它不能替代实际订阅。若已有配置,先备份,避免执行命令时覆盖。使用最小配置的好处是暂时排除订阅格式、远程规则下载和节点可用性的干扰。

sudo tee /etc/mihomo/config.yaml >/dev/null <<'YAML'
mixed-port: 7890
allow-lan: false
bind-address: 127.0.0.1
mode: rule
log-level: info
ipv6: false
rules:
  - MATCH,DIRECT
YAML

sudo chown root:mihomo /etc/mihomo/config.yaml
sudo chmod 0640 /etc/mihomo/config.yaml
sudo -u mihomo /usr/local/bin/mihomo -t \
  -d /var/lib/mihomo -f /etc/mihomo/config.yaml

-t 用于测试配置;-d 明确指定工作数据目录;-f 指定配置文件。后续换成真实配置时也要重复测试。通过语法检查不代表节点一定可达,也不代表远程规则资源一定下载成功,仍需结合启动日志判断。

订阅地址如果返回的是 Base64 节点列表、网页或登录提示,不能直接保存成 mihomo 主配置。应取得兼容的完整 YAML,或在完整主配置中按对应格式设置 proxy-providers。订阅链接往往带有访问凭据,不要贴进公开日志或截图。

systemd 服务:开机自启、日志和配置重启

创建系统级 unit 文件。这里以普通专用账号运行,只提供本机 HTTP/SOCKS 混合代理,不启用 TUN,因此不需要让整个内核长期以 root 身份运行。

sudo tee /etc/systemd/system/mihomo.service >/dev/null <<'UNIT'
[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=5s
LimitNOFILE=65536
UMask=0077

[Install]
WantedBy=multi-user.target
UNIT

sudo systemctl daemon-reload
sudo systemctl enable --now mihomo.service
systemctl status mihomo.service --no-pager
sudo journalctl -u mihomo.service -n 80 --no-pager
sudo ss -lntup | grep ':7890'
  • enable --now 同时设置开机启动并立即启动;只执行 enable 不会立刻运行服务。
  • Restart=on-failure 在异常退出后重试,不会在手动停止服务后强行拉起。
  • network-online.target 的实际等待行为取决于系统网络管理组件,不保证远程订阅服务器已经可达。
  • 服务显示 active (running) 后,还要确认监听地址是 127.0.0.1:7890,而不是意外暴露到所有网卡。

修改配置与修改 unit 的处理不同

修改 YAML 后,先用同一个服务账号执行配置测试,再重启服务。本文 unit 没有定义 ExecReload,因此不要把 systemctl reload 当作通用刷新方式。重启会短暂中断现有代理连接。

sudo -u mihomo /usr/local/bin/mihomo -t \
  -d /var/lib/mihomo -f /etc/mihomo/config.yaml
sudo systemctl restart mihomo.service
sudo journalctl -u mihomo.service -n 40 --no-pager

仅当修改了 /etc/systemd/system/mihomo.service 或相关 drop-in 时,才需要先执行 sudo systemctl daemon-reload。更新内核前应保留原二进制和配置备份,停止服务后替换文件,检查 mihomo -v 与配置测试结果,再启动服务。

终端代理:环境变量只影响愿意读取它的程序

mihomo 已监听 7890 后,在当前终端设置以下变量。大多数支持这些变量的 HTTP 工具会使用它们,但这不是对整个 Linux 网络栈的透明接管。

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

curl -I --connect-timeout 10 https://example.com
curl -I --proxy http://127.0.0.1:7890 https://example.com
curl -I --proxy socks5h://127.0.0.1:7890 https://example.com

socks5h 表示让代理端处理目标域名解析;socks5 通常由本地先解析。上面的 https_proxy 仍使用 http://,因为它描述的是本机 HTTP 代理入口,HTTPS 目标一般通过 CONNECT 隧道访问。

使用最小直连配置时,显式指定代理的请求成功,只能证明程序能够经过本地内核访问目标。要验证远程代理节点,需换成有效配置,在策略组中选择节点,并检查连接日志里的实际规则与出站。

持久化与撤销

需要每次打开 Bash 终端都生效时,可把上述 export 行加入 ~/.bashrc;Zsh 通常使用 ~/.zshrc。图形应用、定时任务与 systemd 服务不会自动读取交互式 shell 的配置,不能据此判断它们也已启用代理。

unset http_proxy https_proxy all_proxy no_proxy
unset HTTP_PROXY HTTPS_PROXY ALL_PROXY NO_PROXY

sudo 默认可能过滤代理变量,APT 也可以有独立的代理设置。不要为了临时下载而把整个用户环境无差别传给管理员进程。对单次 curl 测试,优先使用明确的 --proxy 参数;应用不支持代理变量时,应查它自己的代理选项。

常见故障:按配置、权限、端口、路由顺序排查

服务启动即退出:先看服务账号能否读取配置

sudo journalctl -u mihomo.service -b -n 100 --no-pager
namei -l /etc/mihomo/config.yaml
sudo -u mihomo test -r /etc/mihomo/config.yaml && echo readable
sudo -u mihomo test -w /var/lib/mihomo && echo writable

permission denied 不一定来自配置文件本身,也可能是上级目录缺少进入权限,或远程规则文件被指向了服务账号不能写入的位置。应修正目标目录的属主和最小权限,不要用 chmod -R 777 掩盖问题。启用 SELinux 的系统还要查看相关拒绝日志,不建议直接关闭安全机制。

7890 被占用:先确认是不是启动了两套内核

sudo ss -lntp 'sport = :7890'
pgrep -a mihomo

桌面客户端、手动启动的内核与 systemd 服务可能同时存在。确认进程归属后,停止不需要的那一套,不要直接结束所有同名进程。如果确实需要改成 7891,要同步修改 mixed-port、桌面代理和终端变量,重启后重新检查监听。

服务正常但请求失败:区分连接入口和出站问题

  • Connection refused:通常是端口未监听、进程退出或地址填错。先检查 ss,暂时不要调整规则。
  • 连接到代理后超时:查看内核日志中的节点连接、域名解析和规则资源错误。规则匹配成功不等于出站线路可用。
  • 返回证书错误:检查系统时间、CA 证书和目标域名。不要把关闭 TLS 验证当作长期修复。
  • 启动反复失败后不再重试:修复根因后执行 sudo systemctl reset-failed mihomo.service,再启动服务。

需要 TUN 时,单独处理权限、DNS 和远程连接风险

本例普通账号服务不能直接当作完整的 TUN 部署使用。Linux TUN 通常需要访问 /dev/net/tun,配置虚拟接口与路由还需要相应的网络管理权限。相关能力、服务限制和 DNS 接管方案必须一起设计,不能只在 YAML 中加一行 enable: true。

尤其在 SSH 服务器上,开启自动路由前应保留第二个管理会话或控制台入口,明确 SSH 返回流量、局域网网段和内网 DNS 的路径。优先验证本机 7890 显式代理,再引入 TUN;不要同时改端口、DNS 和默认路由,否则很难定位是哪一步导致失联。

配置维护:保留恢复入口,分清更新对象

部署完成后,至少记录二进制路径、配置路径、数据目录、监听端口和服务名称。订阅更新、内核更新、客户端更新是三件事:替换内核不会自动更新节点,systemd 的开机自启也不会自动刷新主配置。

  • 使用图形客户端时,确认配置页面的自动更新开关与间隔,并检查更新后的生效配置。
  • 使用独立内核时,proxy-providers 的更新间隔只针对对应 provider,不等于整个主 YAML 定时替换。
  • 自动下载主配置需要自行设计安全的下载、测试、替换与失败回退流程,不能直接将未经测试的响应覆盖到运行配置。
  • 不再使用系统服务时,执行 sudo systemctl disable --now mihomo.service,同时清理终端变量和桌面代理设置。

日常桌面使用可优先选择图形客户端;无人值守环境则适合固定目录与 systemd 服务。无论采用哪种方式,都先确认配置从哪里读取、程序监听哪个端口、应用通过什么入口连接,再逐项增加规则分流与 TUN 功能。更多配置概念可查阅协议手册,操作步骤可对照配置教程。