我正在试用 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 地址,您可以
- 使用桥接网络,桥接主机的以太网接口。例如,https://blog.simos.info/how-to-make-your-lxd-containers-get-ip-addresses-from-your-lan-using-a-bridge/
- 使用麦克维兰。例如,https://blog.simos.info/how-to-make-your-lxd-container-get-ip-addresses-from-your-lan/
两者之间,麦克维兰很容易设置。你可以将一些容器放在麦克维兰,而其他用户则使用私有网络。您可以使用个人资料在 LXD 中指定哪个是哪个。您甚至可以通过应用/附加不同的配置文件从一个配置文件切换到另一个配置文件。
一个问题麦克维兰是容器上的马夫克兰无法通过网络联系主机。
两者都存在问题麦克维兰和桥接网络(在主机的以太网接口上)是两者都不能在 WiFi 上使用。因为 WiFi 的默认设置是接入点只接受来自关联网络客户端的单个 MAC 地址。如果您未在接入点上设置任何安全功能,您可能会绕过此限制。
答案2
- 设置将 macvlan 桥接模式接口绑定到主机物理接口的容器。
- 在同一接口上的主机上添加 macvlan 桥接接口。
这样,您将能够从容器与主机对话,反之亦然。
如果你需要 macvlan ifupdown 助手,我有一个https://pastebin.com/yaRH8zC9