こないだVLAN HUBを買って、社内のLANをおおむね移行し終わったから、そろそろXenのマシンもVLAN(802.1Q)にしちゃおうかな?と調査中。
というか、色々やったんだけど、情報少ない(^^;
主には自分の備忘録代わりなので、イマイチまとまりがない(^^;けど、まぁ、ソレはソレという事で・・・
ちなみに、以下はいつも通り(?)Debian(etch)環境下のお話です。
まず、Xenを考えなくて単にタグVLAN(802.1Q)で使うなら、vlanパッケージを入れれば桶
最初に(まだ入ってなければ)
# modprobe 8021q
で802.1Qのモジュールを読み込んでおいて(毎回読んで欲しければ/etc/modulesに書く)
# vconfig add eth0 1
みたいにすれば、物理デバイスeth0にタグで載っかってくるID=1のネットワークへのデバイスがeth0.1としてできる。
(IPエリアスだとeth0:1という感じでコロンになるけど、VLANの場合はeth0.1とピリオドになる)
ちなみに、これはデフォルトのネーミングルールがDEV_PLUS_VID_NO_PADになってるからこういう形だけど、VLAN_PLUS_VIDならvlan0001、VLAN_PLUS_VID_NO_PADならvlan1、DEV_PLUS_VIDならeth0.0001という形になる。
このネーミングルールの切り替えは
# vconfig set_name_type HOGEHOGE
で行う。
まぁ、名前だけの違いなので、お好きなモノを(^^;
ってか、私的には名前なんてどうでも良いのでデフォルトでGo!(謎)
次に、Xenで使うためにブリッジの設定をしなきゃいけない訳ですが、複数枚のNICがある時と同様、wrapperスクリプトを作って複数回/etc/xen/scripts/network-bridgeを呼び出せばいいかな?と思ったんだけど、これがうまく行かない。
このスクリプトだと、名前を色々入れ替えたりといった操作をしていて、その途中で一旦インターフェースをダウンしたりしてるんだけど、vlanのインターフェースはダウンできなかったりするようだ。
それに、このスクリプトでは、IPアドレスが割り当てられているインターフェースしかうまく動かない。
XenのドメインUで使うインターフェース(ネットワーク)でもドメイン0からは直接アクセスする必要が無い・・・というか、むしろできない方がいい場合も多い。
たとえばDMZにインターフェースを持つドメインUを作りたいけど、DMZからドメイン0にはアクセスして欲しくなかったりする訳で・・・
で、そういう場合は仮にIPアドレスを振ってからブリッジを作って、iptablesで止めるとかIPアドレスを0.0.0.0等に変更する必要がある。
こういうのは面倒だし、何より美しくない(^^;から、何か良い方法は無いものかと探していたら、こんなページを発見。
/etc/network/interfacesに
auto br100
iface br100 inet manual
bridge_ports eth1.100
bridge_fd 1
bridge_hello 1
bridge_stp off
up ifconfig eth1.100 mtu 1492
とか書いとくと、ブリッジの設定ができるらしい。
undocumentedですが(^^;
最後のMTUを設定している行は、タグVLANではタグ分4Byteが追加されるから、通常の1500Byteじゃなくて1504Byteになる場合が発生するため、NIC(のドライバ)によっては動かなくなる場合もあってこうやってるらしい。
Jumbo Frame対応(ドライバ)のGbit NICとかだと、無くても問題ない・・・に違いない。
ちなみに、br100というのはブリッジの名前なので何でも良い。Xen的(謎)にはxenbr0とかいうヤツ
eth1.100は物理デバイスeth1のID100という意味なので、その辺は適宜変更。
で、タグの数だけこれを並べたら(もちろん、ブリッジ名やインターフェース名はそれぞれ変えて)、ブート時に各ID分だけのブリッジが勝手に作られるから、xend-config.sxpではネットワークスクリプトの設定をする必要が無い。
(network-script network-dummy)がデフォルトで有効になってるけど、ダミーデバイスがいらなければコレもコメントにしてしまって良い。
とはいえ、これだけだとドメイン0はネットワークが使えないから、そりゃ困るよねぇという事で、必要なものにはIPアドレスを付与する
auto xenbr0
iface xenbr0 inet static
address 192.168.0.1
netmask 255.255.255.0
gateway 192.168.0.254
bridge_ports eth0.1
bridge_fd 1
bridge_hello 1
bridge_stp off
みたいな感じで、inetの後のmanualをstaticに変えて、通常のNICと同様にブリッジにアドレスを付ける。
ドメインUの設定ファイルの方は、通常の物理NICが複数ある場合と同様で、アタッチしたいブリッジを記述する。
vif = [ 'mac=00:16:3e:a8:00:fb,bridge=xenbr3' ]
みたいな。
ちなみにこのmac、無くてもそれなりに動くのに、たいていの設定を書いてるサイトではいちいち指定しているからなぜかなぁ?と思ったら、ドメインUにudevが入ってる場合、NICの検出順で名前(eth0とか)がコロコロ変わらないように、MACアドレスと名前を維持するようになっている。
で、vifにmacの指定が無いとドメインUが立ち上がるごとにコロコロMACアドレスが変わっちゃうから、その親切が災いして(謎)名前が変わる(eth1,eth2,eth3・・・みたいに)
という事で、macを指定して毎回同じMACアドレスになれば、NICの名前も固定されるからこういう事が起きない。
まぁ、udevの名前を固定する仕組みを止めちゃってもいいんだけど、最初の00:16:3eは固定で、残り3Byteがランダムという事は16百万分の1の確率で重なってしまう事もあり得るから、指定しといた方が無難かもしれない。
ウチではIPアドレスの下位3ByteをMACアドレスの3Byteに割り当てるようにしている。
という感じで動かしてみると一見動いてるようなんだけど(^^;、これで大丈夫なのかなぁ?
まだテスト環境だけで、実運用サーバには入れてないんだけど・・・
最近のコメント