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

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

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

今回は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システム・ネットワーク管理技術(中井悦司・著⁠⁠』でも徹底的に解説しています。ぜひ参考にしてください。

おすすめ記事

記事・ニュース一覧