【发布时间】:2025-12-14 00:35:01
【问题描述】:
我的 Ubuntu 16.04 LTS 上的 kvm/libvirt 虚拟化和网络命名空间存在问题。我想要做的是以下围栏设置:
- 一个网络命名空间(围栏)
- 命名空间中有两个 Linux 网桥。
- 每个网桥都有自己的 ip 网络。
- 允许这两个网桥之间的 ip 转发。
- 两个虚拟机。 VM1 连接到bridge1,VM2 连接到bridge2。
- Ping VM1 到 VM2。
我的目的是在我的笔记本电脑上建立一个小实验室,它完全独立于主机剩余的与外界通信的网络设置,在我看来,网络命名空间是实现这一目标的方法,但我遇到了一些障碍.
到目前为止,我已经设置了以下内容:
ip netns add internalSpielwiese
ip netns exec internalSpielwiese bash
ip addr add 127.0.0.1/8 dev lo
ip link set lo up
ip link add name iBr0 type bridge
ip addr add 172.0.0.1/24 dev iBr0
ip link set iBr0 up
ip link add name iBr1 type bridge
ip addr add 172.0.1.1/24 dev iBr1
ip link set iBr1 up
Ping 命名空间内的 ip 成功。 IP 转发已启用。在命名空间之外,桥不可见/不存在。现在是时候让 libvirt 中的桥梁为人所知了。但它不起作用。我用这个 xml 试过了
<network>
<name>internalBr0</name>
<uuid>3f4647d9-0c19-509f-b512-9cac91c7149b</uuid>
<forward mode='bridge'/>
<bridge name='iBr0'/>
</network>
以及适当的 virsh net-define 和 net-start 命令。我编辑了一个 VM 的 xml 文件并启动了 VM,但结果是这样的:
virsh # start kirke2
error: Failed to start domain kirke2
error: Cannot get interface MTU on 'iBr0': No such device
显然,libvirt 没有在命名空间 internalSpielwiese 中找到 iBr0,经过一番谷歌搜索后,我觉得 libvirt 无法处理网络命名空间。或者有什么办法吗?如何?
【问题讨论】:
-
这里不在主题范围内。但我根本看不出有任何理由使用网络命名空间。 Libvirt 很乐意将自己的网络与您的其他网络分开。
-
不,由 libvirt 控制的 (l3-)bridges 和那些由其他 linux 工具“控制”的桥之间没有区别。我的意思是,最后“libvirt-bridges”只有在事先使用 ip link、bridge、brctl 或您喜欢的任何工具创建时才有效。这就是为什么我正在寻找一种可能性,将我的用于测试的小网络设置与其他网络设置完全分开。说得更清楚一点:与 virbr0 和 eth0 完全分开。
-
Libvirt 将自己创建自己的内部网桥。您不必事先创建它们。如果你把它放在一个命名空间中,它会使得与外界建立通信变得更加困难。
-
好的。您说 libvirt 管理自己的网桥,不需要使用标准 linux 工具创建网桥。也许你是对的。但后来我错过了迄今为止我所做的一些事情。这当然是可能的,因为我不是专业人士。但我总是渴望学习新事物,如果你能提供你的知识,我将不胜感激。 ...(对不起。我需要把它分成两个 cmets)
-
创建新网络的常用方法是: 1. 使用适当的 linux 工具定义新网桥。 2. 使用适当的 virsh 命令定义一个新网络: ... 其中步骤 1 和 2 可以互换。 3. 编辑 VM 的 xml 文件以连接到该新网桥。 4. 启动虚拟机并使用它...当我跳过第 1 步时,我总是收到错误消息。然后虚拟机根本无法启动。
标签: kvm libvirt linux-namespaces