
在本文中,我將向您展示如何設置 日光開放 使用網絡設備,並展示如何使用 郵差 和簡單的 休息會議 請求,可以控制此設備。 我們不會使用硬件,而是使用單個路由器部署小型虛擬實驗室 虛擬實驗室 以上 Ubuntu 20.04 LTS.
我將首先使用路由器示例顯示詳細設置 瞻博網絡 vMX 20.1R1.11,然後我們將其與設置進行比較 思科 xRV9000 7.0.2.
Содержание
- 所需知識
- Часть1: 簡單討論 OpenDaylight(以下簡稱 低密度脂蛋白), 郵差 и 虛擬實驗室 為什麼我們需要它們
- Часть2: 虛擬實驗室的描述
- Часть3: 配置 日光開放
- Часть4: 配置 虛擬實驗室
- Часть5: 通過使用 郵差 連接虛擬路由器(瞻博網絡 vMX) 至 低密度脂蛋白
- Часть6:使用獲取和更改路由器配置 郵差 и 低密度脂蛋白
- Часть7: 添加思科 xRV9000
- 結論
- 聚苯乙烯
- 參考書目
所需知識
為了不讓文章變成一張紙,我省略了一些技術細節(帶有指向文獻的鏈接,您可以在其中閱讀它們)。
在這方面,我向您提供在閱讀之前最好(但幾乎沒有必要)了解的主題:
- ,
- /
第 1 部分:一些理論

- 一個開放的 SDN 平台,用於管理和自動化各種網絡,由 Linux 粉底遮瑕
- 裡面的Java
- 基於模型驅動的服務抽象級別 (MD-SAL)
- 使用 YANG 模型為網絡設備自動生成 RESTCONF API
網絡管理的主要模塊。 通過它,我們將與連接的設備進行通信。 通過自己的 API 進行管理。
您可以閱讀有關 OpenDaylight 的更多信息 .

- API測試工具
- 簡單易用的界面
在我們的例子中,我們感興趣的是將它作為一種向 OpenDaylight API 發送 REST 請求的方式。 當然,您可以手動發送請求,但在 Postman 中,一切看起來都非常清晰,非常適合我們的目的。
給想挖的:上面寫了很多培訓資料().

- 在 Docker 中部署虛擬路由器的工具
- 支持:Cisco XRv、Juniper vMX、Arista vEOS、Nokia VSR 等。
- 開源
這是一個非常有趣但鮮為人知的工具。在我們的例子中,我們將使用它來定期執行 Juniper vMX 和 Cisco xRV9000。 Ubuntu 20.04 LTS。
你可以閱讀更多關於它的信息 .
第 2 部分:實驗室
在本教程中,我們將設置以下系統:

Какэтоработает
- 瞻博網絡 vMX 上升 碼頭工人 容器(通過 虛擬實驗室) 並充當最常見的虛擬路由器。
- 低密度脂蛋白 連接到路由器並允許您控制它。
- 郵差 在單獨的機器上啟動並通過它我們發送命令 低密度脂蛋白:連接/移除路由器,更改配置等。
對系統設備的評論
瞻博網絡 vMX и 低密度脂蛋白 需要相當多的資源才能穩定運行。 僅一個 虛擬MX 要求 6 Gb 的 RAM 和 4 個內核。 因此,決定將所有“重量級”移動到單獨的機器上(Heulett Packard Enterprise MicroServer ProLiant Gen8, Ubuntu 20.04 LTS). 路由器當然不會在其上“飛行”,但性能足以進行小型實驗。
第 3 部分:設置 OpenDaylight

在撰寫本文時 ODL 的當前版本是 Magnesium SR1
1) 安裝 Java 開放 JDK 11 (更詳細的安裝 )
ubuntu:~$ sudo apt install default-jdk2) 查找並下載最新版本 低密度脂蛋白
3)解壓縮下載的存檔
4)轉到結果目錄
5) 發射 ./bin/karaf
在這一步 低密度脂蛋白 應該啟動,我們會發現自己在控制台中(端口 8181 用於從外部訪問,我們稍後會用到)。
接下來,安裝 ODL 功能設計用於協議 網絡會議 и 休息會議. 在控制台中執行此操作 低密度脂蛋白 我們執行:
opendaylight-user@root> feature:install odl-netconf-topology odl-restconf-all這是最簡單的設置。 低密度脂蛋白 完全的。 (有關詳細信息,請參閱 ).
第 4 部分:設置 Vrnetlab

