飞牛 Docker 搭建 Clash Mihomo 以供局域网使用代理
平时上课无聊会刷刷一些论坛和外面的网站,每次都需要手动下载 Clash Verge 客户端再订阅,很麻烦。
于是我突然想到 Clash 有一个功能可以让局域网的电脑通过系统代理设置直接连接客户端使用节点,因此我可以在一个地方固定一台服务器部署好 Clash 并开放局域网连接,理论可行开始动手。
因为学校校园网可以全校跨网段互通,且工作室有可24小时运行的服务器,因此实现起来非常轻松。为了不让主要常用的服务过于分散,因此我打算把这个服务集中搭建在工作室的飞牛 NAS 系统上,方便管理。
Docker 部署
准备工作
在你的 NAS 任意位置创建一个文件夹用来存放配置文件,以下是我的目录结构参考,不一定跟我的一样。
用户储存空间
├── server #专门存放 Docker 容器储存卷的目录
│ ├── mihomo #存放本次教程的配置文件目录
│ │ ├── config.yaml # Clash 配置文件
│ │ └── docker-compose.yml #自动生成的 Docker Compose 文件
│ │
│ └── ...
└── ...
在电脑本地创建 config.yaml
文件,并编辑配置好内容,具体配置请自行查阅 General configuration - mihomo docs。
mixed-port: 6000 #混合代理端口
allow-lan: true #允许局域网连接,必须开启
mode: Rule
log-level: info
external-controller: 0.0.0.0:6001 #用于外部控制的 API 接口
secret: 'admin123' #外部控制验证密钥,可省略
dns:
enabled: true
nameserver:
- 119.29.29.29
- 223.5.5.5
fallback:
- 8.8.8.8
- 8.8.4.4
- tls://1.0.0.1:853
- tls://dns.google:853
proxy-providers:
这里写订阅标识(别名):
url: "订阅链接"
type: http
interval: 86400
health-check: {enable: true,url: "https://www.gstatic.com/generate_204", interval: 300}
proxy-groups:
- name: 节点选择
type: select
use:
- 对应上面写的订阅标识
创建好后就可以上传到刚才创建的目录了,比如我这里的目录是 /用户储存空间/server/mihomo
。
构建 Compose
在飞牛管理首页,点击打开 Docker,在弹出窗口的左边菜单点击进入 Compose,点击新增项目按钮。
- 项目名称自便,我填的是 mihomo-server;
- 路径选择上面准备工作创建的目录,比如我的是
/用户储存空间/server/mihomo
; - 来源选择“创建 docker-compose.yml”,拷贝以下的内容到你的页面;
- 勾选“创建项目后立即启动”,确定即可。
services:
mihomo:
container_name: mihomo-core
image: metacubex/mihomo
restart: always
ports:
- '6000:6000'
- '6001:6001'
volumes:
- ./config.yaml:/root/.config/mihomo/config.yaml
metacubexd:
container_name: mihomo-web
image: ghcr.io/metacubex/metacubexd
restart: always
ports:
- '6002:80'
Web 管理界面
构建好 Compose 后,在浏览器打开 http://IP:6002
即可打开管理页面。
进入页面后,会出现两个输入框,一个是后端地址,填写 http://IP:6001
,一个是密钥,填写视配置而定,若你的配置了 secret
则填写该内容,没有就忽略不填写。
点击添加即可进入管理界面。
使用代理
在局域网内的电脑,通过给系统的代理设置即可使用。
设置方法:
- 进入
Windows 设置 -> 网络和 Internet -> 代理
页面; - 滑到底部的手动设置代理,勾选“使用代理服务器”;
- 地址填写
IP
,端口填写6000
,点击保存即可。
注意:若你不需要使用代理时建议把“使用代理服务器”勾选为关。
可能的问题
- 局域网访问不了?
- 检查飞牛 NAS 的防火墙是否关闭,或是否设置出入站规则。
- 检查
config.yaml
配置文件是否运行局域网连接。