設定檔總覽
我的設定檔是一份 YAML 文字,預設名為 config.yaml。使用訂閱時服務商已經幫你寫好了,通常不需要手動編輯;想自定義分流或 DNS 行為時,才需要了解它的結構。一份設定從上到下主要分四塊:
# 1. Basic settings: ports, mode, log level mixed-port: 7890 mode: rule # 2. Proxy nodes: where traffic can go proxies: [...] # 3. Proxy groups: how to pick a node proxy-groups: [...] # 4. Rules: which traffic goes where rules: [...]
記住一句話就夠了:proxies 定義"有哪些路",proxy-groups 定義"怎麼選路",rules 定義"誰走哪條路"。
代理節點 proxies
每個節點是一個列表項,type 決定協議,不同協議的欄位略有差異。我支援 Shadowsocks、VMess、VLESS、Trojan、WireGuard 等主流協議,下面是兩種最常見的寫法:
proxies: - name: "香港 01" type: ss server: hk01.example.com port: 8388 cipher: aes-256-gcm password: "your-password" - name: "東京 02" type: vmess server: jp02.example.com port: 443 uuid: 23ad6b10-8d1a-40f7-8ad0-e3e35cd38297 alterId: 0 cipher: auto tls: true
用訂閱的話這一段完全不用管,節點列表會隨訂閱自動更新。
策略組 proxy-groups
策略組把節點打包成"一個可選項",規則裡引用的是組名而不是具體節點。四種常用型別:
| 型別 | 行為 | 適合場景 |
|---|---|---|
select | 手動選擇,你點誰就走誰 | 日常主力,自己掌控 |
url-test | 定時測速,自動選最快節點 | 懶人首選,一勞永逸 |
fallback | 按順序檢測,頭一個可用的頂上 | 主備線路,故障秒切 |
load-balance | 把請求分攤到多個節點 | 高併發下載、多開 |
proxy-groups: - name: "節點選擇" type: select proxies: [自動選擇, 香港 01, 東京 02] - name: "自動選擇" type: url-test proxies: [香港 01, 東京 02] url: "http://www.gstatic.com/generate_204" interval: 300
interval: 300 表示每 300 秒重新測速一次;測速地址用 gstatic 的 204 頁面最穩妥。
分流規則 rules
規則從上到下逐條匹配,第一條命中即生效,所以越精確的規則要放越前面,最後用 MATCH 作為最後防線。每條規則的格式是「型別,匹配內容,出口」:
| 規則型別 | 含義 | 範例 |
|---|---|---|
DOMAIN | 完整域名精確匹配 | DOMAIN,www.google.com,節點選擇 |
DOMAIN-SUFFIX | 匹配域名及其所有子域名 | DOMAIN-SUFFIX,youtube.com,節點選擇 |
DOMAIN-KEYWORD | 域名包含關鍵詞即命中 | DOMAIN-KEYWORD,github,節點選擇 |
IP-CIDR | 目標 IP 落在網段內 | IP-CIDR,8.8.8.8/32,節點選擇 |
GEOIP | 按 IP 歸屬國家/地區匹配 | GEOIP,TW,DIRECT |
MATCH | 最後防線,匹配所有剩餘流量 | MATCH,節點選擇 |
出口除了策略組名,還有兩個內建值:DIRECT(直連不走代理)和 REJECT(直接拒絕,常用來攔廣告)。
rules: # Ads: reject outright - DOMAIN-KEYWORD,adservice,REJECT # Streaming/gaming services: via proxy group - DOMAIN-SUFFIX,youtube.com,節點選擇 - DOMAIN-SUFFIX,github.com,節點選擇 # Local sites: direct connection - DOMAIN-SUFFIX,tw,DIRECT - GEOIP,TW,DIRECT # Everything else: via proxy group - MATCH,節點選擇
DNS 設定
DNS 決定"域名如何變成 IP"。設定不當會遇到解析汙染或規則誤判,推薦直接使用下面這份久經考驗的寫法:
dns: enable: true enhanced-mode: fake-ip fake-ip-range: 198.18.0.1/16 nameserver: - 1.1.1.1 # Cloudflare - 8.8.8.8 # Google fallback: - https://1.1.1.1/dns-query - https://8.8.8.8/dns-query
要點:fake-ip 模式響應快、相容性好;nameserver 負責日常域名解析,fallback 用加密 DNS 作為備援,避免結果被汙染。
埠與常用設定
| 欄位 | 說明 | 推薦值 |
|---|---|---|
mixed-port | HTTP 和 SOCKS5 共用的混合埠 | 7890 |
mode | 代理模式:rule / global / direct | rule |
allow-lan | 允許區域網裝置透過我上網 | false(按需開) |
log-level | 日誌級別,排查問題時調高 | info |
external-controller | 控制面板 API 地址 | 127.0.0.1:9090 |
把 allow-lan 開啟後,同一 Wi-Fi 下的手機、電視只要把代理指到「電腦 IP:7890」,就能借用我上網,不用每臺裝置單獨裝。
完整範例
把上面所有片段拼起來,就是一份能直接跑的最小設定。替換其中的節點資訊即可使用:
mixed-port: 7890 allow-lan: false mode: rule log-level: info external-controller: 127.0.0.1:9090 dns: enable: true enhanced-mode: fake-ip nameserver: [1.1.1.1, 8.8.8.8] fallback: [https://1.1.1.1/dns-query] proxies: - name: "香港 01" type: ss server: hk01.example.com port: 8388 cipher: aes-256-gcm password: "your-password" proxy-groups: - name: "節點選擇" type: select proxies: [香港 01] rules: - DOMAIN-KEYWORD,adservice,REJECT - GEOIP,TW,DIRECT - MATCH,節點選擇
systemctl restart mihomo。YAML 對縮排敏感,報錯時先檢查是不是混用了 Tab 和空格。