系統準備
安裝前 虛擬實驗室 您需要安裝其運行所需的軟件包。 例如 , , :
ubuntu:~$ sudo apt update
ubuntu:~$ sudo apt -y install python3-bs4 sshpass make
ubuntu:~$ sudo apt -y install git
ubuntu:~$ sudo apt install -y
apt-transport-https ca-certificates
curl gnupg-agent software-properties-common
ubuntu:~$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
ubuntu:~$ sudo add-apt-repository
"deb [arch=amd64] https://download.docker.com/linux/ubuntu
$(lsb_release -cs)
stable"
ubuntu:~$ sudo apt update
ubuntu:~$ sudo apt install -y docker-ce docker-ce-cli containerd.io安裝 Vrnetlab
安裝用 虛擬實驗室 從github克隆相應的倉庫:
ubuntu:~$ cd ~
ubuntu:~$ git clone https://github.com/plajjan/vrnetlab.git轉到目錄 網絡實驗室:
ubuntu:~$ cd ~/vrnetlab在這裡您可以看到運行所需的所有腳本。 請注意,已為每種類型的路由器製作了相應的目錄:
ubuntu:~/vrnetlab$ ls
CODE_OF_CONDUCT.md config-engine-lite openwrt vr-bgp
CONTRIBUTING.md csr routeros vr-xcon
LICENSE git-lfs-repo.sh sros vrnetlab.sh
Makefile makefile-install.include topology-machine vrp
README.md makefile-sanity.include veos vsr1000
ci-builder-image makefile.include vmx xrv
common nxos vqfx xrv9k創建路由器的映像
每個支持的路由器 虛擬實驗室, 有其獨特的設置程序。 什麼時候 瞻博網絡 vMX 我們只需要用路由器上傳 .tgz 存檔(你可以從 ) 到 vmx 目錄並運行命令 make:
ubuntu:~$ cd ~/vrnetlab/vmx
ubuntu:~$ # Копируем в эту директорию .tgz архив с роутером
ubuntu:~$ sudo make構建圖像 虛擬MX 大約需要 10-20 分鐘。 是時候去喝杯咖啡了!
你問為什麼這麼久?
筆譯 這個問題的作者:
“這是因為第一次啟動 VCP(控制平面)時,它會讀取一個配置文件,確定它是否會在 vMX 中作為 VRR VCP 運行。以前,此啟動是在 Docker 啟動期間完成的,但這意味著 VCP在虛擬路由器可用之前總是重新啟動一次,導致啟動時間很長(大約 5 分鐘)現在 VCP 的第一次運行是在構建 Docker 映像期間完成的,並且由於 Docker 構建不能運行 - -privileged選項,這意味著qemu在沒有KVM硬件加速的情況下工作,因此構建需要很長時間。在此過程中會輸出大量日誌,所以至少你可以看到發生了什麼。我認為長時間構建是沒那麼可怕,因為我們創造了一次形象,但我們推出了很多次。”
在你可以看到我們路由器的圖像之後 碼頭工人:
ubuntu:~$ sudo docker image list
REPOSITORY TAG IMAGE ID CREATED SIZE
vrnetlab/vr-vmx 20.1R1.11 b1b2369b453c 3 weeks ago 4.43GB
debian stretch 614bb74b620e 7 weeks ago 101MB啟動 vr-vmx 容器
我們從命令開始:
ubuntu:~$ sudo docker run -d --privileged --name jun01 b1b2369b453c接下來,我們可以看到有關活動容器的信息:
ubuntu:~$ sudo docker container list
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
120f882c8712 b1b2369b453c "/launch.py" 2 minutes ago Up 2 minutes (unhealthy) 22/tcp, 830/tcp, 5000/tcp, 10000-10099/tcp, 161/udp jun01連接到路由器
路由器網絡接口的IP地址可以通過以下命令獲取:
ubuntu:~$ sudo docker inspect --format '{{.NetworkSettings.IPAddress}}' jun01
172.17.0.2預設, 虛擬實驗室 在路由器上創建用戶 vrnetlab/VR-netlab9.
與連接 ssh:
ubuntu:~$ ssh vrnetlab@172.17.0.2
The authenticity of host '172.17.0.2 (172.17.0.2)' can't be established.
ECDSA key fingerprint is SHA256:g9Sfg/k5qGBTOX96WiCWyoJJO9FxjzXYspRoDPv+C0Y.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '172.17.0.2' (ECDSA) to the list of known hosts.
Password:
--- JUNOS 20.1R1.11 Kernel 64-bit JNPR-11.0-20200219.fb120e7_buil
vrnetlab> show version
Model: vmx
Junos: 20.1R1.11這樣就完成了路由器設置。
可以在以下位置找到各種供應商路由器的安裝建議 在各自的目錄中。
第 5 部分:Postman - 將路由器連接到 OpenDaylight
郵遞員安裝
要安裝,只需下載應用程序 .
將路由器連接到 ODL
讓我們創造 PUT 要求:

