宿主 TAP、网桥与公网链路规格¶
1. 适用平台与权限¶
PRD 指定的宿主网络支持限定为 Linux TAP。打开 /dev/net/tun、创建 TAP、配置网桥/NAT 通常需要 CAP_NET_ADMIN 或管理员权限。任何脚本执行前必须由用户明确确认。
macOS 属于无网络启动档位:模拟器不得尝试打开 Linux 设备节点、创建伪 TAP 或修改宿主网络。来宾仍必须通过同一机器模型启动到 ext4 Shell;该档位不计入本文件的 DHCP/DNS/ICMP 网络验收。
2. 职责分离¶
- 模拟器只绑定已经存在且激活的 TAP 接口。
- 宿主网络准备脚本负责创建、配置和清理 TAP/网桥/NAT。
- 模拟器不得静默修改宿主路由、防火墙、转发或 DNS。
- 所有脚本使用配置参数,不硬编码开发者用户名、绝对仓库路径或宿主物理网卡名。
3. 支持的拓扑¶
3.1 二层桥接¶
Guest eth0 <-> VirtIO-Net <-> TAP <-> Linux bridge <-> Host uplink/LAN
只有宿主上行接口和网络策略允许加入桥时使用。无线接口常不能直接作为普通二层 bridge 端口,脚本不得假定一定可行。
3.2 三层转发与 NAT¶
Guest eth0 <-> TAP <-> Host bridge/subnet <-> IP forwarding + NAT <-> Internet
若局域网不提供来宾 DHCP,可在隔离子网提供明确 DHCP 服务或静态配置。但最终命令要求 dhclient eth0,验收拓扑必须确有 DHCP 响应。
4. 准备脚本要求¶
- HOSTNET-REQ-001:脚本必须参数化 TAP 名、桥名、子网和上行接口。
- HOSTNET-REQ-002:执行前检查命令、权限、名称冲突和现有配置。
- HOSTNET-REQ-003:只修改明确目标对象,不清空整套防火墙或路由表。
- HOSTNET-REQ-004:重复执行应幂等,或在安全处明确拒绝。
- HOSTNET-REQ-005:提供与创建操作一一对应的恢复步骤,且只移除本脚本创建的对象。
- HOSTNET-REQ-006:所有危险或系统状态修改命令在运行前向用户逐项说明并等待确认。
5. DHCP 与 DNS¶
- 来宾 DHCP 请求必须经 VirtIO/TAP 真实发出。
- DHCP 响应必须来自明确的局域网或受控宿主 DHCP 服务,不得由模拟器伪造。
- DHCP 应提供 IP、前缀、默认路由和 DNS。
- 域名解析测试必须在来宾中执行并经配置 DNS 服务器完成。
6. 验证顺序¶
- 宿主确认 TAP 为 UP 且连接正确 bridge。
- 启动模拟器,Linux 识别
eth0。 - 来宾观察链路为 UP。
- 来宾执行
dhclient eth0。 - 检查来宾独立 IP、路由和 resolver。
- 来宾先验证网关,再验证 DNS,最后执行公网
ping。 - 同时从宿主计数器或抓包证明确有双向 TAP 流量。
7. 最终验收¶
来宾运行:
dhclient eth0
ping -c 4 google.com
必须收到 4 个 ICMP 响应且 0% 丢包。结果受外部公网和 ICMP 策略影响;若外部主机临时拒绝 ICMP,只能报告环境阻断并重选经用户确认的验收时间或目标,不能伪造结果或擅自降低标准。
8. 安全与清理¶
- 不在仓库保存宿主真实密钥、VPN 配置或个人网络信息。
- 抓包和日志默认置于
artifacts/logs/并排除 Git。 - 退出模拟器不自动删除共享 TAP/bridge;只有明确调用经确认的清理脚本才改变宿主网络。
- 清理前确认目标名称和归属,禁止通配删除网络设备或防火墙规则。