仮想環境を 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 の管理対象外となるようです。
NetworkManager 停止
停止確認
2.3. chkconfig 変更
起動時に NetworkManager が自動起動しないように chkconfig を変更します。
chkconfig 設定確認
設定変更と変更結果確認
意図せぬ設定になっていないか内容を確認し、問題がある場合は正しい内容に修正します。
/etc/resolv.conf
「TYPE」に「Bridge」を指定し、「IPADDR」「NETMASK」「NETWORK」「GATEWAY」は ifcfg-eth0 から転記します。
/etc/sysconfig/network-scripts/ifcfg-br0
/etc/sysconfig/network-scripts/ifcfg-eth0
ifconfig コマンドを実行すると br0 が追加されていることが確認できます。
IP アドレス (IPv4) 等は br0 にのみ設定されます。
未定義の MAC アドレスと IPv6 アドレスについては、br0 と eth0 に同一の値 (NIC の MAC アドレスとユニークローカルユニキャストアドレス) が割り当てられていました。
(*) virbr0 は NAT 接続用に KVM が自動生成するインターフェースです。
ifconfig
brctl コマンドではブリッジインターフェース (br0) に接続しているインターフェースを確認できます。
br0 が eth0 に、virbr0 が virbr0-nic に接続していることが分かります。
brctl
4. ブリッジネットワークへの変更
仮想マシンマネージャを起動し、ゲストマシンの起動パラメータを「ホストデバイス eth0 (Bridge 'br0')」に変更します。
ゲストマシンを起動後に brctl コマンドを実行すると、起動したゲストマシンの数だけ br0 に接続しているインターフェースが増えていることが確認できます。
2つのゲストマシン起動時の brctl
# 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) を実行中...
NetworkManager (pid xxxx) を実行中...
2.2. 停止
NetworkManager が起動している場合、NetworkManager を停止します。NetworkManager 停止
# /etc/rc.d/init.d/NetworkManager stop
NetworkManager デーモンを停止中: [ OK ]
NetworkManager デーモンを停止中: [ OK ]
停止確認
# /etc/rc.d/init.d/NetworkManager status
NetworkManager は停止しています
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
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
# 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サーバアドレス]
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 から転記]
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
BOOTPROTO=static
ONBOOT=yes
BRIDGE=br0
3.3. ネットワークの再起動
eth0 と br0 を有効にするため、ネットワークを再起動します。
# service network restart
ループバックインターフェースを終了中 [ OK ]
ループバックインターフェイスを呼び込み中 [ OK ]
インターフェース eth0 を活性化中: [ OK ]
インターフェース br0 を活性化中: [ OK ]
ループバックインターフェースを終了中 [ 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:[ネットマスク]
~ 略 ~
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
bridge name bridge id STP enabled interfaces
br0 [br0 Bridge ID] no eth0
virbr0 [virbr0 Bridge ID] yes virbr0-nic
4. ブリッジネットワークへの変更
仮想マシンマネージャを起動し、ゲストマシンの起動パラメータを「ホストデバイス eth0 (Bridge 'br0')」に変更します。ゲストマシンを起動後に 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
bridge name bridge id STP enabled interfaces
br0 [br0 Bridge ID] no eth0
vnet0
vnet1
virbr0 [virbr0 Bridge ID] yes virbr0-nic