一、前言
在进入OpenClash的教程之前我们先了解一下Clash,以便于对OpenClash的安装过程进行理解。
Clash
Clash是个跨平台的代理工具,跨平台意味着在不同的平台和系统上都能使用。而实现这一方式的原理就是使用了内核+GUI的组合方式,只需要为不同的平台开发对应的GUI客户端,就可以在不同的平台使用Clash内核代理流量。例如:
Windows:
Clash for Windows、Clash Verge、Clash NyanpasuMac:Clash for Mac
Android:
Clash for Android、Clash Meta for AndroidiPhone:ClashX、ClashX Pro
OpenWRT:OpenClash
梅林固件:Merlin Clash、vClash
也因为Clash是开源项目,有开发者为了在不同的网络环境下有更好的表现,或为了更多的功能而修改内核文件,开发出新的内核版本(分支)。所以经常会出现一个客户端会有多个内核选择的情况,而内核通常又和Clash的运行模式有关,可以在客户端中进行切换。
OpenClash
OpenClash是一个运行在OpenWRT软路由中的网络代理插件,运行后可以达到代理局域网内所有设备的效果,非常适合局域网内设备较多,或设备不方便使用代理客户端的场景。因此相比在电脑和手机上使用客户端更加方便,还能很好地规避被软件检测到在设备上开启代理工具的情况。
OpenClash同样是开源项目,在多个开发者协作的情况下拥有了非常强大的功能,是所有代理插件中最强大的一款。但代价是最终导致页面的操作逻辑很杂乱,并且配置繁琐,学习成本高。
二、安装
1.安装依耐
OpenClash在安装时并不会正确将所有缺少的依耐安装,因此需要先手动安装依耐插件。防火墙类型不同依耐的插件会有差别,需要先使用SSH连接路由器,使用命令确认后再安装对应的依耐。
使用
iptables --version
命令正常输出版本号:
opkg update
opkg install coreutils-nohup bash iptables dnsmasq-full curl ca-certificates ipset ip-full iptables-mod-tproxy iptables-mod-extra libcap libcap-bin ruby ruby-yaml kmod-tun kmod-inet-diag unzip luci-compat luci luci-base
使用
nft --version
命令正常输出版本号:
opkg update
opkg install coreutils-nohup bash dnsmasq-full curl ca-certificates ipset ip-full libcap libcap-bin ruby ruby-yaml kmod-tun kmod-inet-diag unzip kmod-nft-tproxy luci-compat luci luci-base
2. 安装插件
访问Releases页面,将luci-app-openclash_x.x.x-beta_all.ipk
文件下载至电脑本地,打开路由器后台的文件传输,将ipk文件上传至路由器安装。
安装完毕后即可在服务菜单内查看到安装完成的OpenClash插件。
3. 安装内核
OpenClash支持三种内核,需要手动安装才可以使用。在插件设置
-> 版本更新
页面可以看到左侧提示三种内核文件不存在,右侧显示了可用于在线下载的内核版本。
由于内核文件都是从GitHub下载的,如果您页面右侧加载不出来可下载的内核版本,可以划到底部点击使用CDN一键检查更新
,选择一个速度快的CDN节点检查更新。
依次下载内核,如果下载失败可以先用客户端挂上梯子。下载完成后切换到配置管理
页面,切换上传文件类型
,依次将下载的内核文件上传。
再回到插件设置
-> 版本更新
页面,可以看到内核已经上传成功了。
三、订阅配置
Clash专用订阅链接
如果您复制的是Clash专用订阅链接,在配置管理
页面点击添加
-> 随便输入一个名字
-> 粘贴订阅链接
-> 保存配置
。
非Clash专用订阅链接
如果您的机场没有提供Clash专用订阅链接,需要额外勾选在线订阅转换
,转换成Clash可识别的配置文件。
更新配置并运行
添加配置后会回到配置订阅页面,点击更新配置
即可下载配置文件,并自动开始启动。
四、切换节点
OpenClash的节点切换并不是在插件中操作进行,而是额外提供了三个网页面板操作,每次切换节点不需要重新启动。在插件主页的运行状态下发有三个按钮,分别就是YACD 控制面板
、METACUBEXD 控制面板
、DASHBOARD 控制面板
。三个面板都是用来切换节点和查看规则应用状态的,选一个顺眼的即可。
以YACD面板为例,打开左侧的代理
菜单即可切换节点。
如果您打开的页面不是中文,可以到配置
菜单 -> 更改Language
-> 选择中文
。
此外,您还可以打开规则
菜单和连接
菜单查看当前配置的代理规则生效情况,支持搜索,可用于后续自定义规则时监测代理生效状态。
至此您已经掌握OpenClash的安装和基本用法,已经足够使用。剩余两节内容您可以不用观看,有需要时再学习。
五、模式管理
在插件设置
-> 模式设置
支持配置OpenClash使用的内核版本
、运行模式
、代理模式
。
内核
第一项使用 Meta 内核
的勾选状态代表使用默认的Premium内核还是切换Meta内核。内核不同对可用功能会造成影响,以下是两个内核对影响的功能的支持情况,通常选择默认的Premium内核
即可(不勾选)。如果您不知道是什么,可以先看第六节。
目前新版本仅支持Meta内核,并且是全功能的
运行模式
互联网数据请求最常用的是两种协议,TCP和UDP。通常访问网页使用的是TCP协议,游戏和一些特殊的服务使用的UDP协议(例如Windows电脑的微软时间同步)。
兼容模式:默认模式,该模式通过转发处理请求,强制勾选
UDP流量转发
可能会导致UDP协议的请求无法正常连接。TUN模式:如果切换到TUN模式将会启用一个虚拟网卡处理UDP协议的请求,但TCP也强制走TUN内核效率很慢。
TUN-混合模式:TCP使用转发、UDP使用TUN内核处理的混合模式,如果同时有代理TCP和UDP数据的需求可以开启此选项。
有细心的同学会注意到页面底部还有一个切换页面到 Fake-IP 模式
的按钮,点击之后又会变成切换页面到 Redir-Host 模式
。这两个方式在域名DNS解析的处理流程上会有区别:
Redir-Host:默认的DNS解析流程,客户端发起请求,向域名服务器查询域名的IP地址,如果命中代理则通过OpenClash代理请求。
Fake-IP:客户端发起请求时,立即返回一个虚假的IP地址,如果命中代理则由OpenClash向域名服务器查询IP地址,再通过OpenClash代理请求。
最大的区别是向域名服务器查询IP的客户端不同,而客户端查询出来的IP是会被缓存的。也就是说如果你的OpenClash启动的时间越久,客户端越多,使用Fake-IP模式处理请求会更快。缺点是由于返回的是虚假IP,客户端无法查询到域名的真实IP地址。
代理模式
与客户端一样,支持的3种主要的代理模式,在运行状态
的页面和控制面板
页面也能切换。
Rule:规则代理,使用订阅文件和当前配置的代理规则。
Global:全局代理,忽略规则,所有流量走代理。
Direct:全部直连,不走代理。适合临时不需要使用代理的场景。
六、规则设置
1. 流量控制
仅允许常用端口流量
在插件设置
-> 流量控制
支持将仅允许常用端口流量
设置为默认常用端口
。网站一般都是使用80、443等常用端口提供服务的,是否开启对代理效果都不会有影响。但如果您正好有非常用端口的地址不需要走代理(例如PT、P2P),强烈建议开启该选项。
大陆白名单
在同样的页面中还有一个绕过中国大陆 IP
功能,开启后如果访问目标是中国大陆IP将直接跳过,不再进入Clash核心匹配规则,会提升一定的运行效率。
大陆IP的数据列表来自于第三方,需要到插件设置
-> 大陆白名单订阅
页面更新获取,如果对有功能需要,可以开启自动更新。
2. 自定义规则
支持对代理目标按域名、IP段、端口号设置规则,也支持对发起请求的内部IP段、端口号设置规则。
如图所示,代理规则使用yaml
格式编写,一行一条添加在rules:
后面,每行由三部分组成,编写方法如下:
-
匹配方式
,匹配内容
,节点/代理组名称
匹配方式
匹配域名:
DOMAIN
域名完全匹配DOMAIN-SUFFIX
域名后缀匹配DOMAIN-KEYWORD
域名关键字匹配
例如
- DOMAIN-KEYWORD, bilbili, DIRECT
代表包含bilibili
关键字的域名直连,不经过代理。
匹配IP:
IP-CIDR
匹配目标IPSRC-IP-CIDR
匹配请求发起源的IP
例如
- SRC-IP-CIDR, 192.168.1.3/32, DIRECT
代表如果是局域网内设备IP为192.168.1.3发起的请求直连,不经过代理。
匹配端口:
IP-CIDR
匹配目标端口DST-PORT
匹配请求发起源的端口
例如
- DST-PORT, 8080, DIRECT
代表如果是局域网内设备从8080端口发出的请求直连,不经过代理。
匹配内容
匹配内容的填写需要与匹配方式相对应,域名/IP/端口号。
唯一需要注意的是匹配IP需要填写的内容需要转换为CIDR格式,CIDR支持表示一个IP段范围,例如192.168.1.3
的转换结果是192.168.1.3/32
,192.168.1.3 - 192.168.1.255
的转换结果是192.168.1.0/24
,填写192.168.1.0/24
就可以将192.168.1.3 - 192.168.1.255
所有的IP指向节点/代理组名称。
节点/代理组名称
如果您有一个节点名称是🇭🇰 香港高速 中继 1
,并希望使用这个节点代理请求,那么就是- DOMAIN-KEYWORD, bilbili, 🇭🇰 香港高速 中继 1
,代表包含bilibili
关键字的域名走🇭🇰 香港高速 中继 1
节点。而且Clash支持给节点分组,如果您的节点有一个分组美国节点组
,填写该内容就代表使用这个代理组代理数据。
实际上Clash还有两个默认的代理组名称,分别是DIRECR
直连(不走代理)和REJECT
(拒绝请求)。例如- DOMAIN-KEYWORD, bilbili, REJECT
就变成了拒绝向包含bilibili
关键字的域名请求。
GEO数据库
除了上述支持用域名、IP段、端口号配置规则,还有Meta内核才支持的第三方的GEO数据库,可以根据地理位置进行域名或IP地址的获取和匹配。当前支持GeoSite
地理域名数据库、GeoIP
地理IP数据库、GeoIP MMDB
更高效的地理IP数据库。如果需要使用该功能,需要在插件设置
-> GEO数据库订阅
进行获取和更新,并将插件设置
-> 模式设置
-> 使用Meta内核
打开。
使用GEO数据库还是在自定义规则列表内添加规则,匹配方式和内容略有不同。例如- GEOIP, CN, DIRECT
代表国家代码为CN的IP全部直连,- GEOSITE, US, 🇭🇰 香港高速 中继 1
代表国家代码为US的域名全部走🇭🇰 香港高速 中继 1
节点。
3. 规则附加
规则附加
页面支持附加游戏规则
、第三方规则
、自定义规则
,其中游戏规则
和第三方规则
可以划到页面下方点击管理按钮在线下载。如果需要管理目前已下载/创建的规则集,需要到配置管理
-> 代理(规则)集文件管理
进行查看。
使用在线规则集
以博主使用第三方规则集作者ACL4SSR
的GFW列表作为代理规则为例,点击下方的管理第三方规则集
。可以看到顶部有一个放行规则-ACL4SSR(建议置顶并直连)
,点击右边的点击更新规则
下载,再键盘按Ctrl+F
搜索ProxyGFWlist
下载。
回到规则附加
页面,按照图示添加规则集,其中规则集ProxyGFWlist
所属的策略组选择您拥有的代理组名称。
自定义规则集
如果您使用的第三方规则集或者机场默认的规则里面没有您使用的网站,并且数量较多,使用自定义规则一条一条写太麻烦。有更简便易于维护的方式,可以在配置管理
-> 代理(规则)集文件管理
-> 规则集文件列表
-> 新建文件
添加自定义规则。
输入规则名称,例如漏网之鱼。
点击修改,添加规则。添加方式有两种,可以像自定义规则那样使用yaml
格式写在rules:
后面,也可以简单一点只写域名(支持通配符)或IP地址。如果是后者,需要注意每个文件内只能全部用域名或IP,不能混合。
回到规则附加
页面,在自定义规则集附加(仅 TUN & Meta 内核)处点击添加,如图配置名称
,规则集类型选择file
,规则类型domain
,规则格式选择text
(如果自定义规则集用的yaml
格式不用改),规则集路径选择刚刚添加的自定义规则集,指定策略组选择您拥有的代理组名称。
点击保存配置
后会回到规则附加页面,点击应用配置
生效并自动重启OpenClash。启动完成后使用YACD控制页面
,在规则菜单可以查看到刚刚添加的自定义规则集。
后续在自定义规则集中添加内容后,只需要保存配置,然后点击上面图片中规则集的刷新按钮。