之前刚开始用飞牛做系统代理时,图省事直接用了网上别人构建好的Clash+Yacd整合镜像,一开始挺好用,但后来不知道什么时候就失效了。
直到最近装了另一台 NAS,才想起来代理这事儿还没彻底解决,得重新配置一下。这次换成了Mihomo+MetaCubexd组合的方案。
由于网络环境较为复杂,需要借助FRP内网穿透才能访问飞牛系统。加之飞牛设置里到现在还没有提供图形化的代理配置选项,必须通过SSH命令行手动设置。部署过程中遇到不少问题,整体流程相当折腾。
直接在飞牛的Docker里用Compose文件部署。
项目创建后compose文件会放到这里自己设置路径的文件夹里。所以我把容器内的配置文件也顺手挂载到这里。
具体的compose文件如下:
1 | # docker-compose文件 |
需要注意的配置参数:
/vol2/1000/Files/Apps/clash-meta/mihomo目录下。config.yaml) 中定义的监听端口一致。运行compose后
把自己机场的配置文件复制到上面设置的挂载位置,即/vol2/1000/Files/Apps/clash-meta/mihomo下。
复制完成后有需要特别注意几个参数:
port、socks-port、mixed-port几个端口对应得上。allow-lan参数需要设置为true,否则在Docker环境下飞牛宿主机无法访问external-controller: 0.0.0.0:9090允许来自任何网络接口的连接请求来访问 9090 端口的 API。只有配置了这一行MetaCubeX 面板才能顺利连接到 Mihomo 核心。1 | # config.yaml文件 |
构建运行compose并导入config配置文件之后,就可以访问到Mihomo和MetaCubeXD面板了。
在同一网络环境下,直接输入能够访问到Mihomo核心的后端地址就通过MetaCubeXD的面板进行控制了。
例如,当飞牛运行在192.168.1.2的IP之下时,我们通过Docker将Mihomo和MetaCubeXD这两个服务分别部署到了飞牛的9090和9091端口下,当我们通过浏览器访问http://192.168.1.2:9090和http://192.168.1.2:9091时就能分别进入对应的服务。此时MetaCubeXD的登录的后端地址就填入http://192.168.1.2:9090密钥则根据配置文件的设置进行填写或留空。
这里因为踩了个坑所以特别说明一下。
我在部署时的环境是这样的:
通过FRP内网穿透,将飞牛的上Mihomo的9090的服务代理到自己访问设备的19090端口上通过http://127.0.0.1:19090访问;将MetaCubeXD代理到本地9091端口通过http://127.0.0.1:9091访问。
然后踩了个坑:
当我在本地通过http://127.0.0.1:9091访问远程的MetaCubeXD时,我习惯性的认为,这个登录的后端地址应该是MetaCubeXD在Docker内网环境下能够访问到Mihomo的地址,下意识的填入了http://mihomo:9090。
随即报错:“无法连接后端,请检查地址是否正确以及后端是否正在运行。”
当看到这个报错时,第一时间想到的是可能compose的配置出现了问题导致两个容器没有连接上。
多次检查确认compose配置没有问题,两个容器都在同一brige网络之下,在飞牛的浏览器上本地访问192.168.1.x:9090和192.168.1.x:9091也可以单独访问服务。
把两个容器网络都设置为host模式再次启动,也一样单独可以访问两个服务。
最后进入MetaCubeXD的容器内部对http://mihomo:9090进行测试时也可以连接的上。
明明单独的服务访问都没有问题,两个服务直接的通信也没有问题,为什么通过MetaCubeXD的后端地址就是不对?
后面头疼了一个多小时后随手点开了F12。
发现原来MetaCubeXD是直接通过浏览器对这个后端地址发HTTP请求,而不是用这个地址在容器内部访问处理后再转发给前台。
所以才访问不到http://mihomo:9090,最后按http://127.0.0.1:9091填就好了。
系统设置 -> SSH -> 启动SSH功能
使用密码认证的方式,通过登录飞牛的账号密码进行SSH连接。
连接之后需要切换到root用户。
一般情况下root用户密码未设置需要首先设置一遍,或者忘记了重新设置。
1 | # 修改root用户密码 |
密码设置或修改完成后就可以通过以下命令切换root了:
1 | su - |
/.bashrc环境变量设置系统代理切换到root打开/.bashrc文件
1 | vim ~/.bashrc |
添加两行代理配置:
1 | export http_proxy=http://127.0.0.1:7890 |
即上面设置的Mihomo的代理端口,这里使用HTTP的端口。
想要方便启用和停止代理可以在/.bashrc文件里定义两个函数分别设置和重置代理,这样就可以直接在命令行输入proxy_on和proxy_off快捷开关系统代理了:
1 | #.bashrc文件 |
最后刷新配置
1 | source ~/.bashrc |
完成后系统代理就设置完毕了。
MetaCubeXD里没办法直接设置,需要在Mihomo的配置文件里自己按格式添加一段订阅才行:
订阅格式如下,具体可看:https://wiki.metacubex.one/config/proxy-providers/
1 | # config.yaml文件 |
添加完成后重启Mihomo核心,在MetaCubeXD上就可以看到“代理提供者”即配置文件订阅信息的页面了。