群晖Docker安装和运行Clash并自动更新订阅

​ 最近买了Clash的机场订阅地址,试用发现Clash梯子访问网络还是比较方便的,不过需要每台电脑或者设备上安装相应的软件,相对来讲比较麻烦,其实局域网内可以启用Allow LAN模式,其他设备可以通过这个代理访问,正好本地局域网中有一台长期运行的NAS,可以通过它作为长期代理。

注意:本文不涉及怎么购买订阅地址,请自行解决

准备Clash配置文件

新增一个config.yaml文件,需要上传到群晖的/docker/clash/config.yaml,这个yaml文件可以从本地电脑的Clash中复制出来:

image-20220703164622625

注意:这里只能用config.yaml不能用config.yml,可以适当修改部分信息,也可以不修改:

# Port of HTTP(S) proxy server on the local end(默认)
port: 7890
# Port of SOCKS5 proxy server on the local end(默认)
socks-port: 7891
# 开启局域网代理,这个要配置true
allow-lan: true
#UI监听端口,可以改成0.0.0.0:9090,改后可以通过ui界面访问
external-controller: 0.0.0.0:9090

配置文件准备好,上传到群晖之后,就可以开始了。

Docker安装Clash镜像

进入群晖Docker套件,搜素clash,可以看到dreamacro/clash,双击下载下来。

image-20220703140044584

对应开源地址:

GitHub地址:https://github.com/Dreamacro/clash
Docker地址:https://registry.hub.docker.com/r/dreamacro/clash/

参考配置文件:https://github.com/Dreamacro/clash/wiki/configuration

配置Clash容器

找到刚才下载的镜像,现在可以开始配置Clash容器了,点击【启动】,再下一步:

image-20220703142612130

配置端口,目前开放的端口最好映射出来,根据实际情况配置本地端口,容器端口是固定的,如果是mixed-port: 7890,可以少暴露端口:

image-20220703143036183

然后映射配置文件,本地配置文件/docker/clash/config.yaml映射到容器的/root/.config/clash/config.yaml

image-20220703143230426

配置完成可以启动了。

其实clash代理已经可以使用了,不过为了方便查看,可以再用UI工具查看一下。

使用UI界面

在线版UI界面:http://yacd.haishan.me/ (目前似乎有兼容问题)

输入对应的地址即可,比如本地的:http://192.168.31.126:9090

也可以自己安装一个UI容器,名字叫:haishanh/yacd,搜索后下载安装

image-20220703165059849

下载后,进入启动配置,配置自动重新启动:

image-20220703165339662

配置端口:

image-20220703165555219

启动完毕。

访问:http://192.168.31.126:9080/ 添加clash服务的地址

image-20220703170428513

进入之后可以看到clash的订阅信息了:

image-20220703170538462

UI安装配置完成。

代理使用

iOS手机为例,在【无线局域网】设置中,已连接的WIFI右边的信息图标:

配置HTTP代理:

image-20220703170819896

然后就可以尝试访问https://google.com测试一下了。

自动更新

目前这种操作方式不能自动更新代理,可以考虑使用定时任务来更新,编写定时任务脚本,并存放到/docker/clash/reload-clash.sh

注意:如果订阅地址用浏览器打开不是yml格式,不能使用这个方法,可以尝试在url后面增加参数:?target=clash或者clash=1之类的看看是否能转换出yml数据。

# 下载节点配置文件,根据实际的订阅地址填写
wget -O /volume1/docker/clash/config.yaml https://xxxxxx
# external-controller地址为0.0.0.0:9090,方便UI访问(可选)
sed -i 's/127.0.0.1:9090/0.0.0.0:9090/g' /volume1/docker/clash/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
# 重启 clash 容器,名字为实际的容器名字
docker container restart dreamarco-clash1

配置群晖定时任务,进入【控制面板】->【任务计划】:

image-20220703175703733

然后新增一个任务,【用户定义的脚本】任务,并配置名称等

chrome_NvhlmHcwVn

配置运行频率:

image-20220704085518944

配置运行脚本bash /volume1/docker/clash/reload-clash.sh

chrome_MLTqofS0wr

需要注意路径,完整路径是要包含/volume1

可以先运行一次测试看看。

至此算是完全配置完成了。

常见问题

