簡単に設定できるXenネットワーキング
This document (7000616) is provided subject to the disclaimer at the end of this document.
環境
Novell SUSE Linux Enterprise Server 10 Service Pack 2
問題の状況
SLES 10 SP2では、network-bridgeスクリプトの使用による多数の問題が発生します。
たとえば、次のような問題が発生します。
- network-bridgeスクリプトが複数のxenブリッジで動作しない
- network-bridgeスクリプトはdhcp対応デバイスでうまく動作しない
- network-bridgeスクリプトが追加ルートをxenブリッジに転送しない
- 無用なPデバイスを除去して、通常とxenカーネル間でブートするときでも一貫性のあるネットワーク設定を行いたい
解決策
決め手となるステップごとのソリューションは実際にはありません。そこで、ここでは動作の仕組みについて説明します。
まず、通常(xenではない)のカーネルで起動して、すべてのネットワークデバイスを作業用セットアップとして設定します。
後で使用する各xenbridgeについて、通常のlinuxブリッジデバイスに対して設定ファイルを作成します。これはifup/ifdownスクリプトで処理できます。Linuxブリッジはifcfgファイル名で判別されます。
ifcfg-br
次の点が重要です。
- 元のデバイス名をブリッジ設定ファイルのオプションBRIDGE_PORTSに挿入します。
- IP設定を元のデバイスからブリッジデバイスに転送します(BOOTPROTO、IPADDR、NETMASKなど)。
- 元のデバイス設定で、BOOTPROTOを「none(なし)」に設定します。
次に例を示します。
元のネットワークデバイスはbond0で、xenbridgeをbr0として作成するとします。
---original "/etc/sysconfig/network/ifcfg-bond0" --
BONDING_MASTER='yes'
BONDING_MODULE_OPTS='mode=balance-rr miimon=100'
BONDING_SLAVE0='eth-id-00:e0:81:32:87:88'
BONDING_SLAVE1='eth-id-00:e0:81:32:87:89'
BOOTPROTO='dhcp'
BROADCAST=''
ETHTOOL_OPTIONS=''
IPADDR=''
MTU=''
NAME=''
NETMASK=''
NETWORK=''
REMOTE_IPADDR=''
STARTMODE='auto'
USERCONTROL='no'
----------------------------------------------------
---adapted "/etc/sysconfig/network/ifcfg-bond0" --
BONDING_MASTER='yes'
BONDING_MODULE_OPTS='mode=balance-rr miimon=100'
BONDING_SLAVE0='eth-id-00:e0:81:32:87:88'
BONDING_SLAVE1='eth-id-00:e0:81:32:87:89'
BOOTPROTO='none'
BROADCAST=''
ETHTOOL_OPTIONS=''
IPADDR=''
MTU=''
NAME=''
NETMASK='
NETWORK=''
REMOTE_IPADDR=''
STARTMODE='auto'
USERCONTROL='no'
---------------------------------------------------
----new "/etc/sysconfig/network/ifcfg-br0"---------
BOOTPROTO='dhcp'
BRIDGE='yes'
BRIDGE_PORTS='bond0'
BROADCAST=''
ETHTOOL_OPTIONS=''
IPADDR=''
MTU=''
NAME=''
NETMASK=''
NETWORK=''
REMOTE_IPADDR=''
STARTMODE='auto'
USERCONTROL='no'
---------------------------------------------------
スタティックルーティング設定のスタティックIPアドレスがある場合、/etc/sysconfig/networks/routesファイルを調整して、元のデバイスの代わりにブリッジ名、任意のデバイスに- wild-cardを挿入できます。(これによって、ネットワーク起動時のルーティング設定に関する警告が抑制されます。)
変更前:
192.168.23.0 192.168.42.23 255.255.255.0 - bond0
default 192.168.42.23 - -
変更後:
192.168.23.0 192.168.42.23 255.255.255.0 - br0
default 192.168.42.23 - br0
この作業を行うだけで、ネットワークは通常およびxenカーネルで動作するようになります。次のステップは、network-bridgeスクリプトを無効にします。このためには、/etc/xen/xend-config.sxpファイルをエディタで開き、次のような行を探します。
(network-script network-bridge)
この行をコメント化します。
# (network-script network-bridge)
最終ステップ(1つのブリッジのみを使用してブリッジを名前で使用するようにxenを設定しない場合は、不要)として、既存のゲスト設定をxenbrではなく新しいブリッジを使用するように調整する必要があります。各ゲスト設定ファイル(ディレクトリ/etc/xen/vm/にあります)を開き、次のような行を探します。
vif=[ 'mac=00:16:3e:0a:15:6c,bridge=xenbr0', ]
vif=[ 'mac=00:16:3e:7e:f3:c7,model=ne2k_pci,type=ioemu', ]
vif=[ 'mac=00:16:3e:7c:6b:f3', ]
これを次の行に置き換えます。
vif=[ 'mac=00:16:3e:0a:15:6c,bridge=br0', ]
vif=[ 'mac=00:16:3e:7e:f3:c7,model=ne2k_pci,type=ioemu,bridge=br0', ]
vif=[ 'mac=00:16:3e:7c:6b:f3,bridge=br0', ]
これが最終ステップです。これでxenカーネルに再度起動できるようになり、予期した通りに動作するようになります。
注:新しいゲストをvirt-manager経由で後で作成する場合は、networking adapterオプションを編集して、ソースをdefaultから使用するブリッジ(br0など)に置き換えてください。これは、複数のブリッジを使用する場合にのみ必要です。
注:SuSEFirewall2を使用してXenホストとゲストのセキュリティを保護している場合、/etc/sysconfig/SuSEfirewall2を調整して、xenbr0ではないブリッジ(br0など)を使用することが必要です。
ヒント:YaST2を使用してネットワーキングを設定し、ボンディングデバイスを使用する場合、デバイスアクティベーションをブート時に設定し、ボンディングデバイスにスタティックIPアドレス0.0.0.0とサブネットマスク255.255.255.255を割り当てます。設定しないと、ブリッジの設定ダイアログに選択できるインタフェースが表示されません。
2009年2月7日のアップデート:
arp-monitoringをボンディングに使用している場合、ボンディングデバイスにIPアドレスを割り当てておくことが重要です。ボンディングデバイスにIPアドレスがない場合、ログファイルにスレーブフラッピングが記録されます。ルーティングを混乱させないためには、ブリッジデバイスからのルートが上書きされないようにすることも必要です。IPアドレスをボンディングデバイスに割り当てるには、次の解決方法を使用してください。
スクリプトcp_ip_br_to_bondを次のコンテンツで/etc/sysconfig/network/scriptsに作成します。
------cp_ip_br_to_bond--------------
#!/bin/bash
# get bonding device
. /etc/sysconfig/network/ifcfg-$1
# cp ip from bridge to bonding device
ip addr show dev $2 | egrep '^ *inet ' | sed -e "
s/inet/ip addr add/
s@¥([0-9]¥+¥.[0-9]¥+¥.[0-9]¥+¥.[0-9]¥+/[0-9]¥+¥)@¥1@
s/$2/dev ${BRIDGE_PORTS} label ${BRIDGE_PORTS}/
s/secondary//
" | sh -e
??? # Remove automatic routes on bonding device
??? ip route list | sed -ne "
/dev ${BRIDGE_PORTS}¥( ¥|$¥)/ {
? s/^/ip route del /
? p
}" | sh -e
--------------------------------------------------
次のようにして、スクリプトを実行可能にします。
chmod +x /etc/sysconfig/network/scripts/cp_ip_br_to_bond
次のようにして、ifcfg-br0ファイルに含めます。
POST_UP_SCRIPT='cp_ip_br_to_bond'
この対応策を不要にするためのifup/ifdownスクリプト内部の最終的な修正については、まだ作業中です。最終的な修正を公開しだい、アップデートを公開します。
2008年8月1日のアップデート:
- スタティックルーティング例のデバイス順序を修正しました。
- /etc/sysconfig/ifcfg-br設定ファイルでBRIDGE_FORWARDDELAY="0"と設定できます。これによって、デフォルトの転送遅延(15秒)が無効になります。また、インタフェースの送受信の準備が高速になります。
追加情報
Disclaimer
この情報は、米国Novell, Inc.およびノベル株式会社の内外から発生したものです。本文書の内容または本文書を使用した結果について、いかなる保証、表明または約束も行っていません。また、本文書の商品性、および特定目的への適合性について、いかなる黙示の保証も否認し、排除します。
本文書に記載されている会社名、製品名はそれぞれ各社の商品、商標または登録商標です。
- ドキュメントID: 7000616
- 作成年月日: 06-JUN-2008
- 修正年月日: 11-MAY-2009
- ドキュメントリビジョン:
- 分類:
- 対象NOVELL製品およびバージョン: SUSE Linux Enterprise Server
- カテゴリ: