![使用 Libvirt 和 dnsmasq 让访客通过主机名相互通信](https://linux22.com/image/165454/%E4%BD%BF%E7%94%A8%20Libvirt%20%E5%92%8C%20dnsmasq%20%E8%AE%A9%E8%AE%BF%E5%AE%A2%E9%80%9A%E8%BF%87%E4%B8%BB%E6%9C%BA%E5%90%8D%E7%9B%B8%E4%BA%92%E9%80%9A%E4%BF%A1.png)
我使用 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/hosts
tldr:它可以在客人中添加条目并/etc/hosts
在主机中更新。
/etc/hosts
如果您可以仅使用 Ansible 直接调用 libvirt 或 QEMU,那么您可以复制此行为:Ansible 通过收集的事实知道 IP 地址,因此它可以添加每个来宾和主机的关联。您可能需要查找hostvars
变量中的值并根据完整清单使用剧本(因此收集事实步骤适用于每个主机并且您获得 IP)。如果是静态 IP:您可以在每个来宾中转储相同的内容(并且可以使用模板来避免 IP 重复)。
我找到了一个类似的问题这提供了另一个答案(它将影响您的所有虚拟机,而不仅仅是特定于您的项目的虚拟机)。