翻墙指北
关于我折腾Clash的那些事

虚空终端

自从 CFW(Clash For Windows)clash 内核相继跑路后,clash分支就只剩下了clash-meta内核一枝独秀了。

你问我什么是 meta 内核?以下内容摘自官网:

虚空终端 是一个基于开源项目 原神 的二次开发版本,增加了一些独有特性,本文档仍在修订中,欢迎 PR。

使用 虚空终端 前,请悉知:

  • 本 Wiki 主要介绍 虚空终端 的特色功能,原神 特性请查看 原神 Wiki
  • 本 Wiki 基于最新的 虚空终端 分支介绍,如果您的 虚空终端 低于此版本,可能会有部分功能不支持;
  • 虚空终端 支持原神的全部特性,支持 原神 Premium 核心部分特性。

好吧,其实简单来说 meta 比原版内核好在多非常多的功能,可以添加多种类型的筛选条件,geo-ip,TUN, rule-set, 同时支持的协议也更多,等等。

目前仍在积极维护的还有一个叫 sing-box 的玩意儿,没用过,但我看支持的协议都差不多,至于路由功能方面感觉见仁见智,meta的功能对我来说已经差不多了。

前端

相比起后端的一枝独秀,前端真可谓是百花齐放,原先的clash-verge后继有人,基于tauri框架的clash-verge-rev仍在积极维护中。

而跨平台的FlClash则是直接一个应用横跨移动和桌面,Windows, MacOS, Linux, Android, iOS全平台支持。

软路由平台,有和 OpenWRT 直接集成的OpenClash。如果不想要图形界面,也可以考虑直接在命令行运行的ShellCrash

追求极简又想要个图形界面的话,还可以考虑Clash.Mini

meta的官方文档里还有个所有前端应用的列表

配置说明

反正后端没得选(如果要用clash系列的话),前端也都差不多(除了用在路由器上做透明代理的OpenClash和ShellClash等),那么就琢磨琢磨meta内核的配置文件吧。

虽然很想多写点东西,但其实meta内核的官方文档写得已经非常详细了,所以就挑一点重要的说了。

概述

这是一个简单的配置文件示例,从机场订阅的配置文件大多也都长这个样:

mixed-port: 7890
allow-lan: true
bind-address: '*'
mode: rule
log-level: info
external-controller: '127.0.0.1:9090'
dns:
    enable: true
    ipv6: false
    default-nameserver: [223.5.5.5, 119.29.29.29]
    enhanced-mode: fake-ip
    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] }
proxies:
    - { name: '🇭🇰 Hong Kong 01', type: ss, server: xxx.yyy, port: 15021, cipher: chacha20-ietf-poly1305, password: xxxyyy-yyyzzz-uuuu-aaa-zzzzzzz, udp: true }
    - { name: ..., ...}
proxy-groups:
    - { name: xxxx Cloud, type: select, proxies: [自动选择, 故障转移, '剩余流量:90.42 GB', '距离下次重置剩余:15 天', 套餐到期:2024-11-01] }
    - ...
rules:
    - 'DOMAIN,acg.gives,DIRECT'
    - ...

所谓机场,就是买几台服务器提供代理服务,然后将所有可使用的代理服务器整一个配置文件发给你,clash 根据配置文件的说明就可以用正确的协议和密钥来连接到代理服务器。

所谓代理,就是你将你想要请求的内容告诉代理服务器,代理服务器帮你请求,然后将请求的内容返回给你。这原本是一种保护个人隐私的手段,但是在这神奇的中华大地上,它似乎衍生出了另一层含义。

于是很自然地就有了一个问题:为什么我访问谷歌会被墙,而访问同样在国外的代理服务器就不会呢?这是因为你和代理服务器之间所使用的连接协议并非普通的HTTP之类的常用协议,而是自定义的加密传输协议,它可以让你发送的请求完全加密,不呈现出任何特征;亦或是直接伪装成正常的HTTP流量走443端口(trojan),最互联网上最常见的流量混在一起无法辨认。

