web-dev-qa-db-ja.com

KVM / libvirt:仮想化ホストで静的ゲストIPアドレスを構成する方法

ホストシステムからゲストのネットワーク構成(IPアドレス、サブネット、ゲートウェイ、ブロードキャストアドレス)を設定します。使用されているネットワーク設定はbridgeモードです。クライアント自体を静的ネットワーク構成に構成するのではなく、ホストからネットワークを構成するにはどうすればよいですか?

私が実行すると:

virsh edit vm1

<network>ブロックも同様で、そこからネットワークインターフェイスを構成しようとしましたが、残念ながらゲストVMはそれを使用していないようで、ネットワークに対してオフラインになっています(自動を使用しているため)ネットワーク構成のみ)...ゲストVMはLinuxとWindowsの両方に基づいています。

32
beta

ゲスト内で構成を行わない場合、唯一のオプションは、静的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と言います-これを使用できます。これはこの投稿が想定していることです。

Some OS(一部のLinuxディストリビューションなど)では、ネットワーク構成オプションをゲストに渡すこともできます。カーネルコマンドラインを介して。しかし、それはOSに非常に特有であり、DHCP方式に勝る利点はありません。

54
Nils Toedtmann

virsh net-update は良いコマンドです(ネットワークを再起動/破壊する必要はありません)
参照: https://www.redhat.com/archives/libvir-list/2012-September/msg01380.html

12
philm

dnsmasqプロセスに-HUP信号を送信するだけで、新しく追加されたIP-MACマッピングをdnsmasqに「表示」させることができました。その後、libvirtdやネットワーク自体を再起動する必要なく、新しいゲストを再起動するだけで、適切なIPを割り当てることができました。

公式のlibvirtドキュメント( http://wiki.libvirt.org/page/Networking#Applying_modifications_to_the_network )は、プロセス全体を自動化するこの非公式のPerlスクリプトについて言及しています: https://Gist.github .com/bendiken/032ea1bddb9ffafe98b4

私はこのスクリプトを自分で試したことはありません。hostsfileがすでに更新されており、-HUPシグナルを送信するだけで十分であることがわかったためです。

ホストはDebian 7.8を実行しており、パッケージのバージョンは次のとおりです。

  • kvm 1:1.1.2 + dfsg-6 + deb7u8
  • qemu-kvm 1.1.2 + dfsg-6 + deb7u8
  • libvirt-bin 0.9.12.3-1 + deb7u1
3
Stefano Rago