L2ネットワークとESXi

この記事で実現すること

ネットワークの教本といえば、TCP/IP、つまりレイヤ3が中心の解説が中心です。ここでは、普段なかなか目にすることのないL2ネットワークの基礎、 ESXiにおけるネットワークの設定について説明するものです。

L2ネットワークとIPアドレス

個人向けのWi-Fiルーターなどを使い、PCやスマホ、またはNASや仮想環境などを使うようになれば、IPアドレスやDHCP、そして個々の端末が保有するMACアドレスというところは良く目にすることでしょう。Wi-Fiルーターと無線接続する端末だけだと、なかなかL2レイヤは気にすることは無いかもしれません。ネットワークを高度化して、ESXiなどの仮想環境を使い始めると、L2レイヤの知識が必要となってきます。何となくは理解して仮想環境を使われている方が多いかと思いますが、L2スイッチとVLAN、スタンドアロン(無償版)ESXiのvSwitchなどの具体的な設定などを確認していきます。

スイッチングハブ

個人向けに販売されているスイッチングハブといえば、一般的にL2スイッチを指します。TCP/IPのルーティングができるL3スイッチもありますが、高額です。L2スイッチも大まかには2種類あり、VLANの設定ができるタイプと、設定が出来ないタイプとの2種類あります。スイッチングハブのネーミングの理由としては、指定されたMACアドレスがあるポートにのみデータを転送する機能を持つものです。昔のハブは電気的に全てのポートにデータを送っており、さらに半二重通信(片方が送信している時は相手側は送信できない。Wi-Fiと同様)でしたが、今のスイッチングハブといえば、全二重で双方向通信が可能であり、複数端末の同時通信でデータ送受信の競合がないようになっています(半二重通信ができる製品もあります)。スイッチングハブではない昔ながらのハブはダムハブやリピーターハブと呼ばれましたが昨今ではむしろその製品を探すのが難しくなっています(ダムハブは隣の端末の通信を傍受できるのでパケットキャプチャとしての使い道はあります)。

スイッチングハブをタイプ別と特徴で示すと以下の通りです。

タイプ 説明 特徴
アンマネージ 電源OnしてLANケーブルを繋いですぐに使える製品。設定画面などは一切ない。 安価
スマートスイッチ 管理画面があり、VLAN、MACアドレスフィルタやパケットの優先度設定などが可能 個人向けには少ない
マネージド VLAN、高度な管理(SNMP、Portミラーリング、コマンドライン) やや高額。L2スイッチではスマートスイッチとマネージドとの区別が付けづらくなってきている
L3スイッチ DHCP機能、ネットワークアドレスを分離し、ルーティングが可能。マネージドスイッチの扱い。 高額。ネットワークの知識が必要な難解なコマンドライン中心の製品が多い。

ホームユーザーとしては、こういった情報よりも、10GbEとか2.5GbEなどのポートの速度を優先したり、発熱を気にしてファンレスか否か、ファンがどれだけ静かなのかをポイントにしてスイッチングハブを購入されていることでしょう。単にネットを使うだけであればそれで充分で、普段はL2ネットワークの事を気にする必要はありません。

リモートワークで家の機器と会社の機器とを分離したい場合、一般的にWi-Fiルーターではゲスト用ネットワーク(ゲスト用SSID)があるので、昔ほどVLANを必要としなくなっています。こういった単にネットを使うだけで何も管理できないスイッチをアンマネージスイッチと呼びます。

スイッチング能力

スイッチの性能の一つにスイッチング能力、別名、スイッチングファブリックというものがあります。比較サイトでも必ずスペックとして出ているものですが、この数値は、基本的に全てのポートが全二重でブロッキングせずにデータを送信できるものとして計算された数値となっています。8Portで全て10GbEなら以下の通りです。

  • 10Gbps×8(Port)×2(全二重)= 160Gbps

10GbEが4Port、1GbEが8Portの製品なら、96Gbpsという具合です。ですので、製品を比較して「こちらのハブのスループットが高そうだ」という事にはなりません。

