我的 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 无法处理网络命名空间。或者有什么办法吗?如何?