运行脚本提示没有权限运行docker:

Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post "http://%2Fvar%2Frun%2Fdocker.sock/v1.24/containers/dreamacro-clash1/restart": dial unix /var/run/docker.sock: connect: permission denied

可以尝试把脚本修改一下,把sudo需要的密码放进去:

sudo -S是表示sudo从标准输入STDIN读入密码而不是从终端读取。

echo "YourPWD" | sudo -S docker container restart dreamarco-clash1

新自动刷新

运行发现,重启Docker方式刷新并不是很好,参考了API文档,发现可以用另外的方式更新:

https://clash.gitbook.io/doc/restful-api/config

文件路径:/docker/clash/reload-clash.sh

实际配置到【任务计划】中需要全路径bash /volume1/docker/clash/reload-clash.sh

# 下载节点配置文件,根据实际的订阅地址填写
wget -O /volume1/docker/clash/config.yaml https://xxxxxx
# external-controller地址为0.0.0.0:9090,方便UI访问(可选)
sed -i 's/127.0.0.1:9090/0.0.0.0:9090/g' /volume1/docker/clash/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://localhost:9090/configs' \
--header 'Content-Type: application/json' \
--data-raw '{"path": "/root/.config/clash/config.yaml"}'

注意:代理端口不要使用默认的7890,暴露外网可能会被扫描到,出现流量偷跑的情况,另外UI界面并不需要,可以测试完后停止UI相关容器

