Skip to content

配置 Clash

在国内,不配置 VPN,在网络上寸步难行。包括我使用的群辉 923+,docker 的 registry,没有 VPN 根本加载不出来。下面是一个简单的教程,主要是记录一个大坑

先代理到本地

我们可以先设置 NAS 的代理服务为局域网内已经使用 Clash 的其他机器,例如我的是 MacOS 的主力机器

在 NAS 未配置好网络环境之前,使用我本地机器的代理服务

控制面板 > 网络 > 代理 > 设置 IP 和端口

拉取 clash 镜像

直接在 docker 的 registry 里面搜索 clash,下载 dreamacro/clash 镜像即可

配置 config.yaml

clash 的配置默认从 /root/.config/clash/config.yaml 读取,所以我们需要准备好一个 config.yaml 文件。如果之前在 Windows 或者 MacOS 上已经安装过 clash,可以直接复用之前的配置文件。

可以去这里了解 config.yaml 的配置:https://en.clash.wiki/configuration/configuration-reference.html

下载好的 config.yaml 需要放在 NAS 的某个目录下,我这里放在了:volume1/shared/clash/config.yaml

启动 clash 容器

然后启动容器,选择刚刚下载好的镜像。

如果网络是设置的 bridge 模式,需要设置三个端口映射:

  • 7890 -> 7890 # 必须
  • 7891 -> 7891
  • 9090 -> 9090 # 必须

或者如果省事的话,网络模式设置 host 模式也可以

然后还需要设置磁盘映射,我这里是 volume1/shared/clash/config.yaml 映射到默认的 clash 配置文件 /root/.config/clash/config.yaml

安装 UI 页面

官方没有提供 UI 页面,我们可以通过 haishanh/yard 镜像来启动一个 UI 页面

启动容器过程中,我们可以配置一个端口映射,我这里是 8081,映射容器内的 80 端口:

还有设置好一些环境变量:

关键是 YACD_DEFAULT_BACKEND 变量,这个变量指定了默认的后端,这里指定了 clash 的地址 REST API 地址,也就是前面的 9090 端口

PATH: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
NGINX_VERSION: 1.23.2
NJS_VERSION: 0.7.7
PKG_RELEASE: 1
YACD_DEFAULT_BACKEND: http://127.0.0.1:9090

然后我们也能通过 IP + 8081 来访问 yacd 提供的 UI 界面了

踩的大坑

正常情况下,容器启动后,应该就能通过 NAS 的 IP + 7890 端口代理了

但是由于我买的是 https://iguge.xyz/ 家的 VPN 服务,里面下载的 clash 的 config.yaml 含有一个值,导致了 clash 虽然启动成功,但是无法代理,一代理,网络都被阻塞了

表现为当我们尝试 curl 一个网站的时候,会出现:curl: (56) Recv failure: Connection reset by peer 这个错误

$ curl -I http://baidu.com
curl: (56) Recv failure: Connection reset by peer

这个值就是:bind-address: 127.0.0.1

bind-address: 127.0.0.1

但是一模一样的配置,在我的主力机 MacOS 上,可以正常代理,而放在 NAS 的 docker 中运行就有问题,网上还没有搜到过类似的问题

经过查询 bind-address 的含义,去掉就可以了

# 仅当 `allow-lan` 为 `true` 时有效
# '*': 绑定所有 IP 地址
# 192.168.122.11: 绑定单个 IPv4 地址
# "[aaaa::a8aa:ff:fe09:57d8]": 绑定单个 IPv6 地址
# bind-address: '*'

Released under the MIT License.