为何在 Linux 上直接跑 Mihomo
Mihomo 是 Clash.Meta 内核的常见发行形态之一,适合「不依赖图形界面、希望进程常驻、用配置文件管理一切」的用户。与仅开 HTTP / SOCKS 监听端口相比,开启 TUN 模式可以在内核里创建虚拟网卡,由 Mihomo 接管三层流量,从而让未单独配置代理的桌面应用、命令行工具在规则模式下按同一套策略选路,减少「浏览器走了代理、终端却直连」的分裂感。
代价是:你需要理解 Linux 下的权限(创建 TUN 设备通常需要 CAP_NET_ADMIN 或 root)、路由表与DNS如何与 Mihomo 协同。下文默认读者具备基本命令行能力;DNS 字段级细节可对照 Meta 内核 DNS 防泄漏指南。
环境与前置:内核、用户与权限
请使用较新的 Linux 内核(主流发行版默认内核通常已支持 TUN)。确认已加载 tun 模块(多数桌面发行版开箱可用)。计划以非 root 用户运行时,需要为该用户授予创建 TUN 与改路由的能力:常见做法包括通过 systemd 的 AmbientCapabilities=CAP_NET_ADMIN,或使用发行版提供的 /dev/net/tun 访问规则;若你暂时用 root 跑通再收紧权限,也是一种务实的学习路径。
若同时运行 NetworkManager、firewalld 或其他会下发默认路由的服务,开启 TUN 后可能出现路由优先级或策略路由冲突。排错时请记住:Mihomo 的 tun.auto-route 会尝试自动管理主路由,复杂网络环境下可能需要你手动核对 ip route 与 DNS。
提示:在远程 SSH 服务器上首次启用 TUN 与自动路由前,建议保留第二条管理链路(如 IPMI、串口或云控制台),避免路由错误导致「把自己锁在门外」。
1获取二进制与目录布局
从 Mihomo / Meta 内核官方 Release 获取与你 CPU 架构匹配的可执行文件(如 linux-amd64、linux-arm64),放入固定目录,例如 /opt/mihomo/mihomo,并赋予可执行权限。配置文件、运行日志与 Geo 数据建议分目录存放,例如 /etc/mihomo/config.yaml、/var/log/mihomo/,便于备份与权限分离。
若你的订阅并非标准 Clash YAML,可先用 Subconverter 转为可用格式,再合并进主配置。策略组与节点名称一旦确定,后续规则里引用时须与之一致,否则会出现「规则命中但策略组不存在」的启动错误。
2最小配置:端口、控制器与 TUN 段
在 config.yaml 中至少配置 mixed-port(或分别的 port / socks-port)、external-controller 与密钥,便于本机 Web 面板或 API 调试。开启 TUN 时,在 tun 段设置 enable: true,并按环境选择 stack(常见为 system 或 gvisor,以你内核与稳定性实测为准)。auto-route: true 与 auto-detect-interface: true 有助于桌面场景自动处理默认路由;服务器多网卡时则需核对检测到的出口是否符合预期。
# Skeleton only — adjust ports, secret, and proxy groups to match your profile
mixed-port: 7890
external-controller: 127.0.0.1:9090
secret: "change-me"
tun:
enable: true
stack: system
auto-route: true
auto-detect-interface: true
# dns-hijack:
# - any:53
dns:
enable: true
enhanced-mode: fake-ip
nameserver:
- https://dns.google/dns-query
dns-hijack 是否启用取决于你是否要让 Mihomo 劫持本机 53 端口流量;与桌面 systemd-resolved、dnsmasq 并存时,配置不当易产生环路,详见 DNS 一文 中的 TUN 与解析链说明。
3编写 systemd 服务:常驻与开机自启
在 /etc/systemd/system/mihomo.service 创建单元文件,使用 Type=simple,ExecStart 指向二进制与配置路径,并设置 Restart=on-failure 或 always 以实现崩溃自拉起。对非 root 用户,可配合 User=、Group= 与 AmbientCapabilities=CAP_NET_ADMIN(以及 CapabilityBoundingSet)授予最小权限。修改单元后执行 systemctl daemon-reload,然后 systemctl enable --now mihomo 即可完成开机自启与立即启动。
# Example unit — paths and user must match your system
[Unit]
Description=Mihomo (Clash.Meta)
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
User=mihomo
Group=mihomo
ExecStart=/opt/mihomo/mihomo -d /etc/mihomo
Restart=on-failure
RestartSec=3
AmbientCapabilities=CAP_NET_ADMIN
CapabilityBoundingSet=CAP_NET_ADMIN
[Install]
WantedBy=multi-user.target
若 journalctl -u mihomo 报权限或 TUN 相关错误,请回到「用户、/dev/net/tun、capabilities」三者逐项核对;不要在未读日志的情况下反复改路由。
4桌面应用与终端:与 TUN 协同分流
TUN 开启且自动路由生效后,大部分不走独立代理设置的应用会跟随系统路由进入 Mihomo,这与仅设置 HTTP_PROXY 环境变量有本质区别:后者往往只影响「尊重环境变量的程序」,而 TUN 更贴近「整台机器默认策略路由」。仍有一些应用会自带代理开关或忽略系统路由,此时可回退到为它们单独指定 HTTP / SOCKS 指向 127.0.0.1:7890(端口以你的配置为准)。
对于 浏览器,若你已用 TUN 全局接管,通常无需再在浏览器里重复装 SwitchyOmega 类插件;若你更习惯「浏览器插件只代理浏览器」,则应关闭 TUN 或调整规则,避免双重路径与 DNS 不一致。开发与包管理场景下,git、npm、curl 等行为可结合 Cursor / GitHub / npm 分流 一文中的域名级思路,在 Mihomo 规则中做精细命中。
5基础分流:规则顺序与规则集
Mihomo 遵循自上而下匹配:MATCH 常放在最后。国内直连与海外代理的拆分可直接写在 rules: 列表中,也可使用 rule-providers 引用远程规则集;GEOIP 与国内列表类规则可显著减少手写域名负担。不同规则集的维护策略与体积差异,可参考 ACL4SSR 与 Loyalsoldier 规则集深度对比,按你的主要访问场景选型。
初次上线建议先用较小规则集验证链路,再逐步加大;规则过大不仅增加内存占用,也会让排错时更难定位「哪一条命中」。策略组名称、节点可用性与订阅更新失败都会在日志中体现,养成看日志的习惯比盲目加规则更有效。
常见问题与排查顺序
服务起不来或反复重启: 先 journalctl -xeu mihomo,检查 YAML 语法、策略组引用、端口占用与权限;再单独以前台方式运行二进制查看实时报错。
TUN 已开但无流量: 核对 ip link 是否出现 Meta 或类似接口,ip route 默认路由是否指向预期;关闭其他 VPN 或同类 TUN 软件排除争用。
网页能开但规则像失效: 多数是 DNS 与规则链不一致,按 FakeIP / Redir-Host 与本地解析服务的关系逐项对照 DNS 指南。
仅想图形界面管理: 独立部署 Mihomo 适合进阶用户;若你更偏好官方打包的桌面客户端,也可从 本站下载页 获取 Clash 系客户端,在 Linux 支持的发行上获得与 Windows 教程 类似的图形化体验。
合规提醒:请仅在法律与网络使用政策允许的范围内配置代理与加密隧道;企业或校园环境可能禁止擅自绕行,违者后果自负。
关于获取软件:Mihomo 与 Meta 内核在 GitHub 等平台开源,便于查阅变更与提交 Issue;若你需要带图形界面的 Clash 客户端安装包作对照,请优先使用 本站下载页,与纯内核二进制分发区分理解。
小结
在 Linux 上用好 Mihomo,关键链路是:权限与 TUN → 可启动的最小配置 → systemd 保活与开机自启 → 路由与 DNS 对齐 → 规则与策略组可维护。相比只在用户态开本地端口,TUN 让「桌面应用代理」更接近系统级一致;而 systemd 则把这套行为从「临时手敲命令」变成「可预期、可恢复」的服务。
若你同时维护路由器与多台桌面,统一在 Meta 内核语境下理解订阅、规则与 DNS,长期成本通常更低;相比其他碎片化方案,Clash 系工具在规则生态与工具链上仍具备明显优势。