清水理史の「イニシャルB」

新型NUC3台でThunderbolt 4クラスタを組みたいが、予算がないのでGNS3によるエミュレートで我慢する

実機がないので論理的なネットワーク構成だけをGNS3で検証してみた

 新型のASUSのNUC 14 ProやMINISFORUMのMS-01など、Thunderbolt 4を2ポート搭載した小型PCがほしい。それも3台。理由は、Thunderbolt 4直結により、機器間で20Gbpsオーバーの通信ができるクラスタを作ってみたいからだ。

 しかしながら、予算がなくて買えないため、ネットワークエミュレーターの「GNS3」(Graphical Network Simulator-3)で、論理的な通信部分だけを先行でテストしてみることにした。実機でやるには高くて贅沢な遊びも、仮想環境なら手軽に楽しめる。

Thunderbolt 4直結で20Gbpsオーバーを実現

 実機で試したいが、予算がない。

 今回、まさにそんな状況だ。本来は、ASUS NUC 14 ProやMINISFORUM MS-01など、Thunderbolt 4×2(またはUSB4×2)を搭載した小型PCで実験したいのだが、最小構成となる3台の実機の予算が確保できず、今のところは海外のサイトを眺めながら、うらやましく思う日々が続いている。

 きっかけは、昨年あたりから海外のマニアの間で話題になっていた以下の記事だ。

▼Proxmox VEクラスタの作成レポート
ProxMox Cluster - Soup-to-Nutz

 掲載されている事例は、1世代前となる13世代のNUCを使った構成だが、3台のNUCをThunderbolt 4で直結して20Gbpsオーバーの実効速度を持つProxmox VEクラスタ(しかもIPv6構成)を構成する方法が紹介されている。

 一般的な1Gbpsや2.5GbpsのEthernetでは、クラスタ構成時にノード間での仮想マシンのレプリケーションや分散ストレージのCephを利用したストレージの同期(各PC内蔵のストレージを1つの領域として利用可能)で、ネットワークがボトルネックになり、満足なパフォーマンスを実現できない。

 もちろん、10Gbps対応Ethernetを利用する方法もあるが、前述したMS-01以外の小型PCでは搭載が難しい。であれば、近年、標準搭載が増えてきたThunderbolt 4、またはUSB4(USB4 Thunderbolt Bridge対応)を使って、クラスタのノード間を直結してしまおうというわけだ。

試したい構成。14世代CPU搭載のNUCでThunderbolt 4クラスタでどれくらい高速な通信ができるかを実験したい

 これにより、クラスタのノード間をThunderboltケーブルだけで高速に接続することが可能になる。Thunderbolt 4の最大転送速度は40Gbpsだが、データ転送では最大32Gbpsの通信が可能で、海外のサイトではiPerf3による実効速度で20Gbpsオーバーも確認されている。

▼Thunderbolt 4の解説
Thunderbolt™ 3 と Thunderbolt™ 4 のテクノロジーの比較(Intel)

 課題は、ノード間を直結する必要があるため、各PCにThunderbolt 4ポートが2つ必要なことだ。この条件を満たす小型PCは、比較的新しい製品で、価格も高い。例えば、ASUS製品の場合、最新のNUC 14 Pro KitだとCore 3 100U搭載モデルのNUC14RVKI3でも9万円前後(公式ストア価格)となる。

 メモリやストレージなどもろもろの費用を考えると、3ノードクラスタ構成で30万円近くになるので、さすがに「試してみたい」という理由だけでは費用を捻出できない。過去何度も、カートに一式入れては、価格を見て、削除するということを繰り返してきた。

上級者向けネットワークエミュレーター「GNS3」で試す

 それでも、何かしら試してみたいという欲求が限界になってきたので、今回はとりあえずネットワーク構成だけをGNS3で構成してみることにした。

 GNS3は、ルーターやスイッチなどのネットワーク機器の接続や構成、テストが可能なネットワークエミュレーターだ。画面上にネットワーク機器をドラッグし、ケーブルで結び、各機器を設定することで、その通信状況を画面上で再現できる。

