问题
我在想要使用 Docker 配置文件运行 LXD 的主机上使用两个 NIC。我在接口 0 (enp0s10f0) 和环回上运行 DNSMASQ。我希望 LXD 容器使用单独的 NIC (enp0s10f1)。这时候我不需要容器直接暴露在网络上。所以我在 /etc/network/interfaces 中手动创建了一个桥(lxdbr1),其中 enp0s10f0 作为它的从站。我想使用 ebtables + DNSMASQ 和自定义配置(可能会因不同的容器实例而改变)来过滤来自容器的允许出站流量。由于我的上述要求,我试图不使用它创建的 lxd-bridge 服务和默认网桥 (lxdbr0)。
我现在面临两个问题:
- 我将 lxdbr1 附加到默认的 LXD 配置文件。如果我使用默认配置文件和 docker 配置文件启动容器,我确实会在容器中看到 eth0 接口。但是,它没有 IPv4 地址,似乎有一个随机的 IPv6 地址。我相信这是因为这是 LXD 的默认设置。我尝试使用 lxc 设备编辑 lxdbr1 编辑网络配置,但在添加 ipv4.address、ipv4.nat、ipv6.address 和 ipv6.nat 选项并保存文件后,编辑命令指示错误“配置解析错误:未找到”。我用格式化程序验证了我写的 YAML 是正确的。所以不确定这里的问题是什么。
- 假设我能够完成上述工作,除此之外我还需要什么吗?关于伪装的 Debian 网络 wiki 表明我还必须设置从接口 enp0s10f1 上的外部网络 IP 到分配给网桥的内部 IP 的默认路由。这部分也让我感到困惑。
还有其他更简单的选择吗?例如,我可以使用 LXD 创建的默认网桥,使其持久化,然后使用我自己的 DNSMASQ 实例(我可能有多个)和我自己的流量规则吗?
背景
我正在为在 Linux 上提供服务或库的团队构建持续交付管道。由于各种原因,我们必须锁定运行构建、签名和发布流程的主机和环境,同时为使用管道的团队提供最大的灵活性,以使用他们认为合适的任何编程语言、框架或工具。例如,假设一个团队想要在版本 A 和 B 上使用 Haskell 和 Rust(无论出于何种原因);我不想从事管理此类声明或为该团队预先安装它们的业务。同时,我想确保他们不使用随机包源或最终发布未签名的包。所以我想出了一个解决方案,它可以在不同阶段(构建、测试、打包、发布、存档)在每个容器启动之前或之后在主机之间完成管道所需的任何工作。工作流程将类似于:
- 在主机上执行预构建步骤。
- 在容器中调用用户构建脚本。
- 在主机上执行构建后步骤。
- 在主机上执行预测试步骤。
- 在容器中调用用户测试脚本。
- 在主机上调用测试后步骤。
等等。