【OpenClash】从安装到掌握规则配置

一. 前言
在进入 OpenClash 的教程之前我们先了解一下 Clash,以便于对 OpenClash 的安装过程进行理解。
Clash
Clash 是个跨平台的代理工具,跨平台意味着在不同的平台和系统上都能使用。而实现这一方式的原理就是使用了内核 + GUI 的组合方式,只需要为不同的平台开发对应的 GUI 客户端,就可以在不同的平台使用 Clash 内核代理流量。例如:
- Windows:
Clash for Windows、Clash Verge、Clash Nyanpasu - Mac:Clash for Mac
 - Android:
Clash for Android、Clash Meta for Android - iPhone: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控制页面,在规则菜单可以查看到刚刚添加的自定义规则集。

后续在自定义规则集中添加内容后,只需要保存配置,然后点击上面图片中规则集的刷新按钮。