June 29, 2009

kvmのブリッジ設定

最近、研究室のUbuntuマシンで、kvmをいじっているのだが、今日になってようやくブリッジによるネットワーク設定が出来たので、備忘録を書いておく。ちゃんと整理したものについても、そのうち書きたいと思う。

前提として、kvm自体の環境は一通り整っているものとする。

まずはブリッジ設定に必要なパッケージのインストール。
# apt-get install  bridge-utils uml-utilities
さらに、モジュールをロードしておく。
# modprobe bridge tun
これでブリッジとTUN/TAPデバイス(仮想ネットワークインターフェイス)が使えるようになる。毎回このコマンドを実行するのは面倒なので、/etc/modulesに
tun
bridge
の二行を追加しておくとよい。

次に、エディタで/etc/network/interfacesを開く。
auto lo
iface lo inet loopback

iface eth0 inet manual

auto br0
iface br0 inet static
address    192.168.0.2
network 192.168.0.0
gateway    192.168.0.1
broadcast    192.168.0.255
netmask    255.255.255.0

pre-up /sbin/ifconfig eth0 0.0.0.0 promisc up
pre-up /usr/sbin/brctl addbr br0
pre-up /usr/sbin/tunctl -u ユーザ名 -t tap0
pre-up /sbin/ifconfig tap0 0.0.0.0 promisc up
post-up /usr/sbin/brctl addif br0 eth0
post-up /usr/sbin/brctl addif br0 tap0
pre-down /sbin/ifconfig tap0 down
pre-down /sbin/ifconfig eth0 down
post-down /sbin/ifconfig br0 down
post-down /usr/sbin/brctl delbr br0

と編集する。br0のアドレス設定は環境によって適宜変えること。別にdhcpでも構わない。"ユーザ名"としたところは、実際にkvmコマンドを使うユーザの名前を書いておく(管理者権限なら"root")。

今までは実NICのeth0にIPアドレスやゲートウェイなどのネットワーク設定がなされていたと思うが(環境によってはeth1のように、別の名前になっていたりするかも)、その設定はブリッジであるbr0というインターフェイスに渡す。そして、ネットワークブリッジであるbr0に実NICのeth0と仮想NICのtap0を追加する。ここで、これらのインターフェイスをプロミスキャスモード(promiscオプション)で立ち上げることで、TUN/TAPデバイス(仮想NIC)宛のパケットを実NICが受信できるようにしているのだ。

これらの設定が終わったらネットワークを再起動する。
# /etc/init.d/networking restart
で先ほど書いた設定が反映されるはずだ。端末からifconfigコマンドを使えばbr0やtap0といったインターフェイスがあるか、また、br0にアドレスが割り振られているか等を確認することができる。

これで、設定は終わりだ。あとはkvmコマンド(OSによってはqemuコマンドかも)に"-net nic -net tap,ifname=tap0,script=no"というオプションをつけて実行すればホストOSとゲストOSが同じネットワークに参加できる筈だ。
$ kvm -hda guest.img -boot c -m 512 -no-acpi -net nic -net tap,ifname=tap0,script=no &
実際に使う時はこんな感じだろうか。どうしてもコマンドが長くなるので、エイリアスを張るなりして簡単にするといいと思う。

posted at

Ubuntu

June 23, 2009

June 18, 2009

June 09, 2009

June 03, 2009

May 13, 2009

April 27, 2009

April 26, 2009