1 为何单独写 Ubuntu 24.04 LTS
当你搜索「Mihomo 安装」或「Linux 代理」时,泛版本教程往往省略发行版细节;而大量桌面用户、云主机供货商预装镜像与开发者 WSL2 发行版中,Ubuntu 24.04 LTS(代号 Noble)都是默认选项之一。把步骤锚定在这一代,你能直接对照apt软件源行为、UFW 防火墙习惯用语,以及常见的 x86_64 与 arm64 云实例形态,减少「我明明照抄命令却路径不对」的挫折感。
Mihomo 即 Clash 生态中的 Clash Meta 内核分支,配置语法与多数 Clash 教程兼容,并持续合并新传输特性。把它作为无图形界面场景下的本机或 VPS 代理核心,再用 systemd 保证崩掉后自动拉起,是典型的生产级姿势:日志进 journal 或文件,配置集中在 /etc/mihomo,备份与审计都简单。
如果你希望一份跨 Debian 系、Fedora 系都能用的流程,可同步打开站内的Linux 安装 Mihomo 与 systemd 通用教程;本文则在相同骨架上补充 Noble 常见的包名、权限路径与验收习惯,并把压缩包解压写得更贴近 Releases 页面实际文件名。
2 环境准备与防火墙心智模型
先确认你确实运行的是 24.04 LTS:可使用 lsb_release -a 或阅读 /etc/os-release。接着确认 CPU 架构,决定下载哪一类压缩包:uname -m 输出 x86_64 对应多数桌面与云主机;输出 aarch64 则对应 arm64 机型。仓库里若尚未安装下载工具,执行 sudo apt update 后装上 curl 或 wget 即可;不需要为了运行 Mihomo 而安装整套编译链。
Linux 代理监听在本机回环地址时,默认不会自动把浏览器或终端流量送进去;你仍要通过环境变量、应用内代理或更高阶的 TUN 方案接入。与之并行的是安全:建议把 external-controller 绑在 127.0.0.1,仅在确有需要时才对局域网打开 allow-lan,并用 UFW 或云安全组对来源 IP 做白名单。Noble 默认的 nftables 后端对 UFW 用户透明,但要牢记「放行端口」等于把面暴露在你声明的网段上。
0.0.0.0 且未配合防火墙时,等同于把切换节点与查看连接的权限送给整个世界。若必须远端维护,请限定来源地址,并为 secret 使用高强度随机值。
3 压缩包下载、解压与二进制落位
官方发布页通常同时提供 .gz 单文件与带版本目录的归档;本质都是「拿可执行文件」。下面以 amd64 为例,务必把示例 URL 与版本号改成你下载当下 Releases 页展示的最新组合。
sudo mkdir -p /etc/mihomo /var/log/mihomo
# Example: replace URL with current amd64 asset from upstream Releases
cd /tmp
curl -LO https://github.com/MetaCubeX/Mihomo/releases/download/v1.19.12/mihomo-linux-amd64-v1.19.12.gz
gunzip -f mihomo-linux-amd64-v1.19.12.gz
sudo install -m 0755 mihomo-linux-amd64-v1.19.12 /usr/local/bin/mihomo
/usr/local/bin/mihomo -v
若你拿到的是 .tar.gz,流程改为 tar -xzf 后在解压目录中寻找名为 mihomo 的文件,再用同样的 install 命令复制到 /usr/local/bin。arm64 请将文件名中的架构段换成对应发布物。完成这一步后,系统已能找到稳定的可执行路径,接下来才进入最小 YAML。
/etc/mihomo 与日志目录的属主改为该用户,稍后在 systemd 单元中把 User= 对齐即可。
4 最小 YAML、proxy-providers 与订阅导入
下面是一份可直接保存为 /etc/mihomo/config.yaml 的起点:包含混合端口、本地 DNS、FakeIP、外部控制器与订阅提供方占位。先执行 sudo mkdir -p /etc/mihomo/providers,确保 proxy-providers 的本地缓存路径可写。把订阅段中的示例 URL 换成机场给你的 HTTPS 链接;若提供商要求特定 User-Agent,可在 proxy-providers.airport 下追加 header 字段。
mixed-port: 7890
allow-lan: false
mode: rule
log-level: info
ipv6: false
external-controller: 127.0.0.1:9090
secret: "change-me-strong"
dns:
enable: true
listen: 127.0.0.1:1053
enhanced-mode: fake-ip
fake-ip-range: 198.18.0.1/16
nameserver:
- 223.5.5.5
- 119.29.29.29
fallback:
- https://1.1.1.1/dns-query
- https://8.8.8.8/dns-query
proxy-providers:
airport:
type: http
url: "https://example.com/YOUR_SUB_URL"
path: ./providers/airport.yaml
interval: 3600
health-check:
enable: true
url: https://www.gstatic.com/generate_204
interval: 600
proxy-groups:
- name: PROXY
type: select
use:
- airport
proxies:
- DIRECT
rules:
- GEOIP,CN,DIRECT
- MATCH,PROXY
缩进必须使用空格;混用 Tab 会让解析失败。首次写入后执行 sudo /usr/local/bin/mihomo -t -d /etc/mihomo,看到测试通过再继续。若你的订阅并非 Clash 可直接拉取的 YAML,可先用站内的订阅转换指南得到兼容片段,再合并进 proxies 或改为远程 rule-providers 方案。
想深入了解 DNS 与 FakeIP pitfalls,可阅读Meta 核心 DNS 防泄漏实践,按你的上网环境微调 dns 块。对控制面板有需求时,可在安全网络内访问 9090,或参考外接控制器与 YACD一文的架构思路。
5 systemd 单元:开机自启与日志落盘
Noble 与其他使用 systemd 的发行版一样,推荐显式等待网路就绪,避免第一次启动时解析订阅失败。建立 /etc/systemd/system/mihomo.service:
[Unit]
Description=Mihomo (Clash Meta) on Ubuntu
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
ExecStart=/usr/local/bin/mihomo -d /etc/mihomo
Restart=on-failure
RestartSec=5
LimitNOFILE=65535
StandardOutput=append:/var/log/mihomo/output.log
StandardError=append:/var/log/mihomo/error.log
[Install]
WantedBy=multi-user.target
载入并启动:
sudo systemctl daemon-reload
sudo systemctl enable --now mihomo
systemctl status mihomo --no-pager
之后每次调整配置,使用 sudo systemctl restart mihomo。需要观察现场日志时,journalctl -u mihomo -f 与 /var/log/mihomo/error.log 互为补充。
6 Linux 代理验证、环境变量与常见误判
服务成功运行只代表 Mihomo 在听端口;应用是否走代理取决于它是否读取环境变量或自带代理设置。对当前 shell 临时导出:
export http_proxy=http://127.0.0.1:7890
export https_proxy=http://127.0.0.1:7890
export ALL_PROXY=socks5://127.0.0.1:7890
然后使用 curl -I https://www.cloudflare.com/cdn-cgi/trace 或直接访问你业务需要的 HTTPS 终端点。若超时,请依次检查:服务是否 active、proxy-groups 是否引用到实际节点、订阅是否拉取成功、以及规则是否错误地把流量留在 DIRECT。
桌面浏览器不会自动读取上述环境变量;要么安装 SwitchyOmega 一类扩展指向本机端口,要么改用 TUN 级客户端方案。对服务器侧批量任务,往往只要保证 https_proxy 对实际发起请求的用户或 service 可见即可。
7 常见问题(Noble 场景)
- 第一次 start 就失败:优先跑
mihomo -t;其次journalctl -u mihomo -n 120 --no-pager。多数是 YAML 缩进、订阅 URL 需要 header、或mixed-port已被其他软件占用。 - 订阅更新 403:尝试在
proxy-providers增加提供商要求的 UA,或改用转换后的静态配置文件作过渡;详见站内订阅排错文章系列。 - 需要多台内网设备共用:谨慎打开
allow-lan,并在 UFW 用from子网限定来源,避免把入站暴露到不可信网络。 - 与 Snap / 容器里 curl 的行为不一致:容器内可能有独立 DNS;必要时在任务容器中同样导出代理环境变量,或在网关层做透明转发。
8 总结与延伸阅读
把 Mihomo 装在 Ubuntu 24.04 LTS 上的关键点,是把「压缩包 → 固定二进制路径 → 最小 YAML → systemd 自启」拆成可重复脚本化的阶段:你获得的是可审计的 Linux 代理服务,而不是一次性的临时命令。与泛 Linux 教程相比,本文刻意绑定 Noble 的工具链语境,方便你在搜索「版本号 + Mihomo」时直接命中可操作步骤。
许多命令行导向的代理分发脚本默认假设你已熟悉 shell,却缺少一键 TUN、订阅可视化管理与规则调试面板;图形客户端往往又要面对停更、闭源或平台割裂的问题。若你希望在桌面端用成熟 GUI 管理 Clash Meta 内核、启用 TUN、并在 Windows、macOS 与 Linux 间共享同一套心智模型,Clash Verge Rev 这类持续维护的客户端会把订阅、规则与更新节奏封装得更顺手,日常切换节点的成本显著低于纯手工维护远程 YAML。
你若是主要在一台 Noble 机器上开发,可以保留本文的 systemd 方案处理远端 Git 与容器拉取;而在日常办公桌面,不妨试试我们整理的下载页里跨平台客户端,让复杂分流在图形界面里完成,而不必每次 ssh 进去改文件。