Clash 的优点太多了不赘述了,我选择它的理由是 OpenWrt 的 Clash 插件可以在软路由层面将流量分流到不同节点,比如说:YouTube 使用香港节点、Netflix 走日本节点同时谷歌学术使用自建节点,这可以帮助我大幅度降低延迟和增强自建节点可用性(不会因为使用大量流量而被侦测到)。
本章内容和标题描述的一样,会尽量帮助你了解配置文件各项在 Clash 实际使用中的用处,最后也会从零书写一个自己的配置文件。
我会推荐在开始阅读之前先看完这个很棒的介绍 Clash 配置的视频:Clash 配置文件详解,看完你自己也可以写规则
1、配置文件各项的用处
一个配置文件最简单的模板:
# HTTP 协议代理所在端口
port: 7890
# SOCKS5 协议代理所在端口
socks-port: 7891
# 允许局域网内其他设备连接以上 2 个代理端口
allow-lan: true
# 规则模式(可选:全局、规则和直连 3 种模式)
mode: Rule
# 日志级别
log-level: info
# RESTful 风格的控制 API 服务地址(你可以自己写程序调用接口以切换代理节点等)
external-controller: 0.0.0.0:9090
# 代理节点池
proxies:
- {name: 自建节点 1, type: ss, server: proxy.example.com, port: 12345, cipher: aes-256-cfb, password: mypassword }
# 代理节点组
proxy-groups:
# type: select 意为着这个节点组内的节点需要你手动选择切换
- name: 使用代理的组名
type: select
proxies:
- 自建节点 1
# 不使用代理直连
- name: 直连的组名
type: select
proxies:
# DIRECT 意为直连
- DIRECT
# 规则,“规则模式”下需要配置,你设备每一次发送的请求都会经由该规则列表由上至下筛选
# 格式为:- $匹配模式,$匹配参数,$代理节点组
rules:
- DOMAIN-SUFFIX,google.com,使用代理的组名
- GEOIP,CN,直连的组名
- MATCH,使用代理的组名
部分配置选项解释(各种协议的节点配置不在这章解释):
proxy-groups 中各组 type 可选:select、url-test 和 fallback 等。
注:fallback 和 url-test 都为测速并自动选择节点,fallback 需要事前配置好域名服务器以防止 DNS 污染等造成的测速失败。
rules 中各规则匹配模式可选:DOMAIN、DOMAIN-KEYWORD、DOMAIN-SUFFIX、GEOIP 和 MATCH 等,具体功能可以参照下表:
匹配规则 功能 DOMAIN 表示包含完整的域名 DOMAIN-SUFFIX 表示包含什么后缀的域名 DOMAIN-KEYWORD 表示包含 xxx域名关键字的链接 IP-CIDR IPV4 匹配 IP-CIDR6 IPV6 匹配 PROCESS-NAME 表示进程名称 GEOIP 数据库(国家代码)匹配 MATCH 全匹配(一般放在最后)
当启动了 Clash 并载入了以上的配置文件,你尝试访问 Google,节点配置无误的情况下你会惊喜的发现连接上了,那么它是怎么工作的呢?
首先因为是 Rule 规则模式,目标域名为 www.google.com 的请求没有管节点和节点组,直奔 rules 规则组查找有没有自身匹配的......
似乎是有的!就在第一条,www.google.com 的域名后缀是 google.com,匹配上了!然后看看这条规则对应的代理组,“使用代理的组名”,进入,代理组内的选择模式为手动选择......当前被选上的代理是:“自建节点 1”,那就使用它进行访问......成功!
是不是很简单,接着你有尝试访问 ip.cn 想查证下本机的 IP 有没有变......没变?!因为 ip.cn 所在的服务器是大陆 IP 的,匹配上了第二条规则,于是进了直连代理组,接着进行访问而没有使用代理。
那么,YouTube 呢,当然是可以的!所有域名解析的 IP 如果不在大陆都会被指向第三条规则。
很简单对吗,来试试加点难度,理解一下下面的配置中各项的功能😀
2、编写第一个配置文件
在简单模板的基础上稍加更改,添加以下功能:
- 增加基础配置以给 OpenWrt 软路由系统上的 Clash 插件使用。
- 代理节点组区分为 5 个:自建节点、油管用、奈飞用、不使用代理直连和使用代理。
- 规则处新增 Google 学术域名的匹配、YouTube 域名的匹配、Netflix 域名的匹配和域名所在 IP 的匹配。
port: 7890
socks-port: 7891
redir-port: 7892
mixed-port: 7893
ipv6: false
allow-lan: true
mode: Rule
log-level: info
external-controller: 0.0.0.0:9090
# ====== 路由器插件使用所需要增加的基础配置 ======
# 绑定内网的 IP 地址,我这里不绑定了,因为就是 OpenWrt 地址加 9090 端口访问
bind-address: "*"
# Clash 面板密码
secret: "123456"
# Clash 面板前端 UI 样式
external-ui: "./dashboard"
# ====== ***************** ======
proxies:
- {name: 自建节点(Google 学术用), type: ss, server: proxy.example.com, port: 12345, cipher: aes-256-cfb, password: mypassword }
- {name: 机场香港节点 1...... }
- {name: 机场香港节点 2...... }
- {name: 机场奈飞节点...... }
- {name: 机场节点普通节点 1...... }
- {name: 机场节点普通节点 2...... }
- {name: 机场节点普通节点 3...... }
- {name: 机场节点普通节点 4...... }
proxy-groups:
# Google 学术组
- name: 自建节点
type: select
proxies:
- 自建节点(Google 学术用)
# type: url-test 和其下面的 url、interval 参数共同完成:此组下节点每 300 毫秒向 http://www.gstatic.com/generate_204c 发送一次请求并自动选择延迟最低的节点这一功能
- name: 油管用
type: url-test
url: http://www.gstatic.com/generate_204c
proxies:
- 机场香港节点 1
- 机场香港节点 2
# 奈飞组
- name: 奈飞用
type: select
proxies:
- 机场奈飞节点
# 直连组
- name: 不使用代理直连
type: select
proxies:
- DIRECT
# 其他所有访问走该代理组
- name: 其他所有访问走该代理组
type: select
proxies:
- 机场节点普通节点 1
- 机场节点普通节点 2
- 机场节点普通节点 3
- 机场节点普通节点 4
# 规则
rules:
- DOMAIN-SUFFIX,scholar.google.com,自建节点
- DOMAIN-SUFFIX,scholar.google.com.hk,自建节点
- DOMAIN-SUFFIX,youtube.com,油管用
- DOMAIN-SUFFIX,netflix.com,奈飞用
- GEOIP,CN,不使用代理直连
- MATCH,其他所有访问走该代理组
结束。