Ubuntu16.04中带有LXD的自定义桥接器

Ubuntu16.04中带有LXD的自定义桥接器,ubuntu,networking,lxc,bridge,lxd,Ubuntu,Networking,Lxc,Bridge,Lxd,问题 我在一台主机上使用了两个NIC,我想在其上使用Docker配置文件运行LXD。我在接口0 enp0s10f0和环回上运行DNSMASQ。我希望LXD容器使用单独的NIC enp0s10f1。此时,我不需要将容器直接暴露在网络上。因此,我在/etc/network/interfaces中手动创建了一个桥接器lxdbr1,将enp0s10f0作为它的从机。我想将ebtables+DNSMASQ与自定义配置一起使用,该配置可能会因不同的容器实例而更改,以过滤容器中允许的出站流量。由于上述要求,我

问题

我在一台主机上使用了两个NIC,我想在其上使用Docker配置文件运行LXD。我在接口0 enp0s10f0和环回上运行DNSMASQ。我希望LXD容器使用单独的NIC enp0s10f1。此时,我不需要将容器直接暴露在网络上。因此,我在/etc/network/interfaces中手动创建了一个桥接器lxdbr1,将enp0s10f0作为它的从机。我想将ebtables+DNSMASQ与自定义配置一起使用,该配置可能会因不同的容器实例而更改,以过滤容器中允许的出站流量。由于上述要求,我试图不使用lxd网桥服务和它创建的默认网桥lxdbr0

我现在面临两个问题:

我将lxdbr1附加到默认的LXD配置文件。如果我启动一个带有默认和docker配置文件的容器,我会在容器中看到一个eth0接口。然而,这是一个没有IPv4地址,并且似乎有一个随机IPv6地址。我相信这是因为这是LXD的默认设置。我尝试使用lxc设备编辑lxdbr1编辑网络配置,但在添加ipv4.address、ipv4.nat、ipv6.address和ipv6.nat选项并保存文件后,编辑命令指示错误,配置解析错误:找不到。我用格式化程序验证了我编写的YAML是正确的。所以我不确定这里的问题是什么。 假设我能够完成上述工作,我还需要做其他事情吗?伪装上的Debian networking wiki表明,我还必须设置从接口enp0s10f1上的外部网络IP到分配给网桥的内部IP的默认路由。这一部分也让我感到困惑。 还有其他更简单的选择吗?例如,我可以使用LXD创建的默认网桥,使其持久化,然后使用我自己的DNSMASQ实例吗?我可能有多个实例和我自己的交通规则

背景

我正在为Linux上的团队提供服务或库构建一个连续的交付管道。出于各种原因,我们必须锁定构建、签名和发布过程运行的主机和环境,同时为使用管道的团队提供最大的灵活性,以使用他们认为合适的任何编程语言、框架或工具。例如,假设一个团队希望在版本a和版本B中出于任何原因使用Haskell和Rust;我不想从事管理此类声明或为该团队预先安装它们的工作。同时,我希望确保他们不会使用随机包源或最终发布未签名的包。因此,我提出了一个解决方案,该解决方案可以使用临时LXD容器和Docker,用于不同阶段的构建、测试、打包、发布、归档,以及管道所需的任何工作 在每个容器启动之前或之后在主机上执行。工作流将类似于:

在主机上执行预构建步骤。 在容器中调用用户构建脚本。 在主机上执行生成后步骤。 在主机上执行预测试步骤。 在容器中调用用户测试脚本。 在主机上调用测试后步骤。
依此类推。

通过将容器连接到包含物理网络接口的网桥上,实际上是将容器直接暴露到该网络上,这就是网桥所做的

如果不希望容器在第2层暴露给物理网络,那么创建一个不包含物理网络的网桥。然后,您可以在该网桥上运行dnsmasq,以便容器可以获得IP地址,主机将充当网关