Rule配置规则

tim-qtp...大约 5 分钟Rule

基本配置项:

我们在电脑上运行Clash for Windows时,其实是调用了Clash的内核,并且加载了yaml配置文件。配置文件可能是机场提供的订阅地址,或者是你通过订阅转换获取的。

总之,配置文件的内容大概长这样:

  • 监听端口7890
  • 配置了两个节点
  • 以及两个节点组。

第一个节点组包含两个节点,默认选中了香港节点;第二个节点组包含两个节点,默认选择了美国节点。下面是一些分流规则。此时浏览器访问www.google.com,由于设置了系统代理,访问谷歌的请求会被浏览器转发到系统代理监听的端口7890。

Clash从7890端口收到数据后,会解析数据报的内容,知道浏览器想要访问谷歌。Clash有全局、规则、直连、脚本四种分流模式,大家一般用的都是规则模式。于是进入规则匹配,从上到下一条条匹配规则

port: 7890
proxies:
  - name: 香港节点
    type: ss
  - name: 美国节点
    type: ss

proxy-groups:
  - name: 节点组1
    type: select
    proxies:
      - 香港节点
      - 美国节点
  - name: 节点组2
    type: select
    proxies:
      - 美国节点
      - 香港节点

rules:
  - DOMAIN,google.com,节点组1
  - DOMAIN-SUFFIX,youtube.com,节点组1
  - DOMAIN-KEYWORD,youtube,节点组1
  - DOMAIN,ad.com,REJECT
  - SRC-IP-CIDR,192.168.1.201/32,DIRECT
  - IP-CIDR,127.0.0.0/8,DIRECT,no-resolve
  - IP-CIDR6,2620::7/32,节点组1,no-resolve
  - GEOIP,CN,DIRECT
  - DST-PORT,80,DIRECT
  - SRC-PORT,7777,DIRECT
  - PROCESS-NAME,curl,节点组2
  - MATCH,节点组1

GEOIP是一个数据库,里面包含了常见的IP归属地分类,如果是国内的IP,就走直连。

由于后面没有加no-resolve,所以需要将谷歌的域名解析为IP进行匹配。

由于Clash没有配置DNS模块,所以会交给电脑配置的本地DNS服务器进行解析。Clash会构建一条查询谷歌域名的DNS请求,发送给电脑配置的本地DNS服务器,也就是路由器。由于DNS请求是明文的,此时就产生了DNS泄露。

但是请求被墙的域名,大概率你会收到一条被污染的DNS响应。假设谷歌的真实IP4.4.4.4,但是你收到的谷歌IP却是5.5.5.5,这就是DNS污染。

Clash拿到这个被污染的DNS响应,以为谷歌的IP就是5.5.5.5,于是会用这个IPGEOIP的规则进行匹配,发现这个IP的归属地不是国内,所以这条规则也是不匹配的。

最后 Clash还有一个兜底,叫做MATCH,所有没有匹配的规则全都交给MATCH处理,也就是节点组1,所以这条访问谷歌的请求交给了节点组1的香港节点,将会使用香港SS节点的配置信息,对数据进行加密。

提示

刚才DNS获取到的IP只是用来IP规则的分流匹配,你发给香港节点只是域名。

所以节点收到数据后,会在它的网络环境中再次进行DNS解析,获取了正确的谷歌IP

这时我访问百度肯定因为GEOIP,CN,DIRECT走直连,但我为了防止DNS泄露,在CN后加上了no-resolve(以前不是国内的就泄露),单独加上国内的百度域名走直连。

但是国内的小众网站并不在规则里,还是会存在走代理的情况。

平时主要访问国外网站的话比较适合。

还有一种是黑名单规则

在IP规则前,先把国外网站都加上,这样就可以优先匹配到域名规则,直接交给节点处理,不会再往下匹配。

也就不会触发IP规则的DNS请求了。

需要注意的是有些机场的Clash订阅,会把no-resolve的IP规则放在前面,导致优先发起了DNS请求,造成DNS泄露。

下面是雷霆的DNS配置:

dns:
  enable: true
  ipv6: false
  default-nameserver:
  - 223.5.5.5
  - 119.29.29.29
  fake-ip-range: 198.18.0.1/16
  use-hosts: true
  nameserver:
  - https://doh.pub/dns-query
  - https://dns.alidns.com/dns-query
  fallback:
  - https://doh.dns.sb/dns-query
  - https://dns.cloudflare.com/dns-query
  - https://dns.twnic.tw/dns-query
  - tls://8.8.4.4:853
  fallback-filter:
    geoip: true
    ipcidr:
    - 240.0.0.0/4
    - 0.0.0.0/32
  use-system-hosts: false
  enhanced-mode: redir-host

