QEMUネットワーク設定メモ

環境

OS Ubuntu Linux 9.04
QEMU 0.10.6 ソースからビルド

いきさつ

以下のオプションで、QEMU内でNATが構成され外に出られるはず、なのだがうまくいかない。
状況としては、名前解決は出来ているし、QEMU内のデフォルトゲートウェイまではpingが通っている。

 -net nic -net user

しかたがないので、ちゃんとTAPでブリッジするよう設定することにした。

tunデバイスの確認

/dev/net/tunが無ければ、以下の手順で作成する。

cd /dev; sudo ./MAKEDEV net
sudo chmod 660 /dev/net/tun
sudo chgrp 自分の所属するグループ /dev/net/tun
sudo modprobe tun 

#今回は、以前apt経由でQEMUをインストールした事があったせいか、/dev/net/tunはあった。

ブリッジの設定

sudo apt-get install bridge-utils            #brctlコマンド等を使えるようにする


sudo ifconfig eth6 down
sudo ifconfig eth6 0.0.0.0             #実インタフェースのIPアドレスをクリア
sudo brctl stp br0 off               #spanning treeを切る?
sudo ifconfig br0 xxx.xxx.xxx.xxx          #ホストOSが外部に接続するためのIPアドレスを静的(DHCP経由は不可?)に設定.これをやらないとゲストだけしか外に出られない?
sudo brctl addbr br0                #ブリッジ用の仮想インタフェース?br0を作成
sudo brctl addif br0 eth6              #br0とホストマシンの実インタフェースとのブリッジを設定
sudo ifconfig br0 up              #ひとまず起こしておく
sudo route add default gw xxx.xxx.xxx.xxx   #ホストOSが外部に出るためのゲートウェイを静的(DHCP経由は不可?)に設定.これをやらないとゲストだけしか外に出られない?

QEMU起動時に使用するスクリプトqemu-ifupを以下の内容で作成。場所はどこでも良い。

#! /bin/sh
/sbin/ifconfig $1 0.0.0.0 promisc up
/usr/sbin/brctl addif br0 $1

パーミッションを755にしておく

sudo chmod 755 qemu-ifup

起動

以下のように一般ユーザ権限で実行すると

qemu -localtime -m 256 -hda some_image.raw -net nic -net tap,ifname=tap0,script=/etc/qemu-ifup
warning: could not configure /dev/net/tun: no virtual network emulation
Could not initialize device 'tap'

と怒られた。/dev/net/tunのアクセス権限を777にしてみても同じ結果。
なので、しかたがなくroot権限で

sudo qemu -localtime -m 256 -hda some_image.raw -net nic -net tap,ifname=tap0,script=/etc/qemu-ifup

# ,downscript=スクリプトファイルのパス
# を追加すると、QEMU終了時にネットワーク関連の終了処理を行うスクリプトも実行できる。

としたら、うまくいった。


(ホストマシンが所属するネットワークの)DHCPサーバから正しくIPを取得して、外に出られている。
ホストOSから、ゲスト内への通信も問題なく行える。