配置总览
mayami 的配置是一份严格校验的 YAML。它有 17 个顶层键;下面是最小完整骨架。
yaml
log: info
mode: rule
unified_delay: false
gateway: {}
cache_file: {}
inbounds: {}
outbounds: {}
rule_sets: {}
http_clients: {}
providers: {}
route: {}
dns:
servers:
default: {type: udp, address: 127.0.0.1:53}
final: default
musubi: {}
networks: {}
ntp: {enabled: false}顶层键
| 键 | 类型 | 默认 | 页面 |
|---|---|---|---|
log | 字符串或映射 | info、带时间戳、标准输出 | log |
mode | 字符串 | rule | mode |
unified_delay | 布尔值 | false | 本页 |
gateway | 映射 | 空映射;总内存为系统内存的 1/4 | gateway |
api | 映射或省略 | 不启用 | api |
cache_file | 映射 | 启用,路径 cache.db | cache_file |
inbounds | 名字到入站的映射 | 空 | inbound |
outbounds | 名字到出站的映射 | 空 | 出站总览 |
rule_sets | 名字到规则集的映射 | 空 | route/rule-set |
http_clients | 名字到下载客户端的映射 | 空 | http_clients |
providers | 名字到 provider 的映射 | 空 | providers |
route | 映射 | 空;final 取第一个出站 | 路由总览 |
dns | 映射 | DNS crate 的默认值 | DNS 总览 |
musubi | 名字到 mesh 的映射 | 空 | musubi |
networks | 名字到网段的映射 | 空 | 网段总览 |
docker | 空映射或省略 | 不启用 IPAM socket | docker |
ntp | 映射 | 启用,trust host,三个公共服务器,30 分钟 | ntp |
unified_delay 打开时,延迟测试只在已经建立的连接上再发一次 HEAD,把握手时间排除在结果之外;它不改变选择算法。
严格解析
- 每个结构都拒绝未知字段。
- 同一映射里的重复键会报错。
- 带
type的对象必须把type写在第一项;放在后面会被拒绝。 - 出错格式是
文件:行:列: 错误,随后打印出错行和^标记。 - 不提供旧拼写兼容层。字段改名、协议被移除或值类型不对时,
check直接失败。
编辑器补全与校验
发布站把生成的 JSON Schema 放在 /schema/mayami.json。VS Code 配合 YAML 扩展(yaml-language-server)时,在配置文件第一行写:
yaml
# yaml-language-server: $schema=https://你的文档站.example/schema/mayami.json也可以把本地构建出的 site/content/public/schema/mayami.json 写成 file:// 路径,或在工作区设置里把 yaml.schemas 映射到 mayami.yaml。Schema 是 draft 2020-12,字段与 serde 结构一起更新;构建时 pnpm build:schema 会在有 MAYAMI_BIN 或默认 ../target/debug/mayami 时刷新它。
值语法
时长
时长是一个非负整数加一个单位:
| 单位 | 含义 |
|---|---|
s | 秒 |
m | 分 |
h | 小时 |
d | 天 |
例如 30s、5m、1h、7d。裸数字、负数和 1h30m 这类复合写法都会被拒绝。
大小
大小可写成字节整数,或使用 KiB、MiB、GiB:
text
4096
128KiB
64MiB
1GiBKB、MB 等十进制单位不被接受。
端点
出站和 NTP 的端点写作 host、host:port、裸 IPv6 地址或 [IPv6]:port。省略端口时,出站默认 443,NTP 默认 123。监听地址要求 SocketAddr 语义,端口必须写出。
路径
相对路径以数据目录为基准:有 -D 时是 -D,否则是配置文件所在目录。绝对路径保持绝对。各页会说明默认路径。
名字
入站、出站、规则集、provider、HTTP 客户端等以映射键命名。空名字、重复名字和缺失的映射键不会被自动补成 <type>-<index>。名字在同类对象中唯一;入站和出站可以同名。
规则顺序和 final
映射和数组保持 YAML 中的顺序。route.rules 先匹配先得;route.final 没写时取第一个出站,一个出站都没有时使用内建 DIRECT。
术语
| 术语 | 含义 |
|---|---|
| 直连 | 规则决定不经过代理,把流交回内核或本机网络栈 |
| 代理 | 流交给某个 outbound,由该协议连接目标 |
| 放手 / release | capture 判为直连后,把首包交回内核,由 nftables/NAT 和内核转发继续 |
| 接管 / capture | mayami 在网口或网桥上挂 tc/eBPF/TUN/TAP,读取并决定流 |
| Segment | mayami 自建 TAP,一台虚拟机或一个隔离段把它当网卡 |
| Router | mayami 接管现有 LAN/WAN,典型是路由器或旁路由 |
| Host | mayami 建 TUN 并在本机路由表中接管自己的流量 |
| 网段 | networks: 管理的网桥、地址、DHCP、RA、DNS 和成员集合 |
| 租户 | 一组可重叠网段的隔离域;各有 VRF、路由表、conntrack zone 和标记 |
| 成员 | 插进网段的整口、veth、tap 或 trunk 子口 |