科学上网工具-Clash使用总结

经过一段时间的Clash使用经验,今天总结了一下全面的使用技巧和一些避免的坑。

DNS服务的使用

避免的坑:

  1. 不要使用Clash的内置DNS服务替换路由器的dnsmasq,原因:更改dnsmasq的DNS端口会导致内网无法使用DHCP服务自动获取DNS服务器地址
  2. 可以使用iptables重定向UDP协议的53请求到Clash的DNS服务端口dns.listen,转发DNS规则在Clash内部配置。
  3. 也可以使用dnsmasq配置规则(conf-dir目录下*.conf文件)转发DNS请求到Clash的DNS服务端口dns.listen,需要单独维护一套dnsmasq的配置规则。
  4. fake-ip模式是使用了一个虚假IP作为中间桥梁,client <-(fake-ip)-> clash <--(real-ip)--> real-server,不建议使用,因为这会导致你的pingdig命令无法正确工作。

一套可用的DNS服务配置示例:

# 透明代理开启DNS
dns:
  enable: true
  ipv6: false
  listen: 0.0.0.0:1053
  enhanced-mode: redir-host # redir-host or fake-ip
  # fake-ip-range: 198.18.0.1/16 # Fake IP addresses pool CIDR
  use-hosts: true # lookup hosts and return IP record
  nameserver:
    - 119.29.29.29 # DNSpod DNS 17ms
    - 223.5.5.5 # 阿里 19ms
  # 提供 fallback 时,如果GEOIP非 CN 中国时使用 fallback 解析
  fallback:
    - tls://8.8.8.8:853 # Google DNS over TLS
    - tls://8.8.4.4:853 # cloudflare DNS over TLS
    - https://1.1.1.1/dns-query # cloudflare DNS over HTTPS
    - https://dns.google/dns-query # Google DNS over HTTPS
  # 强制DNS解析使用`fallback`配置
  fallback-filter:
    # true: CN使用nameserver解析,非CN使用fallback
    geoip: true
    # geoip设置为false时有效: 不匹配`ipcidr`地址时会使用`nameserver`结果,匹配`ipcidr`地址时使用`fallback`结果。
    ipcidr:
      - 240.0.0.0/4

Clash代理服务使用

三种代理端口的设置:

port: 7890       # HTTP(S)服务端口
socks-port: 1080 # SOCKS5代理端口
redir-port: 3333 # 透明代理端口
allow-lan: true  # 是否允许局域网连接

使用Web界面

external-controller: 0.0.0.0:9090   # 访问地址 0.0.0.0 表示其他主机可以访问,可以更换局域网地址,例如 192.168.50.1:9090
secret: route       # 访问密码

Web界面提供了连接信息、统计信息的展示,加入使用代理组是select类型时,可以使用Web界面来选择使用的代理。

当然,我们可以通过Web界面来更改配置信息,例如代理端口,但是更改信息并不会保存到config.yaml文件中,重启Clash后依然会使用配置文件中的端口的。

可以选择的Web界面有:

使用方法很简单:

  • 方法一: 下载静态文件压缩包直接放到httpdnginx服务器目录中使用,下载地址 Yacd
  • 方法二: 源码编译,更适合有自己需求的用户。
git clone https://github.com/haishanh/yacd.git
cd yacd

# install dependencies
yarn

# start the dev server
# then go to http://127.0.0.1:3000
yarn start

# build optimized assets
# ready to deploy assets will be in the directory `public`
yarn build

如果有自己的httpd或者nginx服务器,可以将public目录部署到nginx服务器的单独目录下即可。

本地使用也可以直接yarn start来启动服务。

Yacd界面
Yacd界面

使用proxy-provider订阅源

proxy-providers能够动态加载代理服务器列表,这个功能帮助我们在不修改config.yaml启动配置文件情况下实现更新代理功能。是不是觉得很强大呢?

代理订阅源支持两种类型:

  • http类型: Clash 在启动时从指定的 URL 加载服务器列表。如果设置了interval该选项,Clash 会定期从远程拉取服务器列表。
  • file类型: Clash 在启动时从文件系统上的指定位置加载服务器列表。

提示:更新订阅源方式还可以使用Web界面进行手动更新

下面是配置proxy-providers示例:

