配置文件总览
我的配置文件是一份 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,CN,DIRECT |
MATCH | 兜底,匹配所有剩余流量 | MATCH,节点选择 |
出口除了策略组名,还有两个内置值:DIRECT(直连不走代理)和 REJECT(直接拒绝,常用来拦广告)。
rules: # Ads: reject outright - DOMAIN-KEYWORD,adservice,REJECT # Overseas services: via proxy group - DOMAIN-SUFFIX,youtube.com,节点选择 - DOMAIN-SUFFIX,github.com,节点选择 # Domestic traffic: direct connection - DOMAIN-SUFFIX,cn,DIRECT - GEOIP,CN,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: - 223.5.5.5 # AliDNS - 119.29.29.29 # DNSPod 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: [223.5.5.5, 119.29.29.29] 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,CN,DIRECT - MATCH,节点选择
systemctl restart mihomo。YAML 对缩进敏感,报错时先检查是不是混用了 Tab 和空格。