在 Ubuntu Xenial 主机上,我运行来自 xenial-backports 的 LXD 2.12。虽然从容器外部将容器的 ipv4 地址更改为静态地址很容易,但我无法更改其 ipv6 地址。正确的做法是什么?
我为 lxd 配置了一个 lxdbr0 桥接器,该桥接器支持 IPv4 和 IPv6。配置中的相关部分如下所示:
ipv4.address: 10.122.45.1/24
ipv4.nat: "true"
ipv6.address: fd42:7146:f400:1::1/64
ipv6.nat: "true"
在我用 Xenial(contxenial)启动容器后,它的 eth0 的 ifconfig 看起来像这样:
peter@led:~$ lxc exec contxenial -- ifconfig eth0
eth0 Link encap:Ethernet HWaddr 00:16:3e:bc:f5:8d
inet addr:10.122.45.223 Bcast:10.122.45.255 Mask:255.255.255.0
inet6 addr: fd42:7146:f400:1:216:3eff:febc:f58d/64 Scope:Global
inet6 addr: fe80::216:3eff:febc:f58d/64 Scope:Link
:
现在我想使用以下命令将其 ipv4 和 ipv6 地址都更改为静态 ip 地址:
peter@led:~$ lxc network attach lxdbr0 contxenial eth0
peter@led:~$ lxc config device set contxenial eth0 ipv4.address 10.122.45.71
peter@led:~$ lxc config device set contxenial eth0 ipv6.address fd42:7146:f400:1::71
最后我重新启动了我的容器。
peter@led:~$ lxc restart contxenial
令我惊讶的是,IPv4 地址按预期发生了变化,但 IPv6 地址却没有改变!
peter@led:~$ lxc exec contxenial -- ifconfig eth0
eth0 Link encap:Ethernet HWaddr 00:16:3e:bc:f5:8d
inet addr:10.122.45.71 Bcast:10.122.45.255 Mask:255.255.255.0
inet6 addr: fd42:7146:f400:1:216:3eff:febc:f58d/64 Scope:Global
inet6 addr: fe80::216:3eff:febc:f58d/64 Scope:Link
:
但是,dnsmasq.hosts 同时包含更改后的 IPv4 地址和更改后的 IPv6 地址。
peter@led:~$ sudo cat /var/lib/lxd/networks/lxdbr0/dnsmasq.hosts
00:16:3e:bc:f5:8d,id:*,10.122.45.71,[fd42:7146:f400:1::71],contxenial
这是怎么回事?我做错了吗?目前实现这一目标的正确方法是什么(自 LXC/LXD 2.3 或更高版本以来)?
答案1
我从 LXC/LXD 项目负责人 Stéphane Graber 那里得到了以下信息回答我的问题:
静态 IPv6 分配只能在有状态 DHCP 模式下工作,否则将使用 SLAAC 来分配地址。
您可以使用以下方式启用有状态 DHCP:
lxc network set lxdbr0 ipv6.dhcp.stateful true
但请注意,没有 Linux 发行版默认支持 DHCPv6,因此您还需要更新容器的 /etc/network/interfaces(或基于发行版的类似文件)以实际执行 DHCPv6。
这是我在任何文档中都找不到的缺失部分。这也意味着无法像更改 IPv4 那样简单地从容器外部更改 IPv6 地址。
就我而言,我必须在容器内的 /etc/network/interfaces.d/50-cloud-init.cfg 中添加以下行。
iface eth0 inet6 dhcp
如果没有注释它看起来一定是这样的:
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet dhcp
iface eth0 inet6 dhcp
该文件从 /etc/network/interfaces 调用。在其他发行版上可能会有所不同。
最后,它应该在重新启动容器后工作(至少对我来说是这样的)。
我希望这也能帮助其他人。