--- title: KVMで仮想環境を整えてみる – (2) author: kazu634 date: 2011-07-04 url: /2011/07/04/_1716/ wordtwit_post_info: - 'O:8:"stdClass":13:{s:6:"manual";b:0;s:11:"tweet_times";i:1;s:5:"delay";i:0;s:7:"enabled";i:1;s:10:"separation";s:2:"60";s:7:"version";s:3:"3.7";s:14:"tweet_template";b:0;s:6:"status";i:2;s:6:"result";a:0:{}s:13:"tweet_counter";i:2;s:13:"tweet_log_ids";a:1:{i:0;i:5437;}s:9:"hash_tags";a:0:{}s:8:"accounts";a:1:{i:0;s:7:"kazu634";}}' categories: - kvm - linux ---

前回はとりあえずOSイメージを指定して、OSをインストールするところまでできたと思います。OSインストール終了後にリブートすると、おそらくKVM上のゲストOSは再起動しないので、次のコマンドを実行してあげます:

$ sudo virsh start <ゲストOSの名前>

これで CD のマウントオプションを除いて、 virt-install で指示したオプション通りにゲストOSを起動してくれます。しかしここでつまずきの種が。。。

ゲストOSのネットワーク設定について

さて KVM で作成したゲスト OS はNATになります。ゲストOSから外部への通信はできるのですが、ホストOSを含む外部からゲストOSへのアクセスは出来ません。VMWareなんかだとNAT接続でもホスト-ゲスト間は通信できるのですが、KVMはそうではないみたいです。

そこでブリッジ接続(ホストOSと同じネットワークセグメントのIPアドレスで通信)をできるようにしてみます。

事前準備

事前に次のコマンドを実行します:

$ sudo apt-get install libcap2-bin
$ sudo setcap cap_net_admin=ei /usr/bin/qemu-system-x86_64 # x64の場合
$ sudo setcap cap_net_admin=ei /usr/bin/qemu               # x32の場合

ブリッジ接続の設定方法

私のホストOSのUbuntuくんはNICが一枚です。初期状態だとネットワークの設定(/etc/network/interfaces)はこんな感じのはず:

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
auto eth0
iface eth0 inet dhcp

静的にIPアドレスを割り当てている場合には、こんな感じになるのかな:

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
auto eth0
iface eth0 inet static
address 192.168.11.8
netmask 255.255.255.0
network 192.168.11.0
broadcast 192.168.11.255
gateway 192.168.11.1

それを次のように変更してしまいます。なお、IPアドレス 192.168.11.8/24,ゲートウェイが192.168.11.1としてホストOSにアクセスすることとします:

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
auto eth0
iface eth0 inet manual
auto br0
iface br0 inet static
address 192.168.11.8
netmask 255.255.255.0
network 192.168.11.0
broadcast 192.168.11.255
gateway 192.168.11.1
bridge_ports eth0
bridge_stp off
bridge_fd 0
bridge_maxwait 0

参考:

ゲストOSのNICを変更する

ブリッジの接続設定を実施した後は、ゲストOSに割り当てたNICを変更してあげます。「/etc/libvirt/qemu/<ゲストOS名>」という名称の設定ファイルを書き換えます:

変更前:

<interface type='network'>
<mac address='52:54:00:bc:d1:55'/>
<source network='default'/>
<model type='virtio'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
</interface>

変更後:

<interface type='bridge'>
<mac address='52:54:00:bc:d1:55'/>
<source bridge='br0'/>
<model type='virtio'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</interface>

MACアドレスは変更しないほうがいいと思うよ。ネットワークの設定を変更後、設定を反映してあげます:

$ sudo virsh define <変更した設定ファイル名>

virt-installコマンドでブリッジ接続のNICをゲストOSに割り当てる

こんな感じでコマンドを指定します:

$ sudo virt-install --connect qemu:///system --name gateway --ram 256 --disk path=gateway.img,size=10 --network bridge=br0,model=virtio --vnc --cdrom /mnt/nas/kazu634/OSimages/ubuntu/ubuntu-10.04.2-server-amd64.iso

virt-installコマンドで複数NICになるようしてゲストOSを作成する

こんな感じで、–networkを複数指定します:

sudo virt-install --connect qemu:///system --name gateway --ram 256 --disk path=gateway.img,size=10 --network bridge=br0,model=virtio --network network=default,model=virtio --vnc --cdrom /mnt/nas/kazu634/OSimages/ubuntu/ubuntu-10.04.2-server-amd64.iso
KVM徹底入門 Linuxカーネル仮想化基盤構築ガイド

KVM徹底入門 Linuxカーネル仮想化基盤構築ガイド