スマートスイッチ・マネージドスイッチ

全く管理画面が無いL2スイッチはIPアドレスを持ちませんが、スマートスイッチ・マネージドスイッチと呼ばれている製品はIPアドレスを持ちます。この”スマート”や”マネージド”というネーミングも実は明確な定義はありません。各社によって呼び名が少しづつ異なっており、はっきり言えばマーケティング用語です。Webの管理画面があってもVLANが無いL2スイッチもあります。

IPアドレスを持っているとはいえ、スイッチ経由で通信をする際に、ルーターのようにスイッチのIPアドレスを経由する訳ではありません。以下のように見えないPort0番にAmazon Fire Stickをさらに小さくしたような組み込み機器で独立したOSが接続されていて、そこに最低限のネットワーク通信と管理のためのOSの機能を持っていると考えてください。スイッチングハブとしてパケットを転送している機能はハードウェアであるASIC(Application Specific Integrated Circuit)が担っており、この小さな機器は殆ど使われません。最近のWi-Fi機器もこういった形になっており、管理画面の遷移が遅いからといって転送能力が劣っているという訳でもありません。PCなどからスイッチへのpingを打つと、このPort0番に着信して応答を返す仕組みになります(pingの応答速度も一般的に遅いです)。

日本では、全くITの知識が無い人向けに分かりやすくスイッチを提供するという事が主眼に置かれているため、アンマネージスイッチが主力製品として販売されていますが、値段なりの品質です。仮想環境やNASなど24時間の運用を前提で考えるのであれば、スイッチにもそれなりの品質を求めるべきです。アンマネージで不具合が出ると回収するしかありません。ファームウェアの更新ができるもの、かつ、きちんと定期的にアップデートが行われている製品を選定されることをお勧めします。

L2ネットワークとMACアドレス

L2スイッチはMACアドレスを宛先として判断し、パケットを目的のポートに転送します。この世界ではIPアドレスはデータの中身として扱われ、宛先として使われることはありません。例えば、以下のPCとL2スイッチとの関係で確認してみます。

PC1からPC2にpingを打つこととします。


sequenceDiagram
participant pc1 as PC1
participant sw as SWitch
participant pc2 as PC2

Note over pc1: 1.PC2へのpingコマンド投入
pc1 ->> sw : 2.ARP Request(PC2)をブロードキャスト
Note over sw: 3.PC1のMACを自己学習
sw ->> pc2 : 4.ARP Requestをブロードキャスト
pc2 -->> sw : 5.ARP Reply(PC2のMAC)
Note over sw: 6.PC2のMACを自己学習
sw -->> pc1 : 7.ARP Reply(PC2のMAC)
pc1 ->> sw : 8.ICMP Echo Request
sw ->> pc2 : 9.ICMP Echo Request
pc2 -->> sw : 10.ICMP Echo Reply
sw -->> pc1 : 11.ICMP Echo Reply
Note over pc1: 12.ping応答

このシーケンスの実行の結果は以下の通りです。

PC1のarpテーブルは以下になります(Windowsでの実行を想定)

1
2
3
4
5
6
C:\Users\yoshi>arp -a

インターフェイス: 192.168.100.129 --- 0x10
インターネット アドレス 物理アドレス 種類
192.168.100.161 04-69-f8-aa-bb-cc 動的
255.255.255.255 ff-ff-ff-ff-ff-ff 静的

PC2のARPテーブルは以下になります(macOSでの実行を想定)

1
2
$ arp -a
? (192.168.100.129) at 30:59:b7:00:11::22 on en0 ifscope [ethernet]

そして、スイッチ上のMACアドレステーブルは、MACアドレスと接続されているPortの組み合わせが登録されています(ここではUbiquiti社のPro Aggregationスイッチを使っています。各社、機種毎に取得方法は異なります)。

1
2
3
4
5
6
(UBNT) >show mac-addr-table

VLAN ID MAC Address Interface IfIndex Status
------- ------------------ --------------------- ------- ------------
1 30:59:B7:00:11:22 0/1 1 Learned
1 04:69:F8:AA:BB:CC 0/28 28 Learned

