環境
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から、ゲスト内への通信も問題なく行える。