- 請求參數:
PUT http://10.132.1.202:8181/restconf/config/network-topology:network-topology/topology/topology-netconf/node/jun01 - 請求正文(正文選項卡):
<node xmlns="urn:TBD:params:xml:ns:yang:network-topology"> <node-id>jun01</node-id> <host xmlns="urn:opendaylight:netconf-node-topology">172.17.0.2</host> <port xmlns="urn:opendaylight:netconf-node-topology">22</port> <username xmlns="urn:opendaylight:netconf-node-topology">vrnetlab</username> <password xmlns="urn:opendaylight:netconf-node-topology">VR-netlab9</password> <tcp-only xmlns="urn:opendaylight:netconf-node-topology">false</tcp-only> <schema-cache-directory xmlns="urn:opendaylight:netconf-node-topology">jun01_cache</schema-cache-directory> </node> - 在授權選項卡上,您必須設置參數
Basic Auth和登錄名/密碼:admin/admin。 這是訪問 ODL 所必需的:

- 在標題選項卡上,您需要添加兩個標題:
- 接受申請/xml
- 內容類型應用程式/xml
我們的要求已經提出。 我們發送。 如果一切配置正確,那麼我們應該返回狀態“201 Created”:
![]()
這個請求有什麼作用?
我們在裡面創建節點 低密度脂蛋白 使用我們要訪問的真實路由器的參數。
xmlns="urn:TBD:params:xml:ns:yang:network-topology"
xmlns="urn:opendaylight:netconf-node-topology"這些是內部命名空間 XML的 (XML命名空間) 為了 低密度脂蛋白 根據它創建節點。
此外,路由器的名稱分別是 節點號, 路由器地址 - 主持人 等等。
最有趣的是最後一行。 模式緩存目錄 創建一個下載所有文件的目錄 楊式 連接的路由器。 你可以在...裡找到它們 $ODL_ROOT/cache/jun01_cache.
檢查路由器的連接
讓我們創造 GET 要求:
- 請求參數:
GET http://10.132.1.202:8181/restconf/operational/network-topology:network-topology/topology/topology-netconf/ - 在授權選項卡上,您必須設置參數
Basic Auth和登錄名/密碼:admin/admin。
我們發送。 應收到“200 OK”狀態和設備支持的所有列表 楊式:

評論: 要看到後者,就我而言,執行後需要等待大約 10 分鐘 PUT直到所有 陽模式 卸載 低密度脂蛋白. 到目前為止,執行此操作時 GET 查詢將顯示以下內容:

刪除路由器
讓我們創造 DELETE 要求:
- 請求參數:
DELETE http://10.132.1.202:8181/restconf/config/network-topology:network-topology/topology/topology-netconf/node/jun01 - 在授權選項卡上,您必須設置參數
Basic Auth和登錄名/密碼:admin/admin。
第 6 部分:更改路由器配置
獲取配置
讓我們創造 GET 要求:
- 請求參數:
GET http://10.132.1.202:8181/restconf/config/network-topology:network-topology/topology/topology-netconf/node/jun01/yang-ext:mount/ - 在授權選項卡上,您必須設置參數
Basic Auth和登錄名/密碼:admin/admin。
我們發送。 應收到狀態“200 OK”和路由器配置:

