在Docker中部署mihomo,并让本机与局域网电脑接入
mihomo 是 Clash.Meta 的延续版本,常见用法是把它作为一个代理内核运行在一台长期在线的机器上,然后让本机、手机、Windows 电脑、Linux 电脑都通过这台机器访问代理服务。
这篇文章记录一个最实用的部署方式:在 Docker 里运行 mihomo,宿主机负责提供端口,局域网里的其他设备只需要把 HTTP / SOCKS 代理指向这台机器即可。
总览:先看整体链路
假设运行 Docker 的机器局域网 IP 是 192.168.1.10,mihomo 在这台机器上监听 7890 端口:
text Copy
|
|
关键点只有三个:
- mihomo 配置里开启
allow-lan: true。 - mihomo 监听地址使用
bind-address: "*"或宿主机局域网 IP。 - Docker 把
7890端口暴露给局域网。
第一步:准备目录
在准备用作代理网关的机器上创建目录:
bash Copy
|
|
后面所有文件都放在 ~/mihomo 目录里:
text Copy
|
|
第二步:编写 mihomo 配置
创建 ~/mihomo/config/config.yaml:
yaml Copy
|
|
这里需要修改两处:
url:替换成你自己的订阅地址,或者删除proxy-providers后手写proxies节点。secret:改成一个只有你知道的随机字符串,避免局域网里其他人随意控制面板。
如果你只想先验证容器能不能启动,可以暂时把规则改成全部直连:
yaml Copy
|
|
第三步:用 Docker Compose 启动
如果 Docker 宿主机是 Linux,推荐先用 host 网络模式,端口映射最简单,也更适合后续扩展 TUN、透明代理等玩法。
创建 ~/mihomo/compose.yaml:
yaml Copy
|
|
启动:
bash Copy
|
|
查看日志:
bash Copy
|
|
如果能看到 mihomo 读取配置并监听端口,说明服务已经跑起来了。
如果不能使用 host 网络模式
在部分 NAS、Docker Desktop 或受限制环境里,network_mode: host 可能不符合预期。这时可以改成普通端口映射:
yaml Copy
|
|
这个模式足够满足“局域网其他电脑通过代理端口接入”的需求。
第四步:确认宿主机局域网 IP
在 Docker 宿主机上执行:
bash Copy
|
|
找到类似这样的地址:
text Copy
|
|
后面局域网客户端都使用这个 IP。本文继续假设宿主机 IP 是:
text Copy
|
|
在宿主机本机测试代理端口:
bash Copy
|
|
在另一台局域网电脑上测试:
bash Copy
|
|
能返回 204、200 或正常 HTTP 响应,说明端口已经能从局域网访问。
第五步:本机如何接入
如果 Docker 就运行在当前 Linux 主机上,本机程序可以直接使用:
text Copy
|
|
命令行临时使用:
bash Copy
|
|
验证:
bash Copy
|
|
取消代理:
bash Copy
|
|
第六步:Windows 电脑如何接入
在 Windows 上不需要安装 mihomo 内核,只要把系统代理指向 Docker 宿主机即可。
打开:
text Copy
|
|
填写:
text Copy
|
|
保存后,浏览器和大多数遵循系统代理的软件都会走这台 mihomo 服务。
如果某些软件不读取系统代理,可以在软件自己的网络设置里单独填写:
text Copy
|
|
PowerShell 临时使用代理:
powershell Copy
|
|
验证:
powershell Copy
|
|
取消当前 PowerShell 会话里的代理:
powershell Copy
|
|
第七步:Linux 电脑如何接入
Linux 桌面环境可以在系统网络设置里配置代理:
text Copy
|
|
命令行临时使用:
bash Copy
|
|
测试:
bash Copy
|
|
APT 临时使用代理:
bash Copy
|
|
如果想让当前用户长期生效,可以把下面内容写入 ~/.profile 或 ~/.bashrc:
bash Copy
|
|
第八步:使用 Web 面板
mihomo 的控制 API 在上面的配置里监听 9090:
yaml Copy
|
|
可以使用 MetaCubeX 的 Web Dashboard 连接:
text Copy
|
|
如果你的控制面板打不开,先确认三件事:
9090是否映射或暴露出来。external-controller是否是0.0.0.0:9090,而不是127.0.0.1:9090。- 防火墙是否放行了
9090。
如果只是给局域网设备提供代理,9090 不是必须开放;它只用于控制面板。
防火墙设置[#]
如果宿主机启用了 ufw,需要放行代理端口:
bash Copy
|
|
如果你不需要局域网访问控制面板,就不要放行 9090。
在云服务器上不建议把 7890、9090 暴露到公网。本文讨论的是家庭或办公室局域网场景。
常见问题 / 排查思路
1. 容器启动后立刻退出
先看日志:
bash Copy
|
|
常见原因是 config.yaml 缩进错误、订阅地址不可访问、规则集配置错误。可以先用最小直连配置启动,确认容器本身没有问题,再逐步加回订阅和规则。
2. 本机能用,局域网电脑不能用
重点检查:
yaml Copy
|
|
然后检查 Docker 是否暴露端口,以及宿主机防火墙是否拦截 7890。
在局域网电脑上可以测试端口连通性:
bash Copy
|
|
Windows PowerShell 可以用:
powershell Copy
|
|
3. 浏览器能用,命令行不能用
浏览器可能读取系统代理,但命令行不会自动读取。给当前终端设置环境变量:
bash Copy
|
|
Windows PowerShell 则设置:
powershell Copy
|
|
4. Web 面板能打开,但没有节点
通常是订阅没有拉取成功。检查:
bash Copy
|
|
也可以确认容器内配置目录是否有 provider 文件:
bash Copy
|
|
5. 不想让所有局域网设备都能连接
可以在 mihomo 配置里限制允许的 IP 段,例如只允许 192.168.1.0/24:
yaml Copy
|
|
也可以直接通过系统防火墙限制来源 IP。
总结
Docker 部署 mihomo 的核心并不复杂:
- 用 Docker Compose 跑起
metacubex/mihomo。 - 在
config.yaml里开启allow-lan。 - 把
7890暴露给局域网。 - Windows、Linux、手机等客户端把代理地址设置成
宿主机IP:7890。
如果只是给局域网电脑提供代理,普通端口映射就够用;如果未来还要做透明代理、TUN、旁路由,再考虑 host 网络、/dev/net/tun、路由表和 DNS 劫持等更复杂的配置。
参考资料:
- mihomo 官方配置文档:https://wiki.metacubex.one/en/config/general/
- MetaCubeX Dashboard:https://github.com/MetaCubeX/metacubexd
- mihomo Docker 镜像:https://hub.docker.com/r/metacubex/mihomo
文档信息
本文转自 https://www.bufio.cn/posts/mihomo-docker-lan-setup,如有侵权,请联系删除。