![无法让桥与 GNOME Boxes 协同工作](https://linux22.com/image/924311/%E6%97%A0%E6%B3%95%E8%AE%A9%E6%A1%A5%E4%B8%8E%20GNOME%20Boxes%20%E5%8D%8F%E5%90%8C%E5%B7%A5%E4%BD%9C%20.png)
我设立了一个Fedora 虚拟机使用GNOME 盒子。我可以启动它,一切正常。
我正在使用 virt-manager,我想创建一个桥接器,以便我可以在网络上获取虚拟机,但每次我尝试切换网卡模式来自用户模式网络到指定共享设备名称返回错误。
我确实有virbr0
且virbr0-nic
以上。
错误是:
Error starting domain: internal error: /usr/lib/qemu/qemu-bridge-helper --use-vnet --br=virbr0 --fd=26: failed to communicate with bridge helper: Transport endpoint is not connected
stderr=failed to parse default acl file `/etc/qemu/bridge.conf
Traceback (most recent call last):
File "/usr/share/virt-manager/virtManager/asyncjob.py", line 89, in cb_wrapper
callback(asyncjob, *args, **kwargs)
File "/usr/share/virt-manager/virtManager/asyncjob.py", line 125, in tmpcb
callback(*args, **kwargs)
File "/usr/share/virt-manager/virtManager/libvirtobject.py", line 82, in newfn
ret = fn(self, *args, **kwargs)
File "/usr/share/virt-manager/virtManager/domain.py", line 1508, in startup
self._backend.create()
File "/usr/lib/python2.7/dist-packages/libvirt.py", line 1062, in create
if ret == -1: raise libvirtError ('virDomainCreate() failed', dom=self)
libvirtError: internal error: /usr/lib/qemu/qemu-bridge-helper --use-vnet --br=virbr0 --fd=26: failed to communicate with bridge helper: Transport endpoint is not connected
stderr=failed to parse default acl file `/etc/qemu/bridge.conf'
答案1
更新:我让它工作了。(同一天,但忘了回到这里报告)。
注意:请先阅读上面的答案
安装过程并不十分顺利,而且错误百出 - 尤其是与 virtualbox 相比时,后者开箱即可使用。
无论如何,为了避免重复,我从我不断收到上面问题中发布的错误的地方开始。 在我的情况下,它/etc/qemu/bridge.conf
甚至不存在,所以我必须自己创建目录和文件。
返回的错误归结为权限问题。请确保文件已打开读取位。
sudo touch /etc/qemu/bridge.conf # If the file does not exist yet
sudo chmod u+r /etc/qemu/bridge.conf
注意:该文件应包含一行,指示允许哪些桥接接口。
allow virbr0 # according to your qemu command
或者,
allow all
您还需要确保 /usr/lib/qemu/qemu-brdige-helper 已设置 setuid 位。
sudo chmod u+s $(locate -r /usr/.*/qemu-bridge-helper$)
到目前为止一切顺利,但它仍然无法工作,返回与套接字相关的错误。这是因为 apparmor 阻止了通信 - 来源:对此的评论邮政。
ln -s /etc/apparmor.d/usr.sbin.libvirtd /etc/apparmor.d/disable/
apparmor_parser -R /etc/apparmor.d/usr.sbin.libvirtd
这最终起了作用。
答案2
gnome-boxes 的使用qemu:///session
具有一些优点(每个用户都有自己的实例、每个用户的数据等),但与通常的 Ubuntu 默认设置相比也存在缺点qemu:///system
- 特别是由于它在用户环境中运行,因此权限相当低。
因此,要实现任何复杂的网络(以及其他一些事情),您需要助手和设置更改。对于网络,您需要 qemu-bridge-helper,由于许多原因,它被认为是不安全的,因此需要设置suid
一个配置文件,将要允许的设备列入白名单。
这博客是对通常所需步骤的一个很好的总结,但我最近没有重新测试它们,所以它们现在可能会略有不同,如果是这样的话我很抱歉(在这里说出来以便我们可以提及它)。
PS 如果您已将其连接到 virtbr0,它可以连接到网络,但这是一个 NAT 桥,因此您仍然无法从外部连接到您的虚拟机,除非您定义端口转发等。如果您希望它可从外部访问,您需要定义一个非 nat 桥并将其与您的客户机耦合 - 这是一个很棒的netplan 示例如何做到这一点。