創建配置
例如,讓我們創建以下配置並修改它:
protocols {
bgp {
disable;
shutdown;
}
}讓我們創造 解決方案&帖子 要求:
- 請求參數:
POST http://10.132.1.202:8181/restconf/config/network-topology:network-topology/topology/topology-netconf/node/jun01/yang-ext:mount/junos-conf-root:configuration/junos-conf-protocols:protocols - 請求正文(正文選項卡):
<bgp xmlns="http://yang.juniper.net/junos/conf/protocols"> <disable/> <shutdown> </shutdown> </bgp> - 在授權選項卡上,您必須設置參數
Basic Auth和登錄名/密碼:admin/admin。 - 在標題選項卡上,您需要添加兩個標題:
- 接受申請/xml
- 內容類型應用程式/xml
發送後,他們應該收到狀態“204 No Content”
要檢查配置是否已更改,您可以使用之前的查詢。 但是,例如,我們將創建另一個只顯示有關路由器上配置的協議的信息。
讓我們創造 GET 要求:
- 請求參數:
GET http://10.132.1.202:8181/restconf/config/network-topology:network-topology/topology/topology-netconf/node/jun01/yang-ext:mount/junos-conf-root:configuration/junos-conf-protocols:protocols - 在授權選項卡上,您必須設置參數
Basic Auth和登錄名/密碼:admin/admin。
執行請求後,我們將看到以下內容:

更改配置
讓我們更改有關 BGP 協議的信息。 在我們的操作之後,它將看起來像這樣:
protocols {
bgp {
disable;
}
}讓我們創造 PUT 要求:
- 請求參數:
PUT http://10.132.1.202:8181/restconf/config/network-topology:network-topology/topology/topology-netconf/node/jun01/yang-ext:mount/junos-conf-root:configuration/junos-conf-protocols:protocols - 請求正文(正文選項卡):
<protocols xmlns="http://yang.juniper.net/junos/conf/protocols"> <bgp> <disable/> </bgp> </protocols> - 在授權選項卡上,您必須設置參數
Basic Auth和登錄名/密碼:admin/admin。 - 在標題選項卡上,您需要添加兩個標題:
- 接受申請/xml
- 內容類型應用程式/xml
使用以前的 GET 請求,我們看到了變化:

刪除配置
讓我們創造 DELETE 要求:
- 請求參數:
DELETE http://10.132.1.202:8181/restconf/config/network-topology:network-topology/topology/topology-netconf/node/jun01/yang-ext:mount/junos-conf-root:configuration/junos-conf-protocols:protocols - 在授權選項卡上,您必須設置參數
Basic Auth和登錄名/密碼:admin/admin。
打電話時 GET 請求有關協議的信息,我們將看到以下內容:

補充:
為了更改配置,不需要以格式發送請求正文 XML的. 這也可以以格式完成 JSON.
為此,例如,在查詢中 PUT 要更改配置,請將請求正文替換為:
{
"junos-conf-protocols:protocols": {
"bgp": {
"description" : "Changed in postman"
}
}
}不要忘記將標題選項卡上的標題更改為:
- 接受申請/json
- 內容類型 application/json
發送後,我們會得到如下結果(我們看答案使用 GET 要求):

