使用 LXD 2.3+ 的外部 DHCP

使用 LXD 2.3+ 的外部 DHCP

我正在试用 LXD。设置网络的默认方式似乎是让主机为所有来宾提供 DHCP 和 NAT,但我想省略 NAT 并允许来宾使用与主机相同的 DHCP 服务器。这似乎应该是一件非常合理的事情,但我无法让它工作。无论我做什么,来宾永远不会获得外部 DHCP 服务器分配的地址。

更困难的是,LXD 的网络配置如下LXD 2.3 发生了很大变化,而且我发现的绝大多数信息都是针对早期版本的。我确实发现这一个 GitHub 问题有人试图做同样的事情,并发布了一种适合他们的新式配置,但当我尝试时似乎并没有什么不同。

所以,问题是,如何在 LXD 2.3+ 中设置不使用 NAT 并使用外部 DHCP 的网桥?

以下是一些其他细节:

  • 带有 LXD 3.0.0 的 Ubuntu 18.04
  • 主机使用接口 enp10s0f0
  • 想要将客户机桥接到接口 enp10s0f1(主机未使用该接口)
  • 附加接口 enp1s2 未使用
  • dominickpastore@ubuntu:~$ lxc network list
    +-----------+----------+---------+-------------+---------+
    |   NAME    |   TYPE   | MANAGED | DESCRIPTION | USED BY |
    +-----------+----------+---------+-------------+---------+
    | enp10s0f0 | physical | NO      |             | 0       |
    +-----------+----------+---------+-------------+---------+
    | enp10s0f1 | physical | NO      |             | 0       |
    +-----------+----------+---------+-------------+---------+
    | enp1s2    | physical | NO      |             | 0       |
    +-----------+----------+---------+-------------+---------+
    | lxdbr0    | bridge   | YES     |             | 1       |
    +-----------+----------+---------+-------------+---------+
    
  • 请注意,这只是我当前的配置尝试lxdbr0;我已尝试过很多次:

    dominickpastore@ubuntu:~$ lxc network show lxdbr0
    config:
      bridge.external_interfaces: enp10s0f1
      ipv4.address: none
      ipv4.dhcp: "false"
      ipv6.address: none
      ipv6.dhcp: "false"
    description: ""
    name: lxdbr0
    type: bridge
    used_by:
    - /1.0/containers/first
    managed: true
    status: Created
    locations:
    - none
    

更新:

我一直在玩这个,但它却让我更加困惑。我的行为似乎非常不稳定。这还是有点新奇和不稳定吗,还是我做错了什么?首先,它lxc network unset似乎不起作用:

dominickpastore@ubuntu:~$ lxc network show lxdbr0
config:
  ipv4.address: 10.4.4.1/24
  ipv4.dhcp: "true"
  ipv4.dhcp.ranges: 192.168.4.230-192.168.4.249
  ipv4.nat: "true"
  ipv4.routing: "true"
  ipv6.address: none
  ipv6.dhcp: "false"
description: ""
name: lxdbr0
type: bridge
used_by:
- /1.0/containers/first
managed: true
status: Created
locations:
- none
dominickpastore@ubuntu:~$ lxc network unset lxdbr0 ipv4.dhcp.ranges
dominickpastore@ubuntu:~$ lxc network show lxdbr0
config:
  ipv4.address: 10.4.4.1/24
  ipv4.dhcp: "true"
  ipv4.dhcp.ranges: 192.168.4.230-192.168.4.249
  ipv4.nat: "true"
  ipv4.routing: "true"
  ipv6.address: none
  ipv6.dhcp: "false"
description: ""
name: lxdbr0
type: bridge
used_by:
- /1.0/containers/first
managed: true
status: Created
locations:
- none

我还创建了第二个网桥来同时测试两个配置,我可以将它们设置为与 NAT+DHCP 配置非常相似(不完全相同,因为取消设置不起作用),但只有原始接口被分配了地址。我不明白为什么新接口根本无法获得地址。请注意类似的 IPv4 配置:

dominickpastore@ubuntu:~$ lxc network show lxdbr0
config:
  ipv4.address: 10.4.4.1/24
  ipv4.dhcp: "true"
  ipv4.dhcp.ranges: 192.168.4.230-192.168.4.249
  ipv4.nat: "true"
  ipv4.routing: "true"
  ipv6.address: none
  ipv6.dhcp: "false"
description: ""
name: lxdbr0
type: bridge
used_by:
- /1.0/containers/first
managed: true
status: Created
locations:
- none
dominickpastore@ubuntu:~$ lxc network show lxdbr1
config:
  ipv4.address: 10.251.34.1/24
  ipv4.dhcp: "true"
  ipv4.nat: "true"
  ipv4.routing: "true"
  ipv6.address: none
  ipv6.nat: "false"
description: ""
name: lxdbr1
type: bridge
used_by:
- /1.0/containers/first
managed: true
status: Created
locations:
- none

然而,在容器中,eth0 可以工作(连接到 lxdbr0),而 eth1 从未获取地址(连接到 lxdbr1):

root@first:~# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
41: eth0@if42: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 00:16:3e:64:0e:ea brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 10.4.4.245/24 brd 10.4.4.255 scope global dynamic eth0
       valid_lft 3101sec preferred_lft 3101sec
    inet6 fe80::216:3eff:fe64:eea/64 scope link
       valid_lft forever preferred_lft forever
43: eth1@if44: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 00:16:3e:fe:6d:01 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet6 fe80::216:3eff:fefe:6d01/64 scope link
       valid_lft forever preferred_lft forever

答案1

LXD 的默认网络设置是使用私人的桥,lxdbr0

要让某些容器从 LAN 获取 IP 地址,您可以

  1. 使用桥接网络,桥接主机的以太网接口。例如,https://blog.simos.info/how-to-make-your-lxd-containers-get-ip-addresses-from-your-lan-using-a-bridge/
  2. 使用麦克维兰。例如,https://blog.simos.info/how-to-make-your-lxd-container-get-ip-addresses-from-your-lan/

两者之间,麦克维兰很容易设置。你可以将一些容器放在麦克维兰,而其他用户则使用私有网络。您可以使用个人资料在 LXD 中指定哪个是哪个。您甚至可以通过应用/附加不同的配置文件从一个配置文件切换到另一个配置文件。

一个问题麦克维兰是容器上的马夫克兰无法通过网络联系主机。

两者都存在问题麦克维兰桥接网络(在主机的以太网接口上)是两者都不能在 WiFi 上使用。因为 WiFi 的默认设置是接入点只接受来自关联网络客户端的单个 MAC 地址。如果您未在接入点上设置任何安全功能,您可能会绕过此限制。

答案2

  1. 设置将 macvlan 桥接模式接口绑定到主机物理接口的容器。
  2. 在同一接口上的主机上添加 macvlan 桥接接口。

这样,您将能够从容器与主机对话,反之亦然。

如果你需要 macvlan ifupdown 助手,我有一个https://pastebin.com/yaRH8zC9

相关内容