capture
在现有网口上接管转发与本机流量;这是 Router 接法的核心入站。
yaml
inbounds:
router:
type: capture
lan: [br-lan]
wan: [eth0]
fail: closed
dns:
servers:
default: {type: udp, address: 127.0.0.1:53}
final: default字段
type
- 类型:字符串。
- 必填:是,第一项。
- 取值:
capture。 - 限制:一个配置最多一个
capture。
lan
- 类型:接口名数组。
- 必填:可选。
- 默认:空。
- 行为:这些接口上的客户端流量由 mayami 判定。
wan
- 类型:接口名数组。
- 必填:可选。
- 默认:空。
- 行为:从这些接口观察/接管 WAN 方向的本机与返回流量。
tap
- 类型:接口名。
- 必填:可选。
- 默认:
sbk-tap。
queues
- 类型:非负整数。
- 必填:可选。
- 默认:可用 CPU 核数。
pin
- 类型:布尔值。
- 默认:
false。 - 行为:每个队列固定到一个可用 CPU 核。
vnet_hdr
- 类型:布尔值。
- 默认:
true。
release
- 类型:布尔值。
- 默认:
true。 - 行为:允许判为直连的 LAN 流回到内核,由 nftables/NAT 和内核转发继续。
administration
- 类型:字符串枚举。
- 默认:
shared。 - 取值:
shared、exclusive。 - 行为:
exclusive表示运维者承诺整个 capture 生命周期内独占本命名空间的策略、路由和 offload 管理。
flowtable
- 类型:字符串枚举或省略。
- 默认:省略,不启用 mayami 自有 flowtable。
- 取值:
software、hardware。 - 限制:原生 XDP/硬件加速需要独占管理契约。
xdp
- 类型:布尔值或接口名数组。
- 默认:
true,语义为physical。 - 取值:
true、false、接口名数组。 - 行为:只对具备原生 XDP 的物理端口启用;虚拟桥的成员单独判定。
xsk
- 类型:字符串枚举。
- 默认:
auto。 - 取值:
off、auto、copy、zero-copy。 - 行为:AF_XDP 在选定 LAN 设备上尝试;失败时由 auto 协商回退。
full_cone
- 类型:布尔值。
- 默认:
false。 - 行为:开启后 UDP 全锥;相关 UDP 在用户态承载,不执行 release。
fail
- 类型:字符串枚举。
- 默认:
closed。 - 取值:
closed、open。 closed:mayami 死亡后,被接管流停止;首个 hook 前用屏障封窗。open:程序随进程卸下,内核照常转发;需要 Linux 6.6+。
说明
首 hook 前的屏障
fail: closed 时,mayami 在 capture 就绪前使用 inet mayami_net 的精确名称屏障:
- LAN 入方向
iifnameguard; - WAN 出方向
oifnameguard; - WAN 本机 OUTPUT guard,只放行 mayami 自身 cgroup socket;
- allow 只认已 ACK 的当前 ifindex,同名替换不会按名字放进新口。
实测从设备到 ready 通常约 0.3–0.5 秒。窗口内直连客人、未标记宿主出站及 WAN DHCP 续租可能暂停;这是 fail-closed 的代价。fail: open 不装屏障。
flowtable
software 使用内核软件 flowtable;hardware 请求硬件卸载。非租户和租户的准入都要求 ESTABLISHED 与双向 ASSURED,租户还要求原方向 zone 和高 12 位租户 mark 精确匹配。lan 成员口和当前 WAN 设备进入同一张表。
旧流和撤销
删网段、删租户、桥身份变化或新增屏障时,先撤 flow 规则与 flowtable,再按新集合重建;HTTP/NAT/屏障不跟随重建。普通配置重读不重置健康口的既有流。
回程和 offload
卸载后的回程由缓存 dst/邻居直接回成员口,不再经过 tenant return mark/fwmark;VRF 租户在 Linux 6.12 上仍可能出现周期性慢包,但回程目标正确。可关闭 flowtable 回到纯慢路径。
仅 Linux
capture 依赖 Linux eBPF、BTF、tc、nftables、cgroup v2 和 /sys/fs/bpf。fail: open 需要 Linux 6.6+。非 Linux 构建设有完整 capture。
宿主机会被改什么
mayami 会:
- 在 LAN/WAN/成员口挂 tc 或 XDP;
- 创建/删除 TAP、cgroup BPF 程序和
inet mayami_nat、inet mayami_fast、inet mayami_net等自有表; - 调整 IP forwarding、接口 RA 接收及租户
ip rule/VRF 路由; - 在 flowtable 开启时改变已卸载连接走的内核路径。
正常退出会撤销自有状态;强杀时行为由 fail、strict_route 和 flowtable 决定。