评论

  1. Hawkmor
    9月前
    2022-7-04 9:33:03

    这个方式是不是比软路由更好

    • gary
      博主
      Hawkmor
      已编辑
      9月前
      2022-7-04 10:13:26

      这个相对来讲比较简单一点,而且软路由后面要科学上网一般也要再安装clash之类的。

      • randy
        gary
        2月前
        2023-2-11 15:52:21

        请教个问题,这个方法在IOS可以,但是Apple TV上无法配置网络的代理,这种情况下,只能NAS装虚拟机然后装Openwrt虚拟LAN地址么?

        • gary
          博主
          randy
          2月前
          2023-2-11 15:56:42

          是的,Apple TV是不能使用这种代理方式,可以参考:https://fugary.com/?p=419 用旁路由实现

  2. kingsley
    9月前
    2022-7-10 17:42:26

    调用API刷新的方法不生效,查看日志后发现–header: command not found,–data-raw: command not found这两个命令没有,请问这个要怎么解决

    • gary
      博主
      kingsley
      9月前
      2022-7-10 19:02:53

      是不是上一行末尾的反斜杠漏了?curl那条命令实际是在一行的,用反斜杠支持命令太长换行书写

      • kingsley
        gary
        9月前
        2022-7-10 21:45:22

        直接复制的你贴出来的的命令,一开始我也以为这个问题,但是验证过了不是,没有头绪了

        • gary
          博主
          kingsley
          9月前
          2022-7-10 21:55:31

          可能不同系统对回车支持有点不一样,把反斜杠删掉,curl命令那条全部写在一行中试试看

          • kingsley
            gary
            9月前
            2022-7-10 22:02:43

            真的是这个问题,我是群晖7.0.1,还真没想到,谢谢

  3. frost
    8月前
    2022-8-02 20:20:29

    代理端口不要使用默认的7890,暴露外网可能会被扫描到–这个是不是要公网ip后才考虑

    • gary
      博主
      frost
      8月前
      2022-8-02 20:28:56

      是的,一般用nas的都有公网IP吧,没有公网IP的nas还是很不方便的

      • frost
        gary
        8月前
        2022-8-02 20:58:09

        了解了,我刚好还没要到公网ip就先不管了。。
        另外请教一下,最后调用api更新没太看懂,代码放在哪里运行,订阅链接也不用了吗,有空麻烦讲解一下

        • gary
          博主
          frost
          8月前
          2022-8-02 21:21:34

          这个是启动的服务监听多个端口,7890默认是代理端口,9090是管理端口,有暴露restful API,可以用http请求访问修改配置,要有一定的开发基础,可以看看文档:https://clash.gitbook.io/doc/restful-api/config

  4. gay
    7月前
    2022-8-25 12:49:56

    这个不能实现透明代理吧

  5. leon
    5月前
    2022-10-18 14:00:42

    curl –location –request PUT ‘http://localhost:9090/configs‘ –header ‘Content-Type: application/json’ –data-raw ‘{“path”:”/home/silent/clash/config.yaml”}’
    {“message”:”stat /home/silent/clash/config.yaml: no such file or directory”}
    路径没错 文件名也没错 就是报错找不到文件 权限给了也没用

    • gary
      博主
      leon
      5月前
      2022-10-18 14:16:38

      应该要用容器里的路径/root/.config/clash/config.yaml

      • leon
        gary
        5月前
        2022-10-18 17:03:06

        谢谢 以为是外面的路径 结果是容器里面的路径

  6. jionme
    5月前
    2022-10-19 6:35:30

    可以出一个portainer安装clash的教程吗,小白一个自己摸索的了快一个月都没弄出来,搜遍这个网络都没有教程

  7. Will
    5月前
    2022-10-23 16:48:27

    请问,请问这里的本地地址就是 Nas 的地址吗?

  8. 挽安
    5月前
    2022-10-25 22:00:17

    ui页面一直连接不上,反反复复看了好几遍写的教程,确实没错误,不知道哪里出现了问题哦

    • gary
      博主
      挽安
      5月前
      2022-10-25 22:05:01

      UI不影响使用,可以不装,UI填写地址是从本地浏览器发起请求,在线版也可以访问本地的clash地址

      • 挽安
        gary
        5月前
        2022-10-25 22:16:45

        但是如何选择节点,这个通过命令不会操作,我看clash是提示RESTful API listening,而ui是以get的形式发送的,我看网络提示返回405 和CORS error,不知道是不是和restful请求有关系

      • 挽安
        gary
        已编辑
        5月前
        2022-10-25 22:23:30

        都搞好了,感谢博主的教程|´・ω・)ノ

  9. hehe
    5月前
    2022-10-26 17:20:50

    clash服务 无法启动一直报错 Parse config error: read /root/.config/clash/config.yaml: is a directory 文件夹路径 /docker/clash/config.yml 装载路径/root/.config/clash/config.yaml 请教下是哪里有问题 谢谢了

    • gary
      博主
      hehe
      5月前
      2022-10-26 17:48:18

      文件名要统一为config.yaml,外面的也要用相同的名字,不然映射到子目录下了

      • hehe
        gary
        5月前
        2022-10-27 8:25:46

        我是在clsah文件夹下面建立了一个config.yaml文件夹 ,然后把配置文件config.yaml放到里面。启动还是报一样的错误。装载路径需要按照这个名称手动建立吗/root/.config/clash/config.yaml

        • hehe
          hehe
          5月前
          2022-10-27 10:26:42

          可以了 谢谢 指点

  10. ljkformat
    5月前
    2022-11-01 23:15:49

    大佬,安装正常,就是自动更新这里不行,一天不更新,就没办法使用了

    • gary
      博主
      ljkformat
      5月前
      2022-11-02 13:23:14

      主要要编写一个/docker/clash/reload-clash.sh文件,配置到任务计划中,文件主要功能是下载新的yaml文件,然后用curl调用接口把配置文件刷新一下就可以了

      • ljkformat
        gary
        5月前
        2022-11-04 21:00:35

        我现在问题就是在群辉上部署了Subconverter的前端和后端,前端生成的订阅连接在浏览器直接可以打开,但下载不了yaml文件,电脑clash for windows,填入订阅url,下载的是yml格式,文件名是以数字.yml 。把这个yml文件改名为config.ymal。放到群辉的clash文件下,clash运行是正常的,现在就是卡壳在自动更新上。还请指点,谢谢

        • gary
          博主
          ljkformat
          5月前
          2022-11-05 0:03:45

          文中最后有shell源文件,修改为自己的下载yaml地址,以及把用户名和密码改下,其他应该都不用改

      • ljkformat
        gary
        5月前
        2022-11-04 23:40:22

        本人实在是不菜,后端的pref.toml文件参数修改,应该可以输出yaml文件,搞半天真的是看不懂,还请帮忙看看Subconverter,谢谢

  11. happyostar
    5月前
    2022-11-03 12:21:29

    大佬,有没有发现这个docker映像后台偷跑流量?挺猛的。我用了一段时间后发现我的clash节点流量被群晖这个跑了好几百G(没有设备通过这个链接)

    • gary
      博主
      happyostar
      5月前
      2022-11-03 12:31:09

      不要用默认端口,另外要设置密码,应该不会有流量偷跑

      • happyostar
        gary
        5月前
        2022-11-03 14:22:42

        我怀疑是这个docker映像本身自带后门,而不是外部的攻击。所以不知道使用相同映像的人是否也遇到类似情况。

        • ljkformat
          happyostar
          5月前
          2022-11-10 18:17:10

          流量确实大很多,准备放弃换个玩的

  12. happyostar
    5月前
    2022-11-03 12:22:43

    大佬,我有公网IP,能否出个公网共享这个clash的教程,自己搞了一下,没有搞通,不知道卡在哪了。

  13. leaf
    5月前
    2022-11-10 23:15:12

    感谢大佬 终于成功了。我踩的坑提示一下,自动更新的脚本 这句wget -O /volume1/docker/clash/config.yaml ‘https://xxxxx&flag=clash‘ 订阅地址有特殊符号一定记得加引号。

  14. 小柯
    5月前
    2022-11-12 14:35:55

    博主能远程教一下嘛,按照教程提示安装,用UI进提示连接不上

    • 小白
      小柯
      4月前
      2022-11-28 21:18:14

      你好,我遇到过这种情况,我可以给你分享一下经验。这个UI访问是需要提前在配置文件中的” external-controller “这个命令中修改,内容是:你群晖局域网的IP+clash对应的Web UI端口号。

  15. ljkformat
    5月前
    2022-11-12 23:40:26

    问题最后解决了,特地来感谢博主,一直wget不成功,后面找了别人帮我看过后,才发现是因为docker和主机不是一个网段,就造成容器不能访问主机,也就wget不了,后面重建容器,网络选择host,就可以了,再次表示感谢。

  16. alpha
    4月前
    2022-11-27 15:02:12

    启动Clash一直显示 FATA[0000] Parse config error: yaml: line 9: did not find expected ‘,’ or ‘}’ ,用的Shadowfly的订阅,是config.yaml文件里格式问题吗?文件里line 9是proxies:,然后后面就是 – { name: 这种格式了。

  17. 小白
    4月前
    2022-11-28 22:15:58

    不知道为什么,我按照博主的操作方法但是不能正常代理。在UI上显示无连接无数据流量,但是节点却能正常读取。

  18. lizi
    4月前
    2022-11-29 22:17:46

    {“message”:”open /root/.config/clash/config.yaml: stale NFS file handle”} 极空间使用 curl 调用API刷新,报这个错误,是不是极空间NAS自己docker挂载文件的问题吧?

  19. arthurfsy
    4月前
    2022-12-14 11:43:55

    非常棒的介绍,已成功部署在群晖DS220+上,感谢!

  20. 3月前
    2022-12-28 18:49:47

    博主为什么我的自动更新订阅地址就不行了,config就自动变成0kb了。就是定时任务不行,那就没有了。

  21. 虫虫
    2月前
    2023-1-28 2:46:49

    老大 为什么我进去ui界面会秒退啊

  22. 飘拂的兜
    2月前
    2023-2-11 22:18:44

    大神我自动更新一点都不起作用,请问不用自动更新,怎么把节点导进去?

  23. 钓月
    4周前
    2023-3-03 18:56:45

    博主,非常感谢,已根据您的教程,搭建好了自动更新的Clash
    我有个问题,
    您最后修改的更新脚本,更新之后并不能更新rules,即便是我sed插入了新的rules,不重启容器的话,就不能载入我写入config.yaml的规则
    请问博主有好办法么·

  24. LYC
    2周前
    2023-3-14 21:17:11

    谢谢,非常详细。
    最后我实在是不想折腾 Rules 自动更新了。想起来的时候直接登录 NAS 拖拽文件进行覆盖就完事了。
    非常感谢!

  25. arthurfsy
    2周前
    2023-3-16 17:52:51

    我用新自动刷新会弹出这个提示,感觉用旧的重启docker对我来说好用点。
    {“message”:”external-ui: /root/.config/clash/dashboard not exist”}
    另外,如果down下来的config.yaml的allow-lan: false 那就要换成sed -i ‘s/allow-lan: false/allow-lan: true……这样

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