KVMで始めるプライベート・クラウドへの第一歩

第3回 KVMのネットワーク構成

この記事を読むのに必要な時間:およそ 2 分

仮想ネットワークの全体像

今回はKVMの仮想ネットワークについて解説します。KVMではホストLinuxの仮想ブリッジ機能を利用して仮想ネットワークを構成します。仮想ブリッジは,ホストLinux上に仮想的なL2スイッチを構成する機能です。複数の仮想ブリッジを構成することも可能です。

図1は,仮想NICと仮想ブリッジの接続を表します。

図1 KVM仮想ネットワークの構成

図1 KVM仮想ネットワークの構成

仮想NICは,ホストLinux内部のTAPデバイスを経由して仮想ブリッジに接続されます。TAPデバイスは,Linuxがユーザプロセスと通信するための仮想的なNICを提供する機能です。KVMの環境では,ホストLinuxと仮想マシン・プロセスが通信するためのインターフェースとして機能します。ゲストOSが仮想NICで送受信するパケットは,ホストLinux側のTAPデバイスから送受信されることになります。同じ仮想ブリッジに接続された仮想マシンどうしは,仮想ブリッジを経由して通信することが可能です。

仮想ブリッジの状態を確認する際は,brctlコマンドを利用するのが一般的です。仮想ブリッジに接続された仮想マシンを確認するツールも公開されています。

Linux at IBM - KVMの仮想ネットワーク接続状態を表示するスクリプト
http://www.ibm.com/jp/domino01/mkt/cnpages7.nsf/page/default-00314E5B

仮想マシンを外部ネットワークに接続するには,2種類の方法があります。1つは,ホストLinuxの物理NICを仮想ブリッジに接続する方法です図1の①)。これは,L2スイッチを経由して仮想マシンを外部ネットワークに接続することと同じです。仮想マシンには,外部ネットワークと同じサブネットのIPアドレスをアサインする必要があります。

もう1つは,iptablesのNAT(IPマスカレード)機能を利用する方法です。この場合は,仮想ブリッジに対してIPアドレスをアサインして,仮想マシンのゲストOSでは,これをデフォルトゲートウェイに指定します。このゲートウェイに到達したパケットについては,送信元IPアドレスを物理NICのIPアドレスに変換して外部ネットワークに送出します図1の②)。仮想ブリッジに接続された仮想マシン全体は,外部のネットワークとは独立したプライベート・ネットワークを構成します。仮想マシンから外部のサーバに接続することは可能ですが,仮想マシン上のサーバ・アプリケーションに外部から接続することはできません。

①と②では仮想ブリッジの構成手順が異なります。

libvirtdサービスによる仮想ネットワーク構成

KVMを導入した環境では,サーバ起動時に自動的にlibvirtdサービスが起動するように設定されます。②の仮想ブリッジはlibvirtdサービスが管理しており,virt-managerから追加/削除などの管理作業が行えます。デフォルトでは,仮想ブリッジvirbr0を持った「default」という名称の仮想ネットワークが構成されます。

virt-managerで「ホスト詳細」のウィンドウを開いて[仮想ネットワーク]のタブを選択すると,図2のような仮想ネットワークの管理画面が表示されます。

図2 virt-managerの仮想ネットワーク管理画面

図2 virt-managerの仮想ネットワーク管理画面

新規の仮想ネットワークを追加するには,画面左下の「+」マークのボタンをクリックします。また,既存の仮想ネットワークを選択して「×」マークのボタンをクリックすると,仮想ネットワークが停止します。この時「ゴミ箱」マークのボタンがクリックできるようになり,これをクリックすると,仮想ネットワークの定義が削除されます。

この方法で作成した仮想ネットワークについては,ホストLinux上で稼働するdnsmasqプロセスにより,DHCPサーバとDNSサーバの機能が提供されます。ゲストOSのIPアドレスをDHCPで自動設定することが可能です。また,外部ネットワークとの接続に必要なiptablesの設定は,libvirtdサービスが起動したタイミングで自動的に行われます。

物理NICを仮想ブリッジに接続する構成

①の仮想ブリッジを構成する際は,ホストLinuxのネットワーク設定ファイルを直接に編集する必要があります。次は仮想ブリッジbr0を作成して,物理NICのeth0を接続する設定例です。

