20.37.15. 为客户机虚拟机设置静态 IP 地址
如果客户机虚拟机被配置为从 DHCP 获取其 IP 地址,但您仍需要它具有可预测的静态 IP 地址,则可使用以下步骤修改 libvirt 使用的 DHCP 服务器配置。这个步骤需要您知道客户机接口的 MAC 地址,以便进行这个更改。因此,您需要在客户机创建之后执行操作,或在创建客户机之前决定 guest 的 MAC 地址,然后在创建客户机虚拟机时手动设置相同的地址。
另外,您应该注意,这个过程只适用于连接到 libvirt 虚拟网络的客户机接口,其转发模式为
"nat"
、"route"
,或者根本没有转发模式。如果网络配置了 forward mode="bridge"
或 "hostdev"
,则此过程将无法正常工作。在这样的情形中,DCHP 服务器位于网络中的其他位置,因此不受 libvirt 的控制。在这种情况下,需要在远程 DHCP 服务器上进行静态 IP 条目。要做到这一点,查看服务器提供的文档。
过程 20.5. 设置静态 IP 地址
此过程在主机物理机器上执行。
检查客户机 XML 配置文件
通过运行 virsh domiflist guest1 命令显示客户机的网络配置设置。替换您的虚拟机的名称,用 guest1 代替。此时会显示一个表。查看 Source 列。这是您的网络的名称。在本例中,网络名为 default。这个名称将用于剩余的步骤和 MAC 地址。# virsh
domiflist guest1
Interface Type Source Model MAC ------------------------------------------------------- vnet4 network default virtio 52:54:00:48:27:1D验证 DHCP 范围
您所设置的 IP 地址必须在为网络指定的 dhcp 范围内。另外,它还不得与网络上的任何其他现有静态 IP 地址冲突。要检查可用地址以及已使用的地址范围,请在主机中使用以下命令:# virsh
net-dumpxml default | egrep 'range|host\ mac'
<range start='198.51.100.2' end='198.51.100.254'/> <host mac='52:54:00:48:27:1C:1D' ip='198.51.100.2'/>您看到的输出将与示例不同,您可能会看到更多行和多个主机 mac 行。每个 guest 静态 IP 地址都将有一行。设置静态 IP 地址
在主机计算机上运行以下命令,将 default 替换为网络的名称。# virsh net-update default add ip-dhcp-host '<host mac="52:54:00:48:27:1D" ip="198.51.100.3"/>' --live --config
live 选项允许此更改立即发生,--config
选项则可永久保留更改。在您使用有效的 IP 和 MAC 地址时,此命令还将适用于尚未创建的客户机虚拟机。MAC 地址应该是有效的单播 MAC 地址(由 分隔的6 位十六进制对,第一个数字对为偶数);当 libvirt 创建新的随机 MAC 地址时,它会将
52:54:00
用于前三个数字对,建议遵照此惯例。重启接口(可选)
如果 guest 虚拟机当前正在运行,则需要强制客户端虚拟机重新请求 DHCP 地址。如果 guest 未运行,您下次启动时新的 IP 地址将实施。要重启接口,在主机机器中输入以下命令:# virsh domif-setlink guest1 52:54:00:48:27:1D down # sleep 10 # virsh domif-setlink guest1 52:54:00:48:27:1D up
该命令使客户机虚拟机的操作系统认为以太网电缆没有被插入,然后在十秒后重新插入。sleep 命令非常重要,因为许多 DHCP 客户端允许简短断开电缆,而无需重新请求 IP 地址。十秒足够长,以便 DHCP 客户端忘记旧的 IP 地址,并在执行命令后请求一个新地址。如果因某种原因命令失败,则必须从客户机操作系统的管理界面重置 guest 的接口。