🐡

ChatGPT と Cisco の config で遊んでみた

2023/12/29に公開

TL;DR

  • ChatGPT に Cisco の設定を投げてみた
  • たまに間違えるけど、トラブルシュートも VLAN 追加とかもできそう
  • 当たり前のことなんだけど、改めて description が今後より大事になってくる気がする

はじめに

「Hey Siri, この port に VLAN 10 を生やして」ができるかもしれないなぁ、と思った実験のログです。

https://x.com/_skmkzyk/status/1740367318541308231

単純な結果として、なんどか試すと確かにできました。
で、ポイントとしては interfacedescription をもとに network diagram というかそれぞれがつながっている様子を想像てきているっぽい、というところですね。
うまくいかなければ mermaid で network diagram を追加で渡そうかとも思っていたのですが、この程度のサイズであれば問題ないようです。

ChatGPT に VLAN を追加するような依頼を投げてみる

以下のような依頼を ChatGPT に投げてみました。
Switch01 が core switch 的な扱い、Switch02 と Switch03 が access switch 的な扱いです。
どのようにつながっているかは interfacedescription から想像できるか、ということで試してみました。
難しい config ではないのですが、VLAN 200 をそれぞれのいい感じのポートに追加する必要があるよね、というシナリオです。

Cisco の Switch 3 台を使って構成していますが、Switch02 配下の PC1 と Switch03 配下の PC2 が通信できません。どのようにすればよいでしょうか。

=====
Switch01#show running-config
!
interface FastEthernet0/1
description Connected to Switch02
switchport mode trunk
switchport trunk allowed vlan 100
!
interface FastEthernet0/2
description Connected to Switch03
switchport mode trunk
switchport trunk allowed vlan 100
!

=====

Switch02#show running-config
!
interface FastEthernet0/1
description Connected to Switch01
switchport mode trunk
switchport trunk allowed vlan 100
!
interface FastEthernet0/2
description Connected to PC1
switchport mode access
switchport access vlan 200
!

=====

Switch03#show running-config
!
interface FastEthernet0/1
description Connected to Switch01
switchport mode trunk
switchport trunk allowed vlan 100
!
interface FastEthernet0/2
description Connected to PC2
switchport mode access
switchport access vlan 200
!

いい感じの結果が返ってきた

ということでうまくいった例を置いておきます。

あなたが提供した設定を見ると、PC1とPC2が通信できない理由はVLANの設定に関連しています。ここでの問題は、Switch02とSwitch03が異なるVLANに設定されていることです。PC1はVLAN 200に、PC2もVLAN 200に接続されていますが、Switch01はこれらのVLANを通過させていません。

解決策は以下の通りです:

  1. Switch01のVLAN設定を変更する: Switch01はVLAN 100のみをトランクポートを通して許可しています。これにVLAN 200を追加する必要があります。

    Switch01(config)#interface FastEthernet0/1
    Switch01(config-if)#switchport trunk allowed vlan add 200
    Switch01(config)#interface FastEthernet0/2
    Switch01(config-if)#switchport trunk allowed vlan add 200
    
  2. Switch02とSwitch03の設定を確認する: これらのスイッチはVLAN 200をトランクポートを通して許可しているかどうかを確認します。もし許可していなければ、以下のように設定を追加します。

    Switch02(config)#interface FastEthernet0/1
    Switch02(config-if)#switchport trunk allowed vlan add 200
    
    Switch03(config)#interface FastEthernet0/1
    Switch03(config-if)#switchport trunk allowed vlan add 200
    

これにより、VLAN 200のトラフィックがSwitch01を通ってSwitch02とSwitch03の間で通信できるようになります。これによりPC1とPC2が通信できるようになるはずです。

別のシナリオ

別のシナリオとして、以下のようなものを試してみました。

VLAN を追加する、ではなく「Switch02 と Switch03 の FastEthernet0/3 にそれぞれ新しい PC を接続し、既存の通信とは分けた形で通信させたいです」という少しあいまいな指示を出してみました。

1st req

Cisco の Switch 3 台を使って構成していますが、Switch02 と Switch03 の FastEthernet0/3 にそれぞれ新しい PC を接続し、既存の通信とは分けた形で通信させたいです。どのような追加設定が必要ですか。

=====

Switch01#show running-config
!
interface FastEthernet0/1
description Connected to Switch02
switchport mode trunk
switchport trunk allowed vlan 100,200
!
interface FastEthernet0/2
description Connected to Switch03
switchport mode trunk
switchport trunk allowed vlan 100,200
!

