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:

https://github.com/MetaCubeX/mihomo/releases

服务器拉不动 GitHub 是常态。可以先在本地下载好再 scp 上去,或者用 jsdelivr / ghproxy 这类镜像。

# 假设 .deb 已经在当前目录
sudo dpkg -i mihomo-*.deb
sudo apt -f install -y

# 确认
which mihomo
mihomo -v

2.2 放配置文件

/etc/mihomo/config.yaml 就是核心。下面给一个最小可用模板(完整版后面给):

# 监听端口
port: 7890           # HTTP 代理
socks-port: 7891     # SOCKS5
mixed-port: 7893     # 混合(HTTP/SOCKS5)

allow-lan: false
bind-address: "127.0.0.1"

# Web 面板
external-controller: 0.0.0.0:9090
secret: "your_strong_secret_here"
external-ui: /root/.config/mihomo/ui

mode: rule
log-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.yaml

2.3 装 Web UI(zashboard / metacubexd 任选其一)

mihomo 不带 UI,需要额外放静态文件。以 metacubexd 为例:

# 创建 UI 目录
sudo mkdir -p /root/.config/mihomo/ui

cd /tmp
curl -L -o metacubexd.zip \
  https://github.com/MetaCubeX/metacubexd/archive/refs/heads/gh-pages.zip
unzip -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.mmdb

2.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 Service
After=network-online.target
Wants=network-online.target

[Service]
Type=simple
ExecStart=/usr/bin/mihomo -f /etc/mihomo/config.yaml
Restart=on-failure
RestartSec=2
LimitNOFILE=1048576

[Install]
WantedBy=multi-user.target
EOF

sudo systemctl daemon-reload
sudo systemctl enable mihomo
sudo systemctl start mihomo
sudo systemctl status mihomo

查日志:

journalctl -u mihomo -f

2.7 开放防火墙端口

端口 用途 公网是否开放
9090 Web 面板 / API ✅(建议加 IP 白名单)
7890–7893 HTTP / SOCKS5 代理 ❌ 不要开,只给本机用
sudo ufw allow 9090
sudo ufw status

⚠️ 千万别把 7890 这种代理端口直接开到公网,否则你的 VPS 会变成所有人的免费代理,分分钟被滥用、被商家封号。

2.8 本机使用代理

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:7891

# 测试
curl https://www.google.com -I

取消:

unset http_proxy https_proxy all_proxy

三、Windows 裸核部署

Windows 上一般直接用 Clash Verge / FlClash 这类 GUI 客户端,但如果你想跑裸核:

# 1. 下载 mihomo-windows-amd64.zip 解压到 C:\mihomo
# 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           # HTTP
socks-port: 7891     # SOCKS5
mixed-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 这套跑通,后面所有花活都是在这个基础上叠的。