仮想環境を Xen から KVM に切り替えた時に行ったネットワーク設定の備忘録です。

# CentOS 6.0 時点の作業メモがベースなので、NetworkManager 周りの記述が古いです。。。


1. KVM におけるネットワーク

Xen は導入直後の初期状態でブリッジ接続となりますが、KVM では NAT 接続が初期状態となっています。
Xen 環境同様にゲストマシンをブリッジ接続でネットワークにつなげるためには、ホストマシンのネットワーク設定を変更する必要があります。

2. NetworkManager の停止

CentOS 6 (正確には RHEL 6) から NetworkManager が自動で起動するようになりました。
しかし、CentOS 6.2 までの NetworkManager はブリッジ接続をサポートしていなかったため、NetworkManager を停止しました。

NOTE:
CentOS 6.3 以降ではブリッジ接続をサポートしています。

NOTE2:
NetworkManager を停止しなくても、ネットワーク定義ファイルに「NW_CONTROLLED=no」と追記すれば NetworkManager の管理対象外となるようです。

2.1. 起動ステータスの確認

NetworkManager が起動しているか確認します。

# /etc/rc.d/init.d/NetworkManager status
NetworkManager (pid  xxxx) を実行中...

2.2. 停止

NetworkManager が起動している場合、NetworkManager を停止します。

NetworkManager 停止
# /etc/rc.d/init.d/NetworkManager stop
NetworkManager デーモンを停止中:                           [  OK  ]

停止確認
# /etc/rc.d/init.d/NetworkManager status
NetworkManager は停止しています

2.3. chkconfig 変更

起動時に NetworkManager が自動起動しないように chkconfig を変更します。

chkconfig 設定確認
# chkconfig NetworkManager --list
NetworkManager  0:off   1:off   2:on    3:on    4:on    5:on    6:off

設定変更と変更結果確認
# chkconfig NetworkManager off
# chkconfig NetworkManager --list
NetworkManager  0:off   1:off   2:off   3:off   4:off   5:off   6:off

2.4. resolv.conf の修正

NetworkManager は resolv.conf を更新することがあります。
意図せぬ設定になっていないか内容を確認し、問題がある場合は正しい内容に修正します。

/etc/resolv.conf
search [ドメイン]
nameserver [DNSサーバアドレス]

3. インターフェース定義ファイルの作成/変更

ブリッジ接続を有効にするため、ブリッジ接続用のインターフェース定義ファイル ifcfg-br0 の作成と、NIC に割り当てているインターフェース定義ファイル (ここでは ifcfg-eth0) を修正します。

3.1. ifcfg-br0 の作成

ブリッジ接続用に ifcfg-br0 を新規に作成します。

「TYPE」に「Bridge」を指定し、「IPADDR」「NETMASK」「NETWORK」「GATEWAY」は ifcfg-eth0 から転記します。

/etc/sysconfig/network-scripts/ifcfg-br0
DEVICE=br0
BOOTPROTO=static
ONBOOT=yes
TYPE=Bridge

IPADDR=[ifcfg-eth0 から転記]
NETMASK=[ifcfg-eth0 から転記]
NETWORK=[ifcfg-eth0 から転記]
GATEWAY=[ifcfg-eth0 から転記]

3.2. ifcfg-eth0 の修正

NIC 用の ifcfg-eth0 からは不要となる設定「IPADDR」「NETMASK」「NETWORK」「GATEWAY」を削除し、代わりに「BRIDGE」に前項で作成した「br0」を指定します。

/etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=static
ONBOOT=yes
BRIDGE=br0

3.3. ネットワークの再起動

eth0 と br0 を有効にするため、ネットワークを再起動します。

# service network restart
ループバックインターフェースを終了中                       [  OK  ]
ループバックインターフェイスを呼び込み中                   [  OK  ]
インターフェース eth0 を活性化中:                          [  OK  ]
インターフェース br0 を活性化中:                           [  OK  ]

3.4. ブリッジの確認

ネットワーク再起動後にブリッジ接続が有効になっているか確認します。

ifconfig コマンドを実行すると br0 が追加されていることが確認できます。

IP アドレス (IPv4) 等は br0 にのみ設定されます。
未定義の MAC アドレスIPv6 アドレスについては、br0 と eth0 に同一の値 (NIC の MAC アドレスとユニークローカルユニキャストアドレス) が割り当てられていました。

(*) virbr0 は NAT 接続用に KVM が自動生成するインターフェースです。

ifconfig
# ifconfig
br0       Link encap:Ethernet  HWaddr [MAC アドレス]
          inet addr:[IP アドレス]  Bcast:[Broadcast アドレス]  Mask:[ネットマスク]
          inet6 addr: [IPv6 アドレス] Scope:Link
          ~ 略 ~

eth0      Link encap:Ethernet  HWaddr [MAC アドレス]
          inet6 addr: [IPv6 アドレス] Scope:Link
          ~ 略 ~

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          ~ 略 ~

virbr0    Link encap:Ethernet  HWaddr [MAC アドレス]
          inet addr:[IP アドレス]  Bcast:[Broadcast アドレス]  Mask:[ネットマスク]
          ~ 略 ~

brctl コマンドではブリッジインターフェース (br0) に接続しているインターフェースを確認できます。

br0 が eth0 に、virbr0 が virbr0-nic に接続していることが分かります。

brctl
# brctl show
bridge name     bridge id               STP enabled     interfaces
br0             [br0 Bridge ID]         no              eth0
virbr0          [virbr0 Bridge ID]      yes             virbr0-nic

4. ブリッジネットワークへの変更

仮想マシンマネージャを起動し、ゲストマシンの起動パラメータを「ホストデバイス eth0 (Bridge 'br0')」に変更します。

20130322_01.png


ゲストマシンを起動後に brctl コマンドを実行すると、起動したゲストマシンの数だけ br0 に接続しているインターフェースが増えていることが確認できます。

2つのゲストマシン起動時の brctl
# brctl show
bridge name     bridge id               STP enabled     interfaces
br0             [br0 Bridge ID]         no              eth0
                                                        vnet0
                                                        vnet1
virbr0          [virbr0 Bridge ID]      yes             virbr0-nic

[ END ]