CentOS Stream 9/RHEL 9 安装 Mihomo(Meta):二进制部署与 systemd 自启订阅导入(2026)

无图形界面CentOS Stream 9RHEL 9 服务器上,很多企业运维更倾向直接跑 MihomoClash Meta 系内核)的 release 二进制,而不是先装桌面再套 GUI 客户端。站内已有 UbuntuDebianFedoraArch 等面向桌面或特定发行版的教程,但缺少一条对齐 RHEL 系常见生产基线的「纯命令行内核」路径。本文把下载解压路径/etc 配置目录proxy-providers 订阅systemd 系统级自启,以及 SELinuxfirewalld 注意事项串成闭环;请仅在合法合规且网络环境可信的前提下使用。

本文适合谁、读完能做什么

适合需要在CentOS Stream 9AlmaLinux 9Rocky Linux 9等 RHEL 9 兼容发行版,或官方 RHEL 9 本机/虚机上,部署命令行代理内核的运维与后端工程师。你已经知道「订阅链接是什么」,缺的是:二进制从哪里来、放哪、配置怎么组织、进程怎么托管、开机怎么自动起来。读完你可以独立完成:从上游发布页拉取匹配 uname -m 的制品;在 /usr/local/bin/etc/mihomo(或自定义前缀)建立清晰目录;命令行起草一版可用的 config.yaml,用 proxy-providers 周期性拉取机场 YAML;用 systemd 做守护与重启策略;用 curl -x 在本机验证出口;遇到「能启动但拉不到订阅」「局域网连不上 mixed 口」时,知道先查 SELinux 审计还是防火墙区域

若你更习惯图形客户端与托盘图标,仍可从本站下载页选择带前端的发行版;桌上发行版的 SELinux/防火墙讨论可直接对照Fedora 文。对「订阅、配置档、规则、策略组」还没形成整体概念,可先浏览Clash 使用教程;关于 403、证书、空配置等共性问题,仍以订阅链接那些事为主线排查。

为什么 RHEL 9 这条线和 Debian 桌面教程不能混用

Debian/Ubuntu 常见教程假设:包管理器装 debsystemd --user、默认关闭或弱化的强制访问控制;而 RHEL 9 家族默认Enforcing 的 SELinuxfirewalld同时存在,路径若在 /usr/local 以外自定义、或二进制从高权限目录执行却访问非常规数据目录,容易在审计日志里出现 AVC,表面现象却是「服务状态 active 但端口没监听」「写不了 provider 缓存」。另一方面,企业镜像常收紧出站或只允许内网注册表,直接 curl GitHub 可能失败,需要你改成内网制品库或离线拷贝——这类约束 Debian 家用场景少见。

把 CentOS Stream/RHEL 单写成一篇,好处是命中「CentOS Clash」「RHEL 代理」「服务器 Mihomo」等搜索词,并与站内其它发行版教程互链,减少读者在搜索引擎里只捞到泛泛的「Linux 安装 Clash 一段脚本」却缺系统服务红帽防火墙上下文的挫败感。

合规提示:请仅在有权访问的网络内使用代理与订阅;勿在文档、工单或公开仓库中粘贴含 Token 的完整订阅 URL。本文命令中的订阅地址一律用占位符表示。

第一步:确认版本、架构与权限模型

执行 cat /etc/os-release,确认 VERSION_ID 为 9 系且平台兼容 RHEL 9 ABI。执行 uname -m,绝大多数云主机为 x86_64,少数 ARM 实例为 aarch64,下载 release 时必须与之一致。再运行 getenforce,若为 Enforcing,后文改路径或端口时要把 SELinux 纳入同一 checklist。

若你计划让 Mihomo 监听在 127.0.0.1 仅供本机应用走 HTTP_PROXY,防火墙入站通常无事;若配置里打开 allow-lanbind-address* 或具体内网网卡,同网段访问属于入站流量firewalld 不会自动放行,需要显式加端口。与图形客户端不同,服务器上往往没有「点一下允许局域网」之外的系统提示,容易误判成「内核坏了」。

