Skip to content

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 入方向 iifname guard;
  • WAN 出方向 oifname guard;
  • 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 决定。

相关 ​

页面历史

开发者设计、代码地图和验证记录保留在仓库 manual/。