ルーターやLinuxホストなどをエミュレートできるGNS3

 ネットワーク機器だけでなく、LinuxやWindowsなども仮想マシンとして稼働させることができるうえ、インターネットや家庭内の通信機器なども含めた実際のネットワークとの接続も可能になっており、かなり現実に近い試験ができる。

 前述したThunderbolt 4クラスタの場合、もちろんThunderbolt 4のエミュレートはできないので通常のEthernet構成となるうえ、Proxmox VEではなくそのベースとなるDebianの仮想マシンを配置して検証することになるが、3台のノードをリング状に構成し、ルーティングを構成するところまでは体験できる。

 Thunderbolt 4×2を搭載したNUC(または、ほかのミニPC)の価格が下がることを祈りつつ、しばらくは検証環境で欲求を抑えることにしたわけだ。

GNS3のインストール

 GNS3は、ネットワーク機器を配置したり、操作したりするクライアントアプリ、配置した機器を動作させる仮想環境、Wiresharkなどのツール類など、複数のモジュールで構成される。だが、今回は最小限の構成のみを利用した。

 具体的には、仮想環境のGNS3 VMのみを利用し、ネットワーク機器の配置や構成などの操作はGNS3 VMに含まれるウェブクライアントを利用した。

▼GNS3のウェブサイト
GNS3

GNSのウェブサイト。ダウンロードにはアカウント登録が必要

 利用した仮想マシンのプラットフォームは、Windows 11 ProのHyper-Vだ。詳細は省略するので以下の記事を参考にしてほしいが、あらかじめWindows 11にHyper-Vをインストールしておく必要がある。

▼(筆者による)Hype-Vによる仮想環境構築の解説記事
Windows 11でより使いやすくなったHyper-V。サクッと無料で仮想環境を作ってみる(PC Watch)

 インストールは簡単だが、GNS3のウェブサイトでダウンロードページへと進んでから、Windows版をダウンロードしてもHyper-Vでは使えない。ページ下部にある「download the GNS3 VM」から、「Microsoft Hyper-V」用のディスクイメージを選ぶ必要がある。

 ダウンロードしたZIPファイルには、ディスクイメージと共に仮想マシン作成用のバッチファイルが含まれている。展開したファイルを仮想マシンの実行場所(今回はDドライブに作成したHyper-Vフォルダー)に移動し、管理者権限でターミナルを開き、フォルダーを移動してから「./install-vm.bat」を実行すればいい。

今回はHyper-V向けの仮想マシン(GNS3 VM)のみをダウンロード
ダウンロードしたファイルは仮想環境を配置したいフォルダーに移動する
付属のインストーラーを管理者権限のターミナルから実行する

 自動的にディスクイメージがマウントされた仮想マシンが作成されるので、最後に以下のコマンドを実行して、入れ子になった仮想化の設定を有効にしておく。GNS3の仮想マシンでは、内部でKVMを利用してルーターやLinuxなどの仮想マシンを稼働させるため、Hyper-V内でさらに仮想環境を利用するために以下の設定が必要となる。

Set-VMProcessor -VMName “GNS3 VM” -ExposeVirtualizationExtensions $true

作成された仮想マシンで入れ子になった仮想化を有効化しておく

 なお、標準では仮想マシンのCPUが「1」に設定されているので、PCのリソースに合わせてCPUの数を増やしておくといいだろう。また、標準ではDefault Switchに接続されるため、GNS3のネットワークがHyper-VのNATの内側に構成される。LANと同じネットワークにGNS3の機器を配置したい場合は、外部向けの仮想スイッチを新たに作成して、ネットワーク構成も変更しておく必要がある。

CPUを増やしたり、ネットワーク構成を変更したりして、環境を整えておく

 設定が完了したら、Hyper-VマネージャーでGNS3VMを起動し、画面に表示された「http://172.21.228.37」などのウェブUIのアドレスに、ウェブブラウザーでアクセスする。このとき、「KVM support available: True」になっていることを確認しておこう(Falseの場合は、上記の入れ子の設定に失敗しているので注意)。

