CMLのPATty - 後編: PATty機能の使い方 (ユーザー向け)
CML (Cisco Modeling Lab)においてPATtyと呼ばれる機能を用いると、作業端末からNodeに対する作業が行いやすくなるケースがあります。
例えば、External Connector (NAT)を利用していると、「CMLの外部 (作業端末)」から「CML内部のNode」への接続性がありませんが、PATtyを用いるとPort Forwardingの技術を用いてNodeのサービス (例: SSH, Web UI)に接続を可能にします。また、CMLがSerial Console Serverのように動作して、使い慣れたターミナルからTelnetでNodeのSerial Consoleへの接続が可能になります。
PATtyの利用には設定の変更が必要です。本記事はユーザーの目線の利用方法にフォーカスしています。
管理者の目線から見たPATtyサービスの有効化は下記の記事を参考にしてください。
CMLのPATty - 前編: PATtyサービスの有効化 (管理者向け)
PATtyの主な特徴
- 「Nodeのサービス (例: SSH Server)」に外部からTCPやUDPで接続できます。
- 「NodeのSerial Console」にネットワーク経由 (Telnet)で接続できます。
- 「Desktop NodeのVNC画面」を外部からVNC Client (例: RealVNC Viewer)を用いて接続できます。
仕組み
CMLのIP Addressに対して、特定のPortにSerial ConsoleやNodeのサービス (例: SSHの22/tcp)などを紐付けます。そのため、ユーザーの目線では「接続先がCMLのIP AddressとPort」になります。

PATtyの利用イメージ
利用する前に

共用環境での「CMLの待ち受けPort」の重複
Tagの種別
3種類のTagがあり、CMLの外部から接続したいNodeにTagを設定します。
- pat:
- serial:
- vnc:
代表的なTagの書式は下記の通りです。
pat:outsideport:insideport
pat:tcp:outsideport:insideport
pat:udp:outsideport:insideport
serial:outsideport
vnc:outsideport
-
「outsideport」は「CMLのPATty向けのPort」を指定します。
-
「insideport」は「対象Nodeのサービス (Port)」を指定します。

PATtyのTagの書式
「pat:」のTag
「pat:」は、Port Forwarding (DNAT: Destination NAT)の技術を用いて、「CML側のPort」と「Node側のサービス (例: SSH)」をマッピングするためのTagです。
まず前提条件として、External ConnectorがNATになっている必要があります。

「pat:」のTagを利用時のExternal Connectの設定
その上で更にNodeのIP Addressを自動的に学習してPort Forwardingを行う仕組みの都合上、External Connector (NAT)と同一セグメント上にNodeが存在する必要があります。

「pat:」のTagとExternal Connector (NAT)の関係性
例としてNode: UbuntuのSSH (22/tcp)のサービスに接続したい場合は、「pat:tcp:2022:22」のように設定すると、CMLのIP Addressに対しては「2022」のPortで接続すれば、Node: Ubuntuの「22」に転送 (Port Forwarding)されます。

「pat:」のTag設定
「serial:」のTag
NodeのSerial ConsoleにTelnetで接続できます。言わば、Serial Console Serverの動作に似ています。
CMLの対象Portに対してはTelnetで接続します。
pat: と異なり、External Connector (NAT)と同一セグメントである必要はありません。

「serial:」のTagの設定と利用方法
Tera TermのようなGUIのターミナル ソフトでは、デフォルトの通信方式がSSHのケースがあるため、Telnetに切り替えを忘れないように注意が必要です。
「vnc:」のTag
主に「DesktopのNodeのVNC画面」をCMLの外部から「作業端末のVNC Client (例: RealVNC Viewer)」で接続できます。
pat: と異なり、External Connector (NAT)と同一セグメントである必要はありません。

「vnc:」のTagの設定と利用方法
Tagで指定可能なPortの範囲
PATtyがデフォルトで認識するPortは TCP の 2000 から 7999 の範囲です。

Tagで指定可能なPortの範囲
Portの範囲を変更するにはCMLのシステム的な設定変更が必要になるため、管理者に相談が必要になります。
Tagに紐付くPortの割り当て方
「Tagに紐付けるPortの割り当て」に迷うかもしれませんが、ドキュメントに割り当て方法の一例が載っております。
PATty Tool Overview - Cisco Modeling Labs v2.9 - Cisco DevNet
https://developer.cisco.com/docs/modeling-labs/patty-tool-overview/
This example also illustrates that using dedicated port ranges can be beneficial, this example suggests the following offsets from 2000:
0-99: used for consoles, for serial device access
200-299: used for SSH
300-399: used for NETCONF
800-899: TCP/80 HTTP (unused in the example, as PAT)
900-999: TCP/5900 VNC (unused in the example, as device access)
The first digit identifies the overall range (here 2000-2999), the second digit is the “service” (console, SSH, VNC, HTTP, …) and the 3rd/4th digit is the node number inside of the lab (like R1-R99 or similar).
ドキュメントでは「2000」を基軸にしたオフセットとして紹介されていますが、実際のPortで表記すると下記の表のようになります。
| CMLのPort | Nodeの用途 | Tagの設定例 |
|---|---|---|
| 2000 - 2099 | Serial Console向け | serial:2000 |
| 2200 - 2299 | SSH (22/tcp)向け | pat:tcp:2200:22 |
| 2300 - 2399 | NETCONF向け | pat:tcp:2300:830 |
| 2800 - 2899 | TCP/80 HTTP向け | pat:tcp:2800:80 |
| 2900 - 2999 | VNC向け (5900/tcp) | vnc:2900 |
デフォルトではTCPの2000から7999の範囲を認識するため、実際の使用可能なPortは本例より余裕があります。
関連ドキュメント
PATty Tool Overview - Cisco Modeling Labs v2.9 - Cisco DevNet
https://developer.cisco.com/docs/modeling-labs/patty-tool-overview/
PATty Tool Mapping Configuration - Cisco Modeling Labs v2.9 - Cisco DevNet
https://developer.cisco.com/docs/modeling-labs/patty-tool-mapping-configuration/