# 自定义规则

{% hint style="info" %}

* 编辑规则有风险，请勿在没完全搞懂的情况下，胡乱尝试；
* 增加完成新规则后，<mark style="color:orange;">**重启MC插件才能生效**</mark>；
* 使用新的yaml配置文件，请<mark style="color:orange;">先清空自定规则正常启动一次</mark>，让MC正确加载【<mark style="color:blue;">连接方式</mark>】下拉菜单内容后，再新增自定义规则；
* 更换yaml配置文件后，请<mark style="color:orange;">手动删除上一个配置文件的自定义规则</mark>！否则MC可能无法启动；
* 如果您添加的规则不符合Clash的标准，进程会无法启动；
* Clash规则依从书写顺序，依次向下匹配（头部规则匹配到后，末尾规则不再响应）；
* 若您<mark style="color:orange;">自定义规则并未生效</mark>，请检查是否被优先级较高的【[<mark style="color:blue;">**前置分流**</mark>](https://mcreadme.gitbook.io/mc/advanced/bypass)】提前绕行Clash了；
* 更多说明请查看 [**Clash Wiki**](https://lancellc.gitbook.io/clash/clash-config-file/rules) 。

&#x20;      \----------------------------<mark style="color:blue;">MC 22.05.20 以后版本</mark>------------------------

* 可针对不同的配置文件设置不同的自定义规则，切换配置文件时自动切换；
* 切换不同配置文件无需删除上一次的自定义规则；
* 已经支持Meta特有规则写法，详看 [**Meta wiki** ](https://docs.metacubex.one/function/rule)；
* 最后一项 <mark style="color:blue;">**协议(TCP/UDP)**</mark> 只支持Meta内核，其他内核请保持默认；
* 请根据内核写其支持的规则，否则可能无法正常启动。
  {% endhint %}

#### <mark style="color:blue;">各个核心支持的规则类型</mark>

<table><thead><tr><th width="230" align="center"> </th><th width="154" align="center">Clash开源内核</th><th width="163.6986301369863" align="center">Clash Premium</th><th align="center">Clash.Meta</th></tr></thead><tbody><tr><td align="center"><mark style="color:blue;">DOMAIN</mark></td><td align="center">支持</td><td align="center">支持</td><td align="center">支持</td></tr><tr><td align="center"><mark style="color:blue;">DOMAIN-SUFFIX</mark></td><td align="center">支持</td><td align="center">支持</td><td align="center">支持</td></tr><tr><td align="center"><mark style="color:blue;">DOMAIN-KEYWORD</mark></td><td align="center">支持</td><td align="center">支持</td><td align="center">支持</td></tr><tr><td align="center"><mark style="color:blue;">IP-CIDR</mark></td><td align="center">支持</td><td align="center">支持</td><td align="center">支持</td></tr><tr><td align="center"><mark style="color:blue;">SRC-IP-CIDR</mark></td><td align="center">支持</td><td align="center">支持</td><td align="center">支持</td></tr><tr><td align="center"><mark style="color:blue;">SRC-PORT</mark></td><td align="center">支持</td><td align="center">支持</td><td align="center">支持</td></tr><tr><td align="center"><mark style="color:blue;">DST-PORT</mark></td><td align="center">支持</td><td align="center">支持</td><td align="center">支持</td></tr><tr><td align="center">MATCH(MC无)</td><td align="center">支持</td><td align="center">支持</td><td align="center">支持</td></tr><tr><td align="center"><mark style="color:blue;">GEOIP</mark></td><td align="center">支持</td><td align="center">支持</td><td align="center">支持</td></tr><tr><td align="center"><mark style="color:blue;">GEOSITE</mark></td><td align="center">-</td><td align="center">-</td><td align="center">支持</td></tr><tr><td align="center">RULE-SET(MC无)</td><td align="center">-</td><td align="center">支持</td><td align="center">支持</td></tr><tr><td align="center"><mark style="color:blue;">SCRIPT</mark></td><td align="center">-</td><td align="center">支持</td><td align="center">-</td></tr><tr><td align="center"><mark style="color:blue;">AND</mark></td><td align="center">-</td><td align="center">-</td><td align="center">支持</td></tr><tr><td align="center"><mark style="color:blue;">OR</mark></td><td align="center">-</td><td align="center">-</td><td align="center">支持</td></tr><tr><td align="center"><mark style="color:blue;">NOT</mark></td><td align="center">-</td><td align="center">-</td><td align="center">支持</td></tr></tbody></table>

![](https://content.gitbook.com/content/IbElCPWLUN7JiinF0Ycv/blobs/SbonUuUGOwiXvOCyG6zr/26.jpg)

#### DOMAIN-SUFFIX：目的域名后缀

简单说明：设定浏览器等访问包含相关的域名后缀如何走规则

举例： <mark style="color:blue;">DOMAIN-SUFFIX,abc.com,国外网站</mark>

&#x20;           <mark style="color:blue;">DOMAIN-SUFFIX,123.abc.com,国外网站</mark>

| DOMAIN-SUFFIX |                                                                                                              包含                                                                                                              |               不包含               |
| :-----------: | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :-----------------------------: |
|    abc.com    |         <p>*.<mark style="color:orange;">abc.com</mark></p><p>*.<mark style="color:orange;">abc.com</mark>/*</p><p><mark style="color:orange;">abc.com</mark></p><p><mark style="color:orange;">abc.com</mark>/*</p>         |             123.com             |
|  123.abc.com  | <p>*.<mark style="color:orange;">123.abc.com</mark></p><p>*.<mark style="color:orange;">123.abc.com</mark>/*</p><p><mark style="color:orange;">123.abc.com</mark></p><p><mark style="color:orange;">123.abc.com</mark>/*</p> | <p>abc.com</p><p>abc.com/\*</p> |

#### DOMAIN：目的域名

简单说明：设定浏览器等访问的域名如何走规则

举例：<mark style="color:blue;">DOMAIN,abc.com,国外网站</mark>

&#x20;          <mark style="color:blue;">DOMAIN,123.abc.com,国外网站</mark>

|    DOMAIN   |                                                       包含                                                      |                                    不包含                                   |
| :---------: | :-----------------------------------------------------------------------------------------------------------: | :----------------------------------------------------------------------: |
|   abc.com   |     <p><mark style="color:orange;">abc.com</mark></p><p><mark style="color:orange;">abc.com</mark>/\*</p>     |                    <p>*.abc.com</p><p>*.abc.com/\*</p>                   |
| 123.abc.com | <p><mark style="color:orange;">123.abc.com</mark></p><p><mark style="color:orange;">123.abc.com</mark>/\*</p> | <p>*.123.abc.com</p><p>*.123.abc.com/*</p><p>abc.com</p><p>abc.com/*</p> |

**DOMAIN-KEYWORD:目的域名关键词**

简单说明：设定浏览器等访问带有该关键字的域名如何走规则

举例：<mark style="color:blue;">DOMAIN-KEYWORD,abc,国外网站</mark>

| DOMAIN-KEYWORD |                                                                                                                                                                                                             包含                                                                                                                                                                                                            |   不包含   |
| :------------: | :-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :-----: |
|       abc      | <p><mark style="color:orange;">abc</mark>.com</p><p>*<mark style="color:orange;">abc</mark>.com</p><p><mark style="color:orange;">abc</mark>*.com</p><p>*<mark style="color:orange;">abc</mark>*.com</p><p>*.<mark style="color:orange;">abc</mark>.com</p><p><mark style="color:orange;">abc</mark>.*.com</p><p>*.<mark style="color:orange;">abc</mark>.*.com</p><p>(注:<mark style="color:blue;">com</mark>为任意顶级域名)</p> | 123.com |

**SRC-IP-CIDR:来源IP地址**

简单说明：设定局域网内某设备如何走规则（IP地址必须有掩码位）

举例：<mark style="color:blue;">SRC-IP-CIDR,192.168.50.100/32,DIRECT</mark>

{% hint style="info" %}

* SRC-IP-CIDR规则需遵循 [**IP-CIDR**](https://baike.baidu.com/item/%E6%97%A0%E7%B1%BB%E5%88%AB%E5%9F%9F%E9%97%B4%E8%B7%AF%E7%94%B1/15758573?fromtitle=CIDR\&fromid=3695195\&fr=aladdin) 格式，IP地址后面必须跟对应<mark style="color:orange;">掩码位</mark>；
* 例：192.168.50.100/<mark style="color:orange;">32</mark>  代表192.168.50.100这一个IP地址

&#x20;             192.168.50.0/<mark style="color:orange;">24</mark>     代表192.168.50.1\~192.168.50.254共254个IP地址

* 可借助 [**子网掩码计算器**](http://tool.chinaz.com/tools/subnetmask/) 辅助计算；
* 支持IPv6，如：SRC-IP-CIDR,2001:b28:f23f::/48,DIRECT。
  {% endhint %}

**IP-CIDR:目的IP地址**

简单说明：设定浏览器等访问的IP地址如何走规则

举例：<mark style="color:blue;">IP-CIDR,123.123.123.0/24,DIRECT</mark>

{% hint style="info" %}

* SRC-IP-CIDR规则需遵循 [**IP-CIDR**](https://baike.baidu.com/item/%E6%97%A0%E7%B1%BB%E5%88%AB%E5%9F%9F%E9%97%B4%E8%B7%AF%E7%94%B1/15758573?fromtitle=CIDR\&fromid=3695195\&fr=aladdin) 格式，IP地址后面必须跟对应<mark style="color:orange;">掩码位</mark>；
* 例：123.123.0.0/<mark style="color:orange;">16</mark>  代表123.123.0.1\~123.123.255.254共65534个IP地址

&#x20;             123.0.0.0/<mark style="color:orange;">8</mark>      代表123.0.0.1\~123.255.255.254共16777214个IP地址

* 可借助 [**子网掩码计算器**](http://tool.chinaz.com/tools/subnetmask/) 辅助计算；
* 支持IPv6，如：IP-CIDR,2001:b28:f23f::/48,DIRECT。
  {% endhint %}

**SRC-PORT:来源端口**

简单说明：设定来源于局域网某端口的请求如何走规则

举例：<mark style="color:blue;">SRC-PORT,7777,DIRECT</mark>

{% hint style="info" %}

* 只支持单个端口号，不支持6000:7000之类的端口写法；
* 有多端口需求，请使用 [<mark style="color:blue;">**SCRIPT SHORTCUT**</mark>](#script-shortcut-jiao-ben-kuai-jie-fang-shi) 规则。
  {% endhint %}

**DST-PORT:目的端口**

简单说明：设定访问目的端口如何走规则

举例：<mark style="color:blue;">DST-PORT,8888,REJECT</mark>

{% hint style="info" %}

* 只支持单个端口号，不支持6000:7000之类的端口写法；
* 有多端口需求，请使用 [**SCRIPT SHORTCUT**](#script-shortcut-jiao-ben-kuai-jie-fang-shi) 规则。
  {% endhint %}

#### SCRIPT SHORTCUT:脚本快捷方式

![](https://content.gitbook.com/content/IbElCPWLUN7JiinF0Ycv/blobs/t0bG6hhOtGVxYmk4zSjG/27.jpg)

简单说明：允许在rule模式里使用Script

举例：<mark style="color:blue;">SCRIPT,hour,REJECT</mark>

&#x20;         <mark style="color:blue;">SCRIPT,quic,REJECT</mark>

&#x20;         <mark style="color:blue;">SCRIPT,port,DIRECT</mark>

&#x20;         <mark style="color:blue;">SCRIPT,socks5,手动选择</mark>

&#x20;         <mark style="color:blue;">SCRIPT,p2pshit,REJECT</mark>

{% hint style="info" %}

* <mark style="color:orange;">MC 22.01.28</mark>版本以后，内置Meta核心，不支持SCRIPT SHORTCUT规则，需要使用的请更换回官方 [**Premium核心**](https://github.com/Dreamacro/clash/releases/tag/premium) ；
* 使用前必须先在【<mark style="color:blue;">**Script 脚本编辑器**</mark>】里声明对应脚本；
* 更多支持参数请看 [<mark style="color:blue;">**Clash Wiki**</mark>](https://lancellc.gitbook.io/clash/clash-config-file/script#passable-parameter) 。
  {% endhint %}

**常用声明举例：**

```yaml
script:
  shortcuts:
    #每天0~9点让192.168.50.120的设备*****
    hour: src_ip == "192.168.50.120" and time.now().hour >= 0 and time.now().hour <= 9
    
    #使用443端口的UDP协议****
    quic: network == 'udp' and dst_port == 443
    
    #来自1000~2000端口的访问****
    port: src_port >= 1000 and src_port <=2000
    
    #来自Socks5端口的访问****
    socks5: type == 'Socks5'
    
    #含有bilibili或douyu关键字域名的使用udp协议的****
    p2pshit: network == 'udp' and ('bilibili' in host or 'douyu' in host)
```

&#x20;

{% hint style="warning" %}
若未找到本页介绍的功能模块，请先到【<mark style="color:blue;">附加功能</mark>】里打开该模块显示，请参看 [**FAQ13**](https://mcreadme.gitbook.io/mc/faq/faq1#q13) **。**
{% endhint %}
