ProxmoxにCML2.7を構築してみる

# はじめに
Cisco Modeling Labs (CML)はCiscoが公式で提供するネットワークエミュレーターです。CMLを使用してNWの勉強を始め様々な検証にお使いいただけます。CML2.7では新しくSD-WANなどのノードが追加されていますので、私自身今までよりもさらに用途が増えることを期待しています。

CMLとしてサポートされているソフトウェアはVMwareで、これまで様々な方がESXiでの構築方法について公開されております。VMwareが利用できない場合の方法として模索した際に、今回ProxmoxでCMLを構築しました。※注意点としてCiscoが推奨しているものではありませんのでそこはご理解下さい。 あくまで個人の見解です。
諸般の事情で急にESXiが利用できなくなって困っている方など参考になれば幸いです。


# 実行環境
* CML2.7.0
* Proxmox　8.1.2

# 前提条件
* CMLの使用要件を満たすマシンが用意されている。要件は[こちら](https://developer.cisco.com/docs/modeling-labs/#!system-requirements/prod-name-server-vm-requirements)を参照
* Proxmoxが構築されている。
* CMLのLicenseを購入済み。まだの方は[こちら](https://www.cisco.com/c/ja_jp/products/cloud-systems-management/modeling-labs/index.html)を参照

# 事前準備
CMLを構築するにあたりCisco [Software Download](https://software.cisco.com/download/home)からCMLのソフトウェアをダウンロードします。やり方については[こちら](https://developer.cisco.com/docs/modeling-labs/2-7/#!downloading-files-for-cml-installation)を参照してください。
必要なファイルは次の **3つ** となります。
いずれもISOファイルをProxmoxへ接続できる端末に格納し、zipを解凍します。
* Cisco Modeling Labs 2.7.0 server
cml2_2.7.0-4_amd64-20-iso.zip
* Cisco Modeling Labs reference platform ISO file⇒ノードのISOファイル
refplat-20240225-fcs-iso.zip
* Cisco Modeling Labs supplemental reference platform ISO file⇒新しくCML2.7で追加されたノードのISOファイル
refplat-20240322-supplemental-iso.zip  <font color="Red">NEW</font>
**※もしもISOからではなくOVAから作成を考えている方は[こちら](https://qiita.com/kannishi/items/3027198d63320745ce8e)を参照いただければと思います。**

# ProxmoxにCMLを登録
実際に設定したキャプチャーを載せています。サーバー１台丸ごとCML専用機にしておりますので設定値は参考として下さい。小規模で利用される際はここまでのスペックは不要と思います。

###### 1. 先ほどダウンロードしたファイルをProxmoxにアップロードします。
[Storage] -> [ISO Images] -> [Upload] -> ファイルの選択
![Proxmox Upload](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3629197/61574e40-6e5c-ff8d-9feb-1951b606d184.png)

ファイルをアップロードした状態はこのようになります。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3629197/22b10354-f0fa-26be-6478-9b1a2840102b.png" width="50%">
###### 2. ノード作成
[Node] -> [Create VM]
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3629197/d28dc03c-6d61-7e01-7b4e-1211ac306f11.png" width="40%">

###### 3. Name登録
入力できない文字もあります。（例　_　）
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3629197/55f93d9e-ff43-cfab-1392-c6454789c7dc.png" width="80%">

###### 4. OS設定
先ほどダウンロードした`cml2_2.7.0-4_amd64-20-iso`を登録します。
他のISOファイルは別途登録します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3629197/1a8825d0-0a47-205a-2233-bb48026de048.png" width="80%">

###### 5. System設定
*BIOS* は`OVMF(UEFI)`とし、*EFI Storage*は`local-lvm`を選択します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3629197/c9f622e9-8c49-82aa-8821-8ee3195a7d60.png" width="80%">

###### 6. Disks設定
*Disk Size*を設定します。今回は1Tとしています。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3629197/1500861e-85f9-4935-a6d5-11d0adc18030.png" width="80%">

###### 7. CPU設定
*Socket*,*Cores*も必要な分を割り当てます。また、*Type*は`host`にします。
※Socketは2としていますが、後日再インストールした際はSocketを1、Coreを38に変更しています。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3629197/8d494beb-6314-459f-774c-c71bae5733cf.png" width="80%">

###### 8. Memory設定
必要な容量を*Memory*に設定します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3629197/26c3a64b-94d3-a808-121c-7deefdaf3baf.png" width="80%">

###### 9. Network設定
*Bridge*、*Model*（`E1000`または`vmxnet3`）を設定します。
２つ以上のNetworkを使用したい場合はマシン作成後に追加できます。
今回はProxmoxと同じネットワークにCMLのアドレスを設定しました。
後程、他のネットワークを追加します。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3629197/6976a6d2-0baf-18bf-a6a8-02f43c75347a.png" width="80%">

###### 10. Confirm内容確認
設定内容が問題ないか確認し、[Finish]で完了します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3629197/df174222-175c-f2d2-1cd4-f5df04f6db9c.png" width="80%">


# CML初期設定
ShellのStatusはセットアップが終わらないと完了とならないので、CMLのConsoleを起動し様子を見ます。
頑張って動いてる！
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3629197/abcc4eee-16f6-4ed6-b683-fa602b8f2a87.png" width="80%">
かっこいい！
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3629197/e3acecf2-994e-d17a-5ea3-10009c22a7fc.png" width="80%">

え？？壊れてない？
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3629197/172025f5-198e-6c0a-25bb-c122c9ba24fa.png" width="60%">
初期設定の画面に来ました！
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3629197/7baccfbd-13a4-95eb-b985-1709c5ad5e7f.png" width="80%">

【設定項目】
* Hostname
* System Username/Password
* Username/Password
* IP address※Static設定のためGatway,DNSの設定も行っています。

設定した内容を確認します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3629197/66954fc0-8eea-ea23-37c0-c34c9b09d1a3.png" width="80%">

ようやくこの画面になり無事CMLが起動しました！
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3629197/3b2019ce-93bb-db94-6c21-d03051c876a8.png" width="80%">

# CMLライセンス登録
先ほど設定したIPアドレスでアクセスすると、ログイン画面が表示されます。
ログイン後、Toolまたはページ右下のSystem Health IssueよりLicenseを登録します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3629197/9a3c8613-2039-a7aa-b500-f2651fa784d1.png" width="60%">
[REGISTER･･･]をクリックします。既にお持ちのLicenseを**Cisco Learning Network Store**で確認し、`Token`を登録します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3629197/25a43f21-d425-e736-d2cf-d8947c4234f6.png" width="80%">
Proxy環境で利用される方は設定を行います。
[Transport Settings:]->[View/Edit]
`IP address`,`Port`を設定します。Licenseページにアクセスできれば問題ありません。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3629197/eeaba5d0-ccfc-5b00-bfc2-3717410524e7.png" width="80%">
しかし、この設定が行われていても、CML再起動後などProxyが原因でLicenseがErrorになることがあります。
その場合はCMLのコンソール画面より以下のファイルに情報を追記します。ファイルが存在しない場合は新しく`/etc/apt/apt.conf.d/`を作ります。

```Linux:CML console
sudo nano /etc/apt/apt.conf.d/proxy.conf
```
```nano:proxy.conf
Acquire::http::Proxy "http://[username]:[password]@ [proxy-web-or-IP-address]:[port-number]";
Acquire::https::Proxy "http://[username]:[password]@ [proxy-web-or-IP-address]:[port-number]";
```
以上でProxyの設定が完了です。

# Node ISOファイルを登録
現時点でCMLのISOファイルしか登録ができていません。
ProxmoxでCMLのISOファイルは取り外し`refplat-20240225-fcs-iso`へ変更します。
変更後CMLの再起動を行います。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3629197/a489a3e2-615c-039f-4f5d-f9373944b6d7.png" width="80%">

##### ノード用のISOをCMLに適応
CML 2 System Maintenance Controlsのアドレスである`https://xxx.xxx.xxx.xxx:9090`にアクセスし**SystemUser**でログインします。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3629197/afc8a611-ec40-940c-3716-6490cb88dca3.png" width="80%">

[Host] -> [CML2] -> [Copy Refplat ISO] -> [Copy Refplat ISO] 
コピーしてよいか確認メッセージがでますので[Copy]クリックして登録します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3629197/0213b146-51aa-4136-aff6-45545a45808a.png" width="80%">
コピーが実行されると次のように表示が変わります。完了した際は再び青いボタンが表示されます。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3629197/418a44c1-42e7-e3e7-2777-65c175e883b0.png" width="80%">
これでノードの登録が完了しました。

##### CML2.7で追加されたノード用のISOをCMLに適応
続いて今回CML2.7で追加されたノードを登録します。
先ほどと同様に`refplat-20240322-supplemental-iso`をCD/DVD Driveに登録し、CMLを再起動を行います。
CML 2 System Maintenance Controlsのアドレスである`https://xxx.xxx.xxx.xxx:9090`にアクセスし**SystemUser**でログイン後、[Copy Refplat ISO] を実行します。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3629197/3ce7d86b-85f5-10b7-797a-6bee6bb560d2.png" width="80%">

ようやく、これで新規に追加されたノードが使えるようになりました！
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3629197/31e7d5b9-5215-e7d8-509d-d941122c10a4.png" width="80%">

# ネットワークの追加
CMLを他のネットワークとつなげて作業したい場合は、ネットワークを追加します。
ProxmoxはESXiの無差別モードといわれる状態と同じです。そのためネットワークを追加・紐づけを行うとCMLの外のNWと中のノードを接続できます。
###### Proxmoxで新しいネットワークを追加

[Proxmox] -> [System] -> [Network] -> [Create]　-> [Buridge]
**IPv4**,**Bridge ports**を設定する。**Bridge ports**は物理ポートで接続されているものを選択します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3629197/81b68aa2-9fd8-4932-6221-87bfe767fa1a.png" width="80%">

###### CML 2 System Maintenance Controlsの設定
NetworkにBridgeが追加されたら、続いてCMLに紐づけます。
本設定を行わないでProxmoxのCMLにNetworkを設定するとCMLに接続できなくなりますのでご注意ください。
[Host] -> [CML2] -> [ネットワーキング] -> [ブリッジの追加]
ポートやアドレスを設定します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3629197/588e0d68-cae1-eff2-6789-6821d976c4e7.png" width="80%">

###### Proxmox上のCMLにNetworkの設定
CMLのVMで[add] -> [Network Device]をクリックして設定します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3629197/dcedc495-0bf9-e71f-7368-672076da9e10.png" width="80%">

再びCMLのネットワーキングの画面を確認すると通信が行えるようになっています。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3629197/048450f0-4ef2-920a-7874-fa4cf1127c36.png" width="80%">


CMLラボでext-connにConnectorを設定します。
これで、CMLの外のNWとも通信が可能になりました！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3629197/467ca6ca-0709-9f51-0ec6-5a69f3cd8956.png)

###### 【ご参考】チューニング
CML Labで起動するマシンがちょっと遅いと感じたのでTool->Nodeより設定を変更しました。
再起動などを行いしばらくたつと問題なく動作したこともありましたが、原因は不明のため、もしも今後改善などあれば追記したいと思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3629197/1dce98aa-0615-b24a-3329-2549d9f9cc31.png)

###### 追記
チューニングよりもISOファイルからの構築ではなく、[OVAからCMLを構築する方法](https://qiita.com/kannishi/items/3027198d63320745ce8e)のほうがより良いかもしれません。


# 終わりに
Proxmoxに構築してみよう！と思った際はコミュニティに少し前のCMLで構築された方のキャプチャーがあるだけでした。そのため、今回構築したものよりもより良い設定があるかもしれません。その際は追記していきたいと思います。
また、新しい機能がどのように使えるかはこれから試してみたいと思います。