本文一步步教你在Qnap上安装Clash工具,同时介绍了iphone客户端和mac客户端的配置方法。本文总共介绍了Clash的两种配置方法,一种是HTTP代理,一种是透明网关。
TABLE OF CONTENT
如何在QNAP上配置Clash并使得局域网设备可以进行科学上网,本文介绍两种配置模式。
HTTP代理模式
HTTP代理模式下,Clash服务端的配置非常简单,客户端需要在系统层面或者部分APP层面进行HTTP代理配置。
之所以需要在部分APP进行配置的原因是,部分APP不会继承使用系统代理,需要手工在APP上配置,还有一些APP如果识别当前有HTTP代理就不会工作,比如spotify。如果碰到这类情况,就只能使用下面提到的透明网关模式。
Clash服务端配置
Dreamacro已经将Dreamacro/clash发布到docker hub上,我们可以直接用Container Station安装clash的container。
-
文件准备:打开File Station,在Container目录下新建clash_config文件夹,在clash_config/下创建如下两条记录:
- config.yaml:机场提供的clash配置文件,或自己自定义的文件
- ui文件夹:从这里下载clash-dashboard的源代码,放到ui下用于后续web端后台
最终目录结构如下:
---/Container --/clash_config --/config.yaml --/ui --index.html --CNAME --assets --... -
config.yaml的必选配置:为了使得dashboard和http代理生效,如下是config.yaml必选的配置
mixed-port: 7890 allow-lan: true external-controller: 0.0.0.0:9090 external-ui: ui -
打开Container Station->创建->创建应用程序,打开docker-compose编辑页面
-
填入如下clash启动配置信息
这里把clash的7890端口(代理监听端口)和9090端口(web ui端口)映射到NAS上,也就是可以通过NAS ip + 端口号的方式访问服务。
version: '3' services: clash: image: dreamacro/clash container_name: clash volumes: - /share/Container/clash_config:/root/.config/clash ports: - 7890:7890 - 9090:9090 restart: unless-stopped -
点击create完成容器创建,可以在Overview中查看容器运行状态和容器运行日志
-
查看clash运行状态
浏览器输入:clash dashboard的地址(http://192.168.1.2:9090/ui),这里192.168.1.2是我NAS的ip地址。如果可以成功访问,说明clash已经正常运行。
首次访问会弹出一个对话框,看似要输入密码,其实我们在config.yaml中并未设置密码。这时,需要把对话框里默认的ip地址:127.0.0.1改成当前我们的NAS的ip地址,然后点击确定,就可以进入dashboard。
Mac客户端配置
- 打开wifi网络的高级配置
- 在代理中勾选HTTP\HTTPS\SOCKS代理:ip填写NAS的ip地址(192.168.1.2),端口号均为7890
Iphone手机端配置
- 打开无线局域网,点击wifi名字后面的感叹号
- 最底部在“HTTP代理”中,选择“手动”,服务器填写NAS的ip地址,端口号为7890
如果你不太爱折腾,建议你看到这里就结束了。HTTP代理方式可以解决科学上网99%的问题,并且配置参数简单,方便快速。
如果还想继续折腾,请往下看。
透明网关模式
透明网关模式下,需要将网络配置里面的网关(Gateway)指定为clash所在服务器,同时也需要将该服务器指定为dns服务器。
该模式下,网速会受到一定的影响,但是全局层面科学上网,所有APP都可以正常运行,不需要单独配置代理。
这个模式还有个好处是,兼容上面提到的「代理模式」,服务端配置完成之后,客户端可以完全按照上面的操作进行代理配置,而不使用透明网关。所以个人比较推荐这个模式。
Clash服务端配置
在代理模式下,我们安装docker镜像是开源的Dreamacro/clash;如果要使用透明网关模式,需要开启TUN模式,这个模式是在闭源的dreamacro/clashpremium提供的功能,这个包也被Dreamacro发布到docker hub中,我们可以直接使用。
与代理模式的文件准备工作类似,这里主要介绍不同的地方,主要是config.yaml和docker-compose有差异:
-
为了使得dashboard、http代理、透明代理生效,如下是config.yaml必选的配置;具体
mixed-port: 7890 allow-lan: true log-level: info mode: rule external-controller: 0.0.0.0:9090 external-ui: ui secret: '' dns: enable: true listen: 0.0.0.0:53 ipv6: false default-nameserver: - 223.5.5.5 enhanced-mode: fake-ip fake-ip-range: 198.18.0.1/16 nameserver: - 223.5.5.5 - https://dns.quad9.net/dns-query # DNS over HTTPS - tls://dns.quad9.net:853 # DNS over TLS - dhcp://en0 # dns from dhcp tun: enable: true stack: system auto-route: true auto-detect-interface: true -
填入如下clash启动配置信息,这里我们将clashpremium服务创建在跟NAS同一层的网络上,会给clashpremium分配一个新的局域网ip地址,具体可以参考我这边博客文章
version: '3' services: clashpremium: image: dreamacro/clash-premium container_name: clashpremium volumes: - /share/Container/clash_config:/root/.config/clash cap_add: - NET_ADMIN devices: - /dev/net/tun networks: - qnet-dhcp-eth0 restart: unless-stopped networks: qnet-dhcp-eth0: external: true -
点击create完成容器创建,可以在Overview中查看容器运行状态和容器运行日志
Mac客户端配置
- 打开wifi网络的高级配置
- TCP/IP下,修改为手工获取ipv4,修改“路由器”为clashpremium分配的局域网ip地址
- DNS下,新增一条记录:clashpremium分配的局域网ip地址
Iphone手机端配置
- 打开无线局域网,点击wifi名字后面的感叹号
- IPV4地址,“配置IP”改成“手工”,“路由器”改为clashpremium分配的局域网ip地址
- 配置DNS,改为“手动”,填写clashpremium的局域网ip地址到DNS服务器中
还没结束
每个上网的设备都要配置网关/DNS太麻烦
实际上,很多路由器DHCP功能支持下发自定义的网关和DNS,默认DHCP下发的网关和DNS就是路由器的地址。我们可以在路由器后台将clashpremium的ip地址填写到自定义的网关和DNS上。
这样局域网只要有新设备接入wifi,就会自动设置正确的网关和DNS,实现真正的无痛透明代理。
因为不是所有的路由器都具备该功能,因此本文不再介绍,感兴趣的小伙伴可以自行google查询。
如何解决容器重启后ip地址变化?
刚刚是基础版的配置流程,其实存在一个小bug:NAS服务器一旦重启,那么通过qnet-dhcp-eth0分配给clash-premium的ip地址可能会发生改变,导致我们需要对客户端上的网关、DNS进行重新配置。
我的这篇文章提到如何在qnap container station上给容器分配静态ip地址。
clash数据监控
默认提供的clash-dashboard只有最简单的流量监控以及代理配置,其实Dreamacro还有一个clash-tracing项目,用grafana来展示clash的流量数据,也支持自己自定义dashboard上的东西。
感兴趣的同学可以在我这篇文章中找到详细的指引。
如何更新clash配置文件?
clash使用的服务器信息一般配置在config.yaml中,而我们一般使用的机场会提供一个订阅url地址用于config.yaml的下发。出于一些不可描述的原因,经常需要更新订阅,一般在shadowsrocket等软件会提供手工更新的功能,那我们基于docker配置的clash配置文件该如何更新呢?我将在这篇文章进行讲解,敬请期待。











0 Comments