如何桥接 LXD 网络以访问互联网?

如何桥接 LXD 网络以访问互联网?

我在 Ubuntu 20.04 上使用 LXD 4.0.9,创建了一个网络、一个配置文件,并向无人机添加了存储,如下所示……

$ lxc network create drone_lan ipv4.address=none ipv6.address=none 
$ lxc profile create p-drone

$ lxc profile device add p-drone root disk path=/ pool=default
$ lxc profile device add p-drone drone_lan nic name=enp5s0 network drone_lan

然后我创建几个实例,将它们连接到网络,然后进入第一个实例......

$ lxc launch ubuntu:20.04 drone1
$ lxc launch ubuntu:20.04 drone2
$ lxc network attach drone_lan drone1
$ lxc network attach drone_lan drone2
$ lxc exec drone1 -- bash

drone1我想要从内部安装一个包,但是得到以下信息:

root@drone1:~# sudo apt install tree
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Unable to locate package tree

因为网络桥是管理的drone_lan,所以我需要做的就是根据https://documentation.ubuntu.com/lxd/en/latest/howto/network_bridge_firewalld/

由于我使用的是 Ubunto 20.04,因此我执行以下操作但无济于事。

$ sudo ufw allow in on drone_lan
$ sudo ufw route allow in on drone_lan
$ sudo ufw route allow out on drone_lan

由于我也有 Docker 并且无法删除它,所以还做了以下操作:

取消注释/etc/sysctl.d/99-sysctl.conf

net.ipv4.conf.all.forwarding=1 

然后重新启动sudo systemctl restart systemd-sysctl

然后重新启动drone1实例并尝试执行 apt 安装。没有用。

我希望所有连接到的实例都drone_lan能够访问互联网。

有人能提供建议吗?

答案1

以下是一种方法:

在主机上,使用 Netplan 创建网桥:

network:
  version: 2
  renderer: networkd
  ethernets:
    enp0s7:
      dhcp4: false
      dhcp6: false

  bridges:
    br0:
      interfaces: [enp0s7]
      dhcp4: true
      dhcp6: true

注意:主机的 IP 地址(来自 DHCP)在应用时会发生变化!br0 MAC 地址与 enp0s7 MAC 地址不同。要连接到主机,请使用新的 br0 IP 地址。

添加到每个容器的配置文件(或添加到默认配置文件,或创建名为“网络”的配置文件):

devices:
  eth0:
    name: eth0
    nictype: bridged
    parent: br0
    type: nic

此方法不需要处理防火墙或 VLAN。无需数据包转发。您可以看到每个网卡直接与主机桥通信。IP 地址由上游路由器分发,因此主机服务器和所有容器都位于同一个 LAN 上,并且路由器可以看到它们。

当然,这只是一个测试系统上非常简单的工作示例。您可以根据需要将其设计得尽可能复杂。

相关内容