kvm on debian (centos 5.5-i386ゲスト編)


導入するパッケージは kvmとbridge-utils

# apt-get install kvm bridge-utils

 インストール後、kvmを実行するユーザーをkvmグループのメンバーにします
めんどうなので /etc/group直編集




http://www.atmarkit.co.jp/flinux/rensai/kvm02/kvm02a.html

ML115でやってみた。VMwareとかにくらべて癖がない分いいかも

centos5(i386)をゲストOS(つーのか? 注正解は
親を仮想ホストとか物理サーバとか、子は仮想マシン、仮想サーバ、VM
とよぶのが正解らしい)にする場合は

hirasawa@deb505-64-38:~$ kvm-img create -f qcow2 cent55-i386.img 50G

50GBFormatting 'cent55-i386.img', fmt=qcow2, size=52428800 kB
hirasawa@deb505-64-38:~$ 
hirasawa@deb505-64-38:~$ kvm -hda cent55-i386.img -cdrom /home/hirasawa/CentOS-5.5-i386-netinstall.iso -boot d -m 2GB -monitor stdio

てな感じでnetinstall.isoのisoイメージを直指定でうまくいく
(注 /var/lib/libvirt/images がdefaultな置き場でストレージプールとよぶ
そうだ、知らんかったよ)

プロトコルはhttpまたはftp
指定先は
ftpサーバの指定はftp.riken.jp
ディレクトリは/Linux/centos/5/os/i386

まずは無難にdhcpによるアドレス配布をつかってみる

インストール終了後は以下のようにkvmを機動
(network越しにkvmサーバがある場合は Xプロトコルが通貨できるように設定するのをわすれないように)

hirasawa@deb505-64-38:~$ kvm -hda cent55-i386.img -boot c -m 2GB -monitor stdio
QEMU 0.9.1 monitor - type 'help' for more information
(qemu) 

起動したcentosのethernetaddr/ipは次のようになる。

eth0 52:54:00:12:34:56
inet 10.0.2.15/24

default routeは
default via 10.0.2.2 dev eth0

resolov.confをみると
nameserverが10.0.2.3
になっている。
ふーん

この状態だと、ゲストOSはホストOSを介してのみ、外部に接続できる、って仕組みなんですな。
(これではなんともなりませんなw)

nmapで調べてみると

10.0.2.2では、22(ssh),25(smtp),111(rpcbind),513(login),514(shell),631(ipp)
なる6つのportが開いている。ちなみにMACは52:54:00:12:35:02(QEMU)。

10.0.2.3では、22(ssh),53(domain),111(rpcbind),513(login),514(shell),625(unknown)
なる6つのportが開いている。ちなみにMACは52:54:00:12:35:03(QEMU)。


kvm独自の文化があることがわかりますな

 -net userオプションでは、デフォルトゲートウェイとしてDHCPサーバが組み込ま
れたQEMU FW/DHCP(10.0.2.2)が、DNSのリゾルバとしてQEMU DNS(10.0.2.3)が自
動的に指定されます。ゲストOSは、QEMUを介して外部ネットワークにアクセスするこ
とはできますが、10.0.2.2 がファイアウォールとして機能するため、ホストOSの外
部ノードはもちろん、ホストOSからも、ゲストOSに対しネットワーク経由でアクセス
することはできません。

だそうです。




ちなみにx86_64のcentos5(as guest OS)だとカーネルパニックをおこすしてインストールは成功しなかった。(速攻であきらめw)

kvmネットワークの設定方法(redir)

1)先にやったような10.0.2.xなるクローズドな環境の場合、


 ただし、192.168.1.x(host OSの属する物理LAN網)にはhostOS(ルータとして動く)越しでアクセス可能。
 
HostOSの属する物理LAN網から10.0.2.xにはアクセス不可(10.0.2.2もNGと思う)

hirasawa@deb505-64-38:~$ kvm -hda cent55-i386.img -boot c -m 2GB -monitor stdio

2) redir オプション (redir tcp:2222::22) ... hostの2222ポートとguestの22ポートをバインドして、 host:2222 から guest:22へリダイレクト

これにて、特定のポート(ここではguest:22ポート)へのアクセスができるようになる

