使用 Libvirt 和 dnsmasq 让访客通过主机名相互通信

使用 Libvirt 和 dnsmasq 让访客通过主机名相互通信

我使用 Ansible 来配置虚拟机,效果很好。 Dnsmasq 处理 DHCP,以便它们自动获取 IP。但是,由于没有配置 DNS,因此虚拟机无法通过主机名相互通信,只能通过 IP 进行通信。

我读过一些指南,它们告诉我必须使用virsh net-define和创建一个新域virsh net-edit。但是,我必须手动执行此操作。本指南是我一直在关注的一个。

是否有可能以某种方式自动完成,是否比我提供的指南更好?

为了简单起见,我添加了主机,/etc/hosts但感觉应该有更好的解决方案?

答案1

侧面知识:

许多应用程序通过调用来解析 FQDN获取主机名

在 Linux 上,C 库读取/etc/nsswitch.conf配置其信息源。如果你至少有hosts: files它会读入/etc/hosts

实际答案

我将 libvirt 与 Vagrant 一起使用,这样我就可以使用流浪主机管理器

/etc/hoststldr:它可以在客人中添加条目并/etc/hosts在主机中更新。

/etc/hosts如果您可以仅使用 Ansible 直接调用 libvirt 或 QEMU,那么您可以复制此行为:Ansible 通过收集的事实知道 IP 地址,因此它可以添加每个来宾和主机的关联。您可能需要查找hostvars变量中的值并根据完整清单使用剧本(因此收集事实步骤适用于每个主机并且您获得 IP)。如果是静态 IP:您可以在每个来宾中转储相同的内容(并且可以使用模板来避免 IP 重复)。

我找到了一个类似的问题这提供了另一个答案(它将影响您的所有虚拟机,而不仅仅是特定于您的项目的虚拟机)。

相关内容