第 7 部分:添加 Cisco xRV9000
我們對瞻博網絡有何看法,是的,瞻博網絡? 讓我們談談思科!
我找到了 xRV9000 版本 7.0.2(需要 8Gb RAM 和 4 核的野獸。它不是免費提供的,所以聯繫 ) - 讓我們運行它。
運行容器
創建 Docker 容器的過程實際上與 Juniper 沒有什麼不同。 同樣,我們將帶有路由器的 .qcow2 文件放入與其名稱對應的目錄(在本例中為 xrv9k)並執行命令 make docker-image.
幾分鐘後,我們看到圖像已經創建:
ubuntu:~$ sudo docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
vrnetlab/vr-xrv9k 7.0.2 54debc7973fc 4 hours ago 1.7GB
vrnetlab/vr-vmx 20.1R1.11 b1b2369b453c 4 weeks ago 4.43GB
debian stretch 614bb74b620e 7 weeks ago 101MB我們啟動容器:
ubuntu:~$ sudo docker run -d --privileged --name xrv01 54debc7973fc過了一會兒,我們看到容器已經啟動了:
ubuntu:~$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
058c5ecddae3 54debc7973fc "/launch.py" 4 hours ago Up 4 hours (healthy) 22/tcp, 830/tcp, 5000-5003/tcp, 10000-10099/tcp, 161/udp xrv01通過 ssh 連接:
ubuntu@ubuntu:~$ ssh vrnetlab@172.17.0.2
Password:
RP/0/RP0/CPU0:ios#show version
Mon Jul 6 12:19:28.036 UTC
Cisco IOS XR Software, Version 7.0.2
Copyright (c) 2013-2020 by Cisco Systems, Inc.
Build Information:
Built By : ahoang
Built On : Fri Mar 13 22:27:54 PDT 2020
Built Host : iox-ucs-029
Workspace : /auto/srcarchive15/prod/7.0.2/xrv9k/ws
Version : 7.0.2
Location : /opt/cisco/XR/packages/
Label : 7.0.2
cisco IOS-XRv 9000 () processor
System uptime is 3 hours 22 minutes將路由器連接到 OpenDaylight
添加以與 vMX 完全相似的方式發生。 我們只需要更改名稱。
PUT 要求:

過一會再打電話 GET 查詢以檢查一切是否已連接:

更改配置
讓我們設置以下配置:
!
router ospf LAB
mpls ldp auto-config
!讓我們創造 解決方案&帖子 要求:
- 請求參數:
POST http://10.132.1.202:8181/restconf/config/network-topology:network-topology/topology/topology-netconf/node/xrv01/yang-ext:mount/Cisco-IOS-XR-ipv4-ospf-cfg:ospf - 請求正文(正文選項卡):
{ "processes": { "process": [ { "process-name": "LAB", "default-vrf": { "process-scope": { "ldp-auto-config": [ null ] } } } ] } } - 在授權選項卡上,您必須設置參數
Basic Auth和登錄名/密碼:admin/admin。 - 在標題選項卡上,您需要添加兩個標題:
- 接受申請/json
- 內容類型 application/json
執行後,他們應該收到狀態“204 No Content”。
讓我們檢查一下我們得到了什麼。
為此,我們將創建 GET 要求:
- 請求參數:
GET http://10.132.1.202:8181/restconf/config/network-topology:network-topology/topology/topology-netconf/node/xrv01/yang-ext:mount/Cisco-IOS-XR-ipv4-ospf-cfg:ospf - 在授權選項卡上,您必須設置參數
Basic Auth和登錄名/密碼:admin/admin。
執行後,您應該看到以下內容:

要刪除配置使用 DELETE:
- 請求參數:
DELETE http://10.132.1.202:8181/restconf/config/network-topology:network-topology/topology/topology-netconf/node/xrv01/yang-ext:mount/Cisco-IOS-XR-ipv4-ospf-cfg:ospf - 在授權選項卡上,您必須設置參數
Basic Auth和登錄名/密碼:admin/admin。
結論
總的來說,正如您可能已經註意到的那樣,將 Cisco 和 Juniper 連接到 OpenDaylight 的過程並沒有什麼不同——這為創造力開闢了相當廣闊的空間。 從所有網絡組件的配置管理開始,到創建您自己的網絡策略結束。
在本教程中,我給出瞭如何使用 OpenDaylight 與網絡設備交互的最簡單示例。 毫無疑問,上述示例中的查詢可以變得更加複雜,只需單擊鼠標即可設置整個服務 - 一切只受您的想像力限制*
待續...
聚苯乙烯
如果您突然間已經知道了這一切,或者相反,已經深入了解了 ODL 的靈魂,那麼我建議您著眼於在 ODL 控制器上開發應用程序。 你可以開始了 .
實驗成功!
參考文獻
- /布賴恩·林克萊特
- OpenDaylight 食譜 / Mathieu Lemay、Alexis de Talhouet 等
- YANG 的網絡可編程性 / Benoît Claise、Loe Clarke、Jan Lindblad
- 學習 XML,第二版 / Erik T. Ray
- 有效的 DevOps / Jennifer Davis, Ryn Daniels
來源: www.habr.com