# config.yaml
# 配置规则参考文档: https://github.com/Dreamacro/clash/wiki/configuration
# 设置代理提供者(远程订阅地址+本地订阅文件)
proxy-providers:
  provider_file:
    type: file
    path: ./provider_local.yaml
    health-check:
      enable: true
      interval: 600
      url: http://www.gstatic.com/generate_204
  provider_url:
    type: url
    url: "https://raw.githubusercontent.com/learnhard-cn/free_proxy_ss/main/clash/clash.provider.yaml"
    interval: 3600
    path: ./provider_remote.yaml
    health-check:
      enable: true
      interval: 600
      url: http://www.gstatic.com/generate_204
# 类型选择 简介
# select : 用于选择代理或代理组, 可以通过 RESTful API 来切换代理,建议在 GUI 中使用
# load-balance : 相同eTLD+1的请求将拨号到同一个代理。
# url-test : 通过对 URL 的速度进行基准测试来选择将使用哪个代理。
# fallback : 按优先级选择可用的策略。通过访问 URL 来测试可用性,就像自动 url-test 组一样。
# relay : 中继链接代理。代理不应包含中继。不支持 UDP。 流量:Clash <-> http <-> vmess <-> ss1 <-> ss2 <-> Internet 
#  
# 推荐选择:
#   命令行服务建议选择 url-test / fallback / load-balance
#   GUI窗口 官方建议选择 select ,当然也推荐使用url-test 自动检测可用性。
proxy-groups:
  # 保留的自定义节点
  - name: DIY
    type: select # load-balance, select, relay, fallback, url-test
    # tolerance: 150
    # lazy: true
    url: http://www.gstatic.com/generate_204
    interval: 300
    proxies:
      - test

  - name: PROXY
    type: select # load-balance, select, relay, fallback, url-test
    use: # 引入 proxy-provider 使用 use 关键字
      - provider_file  # 本地代理列表文件
      - provider_url   # URL地址更新的代理文件
    # tolerance: 150
    # lazy: true
    url: http://www.gstatic.com/generate_204
    interval: 300
    proxies:
      - DIY
    # strategy: consistent-hashing # or round-robin  # 负载均衡策略

避免的坑:

  • 不建议直接使用http类型订阅源!不建议!不建议! 为什么呢? 因为URL地址早晚会被屏蔽或无法访问,此时Clash无法更新代理并且重启后无法再次启动
  • 使用cron类似的调度配合file类型实现更新订阅源,即使URL地址无法访问也不会影响Clash服务正常运行。
  • proxy-group放后面!后面!后面!使用proxy-providersproxy-group要放在proxy-providers后面!不然会告诉你找不到provider或者proxy的错误信息。

注意: Clash premium版本支持ruleset远程URL地址更新,与http方式类似,但不同点是如果ruleset本地文件如果存在,启动Clash时不会因ruleset的URL地址无法访问受影响。

使用rule-providers规则集

规则集就是用于识别哪些网站需要使用代理的规则文件,有了规则集就可以制作出透明代理了,在内网不进行任何设置的情况下自动根据访问网址选择代理或者直连。

介绍了规则集的作用,再来介绍规则集的使用方式:

  • rule-providers 是premium版本支持的功能!如果提示你不支持rule-providers,那就是你的Clash版本用错了。
  • 规则集也是人为生成的,不会包含所有的网络地址,因此就需要决定找不到匹配规则时是直连(黑名单规则)还是使用代理(白名单规则)
  • 白名单模式,意为「没有命中规则的网络流量,统统使用代理」,适用于服务器线路网络质量稳定、快速,不缺服务器流量的用户。
  • 黑名单模式,意为「只有命中规则的网络流量,才使用代理」,适用于服务器线路网络质量不稳定或不够快,或服务器流量紧缺的用户。通常也是软路由用户、家庭网关用户的常用模式。

提示:家庭内部使用时选择黑名单模式可以让你避免很多闹心的网络异常问题,假如你家里有很多联网设备,比如智能音响、智能电器等需要联网服务器,这些服务器地址通常不会匹配在规则集中,因此使用黑名单模式可以避免这些设备通过代理方式联网失败。

下面是Clash提供的每日更新规则集:

