networks:容器和虚拟机网关
networks 把 Router 的 capture 路径和 mayami 自己的桥、DHCP、RA、DNS 组合起来。它适合让 Docker、Podman、LXC、Incus、libvirt/KVM 的客人共用一段可管理的网络。
完整配置
yaml
networks:
lab:
id: 10
address: [10.10.0.1/24]
domain: lab.internal
capture: true
dhcp:
range: 10.10.0.100-10.10.0.199
lease: 12h
inbounds:
router:
type: capture
wan: [eth0]
outbounds:
direct:
type: direct
proxy:
type: socks
server: 127.0.0.1:1080
route:
rules:
- {source_network: [lab], ip_is_private: true, outbound: direct}
- {source_network: [lab], outbound: proxy}
final: direct
dns:
servers:
real: {type: udp, address: 1.1.1.1:53}
fake: {type: fakeip, inet4_range: 198.18.0.0/15}
rules:
- {source_network: [lab], query_type: [A, AAAA], server: fake}
final: real字段和限制见 networks 配置。
包怎么走
网桥自己的 DHCP/RA/DNS 先完成客人配置。数据流进入桥上的 capture,source_network 和 source_tenant 由配置名编译成持久网段/租户号,不依赖 YAML 顺序。直连放回内核后由 mayami_net 做 NAT 和 flowtable;代理流进入用户态出站。
external: true 的桥归别的运行时所有:mayami 只核对地址并在桥上提供服务,不建桥、不改成员、不替它 NAT。isolate 隔开同桥客人;租户用 VRF 和独立 conntrack zone 隔离可重叠的地址空间。
运维边界
宿主机会被改什么
mayami 会创建/认领桥、写地址、MTU、成员/VLAN、隔离状态和自有 nftables/NAT/flowtable;会打开 IPv4/IPv6 转发,并可能调整现有接口的 accept_ra。external 网桥只读原 owner 的设备,但 capture: true, fail: closed 的就绪屏障会短暂停整桥转发。
- 网桥比进程活得久;删网段时桥上还有成员就保留桥。
- 成员退出只解除
nomaster/自有 VLAN 子口,不恢复进桥前状态。 - Docker 的 DNS 要显式指向网桥地址,见 runtimes。