例如 proxies: 下的第一个元素,name 是这个代理服务器的名字,type 是代理服务器所使用的协议,此处为shadowsocks协议,serverport 是代理服务器地址和端口,cipher 是ss协议所使用的加密方式,password 是密码,udp 是是否开启 UDP 代理。

规则

rules字段则是定义了一系列的规则,你当然不希望自己所有的流量,不管是国内还是国外,全部都经过代理。例如 DOMAIN,acg.gives,DIRECT 表示访问 acg.gives 的时候直连,不走代理。

类似的规则还有很多种设置方法,例如- GEOIP,CN,DIRECT根据地理位置数据集将所有中国的IP直连。还可以直接匹配IP地址范围- IP-CIDR,127.0.0.0/8,DIRECT,no-resolve

特别值得一提的是,meta内核支持使用正则表达式来过滤域名:- DOMAIN-REGEX,^abc.*com,PROXY,这点是clash内核没有,但却非常实用的功能。

剩下的还有根据进程名,端口,UID等奇奇怪怪的过滤方式,就不一一列举了,详情可以看官方文档

策略组

所谓策略组,就是对代理服务器进行分组,每个组可以有不同的类型和功能。

proxy-groups:
- name: Proxy
  type: select
  proxies:
  - ss
  - vmess
  - auto
  #disable-udp: true

常见的 select表示手动选择,url-test表示自动选择,fallback表示故障转移。这些都没啥好说的。

最大化地利用你买的机场

机场明明给了我那么多的节点,我却同时只能用一个,这也太亏了吧?并且,当你在使用爬虫爬取某些网站时,为了防止请求过于频繁,建立一个代理池是非常常见的选择,而clash就支持均匀地使用所有的节点进行代理请求:

proxy-groups:
- name: "负载均衡"
  type: load-balance
  strategy: round-robin
  proxies:
  - ss1
  - ss2
  - vmess1

把所有的节点扔到这样一个策略组里,clash就会轮流使用这些节点进行代理请求。 再往rules里添加一条规则:DOMAIN,domain-to-crawl.com,负载均衡,就能让所有对这个网站的请求都遵守负载均衡这个规则组的规则,进行负载均衡了。

DNS

这块好复杂,我感觉我也说不明白,总之先贴一张clash处理DNS的流程图: meta-dns

然后稍微解释一些东西,meta的默认DNS策略是fake-ip,它的原理主要是每当客户端发送一个DNS解析请求,clash都会截获这个请求,然后返回一个虚假的IP地址,然后再将所有向这些虚假的IP地址的请求全部重定向到clash的内核,走一遍内核设置的规则匹配。

redir-host则是传统的DNS解析。并不会截持本地的DNS请求,因此如果浏览器中设置了本地的DNS解析,clash在进行规则匹配的时候就基本全是IP,基于域名规则的匹配基本都要失效。

默认情况下,clash会使用内置的DNS服务器进行解析,由于国内DNS服务的污染问题,建议使用更安全的DNS服务器,例如dns-over-httpsdns-over-tls等。相关的配置字段主要有以下三个:

nameserver
默认的域名解析服务器

fallback
后备域名解析服务器,一般情况下使用境外 DNS, 保证结果可信

配置 fallback后默认启用 fallback-filter,geoip-code为 cn

fallback-filter
后备域名解析服务器筛选,满足条件的将使用 fallback结果或只使用 fallback解析

还有俩不太重要的字段,一个用来专门解析DNS服务器(有域名的那种),另一个专门用来解析代理服务器的域名:

default-nameserver
默认 DNS, 用于解析 DNS 服务器 的域名

proxy-server-nameserver
代理节点域名解析服务器,仅用于解析代理节点的域名,如果不填则遵循nameserver-policy、nameserver和fallback的配置

最后修改于 2024-11-23