设置libvirtd支持远程TCP连接
20250215 -
概述
此前在部署KVM的时候,直接利用了默认设置,在本机上是完全能够正常使用的。但在一些需要远程访问的时候,在网上搜索相关的教程却一直无法联通。一直报错无法启动。
问题描述
在网上搜索的解决方式,基本上都是这个套路,如文章[1],首先在/etc/libvirt/libvirtd.conf
中对某些配置进行设置,具体配置如下:
listen_tls = 0
listen_tcp = 1
auth_tcp = "sasl" #设置为none表示不需要鉴权
参数auth_tcp
中我为了方便设置为none
,表示不需要鉴权,主要是为了内网环境方便,实际应用环境还是需要设置。
在经过上述配置之后,在/etc/sysconfig/libvirtd
增加--listen
选项。在我的环境下,ubuntu20.04,libvirtd是6.0,需要修改的文件是/etc/default/libvirtd
。但是修改了这部分之后,执行命令sudo service libvirtd restart
每次都会报错,系统提示报错可以查看命令journalctl -xe
查看命令状态,具体报错信息可见上面的图片。
解决方法
按照上面的报错进行了搜索,实际上并没有找到太多解决方案,还是谷歌直接搜索了无法启动tcp远程连接找到了对应的方法。例如文章[2]中的提示,首先需要激活tcp等一些服务:
Systems with libvirt version 5.6 or higher with enabled systemd socket activation, stop the daemon and start TCP and/or TLS socket systemd units:
执行命令:
systemctl stop libvirtd
systemctl enable --now libvirtd-tcp.socket libvirtd-tls.socket
tls的部分可以去掉,这里不需要。但是执行这部分命令之后,该文章依然需要添加--listen
参数来启动,所以还是继续报错。经过继续搜索之后发现,文章[3]提示执行命令sudo journalctl -u libvirtd
查看报错日志,可以看到具体报错如下:
–listen parameter not permitted with systemd activation sockets, see ‘man libvirtd’ for further guidance
大致意思就是,--listen
这种参数在当前的运行状态下不太支持,经过执行man libvirtd
之后,发现提示。所以在执行上述的命令(systemctl enable --now libvirtd-tcp.socket libvirtd-tls.socket
)之后,不需要增加这个参数在/etc/default/libvirtd
中,就可以解决上述问题了。
重启上述服务,在另外一台机器执行命令:virsh -c qemu+tcp://192.168.5.10/system
发现可以联通。
注意:上述配置中为配置鉴权,在实际环境中一定要进行配置,避免安全问题。
参考
[1]50 最佳实践-安全最佳实践-Libvirt鉴权
[2]Libvirt daemon is not listening on TCP ports
[3]Issues with starting libvbirtd [SOLVED]