使用GNS3 Restful API 建立網路模型

前陣子因為實驗需求需要使用GNS3架設Layer 3網路實驗環境。學習GNS3時找到的網路資源都是使用圖形介面操作,我覺得十分煩瑣,動作重複、每個腳本都要重新編寫(雖然可以用notepad 記起來)。所以我找了一下有沒有可以操作GNS3專案的API,發現官網有提供Restful API的介面。以下為使用API架設GNS3網路的筆記。

我們需要兩個工具/軟體架設GNS3:

  • GNS3 Remote Server (我是直接用Remote Server, 如果真的需要看實驗過程,我是在工作用的主機上安裝GUI(gns3-gui))
  • Restful API Client (筆記上是用Postman實作,也可以使用程式架設網路(eg. Python Requests library))
  • Telnet Client (我是用Putty,沒有指定的程式)

架設完成時,可以使用Restful 指令檢查是否連上 :
(例如主機IP為172.16.21.113,GNS3控制Port 為3080)
Method: GET
Endpoints: /v2/version

新增一個專案可使用以下指令,專案名字寫在Body, 格式寫JSON:
Method: POST
Endpoints: /v2/projects
Body: {"name": <專案名字>}

專案新增成功後會回傳一堆資訊,當中最重要的是project_id,之後處理專案所有事情都需要這個ID。

接下來為專案加入各式各樣的元件,GNS3支援很多種類的模擬工具元件(Dynamics, Virtual Box, VMware, Qemu, Docker等),我們以VCPU為例架設環境:
Method: POST
Endpoints: /v2/projects/<project_id>/nodes
Body: {"name": "PC 1", "node_type": "vpcs", "compute_id": "local"}

新增成功後也會回傳一堆資訊,要把node_id記起來,之後把元件接起來需要使用。

當把需要的元件加入到專案後,我們要把元件連接起來,我們使用以下指令完成工作:
Method:POST
Endpoints: /v2/projects/<project_id>/links
Body: {"nodes": [{"adapter_number": 0,"node_id": "c9bfbaa5-c959-4628-a793-13e70267b3de","port_number": 0},{"adapter_number": 0,"node_id": "7c0610a0-6d70-4ea0-b7a8-3331f522ed34","port_number": 0}]}

成功後會出現一個link_id,如果你之後需要拔線等測試,需要使用這ID對此link 進行操作。

好,基本上架設專案環境的工作已經完成,接下來是使用API 進行實驗。

發表留言

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料