前陣子因為實驗需求需要使用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
![](https://mountainshansblog.wordpress.com/wp-content/uploads/2020/04/image-1.png?w=981)
新增一個專案可使用以下指令,專案名字寫在Body, 格式寫JSON:Method: POST
Endpoints: /v2/projects
Body: {"name": <專案名字>}
![](https://mountainshansblog.wordpress.com/wp-content/uploads/2020/04/image-3.png?w=981)
專案新增成功後會回傳一堆資訊,當中最重要的是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"}
![](https://mountainshansblog.wordpress.com/wp-content/uploads/2020/04/image-4.png?w=981)
新增成功後也會回傳一堆資訊,要把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}]}
![](https://mountainshansblog.wordpress.com/wp-content/uploads/2020/04/image-5.png?w=981)
成功後會出現一個link_id,如果你之後需要拔線等測試,需要使用這ID對此link 進行操作。
好,基本上架設專案環境的工作已經完成,接下來是使用API 進行實驗。