Linux 部署路线与运行边界

有桌面、需要经常切换节点的电脑,先到客户端下载页选择 Linux 图形客户端,再导入服务商提供的订阅。只有 SSH 终端的服务器,通常更适合直接运行 mihomo,并交给 systemd 管理进程。两条路线使用的代理配置可能相近,但安装方式、权限和代理接入方式不同,不必在同一台机器上同时启用。

Clash 是这一类代理工具与配置生态的常用称呼;mihomo 是从 Clash Meta 延续发展的内核。图形客户端负责配置管理、托盘和开关等交互,内核负责监听端口、匹配规则和建立连接。下载一个内核二进制,并不会自动获得桌面界面;启动一个图形客户端,也不代表所有 Linux 程序已经接入代理。

使用环境建议路线首次验证方式
Ubuntu、Debian 桌面支持对应架构的 DEB 图形客户端导入配置后检查节点与本地监听端口
Fedora 等 RPM 桌面支持对应架构的 RPM 图形客户端检查内核日志,再测试显式代理请求
无界面服务器mihomo 二进制与 systemd 系统服务先验证配置,再检查服务与 7890 端口

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

系统架构与安装包

下载前先运行下面两条命令。x86_64 通常对应 amd64 或 x64 包;aarch64 通常对应 arm64 包。包格式也要与发行版一致:DEB 面向 Debian 系,RPM 面向使用 RPM 的发行版。架构匹配仍不保证系统依赖满足,较旧发行版需要再查看客户端的最低运行要求。

uname -m
cat /etc/os-release

可在下载页查看 Clash Verge Rev、FlClash 等项目的 Linux 入口与当前支持范围。下列命令使用本地文件名演示安装:先把实际下载的安装包重命名为 client.deb 或 client.rpm,进入该文件所在目录,再只执行符合当前发行版的一条命令。这里的文件名不是下载地址。

# Debian / Ubuntu:安装当前目录中的 DEB 包
sudo apt install ./client.deb

# Fedora:安装当前目录中的 RPM 包
sudo dnf install ./client.rpm

使用包管理器安装本地包,可以一并处理仓库中可用的依赖。如果提示缺少图形库、WebKit 或运行时,先检查发行版版本及项目说明,不要通过删除依赖检查强行安装。服务器没有图形会话时,改走下文的命令行路线更直接。

订阅、配置与节点选择

  1. 在客户端中进入「订阅」或「配置」页面,选择「导入」或「新建」,粘贴服务商提供的订阅地址。不同客户端、版本的标签名称可能不同,重点是进入配置管理页,而不是把地址填入节点名称。
  2. 等待更新完成后,选中刚导入的配置。仅出现一张订阅卡片,不代表该配置已被内核加载。
  3. 进入「代理」页面,先使用规则模式,在对应代理组内选择一个可用节点。订阅只有节点列表而没有规则时,需要配合客户端支持的完整配置或服务商提供的完整配置使用。
  4. 在「设置」中查找「系统代理」开关并启用,然后检查浏览器是否使用桌面代理设置。若菜单不同,按开关名称查找,不要依赖某一版截图的位置。

订阅链接通常包含可识别账户的令牌,应当按凭据保管。排错截图可以保留错误类型与时间,但要遮住完整订阅地址、节点密码和控制接口密钥。导入失败时先看返回内容:登录页面、HTML 错误页和普通节点 URI 列表,都不能直接当作完整的 mihomo YAML 配置。

系统代理与 TUN 的区别

系统代理主要影响愿意读取桌面代理设置的应用。命令行工具、部分游戏或独立网络程序可能绕过它;在 GNOME 中可检查「设置」→「网络」→「网络代理」,KDE 通常可在「系统设置」→「网络」→「代理」检查。先以客户端实际显示的端口为准,不要默认每个客户端都使用 7890。

TUN 通过虚拟网卡和路由接管流量,覆盖面与系统代理不同,也会涉及服务模式、网络管理权限和 DNS 设置。桌面首次部署建议先用系统代理验证配置,再按客户端文档启用 TUN。不要让桌面内核与另一份 systemd 内核同时占用同一个端口或同时修改默认路由。

mihomo 二进制与服务账户

命令行部署需要与 CPU 架构匹配的 Linux 二进制。除 amd64、arm64 外,部分发布资产还区分指令集或兼容等级;老处理器遇到 Illegal instruction 时,应核对发行说明,而不是反复重启服务。将所选发布资产下载并解压后,把可执行文件命名为 mihomo,再进入该文件所在目录。

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

