
Ebben a cikkben arról fogok beszélni, hogyan lehet konfigurálni OpenDaylight hálózati berendezésekkel való munkához, és megmutatom, hogyan lehet Postman egyszerű RESTCONF lekérdezésekkel kezelni ezeket a berendezéseket. A hardverrel nem fogunk foglalkozni, ehelyett egy kis virtuális laboratóriumot indítunk el egyetlen routerrel a Vrnetlab használatával Ubuntu 20.04 LTS.
A részletes beállítást először a Juniper vMX 20.1R1.11router példáján mutatom be, majd összehasonlítjuk a beállítást a Cisco xRV9000 7.0.2.
Tartalom
- Szükséges ismeretek
- 1. rész: röviden áttekintjük OpenDaylight (a továbbiakban ODL), Postman és Vrnetlab és hogy miért van szükségünk rájuk
- 2. rész: a virtuális laboratórium leírása
- 3. Rész: beállítjuk OpenDaylight
- 4. Rész: beállítjuk Vrnetlab
- 5. Rész: a Postman virtuális router összekapcsolása (Juniper vMX) a ODL
- 6. Rész: a router konfigurációjának lekérése és megváltoztatása a Postman és ODL
- 7. rész: a Cisco xRV9000 hozzáadása
- Zárás
- P.S.
- Irodalomjegyzék
Szükséges ismeretek
Annak érdekében, hogy a cikk ne váljon túl hosszúvá, néhány műszaki részletet kihagytam (hivatkozásokkal olyan irodalmakra, ahol többet olvashatunk róluk).
Ezért javaslom, hogy ismerkedjünk meg a következő témákkal, amelyeket jól lenne (de nem kötelező) tudni az olvasás előtt:
- ,
- /
1. Rész: egy kis elmélet

- Nyílt SDN platform a különböző hálózatok kezelésére és automatizálására, amely támogatott Linux Alapítvány
- Java belül
- A Model-Driven Service Abstraction Level (MD-SAL) alapjain nyugszik
- YANG modelleket használ a hálózati eszközök RESTCONF API-jának automatikus létrehozásához
Fő modul a hálózat kezeléséhez. Ezen keresztül fogunk kommunikálni a csatlakoztatott eszközökkel. A saját API-ján keresztül vezérelhető.
További információt az OpenDaylight-ról olvashatunk .

- API tesztelő eszköz
- Egyszerű és könnyen használható felület
A mi esetünkben érdekes, mint eszköz az OpenDaylight API-jára történő REST lekérdezések küldésére. Természetesen kézzel is küldhetjük a lekérdezéseket, de a Postman mindent nagyon szemléletesen mutat, és a céljainkhoz a legjobban illeszkedik.
Kíváncsiak számára: sok oktatóanyag készült róla ().

- Eszköz virtuális routerek Docker-en való telepítésére
- Támogatja: Cisco XRv, Juniper vMX, Arista vEOS, Nokia VSR és mások.
- . Nem kell semmit fizetni. Nem kell megállapodni arról, hogy telepítsük a rendszert a laptopunkra vagy szerverünkre. Nincsenek rejtett díjak. Ugyanakkor egyetlen más Open Source adatbázistechnológia sem tud versenyezni a sebességgel a
Nagyon érdekes, de kevéssé ismert eszköz. A mi esetünkben ennek segítségével elindítjuk a Juniper vMX-t és a Cisco xRV9000-t egy normál Ubuntu 20.04 LTS-en.
További információt róla olvashatunk a .
2. Rész: laboratóriumi munka
A tutorial keretein belül a következő rendszert fogjuk beállítani:

Hogyan működik ez
- Juniper vMX felmegy a Docker konténerben (eszközök révén Vrnetlab) és úgy működik, mint a legszokásosabb virtuális router.
- ODL csatlakozik a routerhez, és lehetővé teszi annak kezelését.
- Postman külön gépen fut, és rajta keresztül küldjük a parancsokat ODL: a router csatlakoztatásához/eltávolításához, a konfiguráció megváltoztatásához stb.
Megjegyzés a rendszer eszközéről
Juniper vMX és ODL meglehetősen sok erőforrást igényel a stabil működéséhez. Egyedül a vMX 6 Gb RAM-ot és 4 magot kér. Ezért úgy döntöttek, hogy az összes "nehéz" eszközt külön gépre helyezik (Heulett Packard Enterprise MicroServer ProLiant Gen8, Ubuntu 20.04 LTS). A router persze nem "szárnyal rajta", de kisebb kísérletekhez elegendő a teljesítmény.
3. rész: OpenDaylight beállítása

