mihomo 裸核部署完全指南:Linux / Windows 双平台 + Web 面板
很多人接触 Clash 都是从 Clash for Windows / ClashX / Stash 这种带 GUI 的客户端开始的。但当你想:
- 在 VPS 上跑代理网关,给家里几台机器共用;
- 在 Linux 服务器上做链式代理 / 落地机;
- 自定义订阅、规则、面板,完全不依赖任何商业 GUI;
就需要直接玩 mihomo(Clash Meta)的”裸核”——一个二进制 + 一个 YAML 配置 + 一个 systemd 单元,齐活。这篇把全流程梳理一遍。
一、mihomo 的运行模型
先看一张图:
裸核] M --> D{DNS / 规则匹配} D -->|国内站| DR[DIRECT 直连] D -->|国外站| P[代理节点
VLESS / VMess / SS] M --> U[external-controller
9090 面板 API] U --> UI[zashboard / metacubexd
Web UI]
核心三件套:
| 文件 / 路径 | 作用 |
|---|---|
/usr/bin/mihomo | 主程序二进制 |
/etc/mihomo/config.yaml | 配置(节点 + 规则 + DNS) |
~/.config/mihomo/ | 运行时数据(缓存 / Geo 数据 / UI) |
/etc/systemd/system/mihomo.service | systemd 单元 |
工作目录 ~/.config/mihomo/ 里通常有这些东西:
| 文件 / 目录 | 说明 |
|---|---|
ui/ | 外部面板的静态文件 |
proxies/ | 订阅 provider 缓存 |
ruleset/ | rule-provider 缓存 |
cache.db | 运行缓存(fake-ip、选择记录) |
GeoIP.dat / GeoSite.dat | Geo 数据 |
| 系统 | 路径 |
|---|---|
| Linux root | /root/.config/mihomo |
| Linux 普通用户 | /home/<用户名>/.config/mihomo |
| Windows | C:\Users\<用户名>\.config\mihomo |
二、Linux 安装:完整流程
下面以 Debian/Ubuntu 为例(其它发行版同理,包格式换成对应的即可)。
2.1 装包
去官方 release 拉对应架构的 .deb:
https://github.com/MetaCubeX/mihomo/releases服务器拉不动 GitHub 是常态。可以先在本地下载好再 scp 上去,或者用 jsdelivr / ghproxy 这类镜像。
# 假设 .deb 已经在当前目录sudo dpkg -i mihomo-*.debsudo apt -f install -y
# 确认which mihomomihomo -v2.2 放配置文件
/etc/mihomo/config.yaml 就是核心。下面给一个最小可用模板(完整版后面给):
# 监听端口port: 7890 # HTTP 代理socks-port: 7891 # SOCKS5mixed-port: 7893 # 混合(HTTP/SOCKS5)
allow-lan: falsebind-address: "127.0.0.1"
# Web 面板external-controller: 0.0.0.0:9090secret: "your_strong_secret_here"external-ui: /root/.config/mihomo/ui
mode: rulelog-level: info
proxies: []proxy-groups: - name: PROXY type: select proxies: [DIRECT]rules: - MATCH,PROXY⚠️
secret是 Web 面板的 API 密码,务必改成 16 位以上随机字符串,否则等于把代理控制权裸奔到公网。
把它放到位:
sudo cp config.yaml /etc/mihomo/config.yaml2.3 装 Web UI(zashboard / metacubexd 任选其一)
mihomo 不带 UI,需要额外放静态文件。以 metacubexd 为例:
# 创建 UI 目录sudo mkdir -p /root/.config/mihomo/ui
cd /tmpcurl -L -o metacubexd.zip \ https://github.com/MetaCubeX/metacubexd/archive/refs/heads/gh-pages.zipunzip -q metacubexd.zip
sudo rm -rf /root/.config/mihomo/ui/*sudo cp -a metacubexd-gh-pages/. /root/.config/mihomo/ui/
# 确认test -f /root/.config/mihomo/ui/index.html && echo "UI OK"配置里的
external-ui路径必须和这里的目录完全一致。我见过最多的”面板打不开”就是路径不一致。
2.4 下载 Geo 数据
第一次启动 mihomo 会自动拉 Geo 数据,但服务器从 GitHub 拉经常超时。手动下:
cd /root/.config/mihomo/
# 先清旧的sudo rm -f GeoSite.dat GeoIP.dat Country.mmdb GeoLite2-ASN.mmdb
sudo curl -L --retry 5 --connect-timeout 20 \ -o GeoSite.dat \ https://github.com/MetaCubeX/meta-rules-dat/releases/download/latest/geosite.dat
sudo curl -L --retry 5 --connect-timeout 20 \ -o GeoIP.dat \ https://github.com/MetaCubeX/meta-rules-dat/releases/download/latest/geoip.dat
sudo curl -L --retry 5 --connect-timeout 20 \ -o Country.mmdb \ https://github.com/MetaCubeX/meta-rules-dat/releases/download/latest/country.mmdb下载失败可以走 jsdelivr 镜像,在 config.yaml 里加:
geox-url: geoip: https://testingcf.jsdelivr.net/gh/MetaCubeX/meta-rules-dat@release/geoip.dat geosite: https://testingcf.jsdelivr.net/gh/MetaCubeX/meta-rules-dat@release/geosite.dat mmdb: https://testingcf.jsdelivr.net/gh/MetaCubeX/meta-rules-dat@release/country.mmdb asn: https://testingcf.jsdelivr.net/gh/MetaCubeX/meta-rules-dat@release/GeoLite2-ASN.mmdb2.5 前台跑一次验证
sudo mihomo -f /etc/mihomo/config.yaml看到没有报错、监听端口出现,浏览器打开:
http://<你的服务器 IP>:9090/ui/🪤 常见坑:第一次访问如果加载不出来,一定要
Ctrl+Shift+R(强刷绕过缓存)。Ctrl+R不够,浏览器会用旧缓存。
2.6 配 systemd 服务
确认 OK 之后 Ctrl+C 停掉,写 service 文件:
sudo tee /etc/systemd/system/mihomo.service >/dev/null <<'EOF'[Unit]Description=Mihomo Proxy ServiceAfter=network-online.targetWants=network-online.target
[Service]Type=simpleExecStart=/usr/bin/mihomo -f /etc/mihomo/config.yamlRestart=on-failureRestartSec=2LimitNOFILE=1048576
[Install]WantedBy=multi-user.targetEOF
sudo systemctl daemon-reloadsudo systemctl enable mihomosudo systemctl start mihomosudo systemctl status mihomo查日志:
journalctl -u mihomo -f2.7 开放防火墙端口
| 端口 | 用途 | 公网是否开放 |
|---|---|---|
| 9090 | Web 面板 / API | ✅(建议加 IP 白名单) |
| 7890–7893 | HTTP / SOCKS5 代理 | ❌ 不要开,只给本机用 |
sudo ufw allow 9090sudo ufw status⚠️ 千万别把 7890 这种代理端口直接开到公网,否则你的 VPS 会变成所有人的免费代理,分分钟被滥用、被商家封号。
2.8 本机使用代理
export http_proxy=http://127.0.0.1:7890export https_proxy=http://127.0.0.1:7890export all_proxy=socks5://127.0.0.1:7891
# 测试curl https://www.google.com -I取消:
unset http_proxy https_proxy all_proxy三、Windows 裸核部署
Windows 上一般直接用 Clash Verge / FlClash 这类 GUI 客户端,但如果你想跑裸核:
# 2. 配置文件放到 C:\Users\<你的用户>\.config\mihomo\config.yaml# 3. 前台运行cd C:\mihomo.\mihomo.exe -d $env:USERPROFILE\.config\mihomo要做成开机自启:
| 方案 | 推荐度 | 说明 |
|---|---|---|
| 任务计划程序 | ⭐⭐⭐⭐⭐ | 最简单,开机触发执行 |
| NSSM 注册服务 | ⭐⭐⭐⭐ | 跑成 Windows 服务 |
| WSL2 跑 Linux 版 | ⭐⭐ | 折腾,但有人喜欢 |
四、写好 config.yaml 的几个关键
4.1 端口规划
port: 7890 # HTTPsocks-port: 7891 # SOCKS5mixed-port: 7893 # 混合(推荐应用都走这个)tproxy-port: 7894 # 透明代理(TUN 用)应用配置代理时统一用 mixed-port: 7893,不用区分协议。
4.2 LAN / 监听控制
allow-lan: false # 是否允许局域网设备使用bind-address: "127.0.0.1" # 只监听本机authentication: - "username:password" # HTTP/SOCKS 代理需要认证
lan-allowed-ips: - "127.0.0.1/8" - "::1/128" - "172.16.0.0/12" # Docker 桥接子网VPS 上强烈建议 allow-lan: false + bind-address: 127.0.0.1,让代理端口只对本机开放,外部走 nginx 反代或 SSH 隧道。
4.3 订阅 provider
不写一堆 proxies:,直接挂订阅:
proxy-providers: Airport1: url: "https://your-subscription-link" type: http interval: 86400 health-check: { enable: true, url: https://www.gstatic.com/generate_204, interval: 300 } override: { udp: true, additional-prefix: "[A1]" }🔐 订阅链接里通常带 token,配置文件权限设成
600:sudo chmod 600 /etc/mihomo/config.yaml。
4.4 智能选节点 + 国家分流
mihomo 内置了 smart 类型的代理组,可以自动选最快节点:
proxy-groups: - name: 🇭🇰 香港智能 type: smart url: https://www.gstatic.com/generate_204 interval: 300 tolerance: 50 include-all: true filter: "(?=.*(港|HK|(?i)Hong))^((?!(台|日|韩|新|深|美|英)).)*$"filter 是节点名的正则筛选,正向匹配 + 负向排除配合用,能精准抓你想要的国家节点。
4.5 端口分流(按端口选国家)
把不同端口对应不同国家,应用可以直接通过端口选地区,不用切换:
listeners: - name: port-hk type: mixed port: 42000 udp: true - name: port-jp type: mixed port: 42002 udp: true
rules: - "IN-PORT,42000,🇭🇰 香港智能" - "IN-PORT,42002,🇯🇵 日本手动"用法:浏览器扩展配端口 42000 走香港,配 42002 走日本,零延迟切换。
五、踩坑清单
- 面板加载不出来:80% 是浏览器缓存,先
Ctrl+Shift+R,再检查external-ui路径。 - 拉订阅失败:mihomo 拉订阅时不走自己的代理,VPS 是国外的还好,国内 VPS 拉国外订阅可能要先配
http_proxy。 sudo mihomo看不到环境变量:用sudo -E mihomo ...,-E表示继承环境变量。- Geo 数据下不动:换 jsdelivr 镜像,或者手动 scp 上去。
- DNS 污染导致直连站打不开:检查
dns.fake-ip-filter,把国内服务(NTP、音乐、游戏等)放进去。 - systemd 跑起来没问题,但本机 curl 不通:检查
bind-address,如果是127.0.0.1但你从外网访问就肯定不通。
六、之后能玩什么
裸核部署只是起点,能往后接的东西很多:
- fake-ip + DNS 分流 + no-resolve:彻底解决 DNS 泄漏,下一篇专门讲
- Sub-Store 自部署:订阅聚合、节点过滤、自动更新
- 链式代理 / 落地机:本机 mihomo → 中转 VPS → 落地 VPS
- TUN 模式接管全局流量:不依赖应用层代理设置
mihomo 的玩法深度比想象中大,但一旦把裸核 + systemd 这套跑通,后面所有花活都是在这个基础上叠的。