VLANはデフォルトVLANが1の製品が大半です。MACアドレステーブルにはVLANのIDが必要ですが、詳細説明は割愛します(機種により実装の違いがあります)。

さて、このようにして、PC同士はL3レイヤ(IPアドレス)からL2レイヤ(MACアドレス)への変換の情報をお互いに持ち、スイッチはMACアドレスとそれがどのPortに接続されているかを管理しています。

スイッチ自身に管理画面がないと、スイッチの中身がどうなっているか分からないんですが、アンマネージスイッチでは管理IPアドレスを持たないだけで、しっかりとMACアドレステーブルの管理は行われています。

ちなみに、MACアドレスは6バイトでコロン区切りかハイフン区切りとなっています。先頭の3バイトがVendorIDとなっていて、上記の例だと、30:59:B7はMicrosoft社であり、04:69:F8はApple社になります。

ご自身のPCでもarp -aを実行してみてください。LANにあるさまざまな端末のIPアドレスとMACアドレスの一覧が確認できるはずです。

Ubiquiti Switch Pro Aggregation
https://jp.store.ui.com/collections/unifi-network-switching/products/unifi-switch-aggregation-pro

ESXiのL2ネットワーク

ここではVSphere Hypervisor(無償版ESXi)についての説明になります。ESXiは仮想環境として端末を動作させる機能とvSwitchという仮想ネットワークスイッチの機能を持っています。実際は1つのネットワークカードに対して、複数の仮想マシンを動作させることが可能となっています。

仮想マシンのNIC

仮想マシンの構成としての一例を挙げます。

この仮想マシンはUbuntuで、1つの仮想ネットワークアダプタを持っています。最もシンプルな構成です。MACアドレスの先頭3バイトは00:0c:29となっており、これはVMwareのVenderIDです。下位3バイトは仮想マシンの構成時に自動的に振られます。

続いて、仮想ネットワークスイッチの説明です。

この例では仮想スイッチ1つに物理アダプタを1つ加えています。ESXi本体のハードウェアに付属するネットワークカードが物理アダプタです。

この物理アダプタには当然ですが物理MACアドレスがあります。仮想ネットワークアダプタに到達するためには、この物理アダプタを経由する必要があります。しかし、ESXiのネットワークドライバのレベルで仮想ネットワークアダプタがNICの物理デバイスと接続されており、物理ネットワークアダプタ80:61:5f:xx:xx:xxは使わず、仮想MACアドレス00:0c:29:4f:2e:05が仮想マシンに接続されています。80:61:5f:xx:xx:xxは使われていないと書きましたが、ESXiを構成すると、vmnic0の物理MACアドレスはESXiのVMKernelのvmk0に使われるようになっています。ESXiの世界ではネットワークの障害時の切り替えなども考慮し、物理MACアドレスはあまり重要ではありません。

過去の技術ですが、物理MACアドレスがデータを受け取って仮想MACアドレスに変換して受け渡す、いわゆるNATの技術も実際には存在します。しかし、今のESXiでは物理NICから実際の仮想MACアドレスのデータが流れていきます。

一例として、私の保有しているスイッチでPort19のESXiの物理NICとESXiの仮想MACアドレステーブルを表示させると以下のようになっています。
(物理MACアドレスの値と一部のVLANの値は修正しています)
前述したように、先頭3バイトが00:0C:29のものが仮想マシンです。

1
2
3
4
5
6
(UBNT) #show mac-addr-table | include Interface|00:0C:29|80:61:5F

VLAN ID MAC Address Interface IfIndex Status
200 00:0C:29:4F:2E:05 0/19 19 Learned
200 00:0C:29:C8:1F:97 0/19 19 Learned
200 80:61:5F:00:00:03 0/19 19 Learned

VLAN200の2つの仮想マシンが存在している事が分かります、スイッチはこのようにして仮想マシンのMACアドレス1つ1つを管理し、適切なスイッチポートに転送していることがわかります。

