如何让 Qemu 自动选择 Spice 的监听端口?

如何让 Qemu 自动选择 Spice 的监听端口?

我正在将一些虚拟机从 VNC 显示类型切换为 SPICE。

VNC 显示类型提供了一个非常方便的to=参数,允许 QEMU 自动使用定义范围内的第一个空闲端口:

-display vnc=127.0.0.1:0,to=100

这里,QEMU 将为每个新的 VNC 显示服务器使用 5900 到 6000 之间的端口。

通过 SPICE 显示实现此类功能的最简洁方法是什么(顺便说一下,我没有使用 libvirt)?

目前,我正在编写测试 grepnetstat输出的脚本,以查找尚未使用的端口并将其传递到:

-spice addr=127.0.0.1,port=${unused_port}

不提竞争条件,我只是觉得这种方法与 VNC 相比相当难看。自从QEMU 联机帮助页似乎不是很详尽(to=例如,VNC 参数似乎没有提到),那么我想知道 SPICE 是否有等效的参数?

答案1

(目前)不可能让 QEMU 为 SPICE 选择下一个空闲端口。发生这种情况是因为一个实现细节:QEMU用途香料_服务器_设置_端口它只接受一个数字参数。

您现在能做的最好的事情就是在 QEMU 之外选择一个端口号并像现在一样分配它。

如果您觉得这太笨拙,请考虑使用 DNS 绑定到第一个可用的空闲 IP 地址 + 端口。这SPICE服务器代码尝试每个地址直到成功,因此如果您映射local.test到 127.0.0.1、127.0.0.2、127.0.0.3 等,那么它将尝试绑定到这些接口中的每一个,直到成功为止。听起来很糟糕,但它可能很有用。请注意,只有当您没有其他服务侦听通配符地址上的同一端口时,才可以使用此方法。

答案2

我知道这是一个老问题,但我相信人们仍在寻找更好的解决方案。这里是:

设置你的 qemu-spice port=5900,addr=127.0.0.1,disable-ticketing=on

然后使用iptablesiptables -t nat -I PREROUTING -p tcp --dport 5900 -j DNAT --to 127.0.0.1:5900

如果您不想干扰 vnc 等,您可以将其限制为某些接口或更改源端口。

最后sysctl net.ipv4.conf.all.route_localnet=1

使用此配置将允许您使用任何服务器 IP 地址连接到 SPICE。

相关内容