Cisco RADKit で色んなデバイス (WLC, CatalystCenter, Prime Infrastructure) の GUI にパスワードレスで入ってみた！

# はじめに
この記事はシスコの有志による Cisco Systems Japan Advent Calendar 2024 （一枚目） の 18日目として投稿しています。

2017年版: https://qiita.com/advent-calendar/2017/cisco
2018年版: https://qiita.com/advent-calendar/2018/cisco
2019年版: https://qiita.com/advent-calendar/2019/cisco
2020年版: https://qiita.com/advent-calendar/2020/cisco
2020年版(2枚目): https://qiita.com/advent-calendar/2020/cisco2
2021年版: https://qiita.com/advent-calendar/2021/cisco
2021年版(2枚目): https://qiita.com/advent-calendar/2021/cisco2
2022年版(1,2): https://qiita.com/advent-calendar/2022/cisco
2023年版: https://qiita.com/advent-calendar/2023/cisco
2024年版: https://qiita.com/advent-calendar/2024/cisco

# RADKit とは
RADKitを語るにはすでに多くの記事が出ているため割愛。詳しくは下記のサイトを参照してください。
https://community.cisco.com/t5/-/-/ta-p/5018592
https://radkit.cisco.com
https://radkit.cisco.com/docs/

### RADKit ってリモートから show interface 取得したり自動化したりするツールでしょ？
Yes, でもそれだけじゃないんです。
### RADKit って中の人が Python 使えないと使えないんでしょ？
No, Python を知らなくても、なんならネットワークデバイスの CLI も知らなくても恩恵を受けられます。
#### でもやっぱり CLI とかスクリプトでカタカタやるのはちょっと性に合わないっていうか今はやっぱりブラウザでダッシュボード管理って時代じゃない？
はい、そんなあなたに！！
今回お届けするのは、"RADKit を使ったデバイスへの**リモート GUI アクセス**" です！

上の RADKit ドキュメントの中に詳しい説明は書いてありますが、要するに RADKit サービス（サーバー）をインストールしておけば、そこを経由してネットワークデバイスが提供する GUI の画面に、RADKit Client を動かしている端末からブラウザ経由で **GUI で**アクセスできちゃうってことです！
これの何が凄いかというと、普段管理業務でルータや WLC や NMS などのデバイスの GUI に入る時、当然のようにユーザ名とパスワードの入力を求められると思います。それが、**いらない**のです。裏を返せば、GUI でアクセスして欲しい人に、GUI のユーザ名やパスワードなどの Credential 情報を伝える必要がないのです。

## RADKit Service の設定
### RADKit Service を立ち上げます。
```
radkit-service
```
下記のような表示になり Status が connected であることを確認します。
```
────| RADKit Service | Serial: abcd-y2k1-efg2 | Domain: PROD | Status: connected | Version: 1.6.9 | Logging level: INFO | WebUI: https://localhost:8081 |─────
```
、、、**じゃない**、GUI に拘りたいので RADKit Service アプリを立ち上げ、マスターパスワードを入力して OK を押し、Connect を押します。緑色になったら OK です。なお使用したバージョンは 1.6.12 ですが、現在の最新版は 1.7 になっています。

![service-gui1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3924727/dea4a3dc-4199-f143-6942-028d48e78b0b.png)

なお CLI で立ち上げた radkit-service は Control + C で終了できます。GUI 版アプリと共存はできませんのでご注意。

### RADKit Service を設定していきます
ブラウザから localhost:8081 へアクセスします。
左のメニューの上から2番目、Devices に行きます。

![service1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3924727/3f35dde8-8c54-9002-ef59-903c77ce81d0.png)

今回は上から C9800 WLC ver.17.3, Prime Infrastructure ver.3.8, C9800 WLC ver.17.6, Catalyst Center ver.2.3.3, C9800 WLC ver.17.12 の顔ぶれがすでに登録されています。すべて GUI 管理画面を持つデバイスです。  

### WLC C9800 の設定
まず愛する WLC を設定していきます。バージョン色々ありますが RADKit からの操作は同じなので新しめの 17.12 で行きます。Device Type は IOS XE を選びます。画像中の隠してあるところにはユーザ名や IP アドレス、RBAC タグ、Serivce ID などが入ってます。GUI アクセスを実現するためには赤い矢印のところの設定が重要です。

