2012-10-24 曇り,上着がないと昼間でも肌寒い [長年日記]
_1 KVMゲストのDHCPアドレスが変わらないようにする方法
手元のマシン上で動いているscreenに再接続(attach)し,KVMゲストでの作業を継続しようとしたら
localhost% Write failed: Broken pipe
とだけ出ててセッションが切れてた.
で割り当てられているIPアドレスを確認すると一つ番号がズレていることに気付く.どうやらDHCPからのリース期間が終わったらしい*1.
# cat /var/lib/libvirt/dnsmasq/default.leases 1351139962 aa:bb:cc:dd:ee:ff 192.168.122.183 * *
毎度変わるのは面倒なのでリース期間を伸ばすことにする.ググったところlibvirtはDHCPサーバーとしてdnsmasqを利用しているそうで,dnsmasqの設定方法を確認./etc/dnsmasq.confに
dhcp-range=[[net:]network-id,]<start-addr>,<end-addr>[[,<netmask>],<broadcast>][,<lease time>]
などのように書けばいいらしい.ずっとリースしっぱなしにするにはlease timeにinfiniteと設定するそうな.で設定をしようとしたが/etc/dnsmasq.confには何も設定されていないことが判明.じゃあ今動いているdnsmasqはどうやって192.168.122.のアドレスを配っているのか.
とおもむろにpsコマンドを叩いてみると
nobody 53665 0.0 0.0 12984 600 ? S Oct24 0:00 /usr/sbin/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 --dhcp-hostsfile=/var/lib/libvirt/dnsmasq/default.hostsfile (本当は一行)
となってて引数に直接渡してるらしいことが判明.--dhcp-rangeの引数にlease timeが設定されていないのでこの引数のもととなっているファイルを探し出しそこに設定すれば良いはず.
調べたところdnsmasqへの引数が設定されるファイルは/etc/libvirt/qemu/networks/default.xml.libvirtのページでNetwork XMLの仕様を調べてみるが,rangeはあるもののlease timeについての記述はない.設定できないようだ.これは困った.
ただこのページのAddressingの項目を見るとどうやらMACアドレスでIPアドレスを固定できることを知る.なんか悔しいが固定できればいいのでこれにしたがうことにする.
<host mac='aa:bb:cc:dd:ee:ff' ip='192.168.122.7' />
virsh net-editで設定ファイルを書き換え,virsh net-destoryでネットワークを止め,現在の払い出し情報が記述されているファイル(/var/lib/libvirt/dnsmasq/default.leases)を削除し*2,virsh net-startでネットワークを開始.
# ls /var/lib/libvirt/dnsmasq default.hostsfile default.leases
すると新しくdefault.hostsfileというファイルが作成され,先ほど設定した内容が記述されてた.leaseの状態を見てもIPアドレスが正しく払いだされていることが分かる.
# cat /var/lib/libvirt/dnsmasq/default.hostsfile aa:bb:cc:dd:ee:ff,192.168.122.7 # cat /var/lib/libvirt/dnsmasq/default.leases 1351141374 aa:bb:cc:dd:ee:ff 192.168.122.7 * *
ということで当初のリース期間を長くするという方法はうまく行かなかったが,MACアドレスをキーに必ず同じアドレスを払い出すという方法で,KVMゲストに割り当てられるIPアドレスを固定することができた.