Clash是一款强大的网络代理翻墙工具,它的核心功能主要包括以下几点:
- 多协议支持:Clash支持多种代理服务器协议,包括Shadowsocks、VMess、SOCKS5、HTTP等,以及它们的安全传输版本(例如Shadowsocks over WebSocket)。
- 规则管理:Clash可以根据用户配置的规则,对不同的网络请求采取不同的代理策略。这些规则可以基于域名、IP、GEOIP(地理位置)等因素。
- 策略组:用户可以定义策略组,策略组可以包含多个代理,并指定一个策略,如顺序选择、URL测试、延迟最低等,用于在这个组里面选择一个最优的代理。
- 负载均衡和高可用性:Clash可以在多个代理服务器之间进行负载均衡,提高网络访问的性能。同时,如果某个代理服务器失效,Clash可以自动切换到其他可用的代理服务器,提高了代理的高可用性。
- Web UI管理:Clash提供了一个Web UI,用户可以通过这个界面方便地管理Clash的配置和状态。
- 跨平台:Clash可以在多种操作系统上运行,包括Windows、macOS、Linux、Android等。
- MitM(中间人攻击)解密:对于HTTPS流量,Clash可以进行MitM解密,以便更精细地控制网络请求。
- 支持Docker:Clash还提供了Docker镜像,用户可以在Docker环境中运行Clash,增加了部署的灵活性。
它的工作原理主要基于以下几个方面:
代理规则
Clash会通过用户配置的规则,决定哪些网络请求需要通过代理,哪些不需要。这些规则可以基于域名、IP、GEOIP(地理位置)等因素。
clash都有一个yaml规则配置文件,无需是机场订阅还是自建节点,都会有一个yaml文件,文件中定义了DNS规则、域名分流规则、IP分流规则、DNS解析规则、代理节点、代理使用协议、代理节点组、主机配置等信息。clash完成代理,正是依赖这些核心规则文件。
关于Clash分流规则的介绍,可参见本站教程:Clash 怎么设置规则?Clash自定义分流规则编写详细教程
以下是一个yaml规则配置文件的示例代码:
port: 7890
socks-port: 7891
allow-lan: false
mode: Rule
log-level: info
external-controller: 127.0.0.1:9090
hosts:
time.facebook.com: 17.253.84.125
time.android.com: 17.253.84.125
dns:
enable: true
use-hosts: true
nameserver:
- 119.29.29.29
- 223.5.5.5
- 223.6.6.6
- tcp://223.5.5.5
- tls://dns.google:853
- tls://8.8.8.8:853
- https://dns.google/dns-query
- https://8.8.8.8/dns-query
- https://8.8.4.4/dns-query
default-nameserver:
- 119.29.29.29
- 223.5.5.5
- tcp://119.29.29.29
- tcp://223.5.5.5
proxies:
- {name: 🇭🇰 香港Z01, server: 000aa.art, port: 19274, type: ss, cipher: aes-256-gcm, password: 33645ec1-7cb9-359a-99a8-b7cef8de4af6, udp: true}
- {name: 🇯🇵 日本Z01 | x0.8, server: 000aa.art, port: 475, type: ss, cipher: aes-256-gcm, password: 33645ec1-7cb9-359a-99a8-b7cef8de4af6, udp: true}
proxy-groups:
- name: 🔰 选择节点
type: select
proxies:
- 🇭🇰 香港Z01
- 🇯🇵 日本Z01 | x0.8
- DIRECT
- name: 🌏 爱奇艺&哔哩哔哩
type: select
proxies:
- DIRECT
- 🇭🇰 香港Z01
- 🇭🇰 香港Z02 | IEPL
- name: 📺 动画疯
type: select
proxies:
- 🔰 选择节点
- 🇯🇵 日本Z01 | x0.8
- DIRECT
- name: 🇨🇳 国内网站
type: select
proxies:
- DIRECT
- 🔰 选择节点
- name: 🛑 拦截广告
type: select
proxies:
- REJECT
- DIRECT
- 🔰 选择节点
- name: 🐟 漏网之鱼
type: select
proxies:
- 🔰 选择节点
- DIRECT
rules:
- DOMAIN,app.biliapi.net,🌏 爱奇艺&哔哩哔哩
- DOMAIN-SUFFIX,iq.com,🌏 爱奇艺&哔哩哔哩
- DOMAIN-SUFFIX,gamer.com.tw,📺 动画疯
- DOMAIN-SUFFIX,exhentai.org,🔰 选择节点
- DOMAIN-SUFFIX,teraboxcdn.com,🔰 选择节点
- IP-CIDR,69.171.235.0/16,🔰 选择节点,no-resolve
- DOMAIN-SUFFIX,mediawiki.org,🔰 选择节点
- DOMAIN,app.adjust.com,🇨🇳 国内网站
- DOMAIN-SUFFIX,googletraveladservices.com,🇨🇳 国内网站
- DOMAIN,dl.google.com,🇨🇳 国内网站
- DOMAIN,mtalk.google.com,🇨🇳 国内网站
- DOMAIN,livew.l.qq.com,🇨🇳 国内网站
- DOMAIN,vd.l.qq.com,🇨🇳 国内网站
- DOMAIN-SUFFIX,mzstatic.com,🇨🇳 国内网站
- IP-CIDR,17.0.0.0/8,🇨🇳 国内网站,no-resolve
- DOMAIN-KEYWORD,admarvel,🛑 拦截广告
- DOMAIN-SUFFIX,local,DIRECT
- IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
- IP-CIDR,10.0.0.0/8,DIRECT,no-resolve
- IP-CIDR,127.0.0.0/8,DIRECT,no-resolve
- GEOIP,CN,🇨🇳 国内网站
- DOMAIN-KEYWORD,.,🐟 漏网之鱼
- DOMAIN-KEYWORD,q,🐟 漏网之鱼
- DOMAIN-KEYWORD,m,🐟 漏网之鱼
- MATCH,🐟 漏网之鱼
代理选择
对于需要通过代理的网络请求,Clash会根据预先配置的代理服务器列表来选择一个合适的代理服务器。这个选择过程可以基于多种策略,例如负载均衡、最少连接、延迟最小等。
协议支持
Clash支持多种代理协议,包括但不限于Shadowsocks、Vmess、Trojan等。这意味着它可以与各种类型的代理服务器进行通信。
以下是对几种主要代理协议的简单介绍:
- Shadowsocks:Shadowsocks是一个开源的安全网络传输协议,设计目标是提供简单无痕的在线安全保护。它使用了混淆技术来难以被检测和封锁。
- Vmess:Vmess是V2Ray使用的一种加密传输协议,它分为入站和出站两部分,通常配合WebSocket、HTTP/2、QUIC等传输协议使用,以提供更好的伪装能力。
- Trojan:Trojan是一个较新的代理协议,其特点是模拟HTTPS协议进行通信,从而在流量特征上更像常规的HTTPS流量,难以被封锁。
Clash支持这些代理协议意味着,无论你使用哪种类型的代理服务器,只要它使用了这些协议中的一个,Clash就能够与之通信。
请求转发
当Clash选择了一个代理服务器后,它会将网络请求转发到该服务器,并将服务器的响应转发回请求者。在这个过程中,Clash会尽可能地保持网络连接的持久性,以提高性能。
策略组
用户可以定义策略组,策略组可以包含多个代理,并指定一个策略,如顺序选择、URL测试、延迟最低等,用于在这个组里面选择一个最优的代理。
clash会根据会根据当前选择的节点策略来动态调整代理节点。
比如当选择“故障转移”节点时,clash会在当前节点无法正常使用时,立即切换到新的可用节点。
比如当选择“自动选择”节点时,clash会动态选择延迟较低的节点,动态优化科学上网体验。