![service4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3924727/03432122-2f1b-58c8-6647-1b6735571d7e.png)
![service5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3924727/db3630a0-f4d5-c131-6e10-64c90e86a4c4.png)

### Prime Infrastructure の設定
Prime Infrastructure の設定ですが、なんと Device Type の選択肢に PI がない！仕方ないので Linux ということにして設定をします。まぁ、PI もほとんど EoS/EoL となりましたからね、時代の流れでしょうか。

![service3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3924727/f3e2cdaa-7165-ccd7-ea2a-39219c917bba.png)

### Catalyst Center の設定
最後に Catalyst Center いきます。なお今回はラボ環境なので証明書はただの自己署名証明書であるため、ブラウザでの自己署名証明書が信頼できないというエラー発生を防ぐために、Verify TLS certificate オプションは予め外しておきます。今回の製品たちは皆 443 番で https アクセスするタイプだったため、ポート番号は 443番を指定しています。http で 80 番ポートが良いという場合はそのように選択して設定します。

![service2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3924727/2742027b-bf2b-8847-62c9-0fe38552bd68.png)

以上でサービス側の設定は完了

## クライアントの立ち上げをします
ここは普通にターミナルから network-console 起動、ログイン、サービスへの接続を実施します。（きっと誰かが GUI アプリを作ってくれる、、、はず）
なお今回は RADKit Service も Client も、同じ1台の Macbook (M1 chip) で動作させ、機材と同じネットワークに所属させています。
```
(base) bash-$ radkit-client network-console

RADKit Network Console (EXPERIMENTAL)
Type `help` to list commands

> login
Logging in as: hosaki@cisco.com on domain PROD

A browser window was opened to continue the authentication process. Please follow the instructions there.

Authentication result received.

[hosaki] > service abcd-efgh-abcd no-sr
Connecting to Service: abcd-efgh-abcd without SR context

[hosaki@abcd-efgh-abcd] >
[hosaki@abcd-efgh-abcd] >
[hosaki@abcd-efgh-abcd] > show inventory
[READY] <radkit_client.sync.device.DeviceDict object at 0x114bee090>
name               host           device_type       Terminal    Netconf    SNMP    Swagger    HTTP    description                           failed
-----------------  -------------  ----------------  ----------  ---------  ------  ---------  ------  ------------------------------------  --------
c9800-173-ha       10.xxx.xxx.xx4  IOS_XE            True        False      False   False      True    my wlc running 17.3                   False
c9800-hosaki-1712  10.xxx.xxx.xx5  IOS_XE            True        True       False   False      True    C9800 running 17.12  False
c9800-hosaki-b     10.xxx.xxx.xx6  IOS_XE            True        False      False   False      True    my c9800 running 17.6.2               False
dnac-few           10.xxx.xxx.xx2  CISCO_DNA_CENTER  True        False      False   False      True    My DNAC for Wireless team             False
hosaki-pi38        10.xxx.xxx.xx8  LINUX             True        False      False   False      True    my prime infra running 3.8            False

Untouched inventory from service abcd-efgh-abcd.

[hosaki@abcd-efgh-abcd] >

```
この通り、サービスの GUI で見たものと同じデバイスが5つ表示されました。次に今回の肝、proxy の設定に入ります。
 
### GUI に入るための Proxy の設定
まずは show proxy で状態を確認します。

```
[hosaki@abcd-efgh-abcd] > show proxy
No active proxy
```

はい、何も動いてませんので、proxy を次のコマンドで起動します。socket オプションではなく http を選んでいる方が繋がりやすい傾向があります。この時のポート番号 8443 はすでに使われていないものにする必要があります。

