mihomo 裸核部署完全指南:Linux / Windows 双平台 + Web 面板
很多人接触 Clash 都是从 Clash for Windows / ClashX / Stash 这种带 GUI 的客户端开始的。但当你想:
- 在 VPS 上跑代理网关,给家里几台机器共用;
- 在 Linux 服务器上做链式代理 / 落地机;
- 自定义订阅、规则、面板,完全不依赖任何商业 GUI;
就需要直接玩 mihomo(Clash Meta)的”裸核”——一个二进制 + 一个 YAML 配置 + 一个 systemd 单元,齐活。这篇把全流程梳理一遍。
一、mihomo 的运行模型#
先看一张图:
核心三件套:
| 文件 / 路径 | 作用 |
|---|---|
/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:
1https://github.com/MetaCubeX/mihomo/releases服务器拉不动 GitHub 是常态。可以先在本地下载好再 scp 上去,或者用 jsdelivr / ghproxy 这类镜像。
1# 假设 .deb 已经在当前目录2sudo dpkg -i mihomo-*.deb3sudo apt -f install -y4
5# 确认6which mihomo7mihomo -v2.2 放配置文件#
/etc/mihomo/config.yaml 就是核心。下面给一个最小可用模板(完整版后面给):
1# 监听端口2port: 7890 # HTTP 代理3socks-port: 7891 # SOCKS54mixed-port: 7893 # 混合(HTTP/SOCKS5)5
6allow-lan: false7bind-address: "127.0.0.1"8
9# Web 面板10external-controller: 0.0.0.0:909011secret: "your_strong_secret_here"12external-ui: /root/.config/mihomo/ui13
14mode: rule15log-level: info16
17proxies: []18proxy-groups:19 - name: PROXY20 type: select21 proxies: [DIRECT]22rules:23 - MATCH,PROXY⚠️
secret是 Web 面板的 API 密码,务必改成 16 位以上随机字符串,否则等于把代理控制权裸奔到公网。
把它放到位:
1sudo cp config.yaml /etc/mihomo/config.yaml2.3 装 Web UI(zashboard / metacubexd 任选其一)#
mihomo 不带 UI,需要额外放静态文件。以 metacubexd 为例:
1# 创建 UI 目录2sudo mkdir -p /root/.config/mihomo/ui3
4cd /tmp5curl -L -o metacubexd.zip \6 https://github.com/MetaCubeX/metacubexd/archive/refs/heads/gh-pages.zip7unzip -q metacubexd.zip8
9sudo rm -rf /root/.config/mihomo/ui/*10sudo cp -a metacubexd-gh-pages/. /root/.config/mihomo/ui/11
12# 确认13test -f /root/.config/mihomo/ui/index.html && echo "UI OK"配置里的
external-ui路径必须和这里的目录完全一致。我见过最多的”面板打不开”就是路径不一致。
2.4 下载 Geo 数据#
第一次启动 mihomo 会自动拉 Geo 数据,但服务器从 GitHub 拉经常超时。手动下:
1cd /root/.config/mihomo/2
3# 先清旧的4sudo rm -f GeoSite.dat GeoIP.dat Country.mmdb GeoLite2-ASN.mmdb5
6sudo curl -L --retry 5 --connect-timeout 20 \7 -o GeoSite.dat \8 https://github.com/MetaCubeX/meta-rules-dat/releases/download/latest/geosite.dat9
10sudo curl -L --retry 5 --connect-timeout 20 \11 -o GeoIP.dat \12 https://github.com/MetaCubeX/meta-rules-dat/releases/download/latest/geoip.dat13
14sudo curl -L --retry 5 --connect-timeout 20 \15 -o Country.mmdb \16 https://github.com/MetaCubeX/meta-rules-dat/releases/download/latest/country.mmdb下载失败可以走 jsdelivr 镜像,在 config.yaml 里加:
1geox-url:2 geoip: https://testingcf.jsdelivr.net/gh/MetaCubeX/meta-rules-dat@release/geoip.dat3 geosite: https://testingcf.jsdelivr.net/gh/MetaCubeX/meta-rules-dat@release/geosite.dat4 mmdb: https://testingcf.jsdelivr.net/gh/MetaCubeX/meta-rules-dat@release/country.mmdb5 asn: https://testingcf.jsdelivr.net/gh/MetaCubeX/meta-rules-dat@release/GeoLite2-ASN.mmdb2.5 前台跑一次验证#
1sudo mihomo -f /etc/mihomo/config.yaml看到没有报错、监听端口出现,浏览器打开:
1http://<你的服务器 IP>:9090/ui/🪤 常见坑:第一次访问如果加载不出来,一定要
Ctrl+Shift+R(强刷绕过缓存)。Ctrl+R不够,浏览器会用旧缓存。
2.6 配 systemd 服务#
确认 OK 之后 Ctrl+C 停掉,写 service 文件:
1sudo tee /etc/systemd/system/mihomo.service >/dev/null <<'EOF'2[Unit]3Description=Mihomo Proxy Service4After=network-online.target5Wants=network-online.target6
7[Service]8Type=simple9ExecStart=/usr/bin/mihomo -f /etc/mihomo/config.yaml10Restart=on-failure11RestartSec=212LimitNOFILE=104857613
14[Install]15WantedBy=multi-user.target16EOF17
18sudo systemctl daemon-reload19sudo systemctl enable mihomo20sudo systemctl start mihomo21sudo systemctl status mihomo查日志:
1journalctl -u mihomo -f2.7 开放防火墙端口#
| 端口 | 用途 | 公网是否开放 |
|---|---|---|
| 9090 | Web 面板 / API | ✅(建议加 IP 白名单) |
| 7890–7893 | HTTP / SOCKS5 代理 | ❌ 不要开,只给本机用 |
1sudo ufw allow 90902sudo ufw status⚠️ 千万别把 7890 这种代理端口直接开到公网,否则你的 VPS 会变成所有人的免费代理,分分钟被滥用、被商家封号。
2.8 本机使用代理#
1export http_proxy=http://127.0.0.1:78902export https_proxy=http://127.0.0.1:78903export all_proxy=socks5://127.0.0.1:78914
5# 测试6curl https://www.google.com -I取消:
1unset http_proxy https_proxy all_proxy三、Windows 裸核部署#
Windows 上一般直接用 Clash Verge / FlClash 这类 GUI 客户端,但如果你想跑裸核:
1# 1. 下载 mihomo-windows-amd64.zip 解压到 C:\mihomo2# 2. 配置文件放到 C:\Users\<你的用户>\.config\mihomo\config.yaml3# 3. 前台运行4cd C:\mihomo5.\mihomo.exe -d $env:USERPROFILE\.config\mihomo要做成开机自启:
| 方案 | 推荐度 | 说明 |
|---|---|---|
| 任务计划程序 | ⭐⭐⭐⭐⭐ | 最简单,开机触发执行 |
| NSSM 注册服务 | ⭐⭐⭐⭐ | 跑成 Windows 服务 |
| WSL2 跑 Linux 版 | ⭐⭐ | 折腾,但有人喜欢 |
四、写好 config.yaml 的几个关键#
4.1 端口规划#
1port: 7890 # HTTP2socks-port: 7891 # SOCKS53mixed-port: 7893 # 混合(推荐应用都走这个)4tproxy-port: 7894 # 透明代理(TUN 用)应用配置代理时统一用 mixed-port: 7893,不用区分协议。
4.2 LAN / 监听控制#
1allow-lan: false # 是否允许局域网设备使用2bind-address: "127.0.0.1" # 只监听本机3authentication:4 - "username:password" # HTTP/SOCKS 代理需要认证5
6lan-allowed-ips:7 - "127.0.0.1/8"8 - "::1/128"9 - "172.16.0.0/12" # Docker 桥接子网VPS 上强烈建议 allow-lan: false + bind-address: 127.0.0.1,让代理端口只对本机开放,外部走 nginx 反代或 SSH 隧道。
4.3 订阅 provider#
不写一堆 proxies:,直接挂订阅:
1proxy-providers:2 Airport1:3 url: "https://your-subscription-link"4 type: http5 interval: 864006 health-check: { enable: true, url: https://www.gstatic.com/generate_204, interval: 300 }7 override: { udp: true, additional-prefix: "[A1]" }🔐 订阅链接里通常带 token,配置文件权限设成
600:sudo chmod 600 /etc/mihomo/config.yaml。
4.4 智能选节点 + 国家分流#
mihomo 内置了 smart 类型的代理组,可以自动选最快节点:
1proxy-groups:2 - name: 🇭🇰 香港智能3 type: smart4 url: https://www.gstatic.com/generate_2045 interval: 3006 tolerance: 507 include-all: true8 filter: "(?=.*(港|HK|(?i)Hong))^((?!(台|日|韩|新|深|美|英)).)*$"filter 是节点名的正则筛选,正向匹配 + 负向排除配合用,能精准抓你想要的国家节点。
4.5 端口分流(按端口选国家)#
把不同端口对应不同国家,应用可以直接通过端口选地区,不用切换:
1listeners:2 - name: port-hk3 type: mixed4 port: 420005 udp: true6 - name: port-jp7 type: mixed8 port: 420029 udp: true10
11rules:12 - "IN-PORT,42000,🇭🇰 香港智能"13 - "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 这套跑通,后面所有花活都是在这个基础上叠的。