/etc/sysconfig/network-scripts/ifcfg-br0

DEVICE=br0
ONBOOT=yes
TYPE=Bridge
BOOTPROTO=static
IPADDR=192.168.1.10
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
NM_CONTROLLED=no

/etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE=eth0
ONBOOT=yes
HWADDR=00:14:5E:16:1A:E4
BOOTPROTO=none
BRIDGE=br0
NM_CONTROLLED=no

ホストLinuxは,ネットワーク・アドレスが192.168.1.0/24の外部ネットワークに接続されており,IPアドレス192.168.1.10を使用する前提です。MACアドレス(HWADDR)は環境に応じて書き換えて下さい。ifcfg-br0では,仮想ブリッジbr0を作成してIPアドレスをアサインしています。ifcfg-eth0では,eth0をbr0に接続する指定を行います。Red Hat Enterprise Linux 6.0ではデフォルトでNetworkManagerサービスが起動していますが,仮想ブリッジはNetworkManagerで管理することができません。NW_CONTROLLED=noは,NetworkManagerの管理外にするという指定です。

サーバを再起動すると,仮想ブリッジbr0が構成されて物理NICのeth0が接続されます。

仮想マシンの仮想ネットワーク接続

最後に,作成した仮想ネットワークに仮想マシンを接続する方法を説明します。virt-managerで新規の仮想マシンを作成する時は,仮想マシンに対して,仮想NICが1つだけアサインされます。これを接続する仮想ネットワークをウィザード画面で選択します。複数の仮想NICが必要な場合は,仮想マシンの作成が完了した後に,virt-managerから新規の仮想NICの追加を行います。仮想NICを接続する仮想ネットワークを選択するウィザード画面では,「仮想ネットワーク」「共有物理装置」のどちらかを選択します。それぞれ,②の仮想ネットワークと①の仮想ネットワークに対応しています。

今回は,KVMの仮想ネットワーク構成についてやや駆け足で説明しました。KVMの仮想ネットワークについては,技術評論社より発行の書籍『プロのためのLinuxシステム・ネットワーク管理技術(中井悦司・著)』でも徹底的に解説しています。ぜひ参考にしてください。

著者プロフィール

阿部純一郎(あべじゅんいちろう)

サーバ管理技術のスペシャリストとして活動。お客様環境に合わせたデータセンターの効率的な管理方法を提案、適用を推進。近年はプライベート・クラウド・コンピューティング環境での活用に注力。


大澤隆(おおさわたかし)

Linux/OSS等のオープン・テクノロジー・スペシャリストとして活動し,システム設計,構築を通じて企業システムへの適用を推進。本年よりオープン・テクノロジーのクラウド・コンピューティング環境での活用に注力。


中井悦司(なかいえつじ)

Linux/OSSを中心とするオープン・テクノロジーのスペシャリスト。近年はプライベート・クラウドの設計・構築に関わりながら,企業システムにおけるクラウド・コンピューティング技術の活用にも注力。

コメント

  • 仮想ネットワークの件

    ご担当者様

     この度、CENTOS6.2でKVMを構築しております。
    現在、やっと作業も順調に進んできましたが、
    ここで言う、仮想ネットワークで情報を集めておりました。

    この文をまとめると
    ①は、1枚のNICを仮想ブリッジして、複数の仮想NICが作れ、
    内外に通信できると言うことで、
    ②は、①と同様に複数の仮想NICが作れるが、
    外向きの通信しかできないと言うことでしょうか

    また、KVMは、libvirtdサービスで②を提供すると言うことですが、

    私の思いとしては、①を実現させたいと思っております。

    また、記載の中に
    仮想NICを接続する仮想ネットワークを選択するウィザード画面では,
    「仮想ネットワーク」と「共有物理装置」のどちらかを選択します。
    それぞれ,②の仮想ネットワークと①の仮想ネットワークに対応しています

    とありますが、
    KVMの、libvirtdサービスで①を選択できるのでしょうか

    併せて、記載のあるvirt-managerが①を実現させるのでしょうか

    KVMには、virt-managerは、搭載されていないのでしょうか
    できれば、virt-managerの情報を頂けると助かります。

    よろしくお願いします。

    Commented : #1  坂本 城伯 (2012/07/21, 04:47)

コメントの記入