「Ubuntuで運用しているKVM環境にゲストOSを作成したが、まだゲストにコンソールを設定しておらず、virsh consoleを使えない状況である。ゲストOSのネットワーク設定はNAT接続としてインターフェイスにはDHCPの設定をしているので、IPアドレスが割り当てられているはずだがIPアドレスが分からない。IPアドレスが分かればSSHできるのだが・・・」
というケースが実際にあったので、KVM側(ハイパーバイザ側)にログインした状態で、ゲストOSへ割り当てられたIPアドレスを確認できないか調べてみた。
IPアドレス確認方法
結論から先に書くと、下記のパスにあるファイルを確認すればよい。
IPアドレスが確認出来れば、あとはSSHでログインするだけである。
$ cat /var/lib/libvirt/dnsmasq/default.leases
1448180977 XX:XX:XX:XX:XX:XX 192.168.122.57 * *
複数のゲストOSが起動していて、どれが目的のゲストか分からない場合はvirsh dumpxmlでMACアドレスを確認するとよいだろう。
$ sudo virsh dumpxml guestname
...
<interface type='network'>
<mac address='XX:XX:XX:XX:XX:XX'/>
<source network='default'/>
<target dev='vnet0'/>
<model type='virtio'/>
<alias name='net0'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</interface>
...
詳細
KVMのNAT環境ではDHCPサーバとしてdnsmasqが使用されていて、defaultというネットワークにおいてDHCPのリクエストをすると192.168.122.0/24のIPアドレスが割り当てられる。
プロセスの引数からも推察されるようにdnsmasqが割り当てた情報は/var/lib/libvirt/dnsmasq/default.leasesに記載されている。
$ sudo virsh net-list
Name State Autostart
-----------------------------------------
default active yes
$ ps ax |grep dnsmasq
1358 ? S 0:00 /usr/sbin/dnsmasq -u libvirt-dnsmasq --strict-order --bind-interfaces --pid-file=/var/run/libvirt/network/default.pid --conf-file= --except-interface lo --listen-address 192.168.122.1 --dhcp-range 192.168.122.2,192.168.122.254 --dhcp-leasefile=/var/lib/libvirt/dnsmasq/default.leases --dhcp-lease-max=253 --dhcp-no-override
$ cat /var/lib/libvirt/dnsmasq/default.leases
1448180977 XX:XX:XX:XX:XX:XX 192.168.122.57 * *