qemuのネットワーク設定

qemuのネットワーク設定についてしょっちゅう検索するので、ここにメモしておく*1


ここではホスト上でbridgeを作成し、そこにゲストを接続する方法を説明する。


まず、ホストでbridgeを作成する方法。

1. NetworkManagerを切る
最近のFedoraでは、基本的にNetworkManagerでネットワークの管理をしているんだけど、ここでは使わないので、切っておく。

# systemctl stop NetworkManager.service
# systemctl disable NetworkMnager.service


2. 設定ファイルの作成
/etc/sysconfig/network-scripts/ifcfg-eth0*2を例えば下記のように変更。

NM_CONTROLLED="no"
HWADDR="00:1E:4F:B9:95:E9"
BOOTPROTO="dhcp"
DEVICE="eth1"
ONBOOT="yes"
BRIDGE="br0"


/etc/sysconfig/network-scripts/ifcfg-br0*3を作成。

NM_CONTROLLED="no"
BOOTPROTO="dhcp"
DEVICE="br0"
ONBOOT="yes"
TYPE="Bridge"


3. networkサービスの起動
networkサービスを(再)起動

# systemctl start network.service
# systemctl enable network.service


4. qemu用ネットワークスクリプトを作成
qemu起動時に利用するネットワークスクリプトを/etc/qemu-ifupとして作成*4

#!/bin/sh

set -x

if [ -n "$1" ]; then
        /usr/bin/sudo /usr/sbin/tunctl -u `whoami` -t $1
        /usr/bin/sudo /sbin/ip link set $1 up
        sleep 1s
        /usr/bin/sudo /usr/sbin/brctl addif br0 $1
        exit 0
else
        echo "Error: no interface specified"
        exit 1
fi


(注意)本当はqemu-ifdownも作らなきゃいけないんだけど、無くても動くからとりあえず後回し


5. 起動
ネットワーク関連の設定は下記

# qemu -net -nic -net tap

*1:ググればすぐでてくるので、書く必要も無いけど・・

*2:NICがeth0の場合

*3:br0は作成するbridgeの名前

*4:Linux kernel hackを参照