LAN内の外部PCからホストPCにnmapをかけると

hirasawa@ubuntu910-11:~$ nmap 192.168.1.38

Starting Nmap 5.00 ( http://nmap.org ) at 2011-02-07 11:53 JST
Interesting ports on deb505-64-38.hirasawa.local (192.168.1.38):
Not shown: 997 closed ports
PORT     STATE SERVICE
22/tcp   open  ssh
111/tcp  open  rpcbind
2222/tcp open  unknown

Nmap done: 1 IP address (1 host up) scanned in 0.17 seconds
hirasawa@ubuntu910-11:~$ 

LAN内の外部PCからport2222にsshをかけてみるですよ

hirasawa@ubuntu910-11:~$ ssh -p 2222 192.168.1.38
The authenticity of host '[192.168.1.38]:2222 ([192.168.1.38]:2222)' can't be established.
RSA key fingerprint is 9b:2e:2d:71:6c:56:f0:c4:f5:c6:75:e1:4e:5e:c4:a4.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '[192.168.1.38]:2222' (RSA) to the list of known hosts.
hirasawa@192.168.1.38's password: 
[hirasawa@localhost ~]$ 

ぱちぱち

kvmネットワークの設定方法(bridgeを使用)

(注意! network越しの向う側のサーバでこの手順でやると、networkが切断されてしまい、
はるばるそのサーバ実機のところまで出かけるはめになりまする)
どうやって回避するか考え中www

(もうそろそろGUI(virt_managerだっけ?)に移行かwww)
まず、ホストOSのetherPortをpromiscにする。
設定前と設定後はこうなる。(promiscにする必要あるかね?)

deb505-64-38:~# ip addr
1: lo:  mtu 16436 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0:  mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 18:a9:05:55:xx:xx brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.38/24 brd 192.168.1.255 scope global eth0
    inet6 2001:c90:ea4:3011:1aa9:5ff:fe55:xxxx/64 scope global dynamic 
       valid_lft 2591977sec preferred_lft 604777sec
    inet6 fe80::1aa9:5ff:fe55:xxxx/64 scope link 
       valid_lft forever preferred_lft forever

deb505-64-38:~# ip link set eth0 promisc on

deb505-64-38:~# ip addr
1: lo:  mtu 16436 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0:  mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 18:a9:05:55:xx:xx brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.38/24 brd 192.168.1.255 scope global eth0
    inet6 2001:c90:ea4:3011:1aa9:5ff:fe55:xxxx/64 scope global dynamic 
       valid_lft 2591924sec preferred_lft 604724sec
    inet6 fe80::1aa9:5ff:fe55:xxxx/64 scope link 
       valid_lft forever preferred_lft forever
deb505-64-38:~#

つづいて brctlコマンドでbr0なるether bridgeを作成
(注意! network越しの向う側のサーバでこの手順でやると、networkが切断されてしまい、
そのサーバのところまでいかなくてはなりませぬ。)
なにかいい手ないか?

結局一番最初にすましてけってことかな?(redhat系の場合)
http://research.sakura.ad.jp/2010/03/12/kvm-network/
いやいや、結局こっちでしょ (debian系の場合)
http://www.usupi.org/sysad/162.html

結局、設定ファイルで逃げてみました (弱っ!)

deb505-64-32:~# cat /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
#allow-hotplug eth0
#iface eth0 inet static
#address 192.168.1.32
#netmask 255.255.255.0
#gateway 192.168.1.1

#auto eth0
######################### brctl 201102 for kvm
 auto eth0
  iface eth0 inet static
    address 0.0.0.0

  auto br0
  iface br0 inet static
    address 192.168.1.32
    netmask 255.255.255.0
    network 192.168.1.255
    bridge_ports eth0 
    bridge_stp off
    gateway 192.168.1.1

deb505-64-32:~# 


38サーバでの事前の準備は
1) /etc/sudoersにkvmグループに所属するuserを登録(ここではhirasawa)
2) てけとーなディレクトリにkvm imageをコピー

ssh -X にてXプロトコルを透過するようにしつつ、38サーバにログイン
んで、