=====

Switch02#show running-config
!
interface FastEthernet0/1
description Connected to Switch01
switchport mode trunk
switchport trunk allowed vlan 100,200
!
interface FastEthernet0/2
description Connected to PC1
switchport mode access
switchport access vlan 200
!

=====

Switch03#show running-config
!
interface FastEthernet0/1
description Connected to Switch01
switchport mode trunk
switchport trunk allowed vlan 100,200
!
interface FastEthernet0/2
description Connected to PC2
switchport mode access
switchport access vlan 200
!

1st res

既存の通信とは分けた形で新しいPCを接続するためには、新しいVLANを作成し、そのVLANにPCを接続する設定を行う必要があります。この場合、Switch02とSwitch03に新しいVLANを追加し、そのVLANに新しいPCが接続されるように設定します。以下はその手順です。

ステップ1: 新しいVLANの作成

まず、新しいVLANを作成する必要があります。たとえば、VLAN300を作成するとします。

  • Switch02とSwitch03の両方で以下のコマンドを実行します。
    vlan 300
    name PC_VLAN
    

ステップ2: 新しいPCを接続するポートの設定

次に、FastEthernet0/3ポートに新しいPCを接続するための設定を行います。

  • Switch02で以下のコマンドを実行します。

    interface FastEthernet0/3
    description Connected to New_PC1
    switchport mode access
    switchport access vlan 300
    
  • Switch03で以下のコマンドを実行します。

    interface FastEthernet0/3
    description Connected to New_PC2
    switchport mode access
    switchport access vlan 300
    

ステップ3: トランクポートの設定の更新

Switch01との間のトランクポートを更新して、新しいVLAN300が通過できるようにします。

  • Switch02とSwitch03の両方で、FastEthernet0/1インターフェース(Switch01に接続されている)の設定を次のように更新します。
    interface FastEthernet0/1
    switchport trunk allowed vlan add 300
    

これらの設定により、新しいPCは既存のVLAN100とVLAN200から分離されたVLAN300に所属し、通信が分離されます。新しいPCが正しくネットワークに接続されているかどうかは、ネットワーク接続のテストを行うことで確認できます。

Switch01 側の設定が足りていないのでそちらも教えてもらえないか促してみています。

2nd req

Switch01 では設定変更は必要ないでしょうか

2nd res

Switch01に関しては、新しいVLAN(この場合はVLAN300)のトラフィックをSwitch02とSwitch03との間で運ぶために、トランクポートの設定を更新する必要があります。Switch01のFastEthernet0/1とFastEthernet0/2ポート(それぞれSwitch02とSwitch03に接続されている)に対して、新しいVLAN300を許可する設定を追加する必要があります。

以下はSwitch01に対する設定変更の手順です:

  1. FastEthernet0/1ポートの設定変更(Switch02に接続):

    interface FastEthernet0/1
    switchport trunk allowed vlan add 300
    
  2. FastEthernet0/2ポートの設定変更(Switch03に接続):

    interface FastEthernet0/2
    switchport trunk allowed vlan add 300
    

これらの設定により、Switch01は新しいVLAN300のトラフィックをSwitch02とSwitch03との間で運ぶことができるようになります。これにより、新しく接続されたPCが属するVLAN300のトラフィックがネットワーク全体で適切にルーティングされることを保証します。

図を書いてもらった

それぞれの Switch がどのように接続されているか、graphviz または mermaid で表すことはできますか

の結果がこちらです。
動作中の様子を見ると、Code Interpreter で Python を使って書いたようです。

cisco switch network diagram
cisco switch network diagram

Visio で書くような図とは異なりますが、どの port に何がつながっているか、description をもとに理解できているようです。
今後こういった自動化というか、運用の効率化において、annotation というか、AI 的なものに理解してもらうにあたり、description は重要な役割を果たすと考えられますね。

まとめ

今回は何も工夫せず、Cisco の設定に関する知識を ChatGPT がどれほど持っているか、を試してみた感じです。
ある程度理解はしているようで、また、description の内容をもとにどの port がどのようにつながっているか、ということも想像できているようです。
Azure OpenAI Service (AOAI) で同じようなものを組み、Retrieval Augmentation Generation (RAG) なりでもう少し知識を補足してあげればもう少し回答の精度が上がるのでは、というのが次のアクションかなと思います。
また、この結果をもとに実際に SSH して設定変更する、みたいなところまで作り切れるといいかなぁ、とは思っていますがまた後で。。

Discussion