ちなみに物理スイッチを多段接続した場合にも、1つのポートから先のスイッチ経由で複数の端末が接続されていれば同様に1つのポートに複数の端末のMACアドレスがテーブルに管理されます。

vSwitch

vSwitchでは物理NICを経由して仮想マシンと接続するためのポートグループが必要です。仮想マシンにネットワークアダプタを加える時にはこのポートグループが必要です。ESXiのセットアップ完了後は、vSwitch0 がデフォルトのvSwitchとして作成されており、ポートグループとして、Management NetworkおよびVM Networkの2つが作成されています。

Management Networkは、ESXiのWebにログインしたり制御のためのポートグループです。このグループの中にデフォルトでVMKernel NICとしてvmk0が自動作成されています。VMKernel NICはESXiのWebサービスを始めとする管理系のサービス提供のためのIPアドレスを持ちます。前述したL2スイッチの説明ではPort0として小さな組み込み機器としてOSが稼働していると表現しましたが、それと目的は同じです。VMKernelはvSwitchを制御するというよりは、ネットワークセグメント単位に持ち、ESXiを管理するためのIPアドレスとなります。 VM Networkもポートグループです。仮想マシンが何もない初期状態では特に仮想IPアドレスも保有していません。仮想マシンを作成し、ネットワークアダプタを追加する際に、このVM Networkを選択することになります。そうすると自動的に仮想IPアドレスが振られます。もちろん、新規にポートグループを作成し、仮想マシンにネットワークアダプタを追加する事もできます。また、ポートグループという”グループ”の意味としては、複数の仮想マシンを同一のポートグループに追加できます。この際、MACアドレスが同じになったりはしません。

ポートグループ1つで複数の仮想NICと接続できます。仮想マシン作成時、仮想MACアドレスは自動的に割り当てられます。物理NICを2つ以上保有する場合、障害対策と負荷分散ができます。負荷分散の際、ESXiのデフォルトでは、ポートグループ単位に複数の物理NICを使い負荷分散をします。

Management NetworkVM Networkのポートグループが分かれているのは、本来、マネジメントネットワークとクライアントやサーバーがある仮想マシンのネットワークとは分離すべきという考えに基づいています。

なお、仮想マシンをバックアップから戻した場合には、既存の仮想マシンと同一のMACアドレスで復元してしまうと通信が正しく行えなくなります。従って、仮想マシンの復元後、初期起動時には以下のダイアログが表示され、コピーしましたを選択すると、新しい仮想MACアドレスが割り当てられます。

特殊な設定

vSwitchには以下の2つの特殊な仮想マシンのための追加設定ができます。

  • 無差別モードを許可

    ファイアウォールやIPS/IDS(Intrusion Prevention System/Intrusion Detection System)などセキュリティ製品におけるブリッジモードのように、同一LAN内でパケットの検証をする際にはこれをはいに変更します。セキュリティ製品の先に接続されている端末も同一のL2ネットワークとして全てパケットを転送してあげる動作です。自分宛のMACアドレスでなくとも受け取る挙動であり、仮想マシンはダムハブに見えるわけです。また、仮想マシンのネットワークキャプチャを行う場合に使えます。

  • 偽装転送を許可/MAC変更を許可

    上記と同じようにセキュリティ製品(ゲートウェイ)がバックヤードにある端末のパケットを相互にやりとりするわけですから、自分自身のMACアドレスではないMACアドレスを持ったデータを送信する事になります。一般的にはセキュリティ上認めていないものですが、セキュリティ製品ではMAC変更を許可はいを、偽装転送を許可はいにします。

これらはいずれもセキュリティ強化のためにデフォルトではいいえになっています。
これらの機能の詳細はVMwareの以下のドキュメントを参照してください。

vSphere 標準スイッチのセキュリティ強化
https://docs.vmware.com/jp/VMware-vSphere/7.0/com.vmware.vsphere.security.doc/GUID-3507432E-AFEA-4B6B-B404-17A020575358.html

ESXiのVLAN

