注意: 2007.5.23(水)改訂
Xenでは、デフォルトで、Xen WikiのXenNetworkingで解説されている様なネットワークを構成する。この設定は、
/etc/xen/xend-config.sxp
に記述されている。この中で、ネットワークに関しては、(network-script network-bridge)という行が見つかる。この行により、シェルスクリプト
/etc/xen/scripts/network-bridge
が呼び出される。スクリプト
/etc/xen/scripts/network-bridge
は、最初にstart
もしくはstop
のうちいずれかを引数としてとり、その後に、以下の四つの引数を指定することができる。例は、既定経路(default route)がeth0の先にある場合の値。引数 | 内容 | 既定値 | 例 |
vifnum=番号 | 仮想インターフェース番号 | 既定経路を持つインターフェースの番号 | 0 |
bridge=名前 | ブリッジ名 | xenbr${vifnum} | xenbr0 |
netdev=名前 | ブリッジに対応するインターフェース名 | eth${vifnum} | eth0 |
antispoof=yes|no | IPスプーフィングを行うか | no | no |
ただ、これは前回解説した様なVLAN設定を行っている場合は正常に動作しない。
このスクリプトは、
netdev
に対して、一旦ダウン(ifdown ${netdev}
)させ、IPアドレス情報を取得し、名前をp${netdev}に変更しようとする。例えば、VLANインターフェースeth0.09000が既定経路を持っていた場合、このスクリプトでは、vifnum
: 0.0900bridge
: xenbr0.0900netdev
: eth0.0900
2008/6/20追記:
上の様なブリッジ名、インターフェース名を使用すると、snmpdがエラーメッセージをはく場合がある。『snmpd: ioctl 35123 returned -1』参照。
この問題を解決するため、
/etc/xen/scripts/network-bridge
を改造したスクリプト/etc/xen/scripts/network-vlan-bridge
を作成する。まずは、# cd /etc/xen/scripts # cp network-bridge network-vlan-bridge #でコピーを作成し、以下の通り修正する。
# diff network-bridge network-vlan-bridge 80a81,84 > is_vlan() { > [ -f "/proc/net/vlan/$1" ] > } > 217c221 <> if is_vlan ${netdev} || is_bonding ${netdev} || ! ifdown ${netdev}; then 257c261 <> if is_vlan ${netdev} || ! ifdown ${netdev}; then #要するに、
ifdown
を実行する前に、VLANインターフェースかどうかをチェックするように修正した。この様に修正した上で、以下の様なネットワークを構成する(これはあくまでも私のやり方。他にいい方法があるだろう。よい方法を考え付いた人は教えて欲しい)。VLAN ID MMMMを持つethNのVLANインターフェースethN.MMMMに対して、
- ブリッジxenbrMMMMを作成する。
- MMMMに1:1に対応する仮想インターフェース番号をKとする。
network-vlan-bridge start vifnum=K netdev=ethN.MMMM bridge=xenbrMMMMを実行する。これは、VLANが一つだけの場合であれば、
xend-config.sxp
の当該部分を、(network-script 'network-bridge vifnum=0 netdev=eth0.1000 bridge=xenbr1000')の様に変更すればよい。
しかし、VLANの用途から考えて、VLANが一つだけということは考えにくい(一つで済むなら、VLANで運用しなくてもよいはず)。その場合、
xend-config.sxp
のコメントにIt is possible to use the network-bridge script in more complicated scenarios, such as having two outgoing interfaces, with two bridges, and two fake interfaces per guest domain. To do things like this, write yourself a wrapper script, and call network-bridge from it, as appropriate.
xend-config.sxp
以外のところでスクリプトを実行する必要がある(あるいは、network-bridgeスクリプトを複数回呼び出すスクリプトを準備する手もある)。まず、xend-config.sxp
の当該行を#(network-script network-bridge)
/etc/init.d/xend
を以下の様に変更する。# diff xend.dist xend 21a22,23 > BRIDGE_SCRIPT=/etc/xen/scripts/network-vlan-bridge > 47a50,51 > $BRIDGE_SCRIPT start vifnum=0 netdev=eth0.1000 bridge=xenbr1000 > $BRIDGE_SCRIPT start vifnum=1 netdev=eth0.1001 bridge=xenbr1001 52a57,58 > $BRIDGE_SCRIPT stop vifnum=0 netdev=eth0.1000 bridge=xenbr1000 > $BRIDGE_SCRIPT stop vifnum=1 netdev=eth0.1001 bridge=xenbr1001 #
とあるように、
network-vlan-bridge
を複数回呼び出すラッパーnetwork-vlan-bridge-wrapper
を作成し、これを呼び出すように変更する。まず、xend-config.sxp
の当該行を以下のように変更する。(network-script network-vlan-bridge-wrapper)これにより、
network-bridge
の代わりにnetwork-vlan-bridge-wrapper
が呼び出されるようになる。ラッパー
/etc/xen/scripts/network-vlan-bridge-wrapper
は、以下の通り。#!/bin/sh BRIDGE_SCRIPT=/etc/xen/scripts/network-vlan-bridge $BRIDGE_SCRIPT "$@" vifnum=0 netdev=eth0.1000 bridge=xenbr1000 $BRIDGE_SCRIPT "$@" vifnum=1 netdev=eth0.1001 bridge=xenbr1001上は、VLAN ID 1000および1001を使う場合の例。より多くのVLANを使用する場合には、行を追加すればよい。
が、
/etc/xen/scripts/network-bridge
の中に# vifnum Virtual device number to use (default 0). Numbers >=8
# require the netback driver to have nloopbacks set to a
# higher value than its default of 8.
とあるように、カーネル変数の変更が必要らしいが、試していない。悪しからず。2007/11/22追記:
これについて検証した。『VLANとXenを組合わせて使う・その5・仮想ブリッジが多い場合』参照。
VLANとXenを組合わせて使う・その1
VLANとXenを組合わせて使う・その2・VLAN設定l
VLANとXenを組合わせて使う・その3・Xenネットワーク
VLANとXenを組合わせて使う・その4・DomUインストール
VLANとXenを組合わせて使う・その5・仮想ブリッジが多い場合
0 件のコメント:
コメントを投稿