科学上网之Clash使用经验分享|免费节点|Clash配置建议

·4239 字·9 分钟·
小V
作者
小V
I’m doing something that it must to be done by someone.
科学上网 - 这是系列中的一片文章.
文章 1: 本文

经过一段时间的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的配置规则(虽然配置繁琐一些,但可以精准控制DNS的解析)。
  4. fake-ip模式是使用了一个虚假IP作为中间桥梁,client <-(fake-ip)-> clash <–(real-ip)–> real-server,个人不建议使用,因为这会导致你的pingdig命令无法正确工作。

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

# 透明代理开启DNS
dns:
  enable: true
  ipv6: false   # false表示忽略IPV6的DNS请求
  listen: 0.0.0.0:1053
  enhanced-mode: fake-ip # 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:
    - 114.114.114.114
    - 223.5.5.5 # 阿里 19ms
  # 提供 fallback 时,如果GEOIP非 CN 中国时使用 fallback 解析
  fallback:
    - https://dns.cloudflare.com/dns-query # cloudflare DNS over HTTPS
    - tls://dns.google:853
    - https://1.1.1.1/dns-query
  # 强制DNS解析使用`fallback`配置
  fallback-filter:
    # true: CN使用nameserver解析,非CN使用fallback
    geoip: true
    # geoip设置为false时有效: 不匹配`ipcidr`地址时会使用`nameserver`结果,匹配`ipcidr`地址时使用`fallback`结果。
    ipcidr:
      - 240.0.0.0/4
  fake-ip-filter:
    - +.*   # 所有DNS请求都不使用fake-ip ,相当于 redir-host 模式

Clash代理服务使用
#

代理端口的设置
#

port: 7890
socks-port: 1080 # SOCKS5代理端口,DNS请求会中转
redir-port: 3333 # 透明代理端口
tproxy-port: 3330 # TPROXY使用的透明代理端口 支持TCP和UDP
routing-mark: 0xff  # TPROXY使用,标记处过的数据包
mode: rule
allow-lan: true  # 是否允许局域网连接

说明:

  • socks-port : 在不使用透明代理时使用,比如在chrome浏览器安装proxy插件中配合使用,配置格式如:socks5://192.168.50.1:1080
  • redir-port : 在路由器上实现透明代理解决方案时,如果采用NAT模式实现透明代理会用到这个端口,但仅支持IPv4协议,IPv6协议无法使用此模式实现透明代理,需要通过tproxy-port来实现IPv6协议透明代理。
  • tproxy-port : 在路由器中如果支持TPROXY模块功能时,我们就可以使用此端口实现透明代理,支持IPv4和IPv6协议,并且还支持TCP和UDP传输协议,这是最为合理的透明代理实现方案,但其中也有一些问题需要小心处理。

使用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界面有:

  • MetaCubeX/metacubexd: 适配Clash.Meta版本的管理面板,界面增加信息更多,颜色主题丰富。
  • haishanh/yacd: 一个非常不错的clash管理面板,操作简单、界面也非常朴素。

使用方法很简单:

  • 方法一: 下载静态文件压缩包直接放到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界面

使用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规则集
#

规则集就是用于识别哪些网站需要使用代理的规则文件,有了规则集就可以非常方便的配置、更新自定义透明代理的规则,配置好后,内网的手机或电脑设备可以在不进行任何配置情况下自动根据访问网址或目标IP地址选择使用代理或者直连访问。

规则集的最大好处:

  • 可以自动更新:方便规则的自动同步。
  • 不用人工操作: 对小白用户非常友好,不需要了解如何配置,只需要使用别人分享的规则集就可以了。

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

  • rule-providers 是clash.premium版本或者clash.meta版本支持的功能!如果提示你不支持rule-providers,那就是你的Clash版本用错了。
  • 规则集也是人为生成的,不会包含所有的网络地址,因此就需要决定找不到匹配规则时是有一个默认行为:直连(黑名单规则)还是使用代理(白名单规则)

简单说一下所谓的黑名单和白名单模式含义:

  • 白名单模式,意为「没有命中规则的网络流量,统统使用代理」,适用于服务器线路网络质量稳定、快速,不缺服务器流量的用户。
  • 黑名单模式,意为「只有命中规则的网络流量,才使用代理」,适用于服务器线路网络质量不稳定或不够快,或服务器流量紧缺的用户。通常也是软路由用户、家庭网关用户的常用模式。

这两种模式在我开发的 vClash项目中已经放弃了!

无论黑名单还是白名单,其实都是配置文件,所以我现在采用了多配置文件切换方式实现上面的功能需要。

因此,下面介绍的配置规则也仅仅用于学习参考而已!要活学活用。

规则集配置示例
#

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

# 专业版支持 rule-providers
rule-providers:
  reject:
    type: http
    behavior: domain
    url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/reject.txt"
    path: ./ruleset/reject.yaml
    interval: 86400
  icloud:
    type: http
    behavior: domain
    url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/icloud.txt"
    path: ./ruleset/icloud.yaml
    interval: 86400
  apple:
    type: http
    behavior: domain
    url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/apple.txt"
    path: ./ruleset/apple.yaml
    interval: 86400
  google:
    type: http
    behavior: domain
    url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/google.txt"
    path: ./ruleset/google.yaml
    interval: 86400
  proxy:
    type: http
    behavior: domain
    url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/proxy.txt"
    path: ./ruleset/proxy.yaml
    interval: 86400
  direct:
    type: http
    behavior: domain
    url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/direct.txt"
    path: ./ruleset/direct.yaml
    interval: 86400
  private:
    type: http
    behavior: domain
    url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/private.txt"
    path: ./ruleset/private.yaml
    interval: 86400
  gfw:
    type: http
    behavior: domain
    url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/gfw.txt"
    path: ./ruleset/gfw.yaml
    interval: 86400
  greatfire:
    type: http
    behavior: domain
    url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/greatfire.txt"
    path: ./ruleset/greatfire.yaml
    interval: 86400
  tld-not-cn:
    type: http
    behavior: domain
    url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/tld-not-cn.txt"
    path: ./ruleset/tld-not-cn.yaml
    interval: 86400
  telegramcidr:
    type: http
    behavior: ipcidr
    url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/telegramcidr.txt"
    path: ./ruleset/telegramcidr.yaml
    interval: 86400
  cncidr:
    type: http
    behavior: ipcidr
    url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/cncidr.txt"
    path: ./ruleset/cncidr.yaml
    interval: 86400
  lancidr:
    type: http
    behavior: ipcidr
    url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/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初始化,等启动成功后再进行定时初始化。

本人分享的订阅源:

延迟越大,获取的可用节点数量,所以,在网络质量允许情况下最好使用github订阅源。

最后
#

以上配置介绍仅供参考学习,介绍的也只是配置Clash的一小部分知识而已。

最后,我将自己正在使用的配置文件分享在这里:


科学上网 - 这是系列中的一片文章.
文章 1: 本文