CML2を使いこなす。（その５：外部との接続）

# はじめに
前回はラボノードにコンソール接続する方法について紹介しました。

今回は外部のネットワークと接続する方法について紹介します。

- 【前】[CML2を使いこなす。（その４：色々なコンソール接続）](https://qiita.com/sakai00kou/items/bef173fb6383411475f9)
- 【次】[CML2を使いこなす。（その６：CML2のアップグレード）](https://qiita.com/sakai00kou/items/88fb3cdc661431efd131)

# 外部ネットワークとの接続方法
外部のネットワークと`CML2`のラボ環境を接続するためには、`External Connector`のノードを使用します。

外部ネットワークと接続する際の接続方式は以下の3つあり、`External Connector`の設定タブにある「**EDIT CONFIG**」から設定を行います。

|接続タイプ|構成イメージ|
|:--|:--|
|NAT|![ネットワーク接続-NAT.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/f3cd2de4-b66e-90c3-4039-591ff3b664d6.png)|
|Bridge|![ネットワーク接続-Bridge.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/63946868-62f2-713c-3a41-a6318296b22b.png)|
|Custom|![ネットワーク接続-Custom.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/b2a46d6f-1d85-61ca-03c0-722e1eaf2c53.png)|

但し、設定といっても細かな設定はできず、どのタイプで接続するかを選ぶ程度しかできません。

## NAT接続
「**NAT**」は外部と通信する際に`CML2`ホストのアドレスにNAPT変換して通信する方法です。

いわゆる**IPマスカレード**による変換となるため、外部から`CML2`ラボ内のノードに対して接続することはできません。

**NAT**タイプにした場合の`External Connector`はDHCPサーバが動いているため、DHCPクライアントの設定を行えばアドレスが割り振られますが、以下の設定で動作するため、各ノードでセグメントを合わせて固定でアドレスを設定しても問題ありません。

|External Connector|設定値|
|:--|:--|
|IPアドレス|192.168.255.1|
|ネットマスク|255.255.255.0|

## Bridge接続
「**Bridge**」は外部に繋がっているインタフェースと直接接続を行う方法です。

「**NAT**」と異なり、`External Connector`でアドレス変換は行われず、直接外部ネットワークと接続されるため、`External Connector`はアドレスを持たず、単に外部との橋渡し（Bridge）するだけのノードとなります。

外部と直接接続することになるため、外部から`Telnet`や`SSH`でノードに直接接続することも可能となります。

外部のネットワークに直接繋がるということは、**何かあった場合に外部のネットワークに直接影響が発生することになる**ため、アドレス重複やループ構成になるようなことがないように十分注意しましょう！

## Custom接続
「**Custom**」も外部に繋がっているインタフェースと直接接続を行う方法です。

「**Bridge**」との違いは「**Bridge**」は`CML2`ホストにデフォルトで設定されている1番目のインタフェースとのブリッジしかできませんが、「**Custom**」の場合、他のインタフェースとブリッジすることも可能となります。

もちろん他のインタフェースが存在しなければ「**Bridge**」と変わらないため、複数インタフェースを追加した場合にしか意味がありません。

但し、「**Custom**」での使用は推奨されておらず、[CML2のオンラインマニュアル](https://developer.cisco.com/docs/modeling-labs/)にもやり方が載っていないため、設定は**自己責任**となります。

# 外部ネットワークとの接続
外部ネットワークと接続するため、「**Bridge**」で接続してみようと思います。

`External Connector`を配置して、「**EDIT CONFIG**」から「**BRIDGE**」を選択します。

![capture_28032021_165813.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/3d075f56-d91c-6c20-5011-6e5c0dc906fe.jpeg)

確認のためのノードを直接接続した後、ノードをすべて起動します。

外部ネットワークと通信したいノードにコンソールからIPアドレスの設定とリモートからのアクセス設定（vtyやパスワード設定）を行ってから`telnet`等で接続すれば外部から接続できるはずです。
※一般的なCisco機器の設定のため説明は除外

# Customでの接続方法
上述の通り、マニュアルにも記載がないため**自己責任**となりますが、複数インタフェースを使う方法を紹介します。

[CML2のオンラインマニュアル](https://developer.cisco.com/docs/modeling-labs/)にも設定方法が載っていませんが、`External Connector`のヘルプマークにフォーカスすると、以下の様な説明が表示されます。

![capture_28032021_171326.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/1932b0f6-3043-9799-3d38-42da34bee157.jpeg)

画像の左に書かれている「**Custom Bridge Name**」に指定できる名前は`virbr`、`bridge`もしくは`vlan`しか指定ができないため、指定の名前のブリッジインタフェースを作成していきます。

## Cockpit管理画面へのログイン
`CML2`には今まで操作してきた`CML2`の管理画面の他に、`CML2`のサービス自体を動かしているOSを操作するための`Cockpit`の管理画面が存在します。

`Cockpit`は`Cisco`独自のアプリケーションではなく、オープンソースで公開されているサーバ管理ツールとなります。

`Cockpit`画面は「**https://[CML2のアドレス]:9090**」にアクセスすることで以下の様な画面が表示されるので、`CML2`セットアップ時に設定した「**sysadmin**」のアカウントを使ってログインします。

![capture_28032021_172927.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/cc6d9d5a-e95c-2403-d96e-68203bad57db.jpeg)

ログイン画面を見れば分かる通り、`CML2`は`CentOS`で動作していることが分かると思います。

## ブリッジインタフェースの作成
先ほどの説明の通り、指定できるインタフェース名が決められているため、デフォルトで作成される`bridge0`以外のブリッジインタフェースを作成します。

左ペインにある「**ネットワーキング**」から「**ブリッジの追加**」を選択します。

![capture_28032021_173339.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/d531dc1d-db7a-e6a5-e901-74fd14757b4c.jpeg)

![capture_28032021_174007.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/c589e1a1-04f2-726e-7aed-916077c59053.jpeg)

以下の画面のようにブリッジ名の入力とブリッジするインタフェースを選択します。

今回の場合、2つ目のインタフェースは「**ens33**」で作られたため、「**ens33**」を選択します。

|設定項目|値|
|:--|:--|
|名前|bridge1|
|ポート|ens33|

設定後、先ほどの画面に作成したブリッジが表示されます。

![capture_28032021_174400.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/ac594888-2649-bc5a-2738-a8e683167760.jpeg)

もし、2つ目以降のインタフェースに個別にIPアドレスを割り振りたい場合、画面のブリッジ名をクリックすることで、インタフェースの設定画面が表示されるため、そこからアドレス設定することも可能です。

## ブリッジインタフェースの指定
`CML2`の管理画面に戻り、「**Custom Bridge Name**」の設定項目に、先ほど作成したブリッジ名を指定します。

`External Connector`の設定変更は無効化状態でしかできないため、有効化している場合は`Wipe Node`して無効化してから変更しましょう。

変更が完了したら再度ノードを起動して指定のインタフェース経由で接続できるか確認出来たら完了です。

`External Connector`の接続タイプの設定は`External Connector`のノードごとに設定できるため、それぞれ別のブリッジに接続する`External Connector`を作成すれば、複数の外部ネットワークに接続することも可能です。

# おわりに
今回の設定で`CML2`上のノードが直接外部ネットワークの機器と通信できるようになったので、すでに外部のネットワークで提供しているサービスなどとも連携できるようになりました。

`CML2`の中だけでも様々なサーバノードが用意されているため、外部と繋がなくても色々とテストはできますが、規模が大きくなると、全てを`CML2`内で完結させるにはリソースが不足したりするので、外部ネットワークのサービスを利用できるのであれば今回の外部ネットワーク接続設定を行ったほうが良いと感じます。