2008年3月19日水曜日

仮想ネットワークインターフェイスと MAC アドレス



Xenで仮想マシンをネットワークに接続する場合は、仮想マシンの定義ファイルに vif= 行を記述します。


vif=[ '' ]


上記設定を行うと、ランダムな MAC アドレスを持つ仮想ネットワークデバイスがひとつ作成されます。しかし、仮想マシンの起動時に毎回 MAC アドレスを乱数か生成するため、起動ごとに MAC アドレスが変化するという問題があります。


起動するたびに変わるMACアドレスの例
00:16:3e:eb:55:45
00:16:3e:03:af:32
00:16:3e:9a:54:7e
00:16:3e:db:87:62
...


仮想ネットワークインターフェイスの MAC アドレスが変化すると、Domain-U上のudevが…


  『前回使っていたのとは違うNICが挿された』


…と解釈し、 eth0, eth1, eth2 .... と、使われていない別のデバイス名を割り当ててしまいます。


この状況を解決する一番単純な方法は、仮想ネットワークインターフェイスにあらかじめ固定の MAC アドレスを割り当てることです。Xenの開発の中心であるXenSourceがベンダコード 00:16:3e を取得していますので、このアドレスレンジ中で適当な MAC アドレスを捏造します。


[root@localhost original-php]# perl
print sprintf("00:16:3e:%2.2x:%2.2x:%2.2x\n", rand()*255, rand()*255, rand()*255, );
(Control-Dを押下)
00:16:3e:05:ed:3f
#


はい、できました。この MAC アドレスを持つ仮想ネットワークインターフェイスを定義するには仮想マシン定義ファイルに以下の要領で記述します。


vif=[ 'mac=00:16:3e:05:ed:3f' ]


今回は perl を使って MAC アドレスをランダムに生成しましたが、ネットワーク上に同じ MAC アドレスを持つノードがあると困ったことになります。24ビット空間の中でランダムに生成していますが、多数の仮想ネットワークインターフェイスを生成する場合は衝突していないか確認したり、 MAC アドレスをランダムに生成するのではなく連番で振るなどの運用も検討しなければなりません。


0 件のコメント:

コメントを投稿