How to install clash on QNAP?

本文一步步教你在Qnap上安装Clash工具,同时介绍了iphone客户端和mac客户端的配置方法。本文总共介绍了Clash的两种配置方法,一种是HTTP代理,一种是透明网关。

install clash on qnap

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。

  1. 文件准备:打开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
    			--...
    
  2. config.yaml的必选配置:为了使得dashboard和http代理生效,如下是config.yaml必选的配置

    mixed-port: 7890
    allow-lan: true
    external-controller: 0.0.0.0:9090
    external-ui: ui
    
  3. 打开Container Station->创建->创建应用程序,打开docker-compose编辑页面

  1. 填入如下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
    
  2. 点击create完成容器创建,可以在Overview中查看容器运行状态和容器运行日志

  3. 查看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客户端配置

  1. 打开wifi网络的高级配置
  1. 在代理中勾选HTTP\HTTPS\SOCKS代理:ip填写NAS的ip地址(192.168.1.2),端口号均为7890

Iphone手机端配置

  1. 打开无线局域网,点击wifi名字后面的感叹号
  1. 最底部在“HTTP代理”中,选择“手动”,服务器填写NAS的ip地址,端口号为7890

如果你不太爱折腾,建议你看到这里就结束了。HTTP代理方式可以解决科学上网99%的问题,并且配置参数简单,方便快速。

如果还想继续折腾,请往下看。

透明网关模式

透明网关模式下,需要将网络配置里面的网关(Gateway)指定为clash所在服务器,同时也需要将该服务器指定为dns服务器。

该模式下,网速会受到一定的影响,但是全局层面科学上网,所有APP都可以正常运行,不需要单独配置代理。

这个模式还有个好处是,兼容上面提到的「代理模式」,服务端配置完成之后,客户端可以完全按照上面的操作进行代理配置,而不使用透明网关。所以个人比较推荐这个模式。

Clash服务端配置

在代理模式下,我们安装docker镜像是开源的Dreamacro/clash;如果要使用透明网关模式,需要开启TUN模式,这个模式是在闭源的dreamacro/clashpremium提供的功能,这个包也被Dreamacro发布到docker hub中,我们可以直接使用。

与代理模式的文件准备工作类似,这里主要介绍不同的地方,主要是config.yaml和docker-compose有差异:

  1. 为了使得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
    
  2. 填入如下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
    
  3. 点击create完成容器创建,可以在Overview中查看容器运行状态和容器运行日志

Mac客户端配置

  1. 打开wifi网络的高级配置
  1. TCP/IP下,修改为手工获取ipv4,修改“路由器”为clashpremium分配的局域网ip地址
  1. DNS下,新增一条记录:clashpremium分配的局域网ip地址

Iphone手机端配置

  1. 打开无线局域网,点击wifi名字后面的感叹号
  1. IPV4地址,“配置IP”改成“手工”,“路由器”改为clashpremium分配的局域网ip地址
  1. 配置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配置文件该如何更新呢?我将在这篇文章进行讲解,敬请期待。

Post a Comment

0 Comments