起動した仮想マシンに表示されたアドレスにアクセスする
GNS3の画面が表示される

GNS3の基本

 続けて、簡単にGNS3の使い方を解説しておく。

 WebUIが起動したら、[Add blank project]で新しいプロジェクトを開始する。プロジェクトの画面が表示されたら、上部の[Add a node(+)]ボタンから、[Cloud]と[Ethernet switch]と[VPCS]を配置する。

GNS3の基本操作。まずはノードを追加する

 続いて、上部の[Add a link](線のアイコン)をクリックし、[Cloud1]をクリック。すると、接続可能なインターフェースが表示されるので、[eth0]を選択。そのまま[Switch1]をクリックし、同様に接続可能なインターフェースから[Ethernet0]を選択。これで[Cloud1]と[Switch1]が接続される。同様に、「Switch1」をクリックして「Ethernet1」を選択してから、「PC1」の「Ethernet0」を選択する。

 このように、画面上にノードを配置し、各ノードのインターフェース同士を線で結ぶことで、ネットワークを構成できる。

ポートを指定してノード間を接続する

 次に、PC1にIPアドレスを設定する。PC1を右クリックして、「Edit Config」を開き、「# dhcp」の先頭の「#」を削除し、「ip dns 1.1.1.1」と追記しておく。これでDHCPでIPアドレスを取得可能になり、さらにDNSサーバーとしてCloudflareの1.1.1.1を参照可能になる。

PC1のIPアドレスを設定

 GNS3では、「Cloud」または「NAT」によって外部ネットワーク(PC上のネットワーク)と接続するしくみになっている。このため、PC1をDHCPで接続する構成にすることで、今回のケース(GNS3 VMがDefault Networkに接続されているケース)では、Hyper-VのNATの内側のIPアドレスが割り当てられることになる。

 準備ができたら、上部の「Start/Resume all nodes」(再生ボタン)をクリックして、ノードの電源をオンにする。

 PC1を右クリックして「Web Console」を開くと、PC1のコマンドプロンプトが表示されるので、「show ip」と入力すると、DHCPによって割り当てられたアドレスとDNSとして割り当てられた1.1.1.1を確認できる。

 試しに「ping www.impress.co.jp」とすれば、返答があるはずだ。このように、手軽にネットワークを構成し、またリアルなネットワークとの接続も簡単にできる。

GNS3内のPC1と実機のネットワークが接続され、Pingでインターネットにも接続できる

3ノードのネットワークを構成する

 さて、今回の目的は、3台のDebianノードをリング状に接続することなので、必要なテンプレートを追加していく。

 GNS3では、標準で利用できるノードが前述したシンプルなスイッチやVPCなどに限られており、高度な環境をエミュレートするには、テンプレートとして機器を追加する必要がある。

 Ciscoのルーターやスイッチなどを利用するためのイメージは、適切なライセンスがないと取得できないため、個人で利用する場合はOpenWRTやOPNsense、Open v Switch、各種Linuxなどに限られる。GNS3は多機能だが、結局実機のライセンスが必要になるので、CCNAなどの学習用途で使うならCisco Packet Tracerの方がおすすめだ。

 今回はDebianノードさえあればいいので、上部の[Add a node(+)]から[New Template]の[Install appliance from server]を選択し、GNS3に新しいテンプレートを追加する。

 [Filter]に「debian」と入力し、右側の[install(↓)]ボタンをクリックし、リストから[debian-12.4.qcow2]の[Download]ボタンをクリックする。これで、DebianをKVMで動作させるためのイメージがダウンロードされる。

 ダウンロードが完了したら、[Import]ボタンからダウンロードしたファイルを登録し、最後に[Create]でテンプレートを作成する。

