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


31

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

私が実行した場合:

virsh edit vm1

そこにある<network>だけでなく、ブロックが、私はそこからネットワークインターフェイスを設定しようとしたが、残念ながらゲストVMは、それを使用していないようだと(それが唯一の自動ネットワーク設定を使用しているため)などのネットワークにオフラインになっている...ユーザーレビューVMは、LinuxベースとWindowsベースの両方です。どんな助けも大歓迎です。


2
予約済みのDHCPリースを介してIPアドレスを配布することはオプションではありませんか?
MadHatterは

うーん、そうだと思いますが、VM#1をIP#1に、VM#2をIP#2などに割り当てたいのです(リースからランダムなIPを与えるのではなく)。DHCPでこのように構成することは可能だと思いますか?もしそうなら、私はこのアプローチを試して喜んでいるでしょう。
ベータ14

2
私は「のようなものに疑問の名前を変更することをお勧め:どのように仮想化ホスト上で静的なゲストIPアドレスを設定するKVM / libvirtの
ニルスToedtmann

1
@NilsToedtmannに同意します。ベースOSなど、使用されているハイパーバイザーに関する追加の詳細があれば有益です。仮想化システムのネットワークの構成に役立つ追加のOSベースの管理ツールが存在する場合があります。YaSTを利用できるSUSEベースのオペレーティングシステムで使用するためのKVMおよびLXCに関する優れたガイドがあります。
マット

回答:


52

ゲスト内で設定を行いたくない場合、唯一のオプションは静的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方式に勝る利点はありません。


おかげで私はそれを試して、そのように動作するようになったら報告します。
ベータ14

クール。ただし、ネットワークモードを変更する必要があります。
ニルストエドマン14

1
同様のニーズがあるため、ここに来ました。少なくとも、ユースケースについては、DHCPを使用することの利点を説明できると思います。状況は明らかに異常です。2週間ごとに2つのネットワーク間を行き来するサーバーがあります。約10人のゲストがいます。ネットワークの1つにはDHCPサーバーがあります(私にとっては制御が難しい)が、もう1つにはありません。DHCPを使用することはほとんどありません。ホストのIPを変更し、それに基づいてゲストIPアドレスなどを自動的に更新する方法を探しています(自動化にchefを使用しているので、IPアドレスを設定したら、すぐに使用できます)。
ケビン・キーン

2
ネットワークを破壊して再起動しない限り、変更が有効にならないことを確認できます。奇妙なことに、VMをシャットダウンしてから起動する必要があることもわかりました。単純に再起動すると、インターフェイスが壊れた状態のままになります。
-orodbhen

ネットワークを再起動しても、DHCPリースは更新されません。このためには、/ var / lib / libvirtd / dnsmasqのネットワークのステータスファイルを削除する必要があります
orodbhen


3

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

公式の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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.