1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

備忘録: Cisco CMLをHyper-Vで動かす

Last updated at Posted at 2022-11-06

Cisco公式のNWシミュレーションツールCML2はVMWare上での動作しかオフィシャルサポートされていません。標準の設定ではHyper-V上で動作させることは出来ませんが2つの修正を加えることで動作させることが出来ました。
Ciscoは、CMLのHyper-V上の動作は保証していません。この記事はCMLで本来開放されている以外の設定を触るため、CMLが正常に動作しなくなる可能性もあります。

Hyper-Vを使うに至った理由

以下は私のWindowsやHyper-Vへの知識が低く誤った記載をしている可能性が十分にあります。

生活にはWSL2が必須です。しかし、調べた限り、WSL2を有効にした状態ではVMWare Workstation(15.7)のVT-x仮想化がenableに出来なかったためです。

  • Windows上でWSL2を用いる場合、Hyper-Vが(Hyper-Vマネージャで見えない)裏側で動作します。
  • これによりCPUのVT-xがユーザからは無効に見えます(CPU-Zなどで確認可能)
  • VT-xとWSL2との共存はWebを調べるとWindowsのハイパーバイザープラットフォームの機能を有効にし、VMWare Workstation 15.5以降であればVT-xとの共存は可能のように見えます。しかし、私の試した限りWSL2を有効にしたままVMWare WorkStationでVT-xを有効にした仮想マシンの起動ができませんでした

Hyper-VでCMLを使う課題

  • 課題1: VT-xの仮想化相当がenableになっていない
  • 課題2: VMWareとHyper-VではNIC Driverの差分があり、I/F名の差分が出てCMLのExt-ConnのBridgeモードが動作しない

VMWareとHyper-Vに乗せたときのCMLの気持ちを示します。
image.png

インストール手順

  • ISOファイル(cml2_2.4.1-34_amd64-13.isorefplat-20220211-fcs.iso)をダウンロードする

  • Hyper-Vのクイック作成からインストール元のISOcml2_2.4.1-34_amd64-13.isoを指定してマシン作成。

    • メモリは適当に容量を増やす。
    • ディスクサイズは問われないが標準で128G(Thin Provision)作成されるので特に触らない。
  • 作業1:作成後、インストール前にこのページを参考にしながらVT-x enableを行う。VMwareでの仮想化エンジン > Intel VT-x/EPTを仮想化をONにするためである。

    • 仮想マシンをオフにする
    • 管理者モードでPower Shellを立ち上げSet-VMProcessor -VMName <VMName> -ExposeVirtualizationExtensions $trueを実行する。
    • image.png
  • インストールは通常通り行う。VMWareでのインストールと同じく途中でrefplat-*.isoに入れ替える。

  • Hyper-Vの仮想スイッチマネージャで外部ネットワークのSWを作成し、VMのネットワークに割り当てる。(既存の1つのNICをこれに切り替えます)

  • また、割り当てたインタフェースの高度な設定から"無差別モード"をONにする
    image.png

  • (以下の作業はHyper-Vのコンソール上で行います。sshで接続してもshellは取れません)

  • 作業2:起動した後に以下の作業を行う

    • ip link show eth0 で MACアドレスを記録する
    • sudo vi /etc/systemd/network/10-eth0.linkを作り以下のようなファイルを作る。MACAddressは記録したeth0のアドレス
      • image.png
    • sudo cat /etc/NetworkManager/system-connections/bridge0-p1.nmconnect (p1は他の文字列の可能性もある)をして、interfase-name=eth0がある場合、eth0をens160に書き換える
  • 再起動する。ip link show eth0が存在しなくなったことを確認し、ip link show ens160が存在することを確認する。

作業2の補足:

  • CMLはens160がCMLのI/F名だと前提にExt-ConnのBridgeの設定を行います。
  • CML自身はLinuxのBridge機能を利用しており、brctl addif bridge0 ens160相当のコマンドが実行されるようです。
  • VMWare上ではインタフェースはvmxnet3と認識され、この場合、vmxnet3のeth0ens160にrenameされます。(これがどのような設定でrenameしているのかを筆者は見つけていません。)
    • この挙動はdmesgでrenameしているログが見えます
  • 一方、Hyper-Vではインタフェースはvmxnet3ではないと認識され(おそらくe1000?)eth0のまま残ります
  • この結果、bridgeにVM上の外部とのI/Fが接続されず外部NWとの接続に失敗します。

このため、上記のようにsystemd.linkでens160へのrenameを行います。

なお、Ext-ConnをNATで使う場合上記の問題は起きません。これは次のように考えられます。

  • Ext-ConnのNATとは、virbr0:IPアドレスを持つL3インタフェースと接続され、外部との間はNATされます。
  • iptablesで以下のようにNATが書かれています(iptables --list -t nat)が、これにI/F名は含まれません。そのため外部への接続性がeth0でもens160でもNAPTは正常に動作します。

最後に

繰り返しですが、Ciscoは、CMLのHyper-V上の動作は保証していません。この記事はCMLで本来開放されている以外の設定を触るため、CMLが正常に動作しなくなる可能性もあります。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?