KVM を使ったブリッジ接続設定について

前々回のエントリーにて KVM を使った仮想OS設定手順についてご紹介いたしました。
今回はホストOSとゲストOS間でのブリッジ接続設定についてのメモとなります。
ブリッジ接続を行うことで、ホストOSとゲストOSが同じネットワークセグメント内で通信を行うことが可能になります。
前々回と同様にホストOSには Xubuntu 10.04 を、ゲストOSには Debian 3.1 Sarge を使用します。

KVM のネットワーク設定については下記のサイトを参照させていただきました。

ホストOSの環境

ネットワーク環境

  • ネットワークアドレス:192.168.0.1/24

ゲストOS側での準備

本手順では、ホスト0S と ゲスト0S間の通信テストに ssh を使用します。
Debian 3.1 を最小構成でインストールした場合は、ssh がインストールされていないので、apt-get コマンドを使ってインストールします。

ゲストOSの起動
kvm -hda debian_sarge.img -boot c -m 256 -redir tcp:2200::22

上記コマンドを実行してゲストOSを起動します。
コマンドの詳細内容は以下のようになります。

  • 「-hda debian_sarge.img」debian_sarge.img をハードディスクとして指定
  • 「-boot c」ハードディスクから boot
  • 「-m 256」メモリを 256MBに指定
  • 「-redir tcp:2200::22」ホストOSの tcp/2200 ポートへのアクセスを、ゲストOSの tcp/22 ポートへリダイレクトする
source.list ファイルの編集
deb http://ftp.riken.jp/Linux/debian/debian-archive/ sarge main contrib
deb-src http://ftp.riken.jp/Linux/debian/debian-archive/ sarge main contrib

root ユーザとしてログインし、/etc/apt/source.list ファイルに上記の2行を追加します。

ssh のインストール
apt-get update

まず、上記コマンドを実行してパッケージリストを更新します。

apt-get install ssh

次に、上記コマンドを実行して ssh パッケージをインストールします。
sshインストール時に設定確認画面が表示されます。



ssh プロトコル2 のみをインストール -> Yes



/usr/lib/ssh-keysign を root に SUID (setuid) *1する -> Yes



sshd サーバの実行 -> Yes


/etc/init.d/ssh start

ssh のインストール終了後、上記コマンドで sshd を起動します。

ホストOSからゲストOSへの接続テスト
ssh keitaro@127.0.0.1 -p 2200

ホストOSから上記コマンドを実行してゲストOSにssh接続します。

The authenticity of host '[127.0.0.1]:2200 ([127.0.0.1]:2200)' can't be established.
RSA key fingerprint is a3:58:28:c3:e9:e5:af:96:ae:41:96:19:a1:1a:56:5e.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '[127.0.0.1]:2200' (RSA) to the list of known hosts.
Password: 
Linux sarge 2.4.27-2-386 #1 Wed Aug 17 09:33:35 UTC 2005 i686 GNU/Linux

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
You have mail.

keitaro@sarge:~$ hostname
sarge

ログインできました。

keitaro@sarge:~$ su - root
Password: 
sarge:~# ifconfig
eth0      Link encap:Ethernet  HWaddr 52:54:00:12:34:56  
          inet addr:10.0.2.15  Bcast:10.0.2.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:179 errors:1 dropped:0 overruns:0 frame:0
          TX packets:117 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:18425 (17.9 KiB)  TX bytes:15391 (15.0 KiB)
          Interrupt:11 Base address:0xc100 

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)

IPアドレスが「10.0.2.15」になっていることも確認できました。
確認後は、一旦ゲストOSをシャットダウンします。

shutdown -h now

ゲストOSの画面にて上記コマンドを実行し、OSをシャットダウンします。

ブリッジ接続を行う

ssh 接続の準備ができましたので、次はブリッジ接続を行います。

ホストOS側でのネットワーク設定

以下は ホストOSの root 権限で作業を行います。コマンドラインにて順番に実行します。

ifconfig eth0 0.0.0.0 promisc up

eth0 をプロミスキャス・モード*2にします。

brctl addbr br0

br0 という名前でブリッジを作成

brctl addif br0 eth0 

eth0 を br0 ブリッジのポートにする

ifconfig br0 up

br0 を起動

ifconfig br0 192.168.0.2 netmask 255.255.255.0
route add default gw 192.168.0.1

ホストOSのIPアドレスデフォルトゲートウェイ*3を設定します。

ゲストOSを起動
kvm -hda debian_sarge.img -boot c -m 256 -net nic,macaddr=52:54:00:12:34:56 -net tap,ifname=tap0,script=/etc/qemu-ifup

上記コマンドを実行してゲストOSを起動します。
コマンドの詳細内容は以下のようになります。

  • 「-hda debian_sarge.img」debian_sarge.img をハードディスクとして指定
  • 「-boot c」ハードディスクから boot
  • 「-m 256」メモリを 256MBに指定
  • 「net nic,macaddr=52:54:00:12:34:56」macアドレスを指定
  • 「net tap,ifname=tap0,script=/etc/qemu-ifup」tap*4バイスを指定
ゲストOSのIPアドレスを確認

ゲストOSに root ユーザとしてログインし、IPアドレスを確認します。

上記では「192.168.0.3」のIPアドレスが取得されています*5

ホストOSからゲストOSへの接続テスト
ssh keitaro@192.168.0.3

ホストOSから上記コマンドを実行してゲストOSにssh接続します。

The authenticity of host '192.168.0.3 (192.168.0.3)' can't be established.
RSA key fingerprint is a3:58:28:c3:e9:e5:af:96:ae:41:96:19:a1:1a:56:5e.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.0.3' (RSA) to the list of known hosts.
Password: 
Linux sarge 2.4.27-2-386 #1 Wed Aug 17 09:33:35 UTC 2005 i686 GNU/Linux

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
You have mail.

Last login: Sat Jun 26 17:15:07 2010 from 10.0.2.2
keitaro@sarge:~$

ゲストOSに接続することができました。
ホストOS - ゲストOS 間では、それぞれのIPアドレスを指定して疎通がとれる状態になりました。

*1:ssh-keysign を root に SUID についての詳細はTempus - 昨今明日: ssh で HostBased 認証を行うには ssh-keysign に setuid する必要があるが参考になります。SUIDについてはUNIXの部屋 コマンド検索:setuid (*BSD/Linux)が参考になります。

*2:プロミスキャス・モード - Wikipedia

*3:このネットワーク内では 192.168.0.1 の端末がDHCPサーバ機能のあるルータ兼モデムとなります

*4:TUN/TAP - Wikipedia

*5:DHCPによるIPアドレス取得設定になっています