QEMUブリッジネットワーク接続環境
QEMU標準のネットワーク接続タイプには次の2種類あります。
・ユーザーモード(userモード) ※ゲスト側IPアドレスは10.0.2.x
・TAPモード ※ゲスト側IPアドレスは192.168.0.x
これらはいずれもホスト側の物理ネットワークと同じネットワークアドレス体系をゲスト側に適用することはできません。
しかしNetBSDの場合はbrconfigというコマンドが標準で組み込まれており、
そのbrconfigを利用すれば特別なパッケージを導入することなくNetBSDのQEMU環境で手軽にブリッジモードが使用可能となります。
※ブリッジモードとはゲストOSがホスト側の物理ネットワークと同じネットワークアドレス体系が使えるネットワーク接続タイプを指します。
VMware, Virtual PC, Xen等ではブリッジモードを標準でサポートしています。
一般的にレガシーOSを実行させるにはQEMUが適していますがどのプラットフォームのQEMUがよいか迷うところです。
もしレガシーOSでブリッジモードを使用したいのであればNetBSD環境のQEMUがお奨めかと思います。
ここではNetBSD 5.0をホストOSにした場合のQEMUブリッジネットワーク接続環境の構築手順について紹介します(TAPの応用)。
尚、ご参考扱いでLinuxでのQEMUブリッジネットワーク接続環境構築例についても触れます。
1.マシン環境
- PC種別:Netbook(Acer Aspire Oneシリーズ AOA 150-Bb1)
- CPU:Intel Atom N270 1.6GHz
- メモリ:1GB
- 有線LAN:RealTek RTL8201L(NetBSDでのネットワークインタフェース名はre0となります)
- ホストOS:NetBSD 5.0
2.ホストOS側でのQEMU導入
ホストOSはNetBSD 5.0でXenも利用できています(詳細:Xen 3.1.4(NetBSD 5.0 on Netbook編))。
pkgsrcは導入済みとして以下のコマンドでQEMUをインストールします。
# export PKG_PATH=ftp://ftp4.netbsd.org/pub/pkgsrc/packages/NetBSD/i386/5.0/All
# pkg_add qemu-0.9.1nb1.tgz
|
3.ホストOS側でのbridgeネットワーク構築
通常のNetBSDカーネルでブートし、以下のコマンドでbridgeネットワークを構築します。
※Xen 3.1.4(NetBSD 5.0 on Netbook編)で紹介した/etc/ifconfig.bridge0は不要です。
# sysctl -w net.inet.ip.forwarding=1 ※これは省略可能です。
# ifconfig bridge0 create
# brconfig bridge0 add re0
# ifconfig bridge0 up
|
更にQEMU用のtapスクリプトを以下のようにして作成しておきます。
# vi /etc/myqemu-ifup
以下の3行を記述します。
#!/bin/sh
/sbin/ifconfig tap0 0.0.0.0 up
/sbin/brconfig bridge0 add tap0
|
# chmod 755 /etc/myqemu-ifup
4.ゲスト側でのbridgeネットワーク利用
bridgeネットワーク利用のゲスト起動のためには次のコマンドを実行します。
qemu -m 512 -hda Guest.img -net nic -net tap,ifname=tap0,script=/etc/myqemu-ifup
|
ゲスト側のDHCPでのIPアドレス取得ではホスト側物理ネットワーク上にあるDHCPサーバからIPアドレスが割り当てられます。
QEMU標準のTAPモードでの192.168.0.xという体系のIPアドレスではありません。
※ゲスト側で物理ネットワーク上のスタティックなIPアドレスを使用することもできます。
下記はゲスト側からインターネットに向けてping実行確認した様子です。
※ゲストOSはUbuntu 8.10 Server(JeOS)でXen 3.3(Fedora 10 Preview版付属Xenner編)で利用したvmu810jeosです。
[補足]
(1)bridgeネットワークですので物理ネットワーク上の他のマシンからこのQEMUゲストにssh接続したり、http接続したりできます。
(2)全く同じ手順でVMware Server上のNetBSD 5.0においてもQEMUブリッジネットワークが使用できます。
但し、VMware Server環境の場合は上記で示した「brconfig bridge0 add re0」の部分は「brconfig bridge0 add pcn0」とします。
5.NetBSD 5.0のQEMU 0.9.1ネットワーク制約事項
NetBSD 5.0のQEMU 0.9.1にはNE2000のISAカードをエミュレートできないという制約があります。
QEMUコマンドで「model=ne2k_isa」を指定すると指定メモリ量に関係なく「Memory fault (core dumped)」が発生します。
このためNE2000のISAカード用ドライバを使用するWindows 3.1はネットワーク接続不可のスタンドアロン実行となります。
尚、「-std-vga」の指定はできるのでGUI操作自体は可能です。
・QEMUでのWindows 3.1 スタンドアロン実行例
※起動コマンド:qemu -M isapc -m 48 -hda qemuw31-flat.vmdk -std-vga
6.ゲストOSをVine Linux 5.0としたbridgeネットワーク適用例
QEMUのゲストOSとして2009年8月24日にリリースされたVine Linux 5.0を使用し、かつbridgeネットワークを適用してみました。
- 仮想ディスクへのVine Linux 5.0のインストール
仮想ディスクへのVine Linux 5.0のインストール手順説明は省略します(Vine Linux 4.0との違いはあまりありません)。
尚、Vine Linux 5.0の仮想ディスクファイルをここではvine50.img(8GB固定サイズのファイル)とします。
- Vine Linux 5.0の起動
bridgeネットワーク利用のVine Linux 5.0起動には次のコマンドを実行します。
qemu -m 512 -hda vine50.img -net nic -net tap,ifname=tap0,script=/etc/myqemu-ifup
|
- Vine Linux 5.0のGDMログイン画面
- Vine Linux 5.0のデスクトップ画面
ちなみにQEMUゲスト(Vine Linux 5.0)側での/etc/X11/xorg.confはこちらです。
※[システム]メニューの[システム管理]−[ディスプレイ]で再設定した結果の/etc/X11/xorg.confです。
- Vine Linux 5.0へのXDMCP接続例
QEMUゲスト(Vine Linux 5.0)側で[システム]メニューの[システム管理]−[ログイン画面]でXDMCP接続の許可設定を行っておきます。
bridgeネットワーク利用のため他のマシンからQEMUゲスト(Vine Linux 5.0)へのXDMCP接続が可能となります。
・XDMCP接続でのGDMログイン画面
・XDMCP接続でのデスクトップ画面
7.ご参考1:Linux(Ubuntu 8.04)でのQEMUブリッジネットワーク接続環境
Linuxでも一般的によく知られている方法でQEMUブリッジネットワーク接続環境を構築できます。
但しNetBSDより若干操作しづらい面があります。
ここではUbuntu 8.04をホストOSとした場合のQEMUブリッジネットワーク接続環境の構築手順例を紹介します。
- brctlを含むパッケージの導入
Ubuntuの場合は以下のコマンドでbridge-utilsパッケージをインストールします。
# apt-get install bridge-utils
ちなみにQEMUの導入は以下のコマンドで実施します。
# apt-get install qemu
- ホストOS側でのbridgeネットワーク構築
以下のコマンドでbridgeネットワークを構築します。
# ifconfig eth0 0.0.0.0 promisc up ※本コマンドでIPアドレスが無くなりeth0単独での通信はできなくなります。
# brctl addbr bridge0
# brctl addif bridge0 eth0
# ifconfig bridge0 up
# ifconfig bridge0 物理ネットワーク上のアドレス netmask 物理ネットワーク上のnetmask
※通常、ここでの物理ネットワーク上のアドレスは元々eth0に割り当てられていたIPアドレスを指定します。
# route add default gw 物理ネットワーク上のゲートウェイアドレス
|
更にQEMU用のtapスクリプト(ブリッジ用)を以下のようにして作成しておきます。
# vi /etc/myqemubr-ifup
以下の3行を記述します。
#!/bin/sh
/sbin/ifconfig $1 0.0.0.0 promisc up
/usr/sbin/brctl addif bridge0 $1
|
# chmod 755 /etc/myqemubr-ifup
- ゲスト側でのbridgeネットワーク利用方法
ゲスト起動用に次のコマンドを実行します。
qemu -no-kqemu -m 512 -hda Guest.img -net nic -net tap,ifname=tap0,script=/etc/myqemubr-ifup
|
ゲスト側のDHCPでのIPアドレス取得ではホスト側物理ネットワーク上にあるDHCPサーバからIPアドレスが割り当てられます。
QEMU標準のTAPモードでの192.168.0.xという体系のIPアドレスではありません。
※ゲスト側で物理ネットワーク上のスタティックなIPアドレスを使用することもできます。
- ゲストOSをWindows 7としたbridgeネットワーク適用例
ここではUbuntu 8.04のQEMUゲストOSとしてWindows 7 RCを使用した場合のbridgeネットワーク適用例を紹介します。
- Windows 7仮想ディスクの作成
Windows 7はVMware Serverの仮想ディスク(8GB固定サイズ)にインストールしました。
その仮想ディスクファイル(vmwin7rc-flat.vmdk)はQEMUをインストールしたUbuntu 8.04の/root直下に転送しておきます。
- ネットワークドライバの準備
Windows 7をQEMUゲストとして実行する場合にエミュレート対象にするネットワークカードはAMD PCnetとします。
以下のコマンドでAMD PCnetのWindows XP用ドライバディスク(データCDイメージ)を作成します。
# wget http://www.amd.com/us-en/assets/content_type/utilities/V4.51.zip
# mkdir ndis5
# unzip V4.51.zip -d ndis5
# mkisofs -o ndis5win.iso -R -J ndis5
- Windows 7の起動
QEMUゲストのWindows 7をAMD PCnetのエミュレートオプション(model=pcnet)付きで起動するには以下のコマンドを実行します。
qemu -no-kqemu -m 1024 -hda vmwin7rc-flat.vmdk -cdrom ndis5win.iso -net nic,model=pcnet -net tap,ifname=tap0,script=/etc/myqemubr-ifup
|
- Windows 7でのAMD PCnet用ネットワークドライバのインストール
Windows 7はAMD PCnet用ネットワークドライバを持っていませんのでAMD PCnetを不明なデバイス(イーサネットコントロール)と見なします。
そこでまずデバイスマネージャのイーサネットコントロールの右クリックメニューの<ドライバソフトウェアの更新>を選択します。
次にドライバソフトウェアを検索する場所(今回はD:\)を指定すればドライバがインストールされます。
「ドライバソフトウェアが正常に更新されました。」というメッセージが表示され、DHCPで物理ネットワーク上のIPアドレスが取得されます。
・Webアクセスが可能となったデスクトップ例
- リモートデスクトップによるQEMUゲスト(Windows 7)接続
QEMUゲスト(Windows 7)側でリモートデスクトップ接続(RDP接続)の許可設定を行います。
bridgeネットワーク利用のため他のマシンからQEMUゲスト(Windows 7)へのRDP接続が可能となります。
下記は別マシン(これもWindows 7)からUbuntu 8.04上のQEMUゲスト(Windows 7)へRDP接続した様子です(Aero表示可能)。
※デバイスマネージャの表示からQEMU環境でのWindows 7にRDP接続していることが分かります。
別マシンからRDP接続されている際のUbuntu 8.04デスクトップの様子はこちらです。
8.ご参考2:Linux(Vine Linux 5.0)でのQEMU用ブリッジネットワーク接続環境
Vine Linux 5.0は標準では/dev/net/tunを備えていません。
しかしVirtualBox 1.3.8 for Linuxで示した方法と同じ要領でQEMU用のブリッジネットワークも構築できます。
- QEMU 0.9.1の導入
QEMUの導入は以下のコマンドで実施します。
# apt-get install qemu
- ブリッジネットワーク構成に必要なパッケージの導入
ブリッジネットワークの構成にはtunctl, brctl, dhclientコマンドを使用します。
- tunctlコマンド(TAPインタフェース作成用に使用します)
tunctlコマンドはUML(User Mode Linux)用uml_utilities_20040406.tar.bz2に含まれています。
uml_utilities_20040406.tar.bz2はhttp://user-mode-linux.sourceforge.net/old/dl-sf.htmlからダウンロードできます。
# tar xvf uml_utilities_20040406.tar.bz2
# cd tools
# make
# make install
これで/usr/bin/tunctlが作成されます。
- brctlコマンド
brctlコマンドはVine Linux 5.0用bridge-utilsパッケージに含まれておりapt-getでインストールします。
# apt-get install bridge-utils
- dhclientコマンド
dhclientコマンドはVine Linux 5.0標準付属のdhclientパッケージに入っています。
- ブリッジネットワーク構成シェルの作成
TAPインタフェース(tap0)の動的作成を含めた以下の内容をもつシェルを適当なファイル名で保存します(今回は/root/starttap0.sh)。
#!/bin/sh
tunctl -t tap0 -u root
ifconfig tap0 0.0.0.0 up
brctl addbr br0
brctl addif br0 eth0 tap0
dhclient br0
ifconfig eth0 0.0.0.0
|
[補足]
(1)tunctl -t tap0で/sys/class/net/tap0/が動的に生成されます(但し、シャットダウンで消滅します)。
(2)brctl addif br0 eth0 tap0でeth0とtap0をブリッジします。
(3)dhclient br0でブリッジにIPアドレスを割り当てます。
(4)ifconfig eth0 0.0.0.0でeth0が使用可能となります。
以下のコマンドで実行権限を付与します。
# chmod 755 /root/starttap0.sh
- ホストOSブート直後のブリッジネットワーク構成操作
ホストOS(Vine Linux 5.0)ブート直後は/dev/net/tunが存在しません。
/dev/net/tunが存在しない状態では/root/starttap0.sh中の「tunctl -t tap0 -u root」実行部分で以下のエラーとなります。
Failed to open '/dev/net/tun' : No such file or directory
そこでまず次のコマンドで/dev/net/tunを作成します。
# cd /dev; ./MAKEDEV net
# cd
# chmod 660 /dev/net/tun
# ls -l /dev/net/tun ※ /dev/net/tunの確認です。
|
次に手動で「./starttap0.sh」を実行することによってQEMU環境で使用するブリッジネットワークが構成されます。
※qemuコマンドで指定するTAPスクリプトは作成不要です(/etc/qemu-ifupも不要)。
- ゲスト側でのbridgeネットワーク利用方法
ゲスト起動用に次のコマンドを実行します。
qemu -no-kqemu -m 512 -hda Guest.img -net nic -net tap,ifname=tap0,script=no
|
ゲスト側のDHCPでのIPアドレス取得ではホスト側物理ネットワーク上にあるDHCPサーバからIPアドレスが割り当てられます。
QEMU標準のTAPモードでの192.168.0.xという体系のIPアドレスではありません。
※ゲスト側で物理ネットワーク上のスタティックなIPアドレスを使用することもできます。
(1)ゲストOS:Ubuntu 8.10 Server
下記はゲスト側からインターネットに向けてping実行確認した様子です。
※ゲストOSはUbuntu 8.10 Server(JeOS)でXen 3.3(Fedora 10 Preview版付属Xenner編)で利用したvmu810jeosです。
(2)ゲストOS:Windows 3.1
ゲストOSとしてPC/TCPソフトを導入したWindows 3.1を実行してみました。
起動コマンドは以下の通りです(「-M isapc」指定するとブートができずQEMUコンソール表示となります)。
qemu -no-kqemu -m 48 -hda /mnt/qemuw31-flat.vmdk -net nic,model=ne2k_isa -net tap,ifname=tap0,script=no -std-vga
|
・QEMU上のWindows 3.1デスクトップ ※ Webアクセス例はこちらです。
※pctcp.iniファイルには物理ネットワーク上のネットワーク体系のスタティックIPアドレス割り当てを指定しています。
※ブリッジネットワークですので物理ネットワーク上の他のマシンからQEMU上のWindows 3.1へのpingも問題なく通ります。