VLAN に始まり、VLAN で終わった日

vlan_setup
今日は、VMware ESXi 4.0 の VLAN 実験で明け暮れました。なかなか動かなくて、疲れたー。ようやくある程度見通しが付いたので、以下に備忘録としてまとめておきます。
実は、今日は ESXi と FreeNAS の組み合わせ実験をしようと思っていました。そのために、ESXi をインストールするための別の PC まで用意したのですが、実験を始めようとして、はたと思い立ちました。

Gigabit Ether (GbE) の LAN スイッチ(LAN-SW)がない!

最初は、ESXi と FreeNAS をクロスケーブルで直結すれば良いと思っていたのですが、よく考えたら、それだと vSphere Client を動かす PC をネットワークに繋げないのでした。つまり LAN スイッチは必須、と。おまけに、今回は過負荷試験を含めた評価がしたいので、100Base-TX のスイッチでは力不足なのでした。
早速、近所のヨドバシに行って GbE を調達しようと思ったのですが、ふと考えました。VLAN 機能は要らないのだろうか? そこで、まずは実際に運用するときのネットワーク構成を検討することにしました。ここでネットワーク構成には 2つの意味があって、

  • 物理構成
  • 論理構成

を考えなくてはなりません。
今回、せっかく VMware を導入するのですから、セキュリティを考えたネットワーク構成にしたいと思っています。すなわち、

  • インターネット
  • DMZ (公開 web サーバーなど)
  • プライベート・サブネット(セキュリティ: 中)
  • 管理サブネット(セキュリティ: 高)
  • iSCSI サブネット*1

といった具合に分離しようと思っているのです。iSCSI サブネットですが、NAS (FreeNAS) に繋ぐネットワークが一つですと、SMB から公開するネットワークと iSCSI のネットワークが共通になってしまい、セキュリティ的に不安がある訳です。(妻の Mac からは Wi-Fi 経由で SMB を使いたいけど、iSCSIWi-Fi に繋ぐのは不安だ!)
論理構成については ESXi 側で自由に設計できるとしても、物理構成についてはある程度工夫が必要です。方法は 2つ考えられて、それぞれ

  • 必要な数だけ、NIC を用意する
  • VLAN 対応の LAN-SW を用意する

となります。前者だと、あと少なくとも 2つの NIC が必要(ESXi 側の iSCSI と FreeNAS 側の iSCSI)で、ただし安価な GbE LAN-SW が使えます。後者だと、追加の NIC は不要ですが、高価なインテリジェント LAN-SW が必要なのでした。計算してみると、費用はほぼ同じということが分かりましたが、柔軟性と、今後の勉強を兼ねて、VLAN (タグ VLAN およびポート VLAN)対応の LAN-SW を買うことを優先することにしました。

ESXi で VLAN をテストする

ESXi 側の VLAN 構成については、最初なかなかドキュメントが見つかりませんでしたが、ここにありました。

それによると、基本的な考えとしては

という 3つの構築モデル(構成のやり方)があることが分かりました。
VGT というのは、VMware の仮想ネットワークでは VLAN を意識せず、タグ VLAN をそのままスルーします。ただし仮想的なスイッチを複数持たせることで、サブネットを分離するやり方です。必要なサブネットの数だけ物理 NIC を搭載し、サブネット毎に個別の物理 NIC を割り当てます。ゲスト OS は、それぞれがタグ VLAN を解釈する必要があります。複数のサブネットに参加するゲスト OS は、仮想 NIC を一つだけ持てば良く、ただし複数の VLAN タグを「話す」ことになります。大きな欠点は、サブネットの数だけ NIC が必要なことと、仮想 OS が皆、タグ VLAN (802.1Q) を解釈しなくてはならない点です。メリットは、あるゲスト OS に 1台だけ仮想 NIC を接続すれば、802.1Q とゲスト OS が許すだけ任意数の VLAN を話すことができる点です。
EST というのは、物理的な VLAN スイッチのことです。「EST のみ」モデルでは、VMware の仮想ネットワークで VLAN を意識せず、さらに、ゲスト OS も VLAN を意識しません。ただし、複数の仮想スイッチを持ち、同じ数だけの物理 NIC を持つことで、外部の VLAN スイッチのポート VLAN に、それぞれのサブネットを物理的に引き込みます。メリットは、ゲスト OS がタグ VLAN を解釈できなくても良いことで、欠点は、VGT + EST と同様に、サブネットと同じ数だけの物理 NIC が必要なことです。
VST モデルは一番柔軟な構成です。VMware の仮想ネットワークでは、内部に仮想スイッチを複数持つことができ、さらにそれぞれの仮想スイッチは、複数のポート VLAN と 802.1Q トランク*2を持つことができるのです。つまり、物理 NIC が一つであっても、複数のサブネットを 802.1Q トランクとして物理 NIC に接続し、さらに、各ゲスト OS は、それ自身がタグ VLAN を解釈できなくとも、任意のサブネットに仮想的に接続することができるということです。

パケットキャプチャで VLAN を覗いて見る

