![如何通过名称而不是 IP 地址连接到 libvirt 虚拟机](https://linux22.com/image/177913/%E5%A6%82%E4%BD%95%E9%80%9A%E8%BF%87%E5%90%8D%E7%A7%B0%E8%80%8C%E4%B8%8D%E6%98%AF%20IP%20%E5%9C%B0%E5%9D%80%E8%BF%9E%E6%8E%A5%E5%88%B0%20libvirt%20%E8%99%9A%E6%8B%9F%E6%9C%BA.png)
我想按名称连接到我的 libvirt 虚拟机。我曾经能够做到这一点 - 现在是不可能了吗?我真的不想为每个虚拟机进行额外的手动配置。
我曾经能够做到例如ssh debian10-vm.local
。这利用了 MDNS / avahi 的魔力。但它在某个时候停止工作:-(。目前我正在运行 Fedora Workstation 32。我认为这在稍早的版本中停止工作。
如果我停下来firewalld
,那么它就会像以前一样工作。但我想继续运行防火墙。
答案1
安装libvirt-nss。对于 Fedora,运行
dnf install libvirt-nss
. (对于 Debian:)apt install libnss-libvirt
。在 中
/etc/nsswitch.conf
,您希望该hosts:
行包含libvirt
.上面的链接中有一个例子。您现在可以通过主机名访问虚拟机,例如
ssh debian10-vm
。在此解决方案中,您不使用.local
.
答案2
步骤一:创建/etc/firewalld/zones/libvirt.xml
如下
<?xml version="1.0" encoding="utf-8"?>
<zone target="ACCEPT">
<short>libvirt</short>
<description>
The default policy of "ACCEPT" allows all packets to/from
interfaces in the zone to be forwarded, while the (*low priority*)
reject rule blocks any traffic destined for the host, except those
services explicitly listed (that list can be modified as required
by the local admin). This zone is intended to be used only by
libvirt virtual networks - libvirt will add the bridge devices for
all new virtual networks to this zone by default.
</description>
<rule priority='32767'>
<reject/>
</rule>
<protocol value='icmp'/>
<protocol value='ipv6-icmp'/>
<service name='dhcp'/>
<service name='dhcpv6'/>
<service name='dns'/>
<!-- <service name='ssh'/> --> <!-- Wut? No thank you. -->
<service name='tftp'/>
<service name='mdns'/> <!-- Added by the local admin :). -->
</zone>
第 2 步:运行firewall-cmd --reload
libvirt 补丁中对此内容进行了更改的解释,“有选择地安装firewalld“libvirt”区域”。显然这是firewalld
从 using 切换iptables
到 using时发生的nftables
。