規則決定每一個連接的去向。這篇是一張速查表,配上每種類型的實际用法。
規則的基本形式
rules:
- 类型,匹配内容,策略[,附加参数]比如:
- DOMAIN-SUFFIX,google.com,🚀 节点选择
- IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
- MATCH,🐟 漏网之鱼從上往下逐條匹配,第一條命中即生效,後面的不再檢查。這條規律是理解一切規則行為的基礎。
完整類型表
| 類型 | 匹配物件 | 示例 | 說明 |
|---|---|---|---|
DOMAIN | 完整網域 | DOMAIN,www.google.com,PROXY | 精確匹配,最快 |
DOMAIN-SUFFIX | 網域後綴 | DOMAIN-SUFFIX,google.com,PROXY | 含所有子網域,最常用 |
DOMAIN-KEYWORD | 網域包含關鍵詞 | DOMAIN-KEYWORD,google,PROXY | 範圍大,慎用 |
DOMAIN-REGEX | 正則匹配網域 | DOMAIN-REGEX,^api\\..*\\.com$,PROXY | Mihomo 支援 |
GEOSITE | 網域地理集合 | GEOSITE,youtube,PROXY | 依賴 geosite 資料庫 |
IP-CIDR | IPv4 網段 | IP-CIDR,10.0.0.0/8,DIRECT,no-resolve | 注意 no-resolve |
IP-CIDR6 | IPv6 網段 | IP-CIDR6,::1/128,DIRECT,no-resolve | 同上 |
IP-SUFFIX | IP 後綴 | IP-SUFFIX,8.8.8.8/24,PROXY | Mihomo 支援 |
IP-ASN | 自治域號 | IP-ASN,13335,PROXY | 按電信業者/雲廠商分流 |
GEOIP | IP 所屬国家 | GEOIP,CN,DIRECT | 依賴 geoip 資料庫 |
SRC-IP-CIDR | 來源 IP | SRC-IP-CIDR,192.168.1.100/32,DIRECT | 按區域網路設備分流 |
SRC-PORT | 來源連接埠 | SRC-PORT,8080,DIRECT | 少用 |
DST-PORT | 目標連接埠 | DST-PORT,22,DIRECT | 按服務類型分流 |
PROCESS-NAME | 行程名 | PROCESS-NAME,Telegram.exe,PROXY | 按程式分流 |
PROCESS-PATH | 行程完整路徑 | PROCESS-PATH,/usr/bin/curl,PROXY | 更精確 |
RULE-SET | 引用規則集 | RULE-SET,cn-domain,DIRECT | 配合 rule-providers |
AND / OR / NOT | 邏輯組合 | 見下文 | Mihomo 支援 |
MATCH | 兜底 | MATCH,PROXY | 必須放最後一條 |
三個最常用的網域規則怎麼選
no-resolve 到底是什麼
這是 IP 類規則裡最容易搞錯的參數。
一個連接過來時,如果目標是網域,核心為了匹配 IP-CIDR 規則,必須先把網域解析成 IP。加上 no-resolve 的意思是:如果目標還是網域(沒解析過),就跳過這條規則,別為它專門去做一次 DNS 查詢。
什麼時候該加:放在規則列表最前面的內網 IP 段規則,一律加上。
- IP-CIDR,127.0.0.0/8,DIRECT,no-resolve
- IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
- IP-CIDR,10.0.0.0/8,DIRECT,no-resolve
- IP-CIDR,172.16.0.0/12,DIRECT,no-resolve
- IP-CIDR6,fc00::/7,DIRECT,no-resolve什麼時候不加:GEOIP,CN,DIRECT 這種放在最後的兜底規則不要加 no-resolve,否則網域類流量根本匹配不到它。
規則順序的三條鐵律
鐵律一:MATCH 必須在最後。它匹配一切,放在中間會讓後面所有規則失效。
鐵律二:GEOIP,CN 要放在具體網域規則之後。很多境外服務在国內有 CDN 節點,解析出來是国內 IP。GEOIP 放太前面會把它們全判成直連。
鐵律三:越具體的規則越靠前。先寫 DOMAIN,再寫 DOMAIN-SUFFIX,最後寫 DOMAIN-KEYWORD。
邏輯組合規則(Mihomo)
需要「同時滿足多個條件」時:
# 只有 Telegram 這個行程訪問某個 IP 段時才走代理
- AND,((PROCESS-NAME,Telegram.exe),(IP-CIDR,91.108.4.0/22)),PROXY
# 目標是 22 連接埠,且不是內網
- AND,((DST-PORT,22),(NOT,((GEOIP,CN)))),PROXY
# 滿足任一即可
- OR,((DOMAIN-SUFFIX,openai.com),(DOMAIN-SUFFIX,anthropic.com)),🤖 AI 服务語法上要注意括號層級,很容易寫漏。能用簡單規則表達的就別用邏輯組合——可讀性和效能都更好。
效能:哪些規則貴
實踐建議:
- 高頻命中的規則往前放,減少平均比對次數
- 用
RULE-SET代替幾百條手寫網域規則 PROCESS-NAME只在確實需要時用,且儘量往後放- 避免大量
DOMAIN-REGEX
怎麼知道一條連接命中了哪條規則
打開 Clash Verge 的 連接 頁,「規則」列直接顯示命中的規則。
這是排查分流問題最快的辦法:
修正示例——某個網域被 GEOIP,CN 判成了直連,但你想讓它走代理:
# 全局擴充設定裡
prepend-rules:
- DOMAIN-SUFFIX,example.com,🚀 节点选择prepend-rules 會插到規則列表最前面,優先級最高,且不會被訂閱更新覆蓋。
常用規則片段
內網直連(必備)
- IP-CIDR,127.0.0.0/8,DIRECT,no-resolve
- IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
- IP-CIDR,10.0.0.0/8,DIRECT,no-resolve
- IP-CIDR,172.16.0.0/12,DIRECT,no-resolve
- IP-CIDR,100.64.0.0/10,DIRECT,no-resolve
- IP-CIDR6,::1/128,DIRECT,no-resolve
- IP-CIDR6,fc00::/7,DIRECT,no-resolve
- DOMAIN-SUFFIX,local,DIRECT
- DOMAIN-SUFFIX,lan,DIRECT避免 QUIC 影響(某些環境下 UDP 443 表現不好)
- AND,((NETWORK,UDP),(DST-PORT,443)),REJECT區域網路某台設備強制直連
- SRC-IP-CIDR,192.168.1.50/32,DIRECTBT / PT 流量不走代理(避免違反服務商條款)
- DST-PORT,6881-6889,DIRECT
- PROCESS-NAME,qbittorrent.exe,DIRECT
- PROCESS-NAME,transmission-daemon,DIRECT小結
- DOMAIN-SUFFIX 是主力,KEYWORD 慎用
- 前置 IP 規則一律加 no-resolve,fake-ip 模式下更是必須
- 順序:內網 → 攔截 → 網域 → 規則集 → GEOIP → MATCH
- 排查用連接頁的「規則」列,修正用
prepend-rules
下一篇講怎麼把規則托管到外部:rule-providers 遠程規則集。
相關文件
用外部規則集替代幾百條手寫規則。講清楚 domain/ipcidr/classical 三種 behavior 的差異、text 與 yaml 格式、更新間隔怎麼設,以及規則集不生效時怎麼查。
按行程分流的完整寫法:find-process-mode 怎麼開、行程名怎麼查、PROCESS-NAME 與 PROCESS-PATH 的區別、效能開銷,以及為什麼規則寫了不生效。