我的Ubuntu 16.04 LTS上存在kvm / libvirt虚拟化和网络命名空间的问题 . 我想要做的是以下围栏设置:
-
一个网络命名空间(围栏)
-
命名空间中有两个Linux桥 .
-
每个桥都有自己的ip网络 .
-
允许这两个网桥之间的IP转发 .
-
两个虚拟机 . VM1连接到bridge1,VM2连接到bridge2 .
-
将VM1 Ping到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 ips是成功的 . 启用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无法处理网络命名空间 . 或者有办法吗?怎么样?
1 回答
Libvirt只能看到位于运行libvirtd的相同名称空间中的资源 . 因此,私有名称空间中的设备对libvirtd是不可见的 . 除了让libvirtd在这个自定义网络命名空间中运行之外,目前还没有好办法解决这个问题 . 然后主机NIC对libvirtd是不可见的 - 这是否是一个问题取决于你尝试todo .