-v 输出的是实际安装的内核版本。保存这个结果,后续配置字段不兼容时就能对照该版本的文档;不要只记录图形客户端的版本号。若出现 Exec format error,先检查架构与文件是否已经解压。不要把压缩包直接安装成可执行文件。

专用账户与目录权限

本机 HTTP/SOCKS 代理监听 7890 不需要 root。下面建立专用系统账户,把配置放在 /etc/mihomo,把缓存与运行数据放在 /var/lib/mihomo。示例使用 Debian、Ubuntu 常见的 /usr/sbin/nologin;其他发行版先用 command -v nologin 确认路径后调整命令。

sudo useradd --system --user-group \
  --home-dir /var/lib/mihomo \
  --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

账户只需创建一次;已有同名账户时,先确认其用途与所属组,不要直接删除重建。配置由 root 管理、服务账户只读,可以减少运行进程意外改写订阅凭据的机会;数据目录则必须允许服务账户写入,否则缓存或规则资源更新可能失败。

config.yaml 配置与前台验证

最小配置与监听范围

用 sudoedit /etc/mihomo/config.yaml 创建配置。下面是用于验证服务链路的最小完整示例:规则全部直连,因此只能证明端口与进程工作正常,不能证明远程代理节点可用。实际使用时应换成服务商提供、与当前 mihomo 版本兼容的完整配置,并保留合适的本地监听限制。

mixed-port: 7890
allow-lan: false
bind-address: 127.0.0.1
mode: rule
log-level: info
ipv6: false

rules:
  - MATCH,DIRECT

mixed-port 在同一端口接收 HTTP 与 SOCKS5 代理请求。它不是 DNS 监听端口,也不是控制面板端口。这里关闭局域网访问,并绑定回环地址;即使服务器有公网 IP,也不需要为 7890 开放入站防火墙规则。

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 指定配置文件。YAML 不能用 Tab 做缩进;遇到行号错误时,先检查该行及上一行的缩进、冒号和引号。配置测试通过主要说明配置可被解析和加载,不代表节点可达,也不代表所有规则资源都能持续更新。

完整订阅配置的迁移

如果已有完整 YAML,可以在本地保存为 config.yaml,上传到服务器用户目录,再安装到服务目录。下面假定上传后的文件位于当前目录。不要把带令牌的订阅 URL 直接写进共享脚本或终端截图,也不要仅凭文件扩展名判断内容正确。

sudo install -o root -g mihomo -m 0640 \
  ./config.yaml /etc/mihomo/config.yaml

sudo -u mihomo /usr/local/bin/mihomo \
  -t -d /var/lib/mihomo -f /etc/mihomo/config.yaml
  • 检查新配置的 mixed-port、allow-lan 与 bind-address,避免覆盖后监听范围意外扩大。
  • 若含 proxy-providers、rule-providers 或相对路径资源,应检查其路径和目录权限;本文以 /var/lib/mihomo 为数据基准目录。
  • 若启用了 external-controller,确认确实需要该接口,使用回环监听并设置强密钥。首次部署也可以先移除控制接口设置。
  • 检查是否携带 tun、自动路由或 DNS 劫持设置;本文的普通服务账户方案不为这些功能提供网络管理权限。

交给 systemd 前,先在前台启动一次,观察日志。测试完成后按 Ctrl+C 退出,释放 7890 端口,再启动服务。

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

systemd 常驻与开机启动

创建 /etc/systemd/system/mihomo.service。这是系统级服务,不依赖 SSH 登录会话;终端断开后仍由 systemd 管理。下列单元适用于前文的普通代理模式,使用专用账户运行,并把可写范围限制到数据目录。

