LXC 容器获得分配给它的两个 IP 地址

LXC 容器获得分配给它的两个 IP 地址

我正在我的 Arch Linux 工作站上使用 LXC 作为学习体验。我按照 Archwiki 上的 LXC 页面上的指南并为容器设置静态 IP。这就是我的网络配置:

/etc/netctl/lxcbridge
---------------------
Description="LXC Bridge"
Interface=br0
Connection=bridge
BindsToInterfaces=(enp1s0)
IP=static
Address=('192.168.0.20/24')
Gateway='192.168.0.1'
DNS=('192.168.0.1')

以及容器配置:

/var/lib/lxc/testcontainer/config
---------------------------------
lxc.network.type = veth
lxc.network.link = br0
lxc.network.ipv4 = 192.168.0.198/24

然而根据lxc-ls -f它得到一个额外的IP地址。

NAME          STATE   AUTOSTART GROUPS IPV4                         IPV6
testcontainer RUNNING 0         -      192.168.0.198, 192.168.0.220 -

我只想192.168.0.198。我不确定为什么它会分配第二个。

答案1

因此,经过更多研究后,我确定了为什么会发生这种情况。我使用默认的 Ubuntu 和 Debian 模板来创建容器,并将其网络设置为使用 DHCP 向路由器请求 IP。因此,最初使用 lxc.container.config 设置静态 IP,然后当容器启动时,它会查询路由器(或您拥有的任何 DHCP 服务器)以获取分配给它的辅助 IP。

阻止这种情况的最合乎逻辑的方法可能是在容器内分配静态 IP。所以在基于 Debian 的模板上编辑/etc/network/interfaces

auto etho0
iface etho0 inet static
    address 192.168.0.15
    netmask 255.255.255.0
    gateway 192.168.0.1

然后从 lxc 配置中删除 ipv4 行/var/lib/lxc/testcontainer/config

lxc.network.type = veth
lxc.network.link = br0

另一种方法是让主机通过保留 ipv4 行来设置 ip /var/lib/lxc/testcontainer/config,并通过将其设置为手动来明确告诉容器不要触摸接口:

auto eth0
iface eth0 inet manual

显然,如果主机暂停然后恢复,第二种方法会出现一些问题。可能最好使用第一种方法。

相关内容