ゲスト内で設定を行いたくない場合、唯一のオプションは静的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>
セクションを見つけ、ダイナミックレンジを制限し、VMのホストエントリを追加します
<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ホストが、特定のネットワーク構成を使用するように、不明なOSおよび不明な構成のVMを強制する方法はありません。ただし、VMが特定のネットワーク構成プロトコル(DHCPなど)を使用していることがわかっている場合は、それを使用できます。これがこの投稿の前提です。
一部の OS(一部のLinuxディストリビューションなど)では、カーネルコマンドラインなどを使用して、ネットワーク構成オプションをゲストに渡すこともできます。しかし、これはOSに非常に固有のものであり、DHCP方式に勝る利点はありません。