QEMUブリッジネットワーク接続環境(QEMU on Windows編)

QEMU環境でのネットワーク接続タイプには大きく分けて次の3種類あります。
・ユーザーモード(userモード) ※ゲスト側IPアドレスは10.0.2.x
  ※qemu起動コマンドでは「-net user」を指定
・TAPモード ※qemu起動コマンドでは「-net tap,ifname=tapインターフェース名」を指定
・Bridgeモード ※qemu起動コマンドでは「-net bridge,br=ブリッジ名」を指定(Linux版での-net bridge利用例:QEMUブリッジネットワーク接続環境(Fedora 20 QEMU/KVM編))

QEMU仮想マシンをホスト側の物理ネットワークと同じネットワークアドレス体系にするネットワーク接続をここでは「QEMUブリッジ接続」と呼ぶことにします。
このQEMUブリッジ接続はBridgeモードとTAPモードの両方で実現できますがQEMU on WindowsではBridgeモードを起動コマンドで指定しても「QEMUブリッジ接続」を実現できないようです(QEMU on Windowsのバージョン依存?)。
そこで今回はQEMU on Windows環境でQEMU仮想マシンをホスト(Windows 7実機)側の物理ネットワークと同じネットワークアドレス体系にする「QEMUブリッジ接続」をTAPモード指定で実現させる手順を紹介致します。


1.マシン環境


2.ホストOS側でのQEMU on Windows 2.1.0の導入

https://qemu.weilnetz.de/w32/2014/からqemu-w32-setup-20140801.exeをダウンロードしてフルオプションでインストールします。
インストール先はC:\qemu2.1.0等適当なフォルダーを指定します。


3.ホストOS側でのQEMUブリッジ接続環境準備


4.QEMU on WindowsのTAPモード利用によるQEMUブリッジ接続

今回はQEMU on WindowsのゲストOSとしてUbuntu 8.10日本語 Live版を使用してみました。
QEMU on Windows仮想マシンの起動パラメタで以下の指定を行います(-vga std指定があるとXの起動に失敗するため-vga stdは指定しません)。
qemu-system-i386 -m 1024 -net tap,ifname=TAPWin32V8c4 -net nic -cdrom ubuntu-ja-8.10-desktop-i386.iso -boot order=d -k ja -name "Ubuntu 8.10 Desktop"

QEMU on Windows仮想マシン側のDHCPでのIPアドレス取得ではホスト側物理ネットワーク上にあるDHCPサーバからIPアドレスが割り当てられます。
またQEMU on Windows仮想マシン側で物理ネットワーク上のスタティックなIPアドレスを設定することもできます。

下記はQEMU on WindowsのTAPモード利用によるQEMUブリッジ接続利用のゲストOS(Ubuntu 8.10日本語版)のデスクトップ例です(画面解像度:1024x768)。





5.QEMU on Windowsの通常のTAPモード利用ゲストOSとの同時実行

QEMU on Windowsの通常のTAPモード利用ゲストOS(Windows 3.1)との同時実行を試してみました。
QEMU on Windowsの通常のTAPモード利用ゲストOS(Windows 3.1)の起動パラメタで以下の指定を行います(第2仮想マシン用のMACアドレス「52:54:00:12:34:57」を追加指定しています)。
qemu-system-i386 -m 64 -net tap,ifname=TAPWin32V8c3 -net nic,model=ne2k_isa,macaddr=52:54:00:12:34:57 -hda wqemuw31-flat192.168.0.31.vmdk -boot order=c -k ja -vga std -name "Windows 3.1"
※Windows 3.1のメモリ節約のために「-vga std」指定にしています(-vga cirrus指定では24bpp(約16.8M)の色深度の画像も奇麗に表示されますがメモリを多く所要します)。

このゲストOSのWindows 3.1にはPCTCPソフトが導入されており、そのpctcp.iniファイルにはスタティックIPアドレスとして「192.168.0.31」が既に設定されています。
Windows 3.1側のDOSレベルでpctcpというコマンド(バッチファイル)を実行するとTCPネットワークが有効となり、ホストOSからDOSレベルのゲストOS(Windows 3.1)へのpingも可能となります。
尚、通常のTAPモード利用ゲストOS(Windows 3.1)からの「ping 192.168.0.1」についてはネットワーク設定環境によってOKとなったり、NG(受信パケット数が0のまま)となったりします。

更に、TAPモード指定でQEMUブリッジ接続したゲストOS(Ubuntu 8.10)からのping 192.168.0.1/192.168.0.31はNGですが、ホストOSからのping 192.168.0.1/192.168.0.31はOKとなります。

下記はQEMU on WindowsのTAPモード利用によるQEMUブリッジ接続利用のゲストOS(Ubuntu 8.10日本語版)と通常のTAPモード利用ゲストOS(Windows 3.1)を同時実行させている様子です(www.yahoo.co.jpへのping実行とwww.os-museum.comサイトへのftp実行)。



・実寸画像はこちらです。


6.補足

(1)QEMUブリッジ接続が使用できる環境での仮想マシン(Linux)側でDHCPによるIPアドレス割り当てがされなかった場合はPCを再起動してゲストOSを起動し直すか、またはゲストOS側で以下のコマンドを実行してみて下さい。
sudo dhclient

dhclient実行でもIPアドレス割り当てがされなかった場合は以下のコマンドを実行してみて下さい。
sudo ifconfig eth0 ゲストOS用スタティックIPアドレス
sudo route add default gw ホスト側のデフォルトゲートウェイアドレス
sudo passwd root ※rootユーザのパスワード設定
su - root
echo "nameserver ホスト側で指定しているDNSサーバアドレス">/etc/resolv.conf

(2)QEMU on Windpws用のネットワーク環境構築のためネットワーク設定を幾つか変更しましたが既存のネットワークは問題なく利用できます(例:Softether VPN サーバー)。
(3)Windows 7上のQEMU on Windows 0.9.0でも下記の起動パラメタでTAPモード利用による「QEMUブリッジ接続」が可能です(実行例:画面解像度は800x600)。
qemu.exe -L . -m 1024 -net tap,ifname=TAPWin32V8c4 -net nic,model=ne2k_pci -cdrom ubuntu-ja-8.10-desktop-i386.iso -boot d

(4)Windows 7上のQEMU on Windows 3.0.0ではBridgeモードを起動コマンドで指定しても「QEMUブリッジ接続」を実現できませんでした(ゲストOSの起動自体が不可)。
(5)Windows 7上のQEMU on Windows 0.9.0ではBridgeモード指定(-net bridge,br=)は未サポートですが、QEMU on Windows 2.1.0でBridgeモード指定をするとDHCPによるIPアドレス割り当てはされず手動でネットワーク設定してもネットワーク機能自体が動作しません(ホストOSからゲストOSへのpingもNG)。
(6)ホストOS側にワイヤレスネットワークアダプタを接続した場合、TAPモード指定のQEMUブリッジ接続ではない通常のTAPモードネットワーク利用のゲストOSでインターネット接続ができなくなることがあります(ゲストOSがUbuntu 8.10の例)。
(7)本題から外れますがQEMU on Windows 0.9.0でもvncオプション(-vnc :x)が使用できます。
  iPhoneからQEMU実行環境ネットワークにVPN接続してVNC ViewerでWindows 3.1を操作している様子はこちらの動画です(円形動画大きいサイズの動画)。