kvmでbridge接続再び
kvmでNICをbrdige接続する方法がやっとわかった。tapはeth0に直接繋がらないのに継ごうとscriptがするから駄目だという話だった。
tapはbr0に繋ぐ必要がある。がー、何も気付かずにやっているとeth0なんかを継いでしまうので駄目だということ。次のようなエラーが出てしまう。Debianの kvm-72 だとスクリプトがdefaultがあるインターフェイスにしようとする。
can't add tap0 to bridge eth0: Operation not supported
問題を正しく認識してなくてeth0じゃなくてeth1にしたらどうかとスクリプト中で決め打ちでやってみたが同じエラー。tapはbr0に継ぐのはわかっていたが自動的にqemu-kvmが処理してくれるわけではなかった。
br0を有効にするための手順は以下のとおり。ちなみにeth1をkvm専用としてbr0で通常の通信を使わない環境で実験している。
# ifconfig eth1 promisc up
# brctl addbr br0
# brctl addif br0 eth1
# ifconfig br0 up
/etc/kvm/kvm-ifupを次のようにする。
#!/bin/sh
switch=br0
/sbin/ifconfig $1 0.0.0.0 up
/usr/sbin/brctl addif ${switch} $1
exit 0
で次のとおりにkvmを実行する。
# kvm vm-disk.img -m 512 -localtime -net nic -net tap,script=/etc/kvm/kvm-ifup
使用したあとに br0 を消すには次のとおり
# /sbin/ifconfig eth1 down
# /sbin/ifconfig br0 down
# /usr/sbin/brctl delbr br0
br0で通常の通信をするつもりなら /etc/network/interface で br0に IPを設定しまえば自動でやってくれて楽になる。
auto br0
iface br0 inet static
address 192.168.11.2
netmask 255.255.255.0
gateway 192.168.11.1
pre-up /sbin/ifconfig eth1 promisc up
pre-up /usr/sbin/brctl addbr br0
post-up /usr/sbin/brctl addif br0 eth1
pre-down /sbin/ifconfig eth1 down
post-down /sbin/ifconfig br0 down
post-down /usr/sbin/brctl delbr br0
ということで eth0 で同じことをやれば増設NICなしでできるものと思われる。
追記:kvmのディスクイメージは qcow2 フォーマットが最新のようだ。いままではqcowでやっていたが古い。
# qemu-img create -f qcow2 vm-disk.img 30G

Debian QA
Facebook (taniguchi.takaki)
Twitter (@takaki_t)