第二步:获取 Mihomo(Clash Meta)发行版二进制

Mihomo(原 Clash Meta 内核延续)在 GitHub 上的发布仓库为 MetaCubeX/mihomo。进入 Releases 页面,选择与你的架构匹配的资产:常见名为 mihomo-linux-amd64-vX.Y.Z.gzmihomo-linux-arm64-... 等,具体以页面为准。若服务器无法直连外网,可在跳板机下载后,用 scp 传到 /tmp 再解压。

示例流程(路径与文件名请按你下载到的实际包替换):

# Example: unpack Mihomo to /usr/local/bin (adjust archive name)
sudo tar xzf mihomo-linux-amd64-*.gz -C /usr/local/bin/
sudo chmod +x /usr/local/bin/mihomo
/usr/local/bin/mihomo -v

验证版本能打印后,再进入配置阶段。不要把二进制散放在任意临时目录再让 systemd 引用;固定到 /usr/local/bin/mihomo 一类稳定路径,有利于后续升级时只替换单文件。

第三步:建立配置目录与最小可用 config.yaml

系统级部署推荐目录 /etc/mihomo,并确保 Mihomo 进程用户对该目录可读写(至少要能写 provider 缓存与可选地 Country.mmdb 等文件)。你可以先用 root 跑通,再改为专用用户:生产环境建议 useradd -r -s /sbin/nologin mihomochown -R mihomo:mihomo /etc/mihomo

下面是一段骨架配置:把 YOUR_SUBSCRIPTION_URL 换成真实 HTTPS 订阅;端口与你机场习惯保持一致。external-controller 仅绑定回环,避免把控制接口暴露到局域网。

# /etc/mihomo/config.yaml — skeleton, replace placeholders
port: 0
socks-port: 0
mixed-port: 7890
allow-lan: false
mode: rule
log-level: info
ipv6: false

external-controller: 127.0.0.1:9090

proxy-providers:
  airport:
    type: http
    url: "YOUR_SUBSCRIPTION_URL"
    path: ./providers/airport.yaml
    interval: 3600
    health-check:
      enable: true
      url: https://www.gstatic.com/generate_204
      interval: 600

proxy-groups:
  - name: SELECT
    type: select
    use:
      - airport

rules:
  - MATCH,SELECT

首次启动前可手动建目录 sudo mkdir -p /etc/mihomo/providers。若订阅格式包含 规则集覆写等高级特性,可在骨架跑通后按自定义规则教程扩展;不要在第一版就堆复杂 rule-providers,否则排错面太大。

第四步:前台试跑一次

在写 systemd 之前,务必前台确认能拉起:

sudo /usr/local/bin/mihomo -d /etc/mihomo

观察终端是否成功拉取 ./providers/airport.yaml,是否有 TLS 或 DNS 报错。此时另开终端执行:

curl -x http://127.0.0.1:7890 -I https://www.cloudflare.com/cdn-cgi/trace

若能返回 HTTP/2 200,说明混音端口与基础出口已通。若此处失败而订阅更新成功,多半是规则或策略组选择问题;若订阅更新失败,回到订阅常见问题按 HTTP 状态码拆分。

第五步:编写 systemd 单元并实现开机自启

