Linux環境(CentOS 6.4)でKVM環境を動かしている際に、作成する仮想OSを検証サーバ用途で使う際に便利な設定について記載しています。
Linux KVM環境を構築すると、デフォルトでは仮想マシンは、libvirtdが管理する仮想ブリッジ「virbr0」を利用して外部ネットワークと接続する事になります。(下図)
この構成(上図)では、仮想マシンが外部ネットワークと接続する為には、iptablesのIPマスカレード機能を利用する事になります。また、仮想マシンをサーバー用途で使う場合は手間がかかります。
そこで、仮想マシンをサーバー用途で使いたい場合などは、ホストLinux側の物理NICに仮想ブリッジを接続する構成にする方法があります。そうする事によって、使いやすい仮想サーバー環境が実現できます。(下図)
以下に、ホストLinux側の物理NICに仮想ブリッジを接続する構成にする方法を記載します。
1.ホストLinux側でのインターフェース設定
ホストLinux側のインターフェース設定を行います。
※今回の例では、ホストLinux側の物理NICは「eth0」のみという仮定で記載しています。
/etc/sysconfig/network-scripts/ 配下にある「ifcfg-eth0」で、以下の値を設定します。
NM_CONTROLLED=no BOOTPROTO=none BRIDGE=br0
- 環境によって、設定値が変わります。すべては記載できませんので、その点はご了承ください。
- 既定値で「BOOTPROTO=static」になっている場合は「BOOTPROTO=none」に変更します。
- 「NM_CONTROLLED=no」は、Network Manager を無効にします。固定IPで設定する場合は、この設定にします。(Network Manager自体を停止する事も忘れずに)
次に、/etc/sysconfig/network-scripts/ 配下に「ifcfg-br0」を作成します。以下の値はサンプルです。
# cat ifcfg-br0 DEVICE=br0 TYPE=Bridge ONBOOT=yes BOOTPROTO=static NM_CONTROLLED=no IPADDR=192.168.0.100 PREFIX=24 #
- 環境設定値が変わります。すべては記載できませんので、その点はご了承ください。
インターフェース設定を変更したので、networkサービスを再起動します。
# /etc/init.d/network restart
以上で、インターフェース「br0」にIPアドレスが設定され、「eth0」にはIPアドレスが設定されなくなったと思います。
2.仮想マシンの作成
次に、新しく仮想マシンを作成します。この仮想マシンには、ホストLinuxの「br0」と同じIPアドレスを割り当てる事になります。
今回は、ホストLinux上の「Virtual Machine Manager」を使って新しく仮想マシンを作成する事にします。
なお、ホストLinux上でiptablesが動いている場合は停止しておきます。その時には、libvirtd をリロードも行います。
# /etc/init.d/iptables stop # /etc/init.d/libvirtd reload
「Virtual Machine Manager」で、仮想マシンの設定を行う際には、以下の「Step 5 of 5」画面で、「Host device eth0 (Bridge ‘br0’) を選択した状態にします。
あとは、Linux仮想マシン(今回はCentOS6.4)のインストールを進めて、仮想OSのインストールを終わらせます。
インストールが終わった仮想OSのインターフェースを確認すると、eth0 がホストOSのブリッジと同じセグメントになっている事が確認できます。
# ifconfig eth0 eth0 Link encap:Ethernet HWaddr 52:54:00:7D:90:60 inet addr:192.168.0.101 Bcast:192.168.0.255 Mask:255.255.255.0 inet6 addr: 2001:c90:8222:e034:5054:ff:fe7d:9060/64 Scope:Global inet6 addr: fe80::5054:ff:fe7d:9060/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:319 errors:0 dropped:0 overruns:0 frame:0 TX packets:216 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:27919 (27.2 KiB) TX bytes:19005 (18.5 KiB) #
同じセグメントの別端末から、簡単にSSH接続が出来るかと思います。これで、作成した仮想マシンをサーバー用途で使いやすい環境とする事が出来ました。
補足.ホストLinux側での状態確認
仮想OSを一つ作成した状態で、ホストLinux側でbrctlコマンドを打ってみると以下のような感じになります。
# brctl show bridge name bridge id STP enabled interfaces br0 8000.c8cbb8c5a60c no eth0 vnet0 virbr0 8000.52540097b907 yes virbr0-nic #
ifconfig コマンドでも出てきますが、vnet0 が出てきています。
# ifconfig -s Iface MTU Met RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg br0 1500 0 80404 0 0 0 80706 0 0 0 BMRU eth0 1500 0 28276 0 0 0 26960 0 0 0 BMRU lo 16436 0 12936 0 0 0 12936 0 0 0 LRU virbr0 1500 0 0 0 0 0 0 0 0 0 BMRU vnet0 1500 0 26 0 0 0 28 0 0 0 BMRU #
仮想マシンが増える毎に、vnetxxxは増えます。