```
[hosaki@abcd-efgh-abcd] > proxy start http 8443
HTTP proxy is NOT PROTECTED by username/password
[RUNNING] <radkit_client.sync.port_forwarding.ProxyPortForwarder object at 0x115a11650>
----------  -------
status      RUNNING
local_port  8443
#active     0
#failed     0
#closed     0
#total      0
protocol    HTTP
bytes up    0
bytes down  0
exception   None
----------  -------

Use this PAC URL for proxy auto-configuration: https://prod.radkit-cloud.cisco.com/pac?port=8443&protocol=HTTP
Then navigate to: https://index.proxy/
```
するとこのように status RUNNING と表示され、https://index.proxy/ に接続しなさいと指示をされます。また、pac と呼ばれるプロキシの自動設定をダウンロードし、ブラウザに適用させるように案内されます。pac の中身はこんな感じです。
```php
function FindProxyForURL(url, host) {
  if (isPlainHostName(host)) {
    return "DIRECT";
  } else if (dnsDomainIs(host, ".proxy")) {
    return "PROXY localhost:8443;";
  } else {
    return "DIRECT";
  }
}
```
1. ブラウザにより設定箇所は異なりますが、Firefox の場合はここの設定です。
![FF_proxy.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3924727/9d6e2649-220e-547d-d78d-e358a287036e.png)

### さあ、ではいよいよ GUI アクセスです。指示された URI へアクセスしてみましょう。
![client2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3924727/2a52b880-788a-5472-4e2b-9d30cfd40739.png)

1. GUI アクセス可能なデバイス一覧が表示されましたね！Go to web page をクリックすると GUI アクセスができるはずです。まずは WLC C9800!
![gui-wlc1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3924727/21156a37-530c-0b59-c62e-a63bdad85904.png)
　　　　　　　　　おや、、、？様子が、、、

![gui-wlc2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3924727/e3b7be87-807f-1d24-a73b-c1fec2464950.png)
　　　　　　　　出ました！！

どうやら最初の読み込みだけは少し、いや結構、時間がかかるようです。30秒くらいは辛抱強く待ちましょう。次回からはより早く表示されるようになりました！
はい、そしてここで注目、ユーザ名とパスワードを求められる画面は一切出てきませんでしたね！これはいちいちデバイスごとの Credentialを覚えておかないといけない管理者にとっても助かるのではないでしょうか！？

### Prime Infrastructure の設定
こちらも Go to web page をクリックすると。。。？

![gui-pi1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3924727/a8a1540b-05c4-8741-2678-378cb3fbc273.png)

なんと、Credential の入力画面になってしまいました。やはり PI はパスワードレス GUI ログインは提供されていないのだろうか。。。今後に期待！この後正規の Credential を入れることで、下記のように普通にアクセスできるようになりました。

![gui-pi2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3924727/2132520d-a2ef-3025-b6a9-200e5d0de58c.png)

### そして最後に Catalyst Center です

![gui-catc1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3924727/788fe4f7-4ea9-e669-da2f-89e9d4644ef7.png)

あっさりと入ることができました。Credential の入力はしていません。

proxy の状態を次のコマンドで確認できます。active なセッション数などがカウントされているのがわかります。
```
[hosaki@abcd-efgh-abcd] >
[hosaki@abcd-efgh-abcd] > show proxy
HTTP Proxy:
[RUNNING] <radkit_client.sync.port_forwarding.ProxyPortForwarder object at 0x115a11650>
----------  -------
status      RUNNING
local_port  8443
#active     10
#failed     0
#closed     4
#total      14
protocol    HTTP
bytes up    0
bytes down  0
exception   None
----------  -------

Use this PAC URL for proxy auto-configuration: https://prod.radkit-cloud.cisco.com/pac?port=8443&protocol=HTTP
Then navigate to: https://index.proxy/
```

## おわりに
以上、RADKit を使って CLI ではなく GUI にアクセスする方法をご紹介しましたがいかがでしょうか。Credential を入れずともGUIに入れる点、とても便利ですよね。今回の Cisco Advent Calendar 2024 では他にも RADKit を使った自動化の記事などが複数出ていますので、それらもぜひご覧ください。

## 免責事項
本サイトおよび対応するコメントにおいて表明される意見は、投稿者本人の個人的意見であり、私の所属する組織の意見ではありません。本サイトの内容は、情報の提供のみを目的として掲載されており、私の所属する組織や他の関係者による推奨や表明を目的としたものではありません。各利用者は、本Webサイトへの掲載により、投稿、リンクその他の方法でアップロードした全ての情報の内容に対して全責任を負い、本Webサイトの利用に関するあらゆる責任から私の所属する組織を免責することに同意したものとします。