创建 /etc/systemd/system/mihomo.service(注释仅供阅读,systemd 会忽略 # 行):

# /etc/systemd/system/mihomo.service
[Unit]
Description=Mihomo (Clash Meta) daemon
After=network-online.target
Wants=network-online.target

[Service]
Type=simple
ExecStart=/usr/local/bin/mihomo -d /etc/mihomo
Restart=on-failure
RestartSec=5
# If running as dedicated user, uncomment and adjust:
# User=mihomo
# Group=mihomo

[Install]
WantedBy=multi-user.target

若启用专用用户,请确保 /etc/mihomo 归属正确,且二进制对目标用户可执行。加载并启用:

sudo systemctl daemon-reload
sudo systemctl enable --now mihomo
sudo systemctl status mihomo --no-pager

排错优先看 journalctl -u mihomo -e --no-pager;与桌面 systemd --user 不同,系统单元日志集中在系统 journal,别只在用户会话里找。若你还折腾过全局 DNS,可参考Linux 上 Clash 与 systemd-resolved 协同排查,避免把解析问题误判为节点全红。

第六步:SELinux 与自定义路径

systemctl start 后进程立刻退出,或审计里出现 denied,用 sudo ausearch -m avc -ts recent | tail 抽一条记录,配合 audit2why(若已安装)查看是否缺少布尔值或文件上下文。自定义可执行路径、数据目录时,常见修复是给目标目录补 semanage fcontextrestorecon——具体命令必须以审计建议为准,避免一上来 setenforce 0 长驻。

与 Fedora 桌面场景类似,更完整的讨论见Clash Verge 在 Fedora 上的 SELinux/firewalld 专文;差异在于你这里是纯后端二进制,没有 GUI 沙箱目录,一般要关注的是对 /etc/mihomo 与临时文件的访问权限。

第七步:firewalld 放行(仅在需要局域网入站或自定义区域时)

当你把 allow-lan 设为 true,且希望其它机器访问本机 7890(示例端口),在活动区域添加端口并持久化:

sudo firewall-cmd --permanent --add-port=7890/tcp
sudo firewall-cmd --reload
sudo firewall-cmd --list-ports

多网卡、多区域场景请用 --zone= 明确指定,避免规则加在错误区域。对仅本机回环使用代理的应用,此步通常可跳过。

运维向补充:升级与安全基线

升级内核时重复「下载 → 停服务 → 覆盖二进制 → 启服务」四步即可;记得在变更窗口保留旧二进制备份。不要把 external-controller 绑到 0.0.0.0 却未做认证或网络隔离。若需远程 Dashboard,优先 SSH 隧道或反向代理加认证,而不是裸暴露 9090。

与桌面生态相比,服务器更常遇到「只有 CLI、没有 YAML 编辑器图形高亮」——用 vivim 维护配置时,建议在变更前复制一份带时间戳的备份文件,出错可立即回滚。

常见问题(正文摘要)

必须用 root 跑吗? 不必须;推荐专用系统账户,仅开放写配置目录的权限,减少被其它服务误读密钥面的风险。

订阅更新 403? 先换网络出口、核对系统时间,再对照订阅 FAQ里的状态码表,不要盲改防火墙。

TUN 模式? 服务器全局透明代理牵涉路由与权能,场景比「本机 mixed 端口」复杂得多;新手先在 rule 模式 mixed 端口闭环,再阅读TUN 模式深度解析评估是否要碰网卡级接管。

小结

CentOS Stream 9/RHEL 9 上部署 Mihomo,关键是把「release 二进制固定配置目录proxy-providerssystemd 托管」四件事一次性搭对,并把 SELinuxfirewalld 提前纳入同一排查顺序。站内 Debian 系、Fedora、Arch 等文已覆盖大量桌面首配细节,本文补齐企业常见 RHEL 系无头服务器的检索空白;若你希望同一台机器上还有图形方案,可回到下载页挑带前端的发行版。

相较部分「一键脚本」式安装,手工指定路径与单元文件虽然步骤略多,但升级、迁移、权限审计都更清晰,也更容易通过变更管理审查。许多传统代理工具在 Linux 上要么缺少与 Meta 内核同级的规则表达能力,要么没有活跃的开源周边与文档迭代,长期维护成本反而更高。如果你在找兼顾可编程分流可观测性的方案,不妨对比试用后从本站下载 Clash 系客户端,把熟悉的订阅与工作流迁到统一生态里。