KVM を実行している VM の IP を見つける

KVM を実行している VM の IP を見つける

KVM 上の VM の IP を見つけるにはどうすればよいですか (Nmap を使用)? そうでない場合、Libvirt にそれを行う関数はありますか?

答え1

Centos 63 x86_64 上の KVM の簡単な例。このセグメント内の VM が持つ可能性のあるすべての IP アドレスに対してバックグラウンドで短い ping を実行します。

for i in {1..249}
 do
  ping -c 1 -n -q -r  -t 1 -s 1  -W 1   192.168.100.$i > /dev/null &
done

virsh経由でVMの名前とMACアドレスを抽出し、ARPテーブルからIPを抽出します。

for name in `virsh list | grep running | awk '{ print $2 }'`
do
  printf  "\n$name\n "
  arp -e | grep "`virsh dumpxml  $name | grep "mac address"|sed "s/.*'\(.*\)'.*/\1/g"`" | 
  awk '{ printf  $1 ;  printf  " "  ; printf  $3 }'
done

答え2

長時間手を汚した後、私は偶然これ素晴らしいリンク。

  1. VM の構成ファイルから VM の MAC アドレスを取得します (KVM を使用しているため、MAC アドレスについては .xml ファイルを照会しました)。
  2. 次にarp -aを使用して、すべてのMACアドレスとインターフェースのアドレスを取得し、ファイルに保存します。
  3. ステップ 1 の VM の MAC アドレスをファイルで照会します。

答え3

私はこれを実行する bash スクリプトを作成しましたが、名前に「swarm」が含まれるマシンもフィルタリングします。必要に応じて、フィルタを削除したり変更したりできます。(削除| grep "swarm") これを完全なスクリプトとして使用するか、1 行の部分をコピーして貼り付けることができます。

#!/usr/bin/env bash
# we make assumption that the VM's we want have the word swarm in their name.  Edit for different name or to get all unfiltered names
for i in $(virsh list | grep "swarm" | awk '{print $2;}' ); do virsh domifaddr $i | sed 3q | sed '$!d' |awk '{print $4}'  ; done;

構成要素は、virsh listすべての VM のリストを取得する virsh コマンドと、domifaddr <VM NAME>その IP アドレスを取得する for ループ呼び出しです。残りはすべて、テキストを 1 行につき 1 つの IP アドレスのみにフィルタリングします。私はこれを Ubuntu KVM サーバー 15.10 で作成/実行しました。

答え4

virt-cat コマンドを使用すると、VM 上のすべてのファイルを照会できます。たとえば、dhcp リース ファイルは次のようになります。

virt-cat -d your_domain /var/lib/dh​​cp/dhclient.eth0.leases

関連情報