群晖在ddns配置下,检测ip使用直连模式的 clash 配置

前提条件

  1. 使用的动态 dns 配置,使本地的群晖服务器在外网可访问
  2. docker 内安装了 clash,导致了动态 dns 检测到了机场服务商的 ip。

docker 内 clash 的安装可以查看 群晖 DSM 安装 clash

问题

image-20241020214625670

在 ddns 点击立即更新的时候,会从服务器向群晖指定的某个网址发送请求,但由于这个请求走了代理,导致服务器以为我们的ip是机场代理商的ip。

解决方案

进入上一篇文章中提到的 clash 控制台前端页面。点击 日志 选项卡

在这里可以看到之前命中的各条规则。如果找不到日志的话,可以在前面的ddns界面点击一次 立即更新 按钮

我图片中展示的是已经修改完配置文件后的样例,命中的是 using DIRECT 走直连。如果各位的 DDNS 展示的是机场服务商 ip 而非本机 ip 的,这里一般会命中一条走对应规则的记录。

对了,顺带一提,记得不要开全局模式。配置在这里

image-20241027114724711

那接下来问题就很简单,该配置文件让访问群晖的ip探测地址时,不要走代理就行了。找到config.yaml

image-20241027114941897

我添加了很多条,这里对于群晖的ip检测,一般添加红框内这一条已经足够了

1
2
3
4
5
6
7
8
9
10
- DOMAIN-SUFFIX,whatismyip.akamai.com,DIRECT
- DOMAIN,whatismyip.akamai.com,DIRECT
- DOMAIN-SUFFIX,synology.com,DIRECT
- DOMAIN-SUFFIX,synology.cn,DIRECT
- IP-CIDR,68.183.160.0/20,DIRECT
- DOMAIN,checkip.synology.com,DIRECT
- DOMAIN,checkipv6.synology.com,DIRECT
- DOMAIN,checkport.synology.com,DIRECT
- DOMAIN,ddns.synology.com,DIRECT
- DOMAIN,account.synology.com,DIRECT

记得不要放在最最后边,因为一般config.yaml的最后,有一条什么都匹配不上时的规则,如我这里的 - MATCH, others 会走Others对应的代理。如果- DOMAIN,checkip.synology.com,DIRECT放在最后边的话,优先级关系是会先命中 - MATCH, others `

修改完成后,重新启动一下clash (我是没找到重新加载配置的命令, 直接重启了)

再次尝试ddns刷新配置,发现可以正常映射为本机ip了。大功告成

如果还有不行的小伙伴,也可以用上述方法看clash的日志,看看它到底是命中了哪一条规则。关于规则的介绍:https://clash.wiki/configuration/rules.html

群晖DSM安装clash

本文将基于 DSM 群晖操作系统,利用 docker 容器管理,简单介绍 clash 的安装。

前提条件

  1. 本篇文章基于读者已有可用机场资源,文章将不包含机场推荐
  2. 确保你的群晖已经安装了 docker (新版叫container Manager),如下图所示。
    container Manager

将 clash 镜像导入 docker

由于近些日子,dockerHub 在特定情况下(特指clash安装前)可能无法访问。此时打开注册表大概率长这个样子

所以就下载不到clash,然而不下载 clash 又无法访问 docker 注册表,由此进入死循环。

下面提供几种解决方案

方案一: 临时本地 pc 开启 LAN 访问 (推荐)

打开另一台已经安装好clash的电脑,选好节点,然后点击Allow LAN

然后进入nas控制面板,找到网络,选择代理服务器,如下填写

然后就可以在 docker 中搜索安装clash了,我们选最多星星的这个

方案二:本地下载好镜像后上传至 nas 中安装

* 不推荐这种安装方式,除非就是上面的方案一不可选择的情况

如果 nas 连接本地困难的话,也可以选择在本地先下载好镜像(需要本地拥有能连接外网的docker)。

1
docker pull clash

选好对应的版本

1
docker save -o clash.tar clash:latest

然后到处到本地。访问群晖页面,选到映像

导入进去

方案三:去网上找到一个国内可访问的 镜像地址

这个只能说看运气,网上搜一搜。作者尝试这个方案的时候,就没有找到一个可以使用的国内镜像源。

配置文件和前端ui准备

这里仅做页面配置方案的启动,如果想用 docker 命令行启动的同学,配置是类似的。

1.创建本地配置文件目录,并将原来 clash 配置中的 config.yaml 复制进来

2.下载一个ui管理界面前端(强烈建议要装前端ui,否则某个节点挂的时候,每次都需要修改配置文件或者登录ssh去更改成本非常高)。

如果实在不愿意自己搭建的,有一个在线的网站。
https://clash.razord.top/#/proxies

但这种是个人网站,什么时候挂了也说不定。自己搭建好得多。

这个前端ui目前还是可用的,将其下载下来后,也放在同一个目录下。
本地目录如图所示,例如我的本地目录路径是 /docker/clash

正常应该只有红框中的两个就可以了。

修改配置使前端可访问

打开config.yaml

按如图所示配置:

记得将密码修改为你自己的登录密码。这里ui路径的 /root/ui 是实际容器内的路径。具体的路径映射我们会在下一步完成,这里照抄我的就可以了。

配置容器的路径挂载和端口映射

  1. 进入Container Manager中的镜像,选中 dreamacro/clash ,点击运行,第一个页面没什么需要配置的。直接点击下一步

  2. 在端口设置中新增两条 7890 和 9090 端口对应的外部端口,我这边依旧选择 7890 和 9090. 新增两条存储空间设置,左边的路径选择上一步中配置文件的文件路径。右边的容器内路径可以照抄我的
    image-20241020201326558

  3. 点击下一步,启动容器,在容器选项卡中找到这个容器。双击打开日志,大概长这样
    image-20241020201552898

  4. 尝试通过网页访问 9090 端口,查看网页 http://你的设备ip:9090/ui/ 填写127.0.0.1:9090并输入密码
    image-20241020203947029

  5. 检查下配置页面有没有问题
    image-20241020201805863

  6. 选择你中意的节点,这一步我相信你会的

  7. 然后进入nas控制面板,找到网络,选择代理服务器,将代理服务器地址填写为容器内的7890
    image-20241020202029252

  8. 大功告成,你可以ping一下google 或者在container manager中,点击网络注册表,测试一下连通性

你可能还会遇到

  1. clash 配置后,我通过 ddns 配置的域名,指向的是机场运营商的ip 而非我的公网本地 ip,怎么解决?

    请查看下一篇文章: 群晖在ddns配置下,检测ip使用直连模式的 clash 配置

  2. 我的公网ip指向的是路由器的端口映射,我家路由器不支持在群晖中配置端口转发,我如何在公网访问并添加ip?

    todo 请看下一篇文章:群晖docker 安装 chrome,访问服务器内的页面