昨晚帮助一个兄弟维护MP的过程中,我发现他一直在使用docker搭建的clash,然后利用环境变量注入到容器从而实现代理,经过排查发现是节点失效。开始时我想简单了,认为换个配置文件的事就行了,但是在更换的过程中出了很多问题,比如编码不兼容、控制面板无法访问、节点规则不识别等等。
今早查阅了一下资料,发现了一些有趣的知识。想着分享出来,给大家玩NAS多一条路,多一个选择,废话不多说,直接开始
原理我也不多解释,直接上配置,大家无脑照抄,我会把重点突出出来。
一、安装Clash和Yacd面板
1.创建目录
打开文件管理器,进入 docker 目录 创建一个文件夹存放clash需要的配置文件,我这里创建名为 clash,这个clash下再创建一个 ui 文件夹,如图
2.新建Clash和Yacd项目
打开Container管理器,项目选项卡,点击新增,如图创建

docker compose文件配置如下
version: '3.8'
services:
clash:
image: dreamacro/clash:latest
container_name: clash
volumes:
- /volume1/docker/clash/config.yaml:/root/.config/clash/config.yaml
- /volume1/docker/clash/ui:/ui # 图形面板目录
# ports:
# - "7890:7890"
# - "7891:7891"
# - "9090:9090"
restart: unless-stopped
network_mode: "host"
dashboard:
image: haishanh/yacd:latest
container_name: clash-dashboard
ports:
- "9070:80"
restart: unless-stopped
network_mode: "bridge"一路下一步,去掉下图的勾点完成,注意最后先不要启动,因为我们并未添加配置文件

二、拉取并修改配置文件
1.新建脚本
打开文本管理器,新建,写入如图,注意红框链接为自己的订阅地址,保存至之前新建的docker目录下,命名为 reload-clash.sh
注意:一元机场的clash,在订阅地址后添加”&flag=clash”就能下载配置文件,可名称是“一元机场”,也就是中文名字,而且没有后缀。如果订阅地址用浏览器打开不是
yml格式,不能使用这个方法,可以尝试在url后面增加参数:?target=clash或者clash=1之类的看看是否能转换出yml数据。如果实在国通订阅地址获取不到配置文件,可以暂时利用win端的clash搞一份出来,修改好上传至clash目录下,命名为config.yaml

# 下载节点配置文件,根据实际的订阅地址填写
wget -O /volume1/docker/clash/config.yaml 'https:XXXXX&flag=clash'
# external-controller地址为0.0.0.0:9090,方便UI访问(可选)
sed -i 's/127.0.0.1:9090/0.0.0.0:9090/g' /volume1/docker/mihomo/config.yaml
# 增加安全性,配置使用代理的用户名和密码(可选)
# sed -i 's/allow-lan: true/allow-lan: true\r\nauthentication:\r\n - "user1:password1"\r\n - "user2:password2"/g' /volume1/docker/clash/config.yaml
# 去掉重启Docker,调用API刷新:
curl --location --request PUT 'http://192.168.x.x:9090/configs' \
--header 'Content-Type: application/json' \
--data-raw '{"path": "/root/.config/clash/config.yaml"}'

3.创建任务计划
打开控制面板>任务计划>新增,选择root账户,如图

计划可以根据自己的更新需求,一天一次或者三天一次都可以,任务设置如下图,最后保存即可,注意 /volume1/docker/clash/reload-clash.sh 是之前的脚本路径
bash /volume1/docker/clash/reload-clash.sh
4.运行脚本
我们点击刚刚创建好的任务计划,右键点击运行即可

至于是否成功,到之前创建的clash目录下看是否生成 config.yaml文件即可,可以点开看看是否有节点信息。正常的话就有了。
例如
三、运行clash
回到Container管理器,项目选项卡,点击构建,就会拉取镜像并创建两个容器,如果拉取不到镜像,那就是镜像地址不太行,群里问一问。

启动完毕。
访问:http://<你的nasip>:9070,例如我的就是:http://192.168.31.126:9070/ 添加clash服务的地址

记得打开这个允许局域网使用代理

我们使用代理的话可以这样:
这样:
emby可以神医助手或者添加环境变量,例如:
NO_PROXY 172.17.0.1,127.0.0.1,localhost ##保持默认
ALL_PROXY http://10.0.0.4:10081 ## 更换为自己的http代理
HTTP_PROXY http://10.0.0.4:10081 ##更换为自己的http代理
到此不想写了,差不多了,有问题再问吧。
其他参考教程:https://fugary.com/?p=363
评论区