下面是魔戒的DNS配置:

dns:
  enable: true
  listen: 127.0.0.1:1053
  ipv6: true
  default-nameserver:
  - 114.114.114.114
  - 223.5.5.5
  - 119.29.29.29
  enhanced-mode: fake-ip
  fake-ip-range: 28.0.0.1/8
  use-hosts: true
  fake-ip-filter:  
  - '*.lan'
  - '*.localdomain'
  - '*.example'
  - '*.invalid'
  - '*.localhost'
  - '*.test'
  - '*.local'
  - '*.home.arpa'
  - time.*.com
  - time.*.gov
  - time.*.edu.cn
  - time.*.apple.com
  - time1.*.com
  - time2.*.com
  - time3.*.com
  - time4.*.com
  - time5.*.com
  - time6.*.com
  - time7.*.com
  - ntp.*.com
  - ntp1.*.com
  - ntp2.*.com
  - ntp3.*.com
  - ntp4.*.com
  - ntp5.*.com
  - ntp6.*.com
  - ntp7.*.com
  - '*.time.edu.cn'
  - '*.ntp.org.cn'
  - +.pool.ntp.org
  - time1.cloud.tencent.com
  - music.163.com
  - '*.music.163.com'
  - '*.126.net'
  - musicapi.taihe.com
  - music.taihe.com
  - songsearch.kugou.com
  - trackercdn.kugou.com
  - '*.kuwo.cn'
  - api-jooxtt.sanook.com
  - api.joox.com
  - joox.com
  - y.qq.com
  - '*.y.qq.com'
  - streamoc.music.tc.qq.com
  - mobileoc.music.tc.qq.com
  - isure.stream.qqmusic.qq.com
  - dl.stream.qqmusic.qq.com
  - aqqmusic.tc.qq.com
  - amobile.music.tc.qq.com
  - '*.xiami.com'
  - '*.music.migu.cn'
  - music.migu.cn
  - +.msftconnecttest.com
  - +.msftncsi.com
  - msftconnecttest.com
  - msftncsi.com
  - localhost.ptlogin2.qq.com
  - localhost.sec.qq.com
  - +.srv.nintendo.net
  - +.stun.playstation.net
  - xbox.*.microsoft.com
  - xnotify.xboxlive.com
  - +.ipv6.microsoft.com
  - +.battlenet.com.cn
  - +.wotgame.cn
  - +.wggames.cn
  - +.wowsgame.cn
  - +.wargaming.net
  - proxy.golang.org
  - stun.*.*
  - stun.*.*.*
  - +.stun.*.*
  - +.stun.*.*.*
  - +.stun.*.*.*.*
  - heartbeat.belkin.com
  - '*.linksys.com'
  - '*.linksyssmartwifi.com'
  - '*.router.asus.com'
  - mesu.apple.com
  - swscan.apple.com
  - swquery.apple.com
  - swdownload.apple.com
  - swcdn.apple.com
  - swdist.apple.com
  - lens.l.google.com
  - stun.l.google.com
  - '*.square-enix.com'
  - '*.finalfantasyxiv.com'
  - '*.ffxiv.com'
  - '*.ff14.sdo.com'
  - ff.dorado.sdo.com
  - '*.mcdn.bilivideo.cn'
  - +.media.dssott.com
  - +.pvp.net
  nameserver:
  - tls://223.5.5.5:853
  - tls://223.6.6.6:853
  - https://doh.pub/dns-query
  - https://dns.alidns.com/dns-query
  use-system-hosts: false

DNS解析流程

以下是两种常见的 DNS 配置:

dns:
  ...
  ipv6: true
  enhanced-mode: redir-host / fake-ip
  fake-ip-range: 28.0.0.1/8
  fake-ip-filter:
    - '*'
    - '+.lan'
  nameserver:
    - https://doh.pub/dns-query
  fallback:
    - https://8.8.8.8/dns-query
  nameserver-policy:
    "geosite:cn,private":
      - https://doh.pub/dns-query
      - https://dns.alidns.com/dns-query

此流程图为了更直观和简单地说明 Clash.Meta 的 DNS 工作流程,忽略了 Clash 内部的 DNS 映射处理。