[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
ExecStartPre=/usr/local/bin/mihomo -t -d /var/lib/mihomo -f /etc/mihomo/config.yaml
ExecStart=/usr/local/bin/mihomo -d /var/lib/mihomo -f /etc/mihomo/config.yaml
Restart=on-failure
RestartSec=5s
UMask=0027
NoNewPrivileges=true
PrivateTmp=true
ProtectHome=true
ProtectSystem=strict
ReadWritePaths=/var/lib/mihomo

[Install]
WantedBy=multi-user.target

ExecStartPre 会在启动前测试配置,失败时不会继续启动主进程。Restart=on-failure 用于进程异常退出后的重启,不会自动解决失效订阅或不可达节点。network-online.target 的效果还取决于发行版的等待网络服务,它不是远端节点已经可用的保证。

sudo systemctl daemon-reload
sudo systemctl enable --now mihomo.service
systemctl is-enabled mihomo.service
systemctl is-active mihomo.service
sudo systemctl status mihomo.service --no-pager
sudo journalctl -u mihomo.service -b -n 80 --no-pager

enabled 表示开机启用,active 表示当前运行,这两件事要分别确认。修改服务单元后执行 daemon-reload 再重启;只修改 YAML 时,先测试配置,再执行 sudo systemctl restart mihomo.service 即可。本文没有设置 ExecReload,因此不要假定 systemctl reload 会自动重新加载订阅。

代理接入与连通性检查

服务启动后,Linux 不会自动让所有进程使用代理。先检查监听,再用显式指定代理的请求验证,这样能够把“内核没启动”和“应用没接入”分开排查。下面使用 example.com 作为请求示例,响应状态与耗时取决于当前网络,不是固定测试结果。

sudo ss -lntp 'sport = :7890'

curl --connect-timeout 10 --max-time 30 \
  --proxy http://127.0.0.1:7890 \
  -I https://example.com

curl --connect-timeout 10 --max-time 30 \
  --proxy socks5h://127.0.0.1:7890 \
  -I https://example.com

监听地址应为 127.0.0.1:7890。HTTP 代理访问 HTTPS 时,curl 会使用 CONNECT 隧道;SOCKS 示例中的 socks5h 表示把目标域名交给代理端解析。最终如何解析与转发仍取决于内核配置和所匹配的规则,不能仅凭命令形式判断请求已经走远端节点。

终端环境变量

需要让当前终端中的兼容程序使用代理时,可以设置以下变量。它们只影响此 shell 及其后续子进程,不会影响其他用户、已启动的程序或已有 systemd 服务。部分工具有自己的代理设置,应以该工具文档为准。

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

# 取消当前终端中刚设置的代理变量
unset http_proxy https_proxy all_proxy no_proxy

https_proxy 的值仍使用 http://,表示连接的是本机 HTTP 代理,而不是声明目标网站使用明文连接。若要为单个 systemd 服务设置代理,应在该服务自己的配置中添加环境变量;不要为了一个程序给整台服务器强行修改路由。

远程使用的访问范围

如果希望自己的电脑临时接入服务器上的回环代理,可以在本地建立 SSH 转发,而不是开放服务器的 7890 入站端口。比如本地转发到服务器 127.0.0.1:7890 后,本地程序连接转发端口即可。具体 SSH 主机名应使用已有的连接配置,访问仍受 SSH 账户权限约束。

确实需要局域网共享时,再单独规划 allow-lan、监听地址、认证与防火墙来源范围。把监听改成所有网卡只是扩大接入范围,不是性能优化;公网主机尤其不应把未经访问控制的代理暴露出去。

启动失败与维护检查

现象优先检查处理方向
Exec format errorCPU 架构、二进制格式重新选择并解压对应 Linux 资产
Permission denied执行位、目录权限、文件路径确认服务账户可读配置、可写数据目录
address already in use7890 端口的现有监听进程退出前台测试或停用重复内核
YAML 解析失败日志行号、缩进与返回内容修正配置,排除 HTML 和节点列表误导入
端口可用但请求失败节点状态、规则命中、DNS 与出站网络查看对应请求日志,区分直连和代理路径
服务反复启动失败配置测试及本次启动日志修复原因后重置失败状态并启动

排错时先保留具体错误,不要同时更换节点、配置、内核和端口。可运行 sudo journalctl -u mihomo.service --since "10 minutes ago" --no-pager 查看近期日志。如果触发 systemd 启动频率限制,修复配置后执行 sudo systemctl reset-failed mihomo.service,再启动服务;只重置状态而不修复原因,仍会再次失败。

更新与回退

  1. 记录当前 mihomo -v 输出,备份正在使用的二进制与配置,备份文件同样限制读取权限。
  2. 先用新二进制测试现有配置,阅读跨版本的字段与行为变化;涉及相对路径资源时,使用与正式服务一致的数据目录。
  3. 安排短暂维护窗口,停止服务后安装新二进制,再启动并检查监听、日志和实际请求。
  4. 若新版本无法正常工作,恢复原二进制和对应配置,再重新验证,不要只恢复其中一项。

完整 YAML 的更新与订阅提供器更新不是同一件事。图形客户端通常有自己的订阅刷新流程;单独部署 mihomo 时,proxy-providers 的更新行为依赖配置,整份 config.yaml 不会因为使用 systemd 就自动替换。若后续增加定时更新,应先下载到临时文件、验证成功再替换,并保留失败时可用的旧配置。

桌面路线的重点是选中正确配置、明确应用接入方式;命令行路线的重点是权限、配置路径和进程生命周期。先把本机回环代理验证通过,再逐步增加规则提供器、远程管理或 TUN,通常更容易定位问题。更完整的平台检查可继续参考全平台指南,首次导入步骤则见快速上手。