無償版ESXiではVLAN設定が可能です。
ESXiにおけるデフォルトVLAN(タグ無し)はVLAN ID=0となります。通常のスイッチはVLAND ID=1のものが多いのですが、基本的にタグ無し同士の通信であれば問題になりません。デフォルトVLANを変更し、さらにそれをネイティブVLAN(タグ無し)にする時は少し考える必要がありますが、ホームユーザー向けではそこまで考えることも無いでしょう。

ESXiのVLANのタイプ 説明
EST 通常のタグ無し。物理スイッチのアクセスポートに接続する場合でスイッチ側でタグが外される事を期待。
VST タグ付き(1〜4094)。物理スイッチからタグ付きで接続する場合。
VGT タグ付き(4095)。仮想マシンに複数のタグ付きパケットを流す場合

3種類それぞれのネーミングがあります。

EST(タグ無し)はVLANを意識しないモードです。
タグ無しでvSwitchのポートグループに渡されることを期待している設定です。物理スイッチがアクセスポートの場合は、タグが外されるのでvSwtichおよびポートグループでは特に何もしませんし、仮想マシンでも何も意識しません。

VSTは、VLAN IDをポートグループに設定します。
例えば、ESXiのマネジメントネットワークはタグ無し、仮想マシンはユーザー側ネットワークとする場合にvSwitchで2つのセグメントのデータを受け入れ、VMKernelはタグ無しのまま、仮想マシンはポートグループでIDに200を指定します。この場合はVLAN200について、vSwitchでタグが外され仮想マシンにパケットが届きますので仮想マシンでVLANの意識はしません。

VGTは物理スイッチにおけるトランクポートの役割と同等です。ポートグループに4095を設定します。仮想マシン自身がタグVLANを解釈できる場合に複数のVLANのタグ付きパケットを流し、仮想マシン側でタグを外すような使い方となります。また、VSTではESXiの仕様として1〜4094とありますが、一般的にタグありのVLANは2〜1005の間で作成しますし、個人向け環境のVLANはネットワークアドレスの第3オクテットの数字と合わせるのが無難です。192.168.xxx.0/24
全てのVLANデータが流れて不要なものは仮想マシン側で破棄する事になるので負荷が高くなりやすく、物理スイッチからは必要なVLANのみのデータを流すことが求められます。

VSTの例ですが、Win10ProのVLAN IDを300とすると、ポートグループの設定でVLANの値を明示します。

このvSwitchの例で言えば、タグ300のパケットは、VGT(ID=4095)、300と明示した2つの仮想マシンのみに転送されます。VLAN ID0のVM NetworkおよびManagement Networkにはタグ300のパケットは流れません。

このように、vmnic0に接続されたvSwitchネットワークはvmk0のIPネットワークが192.168.1.0/24だとすれば、全ての仮想マシンが192.168.1.0/24のIPアドレスを持つのがシンプルな構成ですが、このようにタグVLANを組み合わせることで、物理NICの数が少なくても複数のVLAN、つまり複数のネットワークセグメントのデータを通すことができます。

VGTの場合は、物理スイッチ側のMACアドレステーブルは以下のようになっています。仮想マシン自体がVLANのトランクポートを扱えるため、1つのMACアドレスに複数のVLANが割り当てられている事が分かります。

1
2
3
4
5
VLAN ID  MAC Address         Interface              IfIndex  Status
1 00:0C:29:EB:B3:CC 0/15 15 Learned
200 00:0C:29:EB:B3:CC 0/15 15 Learned
300 00:0C:29:EB:B3:CC 0/15 15 Learned
4040 00:0C:29:EB:B3:CC 0/15 15 Learned

ESXiのVLANタグについては以下のドキュメントを参照してください。英語ですが3つのVLANについての解説ビデオもあります。

VMware VLAN 構成
https://docs.vmware.com/jp/VMware-vSphere/7.0/com.vmware.vsphere.networking.doc/GUID-7225A28C-DAAB-4E90-AE8C-795A755FBE27.html?hWord=N4IghgNiBcIBwAYBMA6AjARRAXyA