hirasawa@deb505-64-38:/mnt/mnt1$ ls -ltr
合計 17386156
drwx------ 2 root root      16384 2011-01-05 22:32 lost+found
  • rw-r--r-- 1 root root 5928665088 2011-02-07 19:46 cent5-i386-orig.img
  • rw-r--r-- 1 root root 5928665088 2011-02-07 19:53 cent5-i386-ldap110.img
  • rw-r--r-- 1 root root 5928665088 2011-02-07 19:58 cent5-i386-ldap111.img
hirasawa@deb505-64-38:/mnt/mnt1$ hirasawa@deb505-64-38:/mnt/mnt1$ ip addr 1: lo: mtu 16436 qdisc noqueue state UNKNOWN link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 18:a9:05:55:3f:88 brd ff:ff:ff:ff:ff:ff inet6 fe80::1aa9:5ff:fe55:3f88/64 scope link valid_lft forever preferred_lft forever 3: br0: mtu 1500 qdisc noqueue state UNKNOWN link/ether 18:a9:05:55:3f:88 brd ff:ff:ff:ff:ff:ff inet 192.168.1.38/24 brd 192.168.1.255 scope global br0 inet6 2001:c90:ea4:3011:2ff:14ff:fe62:937b/64 scope global dynamic valid_lft 2591044sec preferred_lft 603844sec inet6 2001:c90:ea4:3011:1aa9:5ff:fe55:3f88/64 scope global dynamic valid_lft 2591894sec preferred_lft 604694sec inet6 fe80::1aa9:5ff:fe55:3f88/64 scope link valid_lft forever preferred_lft forever hirasawa@deb505-64-38:/mnt/mnt1$ sudo brctl show bridge name bridge id STP enabled interfaces br0 8000.18a905553f88 no eth0 hirasawa@deb505-64-38:/mnt/mnt1$ sudo kvm -hda cent5-i386-ldap110.img -boot c -m 1GB -monitor stdio -net nic,macaddr=52:54:00:00:01:10 -net tap,ifname=tap0,script=/etc/kvm/kvm-ifup QEMU 0.9.1 monitor - type 'help' for more information (qemu)

ブラボー

最初に立ち上げたゲストosはtap0を、複数のゲストOSを立ち上げる場合はtap1,2,3って感じでインクリメントさせていく。

二つのゲストOSを立ち上げた時のbrctl,ipコマンドは次のように見える

deb505-64-38:~# brctl show
bridge name	bridge id		STP enabled	interfaces
br0		8000.00ff3f106e1e	no		eth0
							tap0
							tap1
deb505-64-38:~# ip addr
1: lo:  mtu 16436 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0:  mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 18:a9:05:55:3f:88 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::1aa9:5ff:fe55:3f88/64 scope link 
       valid_lft forever preferred_lft forever
3: br0:  mtu 1500 qdisc noqueue state UNKNOWN 
    link/ether 00:ff:3f:10:6e:1e brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.38/24 brd 192.168.1.255 scope global br0
    inet6 2001:c90:ea4:3011:2ff:3fff:fe10:6e1e/64 scope global dynamic 
       valid_lft 2591946sec preferred_lft 604746sec
    inet6 2001:c90:ea4:3011:2ff:f1ff:fe93:d583/64 scope global dynamic 
       valid_lft 2589452sec preferred_lft 602252sec
    inet6 2001:c90:ea4:3011:2ff:14ff:fe62:937b/64 scope global dynamic 
       valid_lft 2586804sec preferred_lft 599604sec
    inet6 2001:c90:ea4:3011:1aa9:5ff:fe55:3f88/64 scope global dynamic 
       valid_lft 2589825sec preferred_lft 602625sec
    inet6 fe80::1aa9:5ff:fe55:3f88/64 scope link 
       valid_lft forever preferred_lft forever
8: tap0:  mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 500
    link/ether 00:ff:d7:a0:06:d2 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::2ff:d7ff:fea0:6d2/64 scope link 
       valid_lft forever preferred_lft forever
9: tap1:  mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 500
    link/ether 00:ff:3f:10:6e:1e brd ff:ff:ff:ff:ff:ff
    inet6 fe80::2ff:3fff:fe10:6e1e/64 scope link 
       valid_lft forever preferred_lft forever
deb505-64-38:~#