【lenny】KVM with TUN/TAP birdged network
KVMでのTUN/TAPを使ったホストOSとゲストOSのブリッジ接続の設定。
結構ハマった。
※ゲストOSをsudoで起動しないとtapデバイスが起動(初期化)できないらしい。
1. 構成
こんな感じ。
+------------------------------------+ | | | +-------- (GuestOS) ---------+ | | | | | | | Windows2000 | | | | | | | | eth0(DHCP) | | | +-------------*--------------+ | | | | ### HostOSおよびGuestOSへのIPアドレス付与はDHCPで。 | +-------- (HostOS) ----------+ | | | tap0(virtual I/F) | | | | br0(DHCP/bridge eth0) | | | | | | | | Debian(lenny) | | | | | | | | eth0(real I/F) | | | +-------------*--------------+ | | | | | |------- (LAN/Internet) -------| | | | +------------------------------------+
2. ブリッジインタフェース(br0)の設定
# /etc/network/interfaces auto lo iface lo inet loopback auto eth0 iface eth0 inet static address 0.0.0.0 auto br0 iface br0 inet dhcp bridge_ports eth0 bridge_stp off bridge_maxwait 5
起動時にbr0が作成され、IPアドレスが付与される。
(eth0にはIPアドレスは付与されない。)
3. TAPデバイスの設定
まずは、tunモジュール確認。
# lsmod | grep tun tun 16640 0
モジュールがない場合は、以下のコマンドを実行する。
# modprobe tun
起動時にロードされるようにする。
# /etc/modules
tun
TAPデバイス起動用スクリプトを準備する。
今回は、/etc/kvm/kvm-ifupを使用します。*1
# /etc/kvm/kvm-ifup #!/bin/sh switch=$(ip route ls | awk '/^default / { for(i=0;i<NF;i++) { if ($(i) == "dev") print $(i+1) }}') /sbin/ifconfig $1 0.0.0.0 up /usr/sbin/brctl addif ${switch} $1 exit 0
4. sudoの設定
# /etc/sudoers <kvmを起動するユーザ> ALL=(ALL) ALL
5. ゲストOSの起動
$ sudo kvm -hda win2000 -boot c -m 512 -k ja -net nic -net tap,script=/etc/kvm/kvm-ifup -localtime
ゲストOSにホストOSと同セグメントのIPアドレスが付与され、直接通信ができる。
ホストOS側でifconfigを実行すると、tap0デバイスが起動している。
ちなみにsudoで起動しないと、こんな感じのエラーがでる。
warning: could not open /dev/net/tun: no virtual network emulation Could not initialize device ‘tap’
*1:デフォルトで作成されているので、そのまま使用。