帮助中心

立即注册 咨询客服

当前位置:首页 > 帮助中心> 如何为基于NAT的基于libvirt 的虚拟机设置静态 IP 和名称

如何为基于NAT的基于libvirt 的虚拟机设置静态 IP 和名称

发布时间:2022年12月19日 11:20:55    来源: A5互联

我使用Linux libvirt 的其中一件事是一组虚拟机,我只将它们 NAT 到网络上,而不是给它们自己独特的公共 IP。当我第一次设置它时,我没有做任何特别的事情来为这些 NAT 虚拟机提供一致的 IP 或任何名称,这让我想通过 SSH 连接到其中一个(其中大多数是 Fedora 虚拟机,所以我真的可以做到)。最终,我努力为这些设置固定的静态 IP 并为它们命名我可以使用的名称,事实证明这更加方便。

为 NAT 虚拟网络上的 libvirt VM 提供固定 IP 需要一些工作。首先,您必须按照寻址中的示例(以及 dhcp 部分中对“主机”的讨论)编辑网络的 XML。这看起来像这样:

<ip ....>

 <DHCP>

   <范围.../>

   <host mac="NN:NN:NN:NN:NN" ip="<固定IP 1>" name="<your-host>" />

   <host mac="NN:NN:NN:NN:NN" ip="<固定 IP x21>" name="<your-host2>" />

 </DHCP>

< </ip>

<ip>、<dhcp> 和 <range> 位已经存在;您需要添加 <host> 位。如果您使用的是 virt-manager,则需要进入其首选项并启用 XML 编辑(然后我认为可能会退出并重新启动)。我通过启动每台机器并将它们复制下来来获得我的主机 MAC 地址,但现在我看,virt-manager 还将向您显示每个 VM 接口的 MAC。

我发现的一个问题是,编辑 XML 将不会生效,直到您停止然后重新启动该 libvirt 网络接口(包括作为重新启动主机系统的一部分)。对我来说,关闭我的 NAT 接口有时会导致我的 iptables 和 ip 规则变得有点混乱,这让事情变得有点烦人并且让我无法尽可能多地更新东西。

(在幕后,libvirt 生成一个dnsmasq配置并运行它以提供 DHCP 和 DNS。大概它不会重新生成配置并重新启动 dnsmasq 直到网络关闭然后再次备份。)

许多示例将显示以 .default 结尾的主机名称。这样做的目的是使 libvirt 最终会为此网络运行的 dnsmasq 将 .default 替换为您的默认域,因此您的 NAT'd VM 是 <name>.example.org 或它们自己和彼此的任何内容。如果您给您的 VM 名称以其他结尾,例如 .local,那么这将是它们的全名(例如“fedora37.local”)。但是,所有这些仅适用于 VM,不一定适用于您的主机。

在我的桌面上,我使用 Unbound 进行本地 DNS 解析。幸运的是,Unbound 有一个非常简单的添加本地记录的设置;在 Fedora 中,我创建了一个 /etc/unbound/local.d/my-libvirt.conf 文件,然后创建了一系列记录对:

 local-data: "fedora37.local. IN A 192....."

 local-data-ptr: "192..... fedora37.local"

这些 Unbound 名称不必与 libvirt 网络 XML 中的主机名或虚拟机的实际 libvirt 名称完全匹配,但通常这三个名称彼此越接近,您对自己的烦恼就越少。会的

(从我这里拿走,因为我已经通过艰难的方式学到了这一点。即使像 VM 被称为“fedora-37”和 DNS 名称是“fedora37”这样的小东西也可能有点粗糙。)

PS:总的来说,我不想以任何方式将桌面的常规 DNS 解析连接到 libvirt dnsmasq。libvirt dnsmasq 有一个神奇的生成配置和难以预测的行为;我的桌面 Unbound 配置完全可以理解并且在我的控制之下。