Debianのイメージを実機のPCにダウンロードし、それをGNS3にインポートする

 これでようやく本題の3ノード構成を試せるようになった。スイッチの配下にDebianの仮想マシンを3台接続し、各マシンを右クリックして[Configure]の[Network]にアダプターを2つ追加しておく(Adapter typeはParavirtualized Networkを選択)。

 今回は、この追加した2つのアダプターをThunderbolt 4のネットワークに見立てて、論理的な構成のみを試すことになる。

Thunderbolt 4の代わりに通常のネットワークアダプターを2つ追加

 具体的な構成は、冒頭で紹介した作成レポートの記事、もしくは以下の解説記事を参照してほしい。基本的には、ここで紹介されている設定を一部改変して利用すればいい。細かくなりすぎるので詳細は割愛するが、ざっくり流れを紹介すると以下のようになる。

  • frrのインストール
  • OpenFabricプロトコルの有効化
  • frrの設定
  • 各インターフェースの設定

▼3ノードのネットワーク構成に関する解説
Full Mesh Network for Ceph Server

もろもろ準備を整えた3ノード構成のネットワーク

通信状況を確認する

 完成したネットワークを使って、通信を確認してみる。まずは、各PCから他のPCに通信できるかを確認する。

 各PCで[Web Console]を開き、他のPCに対してpingが通るかどうかを確認する。基本的には直結されているので問題なく通信できるはずだ。

 [Debian-1]で「vtysh」を利用し、frrのコマンドを利用して以下のようにOpenFabricの状況を確認すると、隣接するノードが表示され、下図のように、きちんとルートが設定されていることを確認できる。例えば、現在のノード(Debian-1、10.15.15.51)から、「10.15.15.53(Debian-3)」へのルートは、[ens6]インターフェース経由でネクストホップが[10.15.15.53]と確認できる。

vtysh
show openfabric neighbor
show openfabric route

経路を確認。10.15.15.53(Debian-3)へのルートはens6インターフェース経由

 ここで、[Debian-1]と[Debian-3]の接続を停止してみる。画面上で接続されている線を右クリックして[Suspend]を選択すると、この接続を停止できる。ケーブルが外れて通信できないとか、インターフェースにトラブルが発生した状況を再現できる。

 この状態で[Debian-1]のOpenFabricの状態を確認すると、下図のようになる。先ほどまで表示されていた[neighbor]から[ens6]の[Debian-3]が消えている。また、ルートも変更されており、[Debian-3]へのルートが[ens5]インターフェースのネクストホップ[10.15.15.52]となっている。

 つまり、[Debian-1]から直接[Debian-3]につながるルートがなくなったため、[Debian-2]を経由して、その先の[Debian-3]とつながっていることになる。

自動的にルートが変更される

 実際には、これらのしくみをThunderbolt 4で実現しなければならないので、インターフェースの設定が必要になるが(再起動後とか接続順が関係するのでけっこうやっかいそう……)、ひとまず接続方法や論理的な接続については、GNS3で検証できたことになる。

やはり実機がほしくなったので、中古か値下がりを待つ

 というわけで、今回はGNS3によって3ノードのネットワーク構成の設定や動作のみを実現してみた。GNS3の場合、利用できるノードが仮想マシンなので、リソースさえ許せば、ソフトウェアを追加するなど自由度が高いのが魅力だ。

 とはいえ、本当にやりたいのはThunderbolt 4による通信なので、何とか実機を手に入れたいと思う。実際にハードウェアを接続したり、実機のコンソールで転送状況を確認したりできた方が、やはり満足感が違うと、あらためて思ってしまった。

 最新機種の値下がりを期待したいが、場合によっては、型落ちになった旧世代の中古を買うことも検討したいところだ。実機を手に入れたら、あらためてレポートしたいと思う。

清水 理史

製品レビューなど幅広く執筆しているが、実際に大手企業でネットワーク管理者をしていたこともあり、Windowsのネットワーク全般が得意ジャンル。最新刊「できるWindows 11」ほか多数の著書がある。