经过一段时间的Clash使用经验,今天总结了一下全面的使用技巧和一些避免的坑。
DNS服务的使用#
配置透明代理过程中避免的坑:
- 不要使用
Clash
的内置DNS服务
替换路由器的dnsmasq
,原因:更改dnsmasq的DNS端口会导致内网无法使用DHCP服务
自动获取DNS服务器地址。 - 可以使用
iptables
转发UDP协议的53端口请求到Clash
的DNS服务端口(dns.listen
配置的端口),转发DNS规则在Clash
内部配置。 - 也可以使用
dnsmasq
的配置规则
(conf-dir
目录下*.conf文件)转发DNS请求到Clash
的DNS服务端口dns.listen
,需要单独维护一套dnsmasq
的配置规则(虽然配置繁琐一些,但可以精准控制DNS的解析)。 fake-ip
模式是使用了一个虚假IP
作为中间桥梁,client <-(fake-ip)-> clash <–(real-ip)–> real-server,个人不建议使用,因为这会导致你的ping
、dig
命令无法正确工作。
一套可用的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管理面板,操作简单、界面也非常朴素。
使用方法很简单:
- 方法一: 下载静态文件压缩包直接放到
httpd
或nginx
服务器目录中使用,下载地址 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
来启动服务。
使用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-providers
的proxy-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的一小部分知识而已。
最后,我将自己正在使用的配置文件分享在这里:
- 常规配置示例config_default.yaml:内部包含了我分享的免费代理订阅源,rule模式,关闭IPv6的DNS解析。
- 适合clash.meta版本的配置:优点支持代理订阅源格式丰富,ss:// 或 vmess:// 或 vless:// 等链接格式都支持,这个配置仅作为参考,配置了两个HTTP代理订阅源,可以自行修改为自己的代理订阅源地址。
- 适合手机客户端使用的配置clash_norelay.yaml: 在config_default.yaml基础上进行了简化,去掉relay中继规则(多数情况用不到relay)。