KVM NATのDHCPで割り当てられたIPアドレスを確認する (Ubuntu)


「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 * *