KVM/libvirt:如何在虛擬化主機上配置靜態訪客 IP 地址
我想做的是從主機系統設置客人的網路配置(IP 地址、子網、網關、廣播地址)。使用的網路設置處於
bridge
模式。如何從主機配置網路,而不是將客戶端本身配置為靜態網路配置?如果我執行:
virsh edit vm1
也有一個
<network>
塊,我嘗試從那裡配置網路介面,但不幸的是,來賓 VM 似乎沒有使用它,因此與網路離線(因為它僅使用自動網路配置)……來賓VM 都是基於 Linux 和 Windows 的。任何幫助將不勝感激。
如果您不想在來賓內部進行任何配置,那麼唯一的選擇是分配靜態 IP 地址的 DHCP 伺服器。如果您使用
bridge
模式,那可能是一些外部 DHCP 伺服器。查閱其手冊以了解如何提供靜態租約。但至少在轉發模式
nat
下route
,您可以使用 libvirt 的內置功能dnsmasqd
(最新版本的 libvirtd 支持 dnsmasq 的“dhcp-hostsfile”選項)。方法如下:首先,找出要分配靜態 IP 地址的 VM 的 MAC 地址:
virsh dumpxml $VM_NAME | grep 'mac address'
然後編輯網路
virsh net-list virsh net-edit $NETWORK_NAME # Probably "default"
找到該
<dhcp>
部分,限制動態範圍並為您的虛擬機添加主機條目<dhcp> <range start='192.168.122.100' end='192.168.122.254'/> <host mac='52:54:00:6c:3c:01' name='vm1' ip='192.168.122.11'/> <host mac='52:54:00:6c:3c:02' name='vm2' ip='192.168.122.12'/> <host mac='52:54:00:6c:3c:03' name='vm3' ip='192.168.122.12'/> </dhcp>
然後,重新啟動您的 VM(或重新啟動其 DHCP 客戶端,例如
ifdown eth0; ifup eth0
)更新:我看到有報導說在“virsh net-edit”之後更改可能不會生效。在這種情況下,請在編輯後嘗試:
virsh net-destroy $NETWORK_NAME virsh net-start $NETWORK_NAME
…並重新啟動 VM 的 DHCP 客戶端。
如果這仍然不起作用,您可能需要
- 停止 libvirtd 服務
- 殺死任何還活著的 dnsmasq 程序
- 啟動 libvirtd 服務
注意:KVM 主機無法強制具有未知作業系統和未知配置的虛擬機使用特定的網路配置。但是如果知道虛擬機使用某種網路配置協議——比如 DHCP——你可以使用它。這就是這篇文章所假設的。
某些作業系統(例如某些 Linux 發行版)還允許將網路配置選項傳遞給來賓,例如通過核心命令行。但這對作業系統來說是非常具體的,我認為這比 DHCP 方法沒有優勢。