そんな感じで理屈は分かったので、実際に試してみることにしました。現状では、ESXi サーバーと vSphere Client PC の間はクロスケーブルで直結しているので、まずは PC にタグ VLAN を喋らせてみようと思いました。しかしこれが分かりません。Google でいくら調べても分かりやすい説明は見つかりません。一つ分かったことは、Windows XP 自体はタグ VLAN を解釈できず、タグ VLAN は NIC ベンダ独自の実装に依存しているようだ、ということでした。私の PC は ThinkPad T42 で、搭載 NICIntel PRO/1000 MT Mobile Connection というものです。当初、こいつのタグ VLAN 設定が分からなかったので、まずは Wireshark (かつての Ethereal)で覗いてやろうと思いました。
しかし、これがうまく動きません。ゲスト OS の FreeNAS でタグ VLAN を構築し、一生懸命 ping (ICMP ECHO request) を飛ばしたり、静的 ARP テーブルを設定したりしてみたのですが、Wireshark では VLAN タグフィールドが見えてきません。設定によっては、ICMP 自体は見えるのですが、やはり VLAN タグは見えないのです。
これはダメだなー。Express5800 上の MAC (82566DM-2 らしい)が VLAN アクセラレータを持っていなくて*3、そのために ESXi が NIC 経由でタグ VLAN を喋れないのかなあ、と思ったりしたのですが、これも良く分かりません。(以下の後記に書いたように、その後、無事に VLAN タグを見られるようになりました!)

VLAN 対応の Windows ドライバを見つける

しかし諦めずに調べていたところ、ThinkPad T42 内蔵の NIC で VLAN を動かすツールを見つけることができました。これは、Google で探していたところ、どうも PROSet とかいう Intel 純正ツールが関係しそうだと分かったことからです。
ThinkPadダウンロードサイトを調べたところ、ネットワークドライバが置かれているのを見つけました。最初、これをインストールしようとしたところ、インストール済みのドライバよりも古いと怒られてインストールできなかったのですが、その中に PROSet のインストーラを見つけることができたのです。(おかげで、ドライバも古いバージョンに置き換えられてしまったが。)
以下備忘録ですが、インストーラはここにあります。(これは、T42 の場合です。)

でもって、これをインストーラを展開(実行)すると、こんなユーティリティが出てきます。

C:\DRIVERS\WIN\ETHERNET\APPS\PROSETDX\WIN32\DXSETUP.EXE

こいつをインストールしたところ、無事にタグ VLAN を使えるようになりました。どうも、個別のタグ VLAN (サブネット)が、Windows からは個別の NIC に見えるような感じです。これをセットアップしたところ、無事に複数の VLAN を使えるようになりました。ping も通りますし、ARP テーブルも正しく反映されています。
それでも相変わらず、Wireshark からは 802.1Q の VLAN タグが見えませんが、きっと何か技術的な理由があるのだろうということで、今回は諦めることにしました。

VST、VGT の留意点

VST を使う場合に注意すべき点は、VLAN タグは、各ゲスト OS の NIC 毎に設定するのではなく、仮想スイッチ上の「ポートグループ(port group)」毎に設定するということです。つまり、仮想スイッチ上の仮想ポート VLAN グループのような雰囲気です。
VGT のほうですが、仮想スイッチのポートグループにタグ VLAN をスルーさせる場合には、そのポートグループの VLAN ID に 4095 を設定する必要があります。これが 0 (VLAN なし)だと、タグ VLAN は通らないようです。これは、けっこうはまりそうです。(前述のホワイトペーパーには説明されています。)

VLAN アクセラレーション

最近の NIC (MAC) には VLAN アクセラレーションとかいう機能があって、VLAN のタグ付けをハード的に処理できるものがあるそうです。これがあると、ESXi の VLAN 処理を CPU 負荷をかけずに実現できるようです。(ある程度の負荷はかかるのでしょうが。)
しかし、いろいろな NIC で VLAN アクセラレーションが搭載されているかどうか、というまとまった情報を見つけるのに苦労しました。おまけに、MACアクセラレーションをサポートしていても、ESXi がその NIC に対応していなければ意味ないのです。
以下に、面白い PDF ファイルを見つけましたので、備忘録としてリンクを張っておきます。私は今回、安価ながら ESXi *4がサポートしているカードとして、Intel Gigabit CT Desktop Adapter (EXPI9301) というものを発注しました。いま調べてみたら、VLAN 対応と書かれているので、アクセラレータが付いているものと期待しています。(でも、FreeNAS 側はオンボード NIC しか使わない予定なので、FreeNAS のほうは、アクセラレーション対応できないかも…知れない。)
参考: http://www.intel.com/Assets/PDF/general/linecard_ec.pdf
以上、あまりまとまっているとは言いがたい情報ですが、御覧頂いた方の参考になれば幸いです。

To Do リスト

  • vSphere Management Assistant (vMA) の実験。ESXi でも CLI が使えるのかも!
  • SSH port forwarding による、vSphere Client 接続

後記 (6月15日): Wireshark と VLAN

これは Wireshark の問題ではないのですが、一部の NIC では VLAN タグがパケットキャプチャから見えないという仕様があるようです。以下が参考になります。

これを見てレジストリを追加したところ、Intel NIC でも Broadom NIC でも、VLAN タグが見えるようになりました。ちなみに Intel の場合ですが(Broardcom は未確認)、この機能を有効にした場合、promiscuous モードでパケットを受信すると、そのホストのタグ VLAN が動作しなくなるようです(たとえば、ping が通らなくなる)。promiscuous モード off の場合は、キャプチャしながらでも VLAN は動作しますが、今度は VLAN タグが見えなくなります。:)

*1:これは、管理サブネットと同じでも良いかも。というか、ESXi ではサービスコンソールがないので分離できなそう。

*2:用語が不正確だったら、ごめんなさい。

*3:かどうかも、情報不足で分からず。

*4:ESX だけだったりすると困るが、これは商品が来てみないと実験できない。