フリーのエミュレータQEMUを使おう

 
  YAMAMORI Takenori ●yamamori@kt.rim.or.jp

●ネットワーク

QEMUのネットワークには,ユーザモードネットワーク(-user-net)と, TUN/TAPを使ったネットワークの2種類があります. TUN/TAPの設定スクリプトが存在しない場合は,デフォルトで-user-netになります.

○ユーザモードネットワーク(-user-net)

ユーザモードネットワーク(-user-net)の構成を下図に示します. このように,-user-netは,QEMU内部に仮想のNAT/DHCPサーバやDNSサーバなどが 自動的に用意される,非常に便利なモードです. ゲストOSは,単にDHCPクライアントとして動作させるだけでよく, そのままLANやインターネットにアクセスすることができます.

しかし,-user-netでは,ゲストOS側のネットワークが,ホストOS側からは 直接見えません.このため,ホストOS(またはLAN上のほかのホスト)から ゲストOSにアクセスしたい場合は,QEMUの起動時に-redirオプションを付け, TCPやUDPのポート単位でのリダイレクト(ポートフォワード)が必要になります. たとえば,ゲストOS内のWebサーバにアクセスできるようにするには, 「-redir tcp:8080::80」というオプションを付けてQEMUを起動し, ゲストOSの80番ポートの代わりにホストOSの8080番ポートにアクセスするように しなければなりません.

このことが問題になる場合は,次項のTUN/TAPを使ったネットワークを 使う必要があります.

・図 ユーザモードネットワーク(-user-net)
---
   +------------(ホストOS)-----------------------------------+
   | +-------------+    +-------------+    +-------------+   |
   | |             |    |             |    |             |   |
   | |  ゲストOS   |    |  DNSサーバ  |    | Sambaサーバ |   |
   | |             |    |             |    |             |   |
   | +------+------+    +------+------+    +------+------+   |
   |        |eth0(10.0.2.15)   |10.0.2.3          |10.0.2.4  |
   |        +------------------+------------------+          |
   |                           |10.0.2.2                     |
   | +-------------+    +------+------+                      |
   | |             |    |  NAT        |                      |
   | | ホストOS本体|    |  DHCPサーバ |                      |
   | |             |    |             |                      |
   | +------+------+    +------+------+                      |
   |        |                  |                             |
   |        +----+-------------+                             |
   +-------------|-------------------------------------------+
                 |eth0(例:192.168.1.2)
                 |
 |===============+=================================================|
                                                       LANおよびインターネット


○TUN/TAPを使ったネットワーク

TUN/TAPを使ったネットワークでは,ゲストOSとホストOSの間が TUN/TAPデバイスによる仮想ネットワークで接続されます(下図). これは,-user-netとは違って,ホストOSからゲストOSへ向かう インターフェイスがtun0として見え,ホストOSからポートフォワードなしに, ゲストOSにアクセスすることができます.

ただし,-user-netにはあったNAT/DHCPサーバやDNSサーバはQEMU側では用意されず, 必要に応じてNATやDNSやIPフォワーディングなどの設定を 別途行なわなければなりません.

・図 TUN/TAPを使ったネットワーク
---
   +--------(ホストOS)-------------+
   |      +-------------+          |
   |      |             |          |
   |      |  ゲストOS   |          |
   |      |             |          |
   |      +------+------+          |
   |             |eth0(例:10.0.0.2)|
   |             |                 |
   |             |tun0(例:10.0.0.1)|
   |      +------+------+          |
   |      |             |          |
   |      | ホストOS本体|          |
   |      |             |          |
   |      +------+------+          |
   +-------------|-----------------+
                 |eth0(例:192.168.1.2)
                 |
 |===============+===========================| LANおよびインターネット
・tunモジュールのロード

TUN/TAPを使うには,まず下図のようにtunモジュールをカーネルにロードします. この時,デバイスファイルの/dev/net/tunがない場合は作成し, これを自分のユーザ権限でアクセスできるよう, パーミッションやグループを設定します.

・図 デバイスファイルの作成とtunモジュールのロード
----
# cd /dev; ./MAKEDEV net      ←/dev/net/tunがなければ作る
# chmod 660 /dev/net/tun      ← 自分のユーザ権限でアクセスできるパーミッション
# chgrp mygroup /dev/net/tun     に設定する
# modprobe tun                ← tunモジュールをロードする
----
・qemu-ifupの記述とsudoの設定

次に,QEMUの起動時に呼び出される,/etc/qemu-ifupというシェルスクリプトを 下のリストのように記述します.この中には,ホストOS側のtun0に設定する IPアドレスを書いておきます.なお,リスト中の"$1"は,実際にはtun0から 順にインターフェイス名に展開されます.

・リスト /etc/qemu-ifup
----
#!/bin/sh

sudo /sbin/ifconfig "$1" 10.0.0.1
----

さらに,qemu-ifup内でsudoを使用しているため,/etc/sudoersに下のリストのような 記述を追加し,自分自身のユーザ権限でsudoが使えるようにします. usernameのところは自分のユーザ名を記述します.

・リスト /etc/sudoers
----
username        ALL=(ALL) ALL
----
・ゲストOS側のネットワークの立ち上げ

以上のホストOS側の設定後,ゲストOSを起動し, 今度はゲストOS内でネットワークの設定を行ないます. ゲストOSがLinuxの場合は,下図のように NE2000 PCIのモジュールであるne2k-pciをロードし, ifconfigでIPアドレスを割り当てればOKです.

・図 ゲストOS側のネットワークの立ち上げ
----
# modprobe ne2k-pci       ← モジュールがロードされていなければロードする
# ifconfig eth0 10.0.0.2  ← ゲストOS側のIPアドレスを割り当てる
----

To『フリーのエミュレータQEMUを使おう』[index]


このページは、技術評論社 Software Design 2005年7月号、『QEMU使いこなしテクニック(Linux編)』の原稿を元に、Web 用に再構成したものです。
To 謎の処理系 SunOS 4.1.4 [Home]
yamamori@kt.rim.or.jp