Az ODL aktuális verziója a cikk írásának idején — Magnesium SR1
1) Telepítjük Java OpenJDK 11 (részletesebb telepítésért )
ubuntu:~$ sudo apt install default-jdk2) Megkeressük és letöltjük a legfrissebb buildet ODL
3) Kicsomagoljuk a letöltött archívumot
4) Belépünk a kapott könyvtárba
5) Elindítjuk ./bin/karaf
Ezen a lépésen ODL el kell indulnia, és a konzolban fogunk találkozni (Külső hozzáféréshez a 8181-es portot használjuk, amit később kihasználunk).
Következő lépésként telepítjük ODL funkciókat, amelyek a protokollokkal való munkát szolgálják. NETCONF és RESTCONFEhhez a konzolban ODL futtatjuk:
opendaylight-user@root> feature:install odl-netconf-topology odl-restconf-allEzen a legegyszerűbb beállítás ODL befejeződött. (Részletesebben olvasható ).
4. rész: Vrnetlab beállítása

A rendszer előkészítése
A telepítés előtt Vrnetlab telepíteni kell a működéséhez szükséges csomagokat. Ilyenek például , , :
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.ioVrnetlab telepítése
A telepítéshez Vrnetlab klónozzuk a megfelelő tárolót a github-ról:
ubuntu:~$ cd ~
ubuntu:~$ git clone https://github.com/plajjan/vrnetlab.gitLépjünk a könyvtárba vrnetlab:
ubuntu:~$ cd ~/vrnetlabItt láthatók az összes szükséges script a futtatáshoz. Ne feledje, hogy minden routertípushoz külön könyvtár készült:
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 xrv9kRouter image létrehozása
Minden támogatott routernek Vrnetlab, saját egyedi beállítási eljárása van. Az esetünkben Juniper vMX elég, ha a .tgz archívumot feltöltjük a routerrel (letölthetjük a ) a vmx könyvtárba, és futtatjuk a parancsot make:
ubuntu:~$ cd ~\/vrnetlab\/vmx
ubuntu:~$ # Másoljuk be ebbe a könyvtárba a .tgz archívumot a routerrel
ubuntu:~$ sudo makeA kép építése vMX kb. 10-20 percet vesz igénybe. Itt az idő, hogy főzzünk egy kávét!
Miért tart ilyen sokáig, kérdezheted?
Fordítás a kérdésre:
"Ez azzal függ össze, hogy a VCP (Control Plane) első indításakor beolvassa a konfigurációs fájlt, amely meghatározza, hogy VCP VRR-ként működik-e a vMX-en. Korábban ezt a Docker indításakor hajtották végre, de ez azt jelentette, hogy a VCP mindig újraindult egyszer, mielőtt a virtuális router elérhetővé vált, ami hosszú betöltési időt okozott (kb. 5 perc). Most a VCP első indítása a Docker kép építésekor történik, és mivel a Docker építést nem lehet --privileged kapcsolóval elindítani, ez azt jelenti, hogy a qemu hardveres gyorsítás nélkül, KVM nélkül fut, így az építés nagyon hosszú időt vesz igénybe. E folyamat során sok napló jelenik meg, így legalább láthatod, mi történik. Úgy gondolom, hogy a hosszú építés nem olyan ijesztő, mert a képet egyszer készítjük el, de sokszor indítjuk el."
Ezután láthatjuk a routerünk képét a Docker:
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 101MBA vr-vmx konténer indítása
A következő paranccsal indítjuk el:
ubuntu:~$ sudo docker run -d --privileged --name jun01 b1b2369b453cEzután megnézhetjük az aktív konténerek információit:
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 jun01Csatlakozunk a routerhez
A router's network interface IP address can be obtained using the following command:
ubuntu:~$ sudo docker inspect --format '{{.NetworkSettings.IPAddress}}' jun01
172.17.0.2By default, Vrnetlab creates a user for the router vrnetlab/VR-netlab9.
Connecting using 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_build
vrnetlab> show version
Model: vmx
Junos: 20.1R1.11This completes the router setup.
Installation guidelines for routers from various vendors can be found at in the corresponding directories.
Part 5: Postman — connecting the router to OpenDaylight
Installing Postman
To install, simply download the application .
Connecting the router to ODL
unit PUT request:

- Request line:
PUT http://10.132.1.202:8181/restconf/config/network-topology:network-topology/topology/topology-netconf/node/jun01 - Request body (Body tab):
jun01 172.17.0.2 22 vrnetlab VR-netlab9 false jun01_cache - In the Authorization tab, set the parameter
Basic Authand username/password: admin/admin. This is required to access ODL:

- In the Headers tab, you need to add two headers:
- Accept application/xml
- Content-Type application/xml
Our request is formed. Sending. If everything is set up correctly, we should receive a status "201 Created":
![]()
What does this request do?
We create a node inside ODL with the parameters of the real router we wish to access.
xmlns="urn:TBD:params:xml:ns:yang:network-topology"
xmlns="urn:opendaylight:netconf-node-topology"These are internal namespaces XML (XML namespace) for ODL which it creates the node.
Next, accordingly, the router name is node-id, the router address is host etc.
The most interesting line is the last one. Schema-cache-directory creates a directory where all files YANG Schema of the connected router are downloaded. They can be found at $ODL_ROOT/cache/jun01_cache.
Checking the router connection
unit GET request:
- Request line:
GET http://10.132.1.202:8181/restconf/operational/network-topology:network-topology/topology/topology-netconf/ - In the Authorization tab, set the parameter
Basic Authand username/password: admin/admin.
Elküldjük. "200 OK" státuszt és a készülék által támogatott eszközök listáját kell kapnunk. YANG Schema:

Megjegyzés: Az utolsó megtekintéséhez az én esetemben körülbelül 10 percet kellett várni a végrehajtás után. PUT, amíg minden YANG séma kiválasztásra kerül ODL. Eddig a pontig a következő fog megjelenni a kérés végrehajtásakor: GET Router törlése

DELETE http://10.132.1.202:8181/restconf/config/network-topology:network-topology/topology/topology-netconf/node/jun01
unit DELETE request:
- Request line:
6. rész: A router konfigurációjának módosítása - In the Authorization tab, set the parameter
Basic Authand username/password: admin/admin.
Konfiguráció megszerzése
GET http://10.132.1.202:8181/restconf/config/network-topology:network-topology/topology/topology-netconf/node/jun01/yang-ext:mount/
unit GET request:
- Request line:
Elküldjük. "200 OK" státuszt és a router konfigurációját kell kapnunk: - In the Authorization tab, set the parameter
Basic Authand username/password: admin/admin.
Konfiguráció létrehozása

Példaként a következő konfigurációt hozzuk létre, és módosítjuk:
protocols { bgp { disable; shutdown; } }
POSTunit 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 request:
- Request line:
- Request body (Body tab):
A küldés után "204 No Content" státuszt kell kapnunk. - In the Authorization tab, set the parameter
Basic Authand username/password: admin/admin. - In the Headers tab, you need to add two headers:
- Accept application/xml
- Content-Type application/xml
A konfiguráció ellenőrzéséhez használhatjuk az előző kérdést. De példaként létrehozunk egy másikat, amely csak a routeren konfigurált protokollok információját adja ki.
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
unit GET request:
- Request line:
A kérés végrehajtása után a következőket láthatjuk: - In the Authorization tab, set the parameter
Basic Authand username/password: admin/admin.
A konfiguráció módosítása

Módosítjuk a BGP protokoll információját. A műveleteink után így fog kinézni:
protocols { bgp { disable; } }
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:protocolsunit PUT request:
- Request line:
- Request body (Body tab):
Az előző kérés használatával láthatjuk a módosításokat: - In the Authorization tab, set the parameter
Basic Authand username/password: admin/admin. - In the Headers tab, you need to add two headers:
- Accept application/xml
- Content-Type application/xml
A konfiguráció törlése GET 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

A protokollokkal kapcsolatos kérés végrehajtásakor a következőket látjuk:
unit DELETE request:
- Request line:
A konfiguráció módosításához nem szükséges a kérés törzsét XML formátumban elküldeni. - In the Authorization tab, set the parameter
Basic Authand username/password: admin/admin.
Ez megtehető JSON formátumban is. GET Például a konfiguráció módosítására vonatkozó kérésben cseréljük le a törzs tartalmát a következőre:

Kiegészítés:
{ "junos-conf-protocols:protocols": { "bgp": { "description" : "Changed in postman" } } } XMLNe felejtsd el a Fejlécek fülön módosítani a fejléceket: JSON.
Ehhez például a kérésben PUT a konfiguráció megváltoztatásához cseréljük ki a kérés törzsét a következőre:
{
"junos-conf-protocols:protocols": {
"bgp": {
"description" : "Megváltozott a Postman-ban"
}
}
}Ne felejtsd el megváltoztatni a Fejlécek fülön a fejléceket erre:
- Elfogadja az application/json-t
- Content-Type application/json
A küldés után a következő eredményt kapjuk (az eredményt a következő kérés használatával nézzük meg): GET kérés):

7. rész: Cisco xRV9000 hozzáadása
Miért beszélünk mindig Juniperről? Beszéljünk most a Cisco-ról!
Ráakadtam egy xRV9000-es 7.0.2-es verzióra (szörnyeteg, amihez 8 Gb RAM és 4 mag szükséges. Nincs szabadon elérhető, ezért forduljatok a ) — ezt fogjuk futtatni.
Konténer indítása
A Docker konténer létrehozásának folyamata gyakorlatilag nem különbözik a Junipertől. Hasonlóképpen, a router .qcow2 fájlt betesszük a nevének megfelelő könyvtárba (jelen esetben xrv9k), és végrehajtjuk a parancsot: make docker-image.
Néhány perc múlva látjuk, hogy a kép elkészült:
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 101MBA konténer indítása:
ubuntu:~$ sudo docker run -d --privileged --name xrv01 54debc7973fcNéhány idő elteltével megnézzük, hogy a konténer elindult:
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 xrv01Csatlakozunk SSH-n:
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 () processzor
A rendszer üzemideje 3 óra 22 percRouter csatlakoztatása az OpenDaylight-hoz
A hozzáadás teljesen hasonlóan történik, mint a vMX képnél. Csak a neveket kell kicserélni.
PUT request:

Néhány idő elteltével elindítjuk a GET kérést, hogy ellenőrizzük, hogy minden csatlakozott:

Módosítjuk a BGP protokoll információját. A műveleteink után így fog kinézni:
Beállítjuk a következő konfigurációt:
!
router ospf LAB
mpls ldp auto-config
!unit 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 request:
- Request line:
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 - Request body (Body tab):
{ "processes": { "process": [ { "process-name": "LAB", "default-vrf": { "process-scope": { "ldp-auto-config": [ null ] } } } ] } } - In the Authorization tab, set the parameter
Basic Authand username/password: admin/admin. - In the Headers tab, you need to add two headers:
- Elfogadja az application/json-t
- Content-Type application/json
A végrehajtás után a "204 No Content" státuszt kell kapnunk.
Ellenőrizzük, mi jött össze.
Ehhez létrehozunk egy GET request:
- Request line:
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 - In the Authorization tab, set the parameter
Basic Authand username/password: admin/admin.
A végrehajtás után a következőt kell látnia:

A konfiguráció eltávolításához használja a DELETE:
- Request line:
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 - In the Authorization tab, set the parameter
Basic Authand username/password: admin/admin.
Zárás
Összefoglalva, ahogy észrevehették, a Cisco és Juniper OpenDaylight-hez való csatlakozási eljárásai nem különböznek — ez jelentős teret ad a kreativitásnak. A hálózati komponensek konfigurációinak kezelésétől kezdve a saját hálózati politikák létrehozásáig.
Ebben a tutoriálban a legbasicabb példákat mutattam be arra, hogyan lehet kölcsönhatásba lépni a hálózati berendezésekkel az OpenDaylight segítségével. Kétségtelen, hogy a bemutatott példákban szereplő lekérdezéseket sokkal bonyolultabbá tehetjük és egész szolgáltatásokat állíthatunk be egy kattintással — minden csak a fantáziáján múlik.
Folytatás következik…
P.S.
Ha mindezeket már tudja, vagy éppen ellenkezőleg, átélte és lenyűgözte az ODL, ajánlom, hogy nézzen utána az ODL-vezérlőn történő alkalmazásfejlesztésnek. Az elejét lehet venni .
Sikeres kísérletezést kívánok!
Irodalomjegyzék
- / Brian Linkletter
- OpenDaylight Cookbook / Mathieu Lemay, Alexis de Talhouet, Et al
- Hálózati programozhatóság YANG-nal / Benoît Claise, Loe Clarke, Jan Lindblad
- XML tanulás, második kiadás / Erik T. Ray
- Hatékony DevOps / Jennifer Davis, Ryn Daniels
Forrás: habr.com

