Pocket

Linux KVM環境で物理NICに仮想ブリッジを接続する方法

  • add this entry to hatena bookmark

Linux環境(CentOS 6.4)でKVM環境を動かしている際に、作成する仮想OSを検証サーバ用途で使う際に便利な設定について記載しています。

Linux KVM環境を構築すると、デフォルトでは仮想マシンは、libvirtdが管理する仮想ブリッジ「virbr0」を利用して外部ネットワークと接続する事になります。(下図)

kvm-virbr0-iptables

この構成(上図)では、仮想マシンが外部ネットワークと接続する為には、iptablesのIPマスカレード機能を利用する事になります。また、仮想マシンをサーバー用途で使う場合は手間がかかります。

そこで、仮想マシンをサーバー用途で使いたい場合などは、ホストLinux側の物理NICに仮想ブリッジを接続する構成にする方法があります。そうする事によって、使いやすい仮想サーバー環境が実現できます。(下図)

kvm-br0-bridge

以下に、ホスト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’) を選択した状態にします。

create-virtual-machine-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は増えます。

Pocket

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です


*

チェックサイト RSS Feed読者登録はいかがでしょうか?RSS配信中です。