# 专业版支持 rule-providers
rule-providers:
  reject:
    type: http
    behavior: domain
    url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/[email protected]/reject.txt"
    path: ./ruleset/reject.yaml
    interval: 86400
  icloud:
    type: http
    behavior: domain
    url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/[email protected]/icloud.txt"
    path: ./ruleset/icloud.yaml
    interval: 86400
  apple:
    type: http
    behavior: domain
    url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/[email protected]/apple.txt"
    path: ./ruleset/apple.yaml
    interval: 86400
  google:
    type: http
    behavior: domain
    url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/[email protected]/google.txt"
    path: ./ruleset/google.yaml
    interval: 86400
  proxy:
    type: http
    behavior: domain
    url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/[email protected]/proxy.txt"
    path: ./ruleset/proxy.yaml
    interval: 86400
  direct:
    type: http
    behavior: domain
    url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/[email protected]/direct.txt"
    path: ./ruleset/direct.yaml
    interval: 86400
  private:
    type: http
    behavior: domain
    url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/[email protected]/private.txt"
    path: ./ruleset/private.yaml
    interval: 86400
  gfw:
    type: http
    behavior: domain
    url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/[email protected]/gfw.txt"
    path: ./ruleset/gfw.yaml
    interval: 86400
  greatfire:
    type: http
    behavior: domain
    url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/[email protected]/greatfire.txt"
    path: ./ruleset/greatfire.yaml
    interval: 86400
  tld-not-cn:
    type: http
    behavior: domain
    url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/[email protected]/tld-not-cn.txt"
    path: ./ruleset/tld-not-cn.yaml
    interval: 86400
  telegramcidr:
    type: http
    behavior: ipcidr
    url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/[email protected]/telegramcidr.txt"
    path: ./ruleset/telegramcidr.yaml
    interval: 86400
  cncidr:
    type: http
    behavior: ipcidr
    url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/[email protected]/cncidr.txt"
    path: ./ruleset/cncidr.yaml
    interval: 86400
  lancidr:
    type: http
    behavior: ipcidr
    url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/[email protected]/lancidr.txt"
    path: ./ruleset/lancidr.yaml
    interval: 86400

白名单模式rule配置

rules:
  - PROCESS-NAME,v2ray,DIRECT
  - PROCESS-NAME,xray,DIRECT
  - PROCESS-NAME,naive,DIRECT
  - PROCESS-NAME,trojan,DIRECT
  - PROCESS-NAME,trojan-go,DIRECT
  - PROCESS-NAME,ss-local,DIRECT
  - PROCESS-NAME,privoxy,DIRECT
  - PROCESS-NAME,leaf,DIRECT
  - PROCESS-NAME,v2ray.exe,DIRECT
  - PROCESS-NAME,xray.exe,DIRECT
  - PROCESS-NAME,naive.exe,DIRECT
  - PROCESS-NAME,trojan.exe,DIRECT
  - PROCESS-NAME,trojan-go.exe,DIRECT
  - PROCESS-NAME,ss-local.exe,DIRECT
  - PROCESS-NAME,privoxy.exe,DIRECT
  - PROCESS-NAME,leaf.exe,DIRECT
  - PROCESS-NAME,Surge,DIRECT
  - PROCESS-NAME,Surge 2,DIRECT
  - PROCESS-NAME,Surge 3,DIRECT
  - PROCESS-NAME,Surge 4,DIRECT
  - PROCESS-NAME,Surge%202,DIRECT
  - PROCESS-NAME,Surge%203,DIRECT
  - PROCESS-NAME,Surge%204,DIRECT
  - PROCESS-NAME,Thunder,DIRECT
  - PROCESS-NAME,DownloadService,DIRECT
  - PROCESS-NAME,qBittorrent,DIRECT
  - PROCESS-NAME,Transmission,DIRECT
  - PROCESS-NAME,fdm,DIRECT
  - PROCESS-NAME,aria2c,DIRECT
  - PROCESS-NAME,Folx,DIRECT
  - PROCESS-NAME,NetTransport,DIRECT
  - PROCESS-NAME,uTorrent,DIRECT
  - PROCESS-NAME,WebTorrent,DIRECT
  - PROCESS-NAME,aria2c.exe,DIRECT
  - PROCESS-NAME,BitComet.exe,DIRECT
  - PROCESS-NAME,fdm.exe,DIRECT
  - PROCESS-NAME,NetTransport.exe,DIRECT
  - PROCESS-NAME,qbittorrent.exe,DIRECT
  - PROCESS-NAME,Thunder.exe,DIRECT
  - PROCESS-NAME,ThunderVIP.exe,DIRECT
  - PROCESS-NAME,transmission-daemon.exe,DIRECT
  - PROCESS-NAME,transmission-qt.exe,DIRECT
  - PROCESS-NAME,uTorrent.exe,DIRECT
  - PROCESS-NAME,WebTorrent.exe,DIRECT
  - DOMAIN,clash.razord.top,DIRECT
  - DOMAIN,yacd.haishan.me,DIRECT
  - RULE-SET,private,DIRECT
  - RULE-SET,reject,REJECT
  - RULE-SET,icloud,DIRECT
  - RULE-SET,apple,DIRECT
  - RULE-SET,google,DIRECT
  - RULE-SET,proxy,PROXY
  - RULE-SET,direct,DIRECT
  - RULE-SET,telegramcidr,PROXY
  - GEOIP,,DIRECT
  - GEOIP,CN,DIRECT
  - MATCH,PROXY

黑名单模式rule配置

rules:
  - PROCESS-NAME,v2ray,DIRECT
  - PROCESS-NAME,xray,DIRECT
  - PROCESS-NAME,naive,DIRECT
  - PROCESS-NAME,trojan,DIRECT
  - PROCESS-NAME,trojan-go,DIRECT
  - PROCESS-NAME,ss-local,DIRECT
  - PROCESS-NAME,privoxy,DIRECT
  - PROCESS-NAME,leaf,DIRECT
  - PROCESS-NAME,v2ray.exe,DIRECT
  - PROCESS-NAME,xray.exe,DIRECT
  - PROCESS-NAME,naive.exe,DIRECT
  - PROCESS-NAME,trojan.exe,DIRECT
  - PROCESS-NAME,trojan-go.exe,DIRECT
  - PROCESS-NAME,ss-local.exe,DIRECT
  - PROCESS-NAME,privoxy.exe,DIRECT
  - PROCESS-NAME,leaf.exe,DIRECT
  - PROCESS-NAME,Surge,DIRECT
  - PROCESS-NAME,Surge 2,DIRECT
  - PROCESS-NAME,Surge 3,DIRECT
  - PROCESS-NAME,Surge 4,DIRECT
  - PROCESS-NAME,Surge%202,DIRECT
  - PROCESS-NAME,Surge%203,DIRECT
  - PROCESS-NAME,Surge%204,DIRECT
  - PROCESS-NAME,Thunder,DIRECT
  - PROCESS-NAME,DownloadService,DIRECT
  - PROCESS-NAME,qBittorrent,DIRECT
  - PROCESS-NAME,Transmission,DIRECT
  - PROCESS-NAME,fdm,DIRECT
  - PROCESS-NAME,aria2c,DIRECT
  - PROCESS-NAME,Folx,DIRECT
  - PROCESS-NAME,NetTransport,DIRECT
  - PROCESS-NAME,uTorrent,DIRECT
  - PROCESS-NAME,WebTorrent,DIRECT
  - PROCESS-NAME,aria2c.exe,DIRECT
  - PROCESS-NAME,BitComet.exe,DIRECT
  - PROCESS-NAME,fdm.exe,DIRECT
  - PROCESS-NAME,NetTransport.exe,DIRECT
  - PROCESS-NAME,qbittorrent.exe,DIRECT
  - PROCESS-NAME,Thunder.exe,DIRECT
  - PROCESS-NAME,ThunderVIP.exe,DIRECT
  - PROCESS-NAME,transmission-daemon.exe,DIRECT
  - PROCESS-NAME,transmission-qt.exe,DIRECT
  - PROCESS-NAME,uTorrent.exe,DIRECT
  - PROCESS-NAME,WebTorrent.exe,DIRECT
  - DOMAIN,clash.razord.top,DIRECT
  - DOMAIN,yacd.haishan.me,DIRECT
  - RULE-SET,private,DIRECT
  - RULE-SET,reject,REJECT
  - RULE-SET,tld-not-cn,PROXY
  - RULE-SET,gfw,PROXY
  - RULE-SET,greatfire,PROXY
  - RULE-SET,telegramcidr,PROXY
  - MATCH,DIRECT

免费Clash订阅源

免费订阅源的代理来源于网络分享,发布前都经过本地验证测试可用(是经过启动代理客户端测试验证,而并非简单的Ping/TCP端口验证)。

再次提醒,虽然有http类型的proxy-provider,但是目前最好别用(原因说过,重启如果url无法访问会影响Clash启动),除非将来更改为先检测本地文件是否存在,存在就不使用URL初始化,等启动成功后再进行定时初始化。

本人分享的订阅源: