
V tomto článku sa dozviete, ako nastaviť OpenDaylight na prácu so sieťovým zariadením, a tiež ukážem, ako pomocou Postman a jednoduchých RESTCONF požiadaviek možno týmto zariadením spravovať. Na práci s hardvérom sa nezameriame, namiesto toho rozbehneme malé virtuálne laboratórie s jedným jediným routerom pomocou Vrnetlab povrchem Ubuntu 20.04 LTS.
Podrobnú konfiguráciu najprv ukážem na príklade routera Juniper vMX 20.1R1.11, potom ju porovnáme s konfiguráciou Cisco xRV9000 7.0.2.
Obsah
- Požadované znalosti
- Časť 1: stručne diskutujeme o OpenDaylight (ďalej v texte ODL), Postman a Vrnetlab a prečo ich potrebujeme
- Časť 2: opis virtuálnej laboratória
- Časť 3: nastavujeme OpenDaylight
- Časť 4: nastavujeme Vrnetlab
- Časť 5: pomocou Postman pripojíme virtuálny router (Juniper vMX) k ODL
- Časť 6: získavame a meníme konfiguráciu routera pomocou Postman a ODL
- Časť 7: pridávame Cisco xRV9000
- Záver
- P.S.
- Zoznam literatúry
Požadované znalosti
Aby sa článok nepretransformoval na jednu veľkú objasňujúcu stránku, niektoré technické podrobnosti som preskočil (s odkazmi na literatúru, kde si o nich môžete prečítať).
V súvislosti s tým navrhujem témy, ktoré by bolo dobré (ale nie úplne nevyhnutné) poznať pred čítaním:
- ,
- /
Časť 1: trochu teórie

- Otvorená SDN platforma pre riadenie a automatizáciu rôznych sietí, podporovaná Linux Foundation
- Java inside
- Založené na Model-Driven Service Abstraction Level (MD-SAL)
- Využíva YANG modely na automatické vytváranie RESTCONF API sieťových zariadení
Hlavný modul na správu siete. Práve cez neho budeme komunikovať s pripojenými zariadeniami. Spravuje sa cez svoj vlastný API.
Podrobnejšie o OpenDaylight sa dá prečítať .

- Nástroj na testovanie API
- Jednoduché a pohodlné na používanie rozhranie
V našom prípade je pre nás zaujímavý ako prostriedok na posielanie REST požiadaviek na API OpenDaylight. Samozrejme, je možné požiadavky posielať aj manuálne, ale v Postman všetko vyzerá veľmi prehľadne a pre naše účely je to ideálne.
Pre tých, ktorí sa chcú ponoriť hlbšie: existuje množstvo školeniam orientovaných materiálov o tom ().

- Nástroj na nasadzovanie virtuálnych routerov v Dockeri
- Podporuje: Cisco XRv, Juniper vMX, Arista vEOS, Nokia VSR a ďalšie.
- Open Source
Veľmi zaujímavý, ale málo známy nástroj. V našom prípade s jeho pomocou spustíme Juniper vMX a Cisco xRV9000 na bežnej Ubuntu 20.04 LTS.
O ňom sa dá prečítať viac na .
Časť 2: laboratórna práca
V rámci tohto tutoriálu budeme nastavovať nasledujúci systém:

Ako to funguje
- Juniper vMX bude sa zdvíhať v Docker v kontejnery (prostredníctvom Vrnetlab) a funguje ako úplne obyčajný virtuálny router.
- ODL pripojený k routeru a umožňuje jeho správu.
- Postman spustený na samostatnom zariadení a cez neho posielame príkazy ODL: na pripojenie/odpojenie routera, zmenu konfigurácie a pod.
Komentár k zariadeniu systému
Juniper vMX a ODL vyžadujú celkom veľa zdrojov pre svoju stabilnú prácu. Iba vMX žiada 6 Gb operačnej pamäte a 4 jadrá. Preto bolo prijaté rozhodnutie presunúť všetkých "ťažkých hráčov" na samostatné zariadenie (Heulett Packard Enterprise MicroServer ProLiant Gen8, Ubuntu 20.04 LTS). Router, samozrejme, na nej ne"letí", ale pre malé experimenty výkon stačí.
Časť 3: nastavujeme OpenDaylight

Aktuálna verzia ODL v čase písania článku — Magnesium SR1
1) Nainštalujeme Java OpenJDK 11 (pre podrobnejšiu inštaláciu )
ubuntu:~$ sudo apt install default-jdk2) Nájdeme a stiahneme čerstvú verziu ODL
3) Rozbalíme stiahnutý archív
4) Prejdeme do získaného adresára
5) Spustíme .\/bin\/karaf
V tomto kroku ODL by mal nabehnúť a ocitneme sa v konzole (Na prístup zvonku sa používa port 8181, čím sa využijeme neskôr).
Ďalej nainštalujeme ODL Funkcie, určené na prácu s protokolmi NETCONF a RESTCONF. Na to v konzole ODL vykonáme:
opendaylight-user@root> feature:install odl-netconf-topology odl-restconf-allNa tomto je najjednoduchšie nastavenie ODL ukončené. (Podrobnejšie sa dá prečítať ).
Časť 4: nastavujeme Vrnetlab

Príprava systému
Pred inštaláciou Vrnetlab je potrebné nainštalovať potrebné balíky na jeho fungovanie. Také ako , , :
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 -
ubunt:~$ 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.ioInštalácia Vrnetlab
Na inštaláciu Vrnetlab klonujeme príslušný repozitár z githubu:
ubuntu:~$ cd ~
ubunt:~$ git clone https:\/\/github.com\/plajjan\/vrnetlab.gitPrejdite do adresára vrnetlab:
ubuntu:~$ cd ~\/vrnetlabTu môžete vidieť všetky skripty potrebné na spustenie. Všimnite si, že pre každý typ routera bola vytvorená príslušná zložka:
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 xrv9kVytvárame obraz smerovača
Každý smerovač, ktorý je podporovaný Vrnetlab, má svoju jedinečnú procedúru nastavenia. V prípade Juniper vMX nám stačí vložiť .tgz archív so smerovačom (stiahnuť ho môžete z ) do adresára vmx a vykonať príkaz make:
ubuntu:~$ cd ~\/vrnetlab\/vmx
ubuntu:~$ # Skopírujeme do tejto zložky .tgz archív so smerovačom
ubuntu:~$ sudo makeZostavenie obrazu vMX bude trvať približne 10-20 minút. Je čas ísť si uvariť kávu!
Prečo to trvá tak dlho, opýtate sa?
Preklad autora na túto otázku:
"Je to spôsobené tým, že pri prvom spustení VCP (Control Plane) sa číta konfiguračný súbor, ktorý určuje, či bude fungovať ako VRR VCP vo vMX. Predtým sa toto spúšťanie vykonávalo počas spúšťania Dockera, ale to znamenalo, že VCP sa vždy reštartoval raz, predtým než virtuálny smerovač bol dostupný, čo spôsobovalo dlhý čas načítania (asi 5 minút). Teraz sa prvé spustenie VCP vykonáva počas zostavovania obrazu Docker, a pretože zostavovanie Dockeru nemôže byť spustené s parameter —privileged, to znamená, že qemu funguje bez hardvérovej akcelerácie KVM a preto zostavovanie trvá veľmi dlhý čas. Počas tohto procesu sa vypisuje veľa logov, takže aspoň uvidíte, čo sa deje. Myslím si, že dlhé zostavovanie nie je také strašné, pretože obraz vytvárame iba raz a spúšťame ho viackrát."
Následne bude možné vidieť obraz nášho smerovača v 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 101MBSpúšťame kontajner vr-vmx
Spúšťame príkazom:
ubuntu:~$ sudo docker run -d --privileged --name jun01 b1b2369b453cĎalej môžeme zhliadnuť informácie o aktívnych kontajneroch:
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 jun01Pripojujeme sa k smerovaču
IP adresa sieťového rozhrania smerovača sa dá získať nasledujúcim príkazom:
ubuntu:~$ sudo docker inspect --format '{{.NetworkSettings.IPAddress}}' jun01
172.17.0.2Predvolene, Vrnetlab vytvára používateľského smerovača vrnetlab/VR-netlab9.
Pripojujeme sa pomocou ssh:
ubuntu:~$ ssh vrnetlab@172.17.0.2
Autenticita hostiteľskej stanice '172.17.0.2 (172.17.0.2)' nemôže byť overená.
ECDSA kľúčová kontrolná suma je SHA256:g9Sfg/k5qGBTOX96WiCWyoJJO9FxjzXYspRoDPv+C0Y.
Ste si istý, že chcete pokračovať v pripojení (áno/nie/[kontrolná suma])? áno
Upozornenie: '172.17.0.2' (ECDSA) bolo trvalo pridané do zoznamu známych hostiteľov.
Heslo:
--- JUNOS 20.1R1.11 Jadro 64-bit JNPR-11.0-20200219.fb120e7_buil
vrnetlab> show version
Model: vmx
Junos: 20.1R1.11Týmto je konfigurácia smerovača dokončená.
Odporúčania na inštaláciu pre smerovače rôznych dodávateľov nájdete na v príslušných adresároch.
Časť 5: Postman — pripojenie smerovača k OpenDaylight
Inštalácia Postman
Na inštaláciu stačí stiahnuť aplikáciu .
Pripojenie smerovača k ODL
Vytvoríme PUT žiadosti:

- Riadok žiadosti:
PUT http://10.132.1.202:8181/restconf/config/network-topology:network-topology/topology/topology-netconf/node/jun01 - Telo žiadosti (záložka Body):
jun01 172.17.0.2 22 vrnetlab VR-netlab9 false jun01_cache - Na záložke Authorization je potrebné nastaviť parameter
Basic Autha prihlasovacie údaje: admin/admin. Toto je potrebné pre prístup k ODL:

- Na záložke Headers je potrebné pridať dva hlavičky:
- Accept application/xml
- Content-Type application/xml
Naša žiadosť je vytvorená. Odosielame ju. Ak bolo všetko správne nastavené, mali by sme dostať stav "201 Created":
![]()
Čo táto žiadosť robí?
Vytvárame node vnútri ODL s parametrami skutočného smerovača, ku ktorému chceme získať prístup.
xmlns="urn:TBD:params:xml:ns:yang:network-topology"
xmlns="urn:opendaylight:netconf-node-topology"Toto sú vnútorné menné priestory filestream (XML namespace) podľa ktorých vytvára node. ODL Potom, logicky, názov smerovača je
node-id , adresa smerovača jea tak ďalej. host Najzaujímavejšia časť je posledná.
Schema-cache-directory vytvára adresár, do ktorého sa sťahujú všetky súbory YANG Schema pripojeného smerovača. Nájdete ich v $ODL_ROOT/cache/jun01_cache Kontrolujeme pripojenie smerovača.
GET http://10.132.1.202:8181/restconf/operational/network-topology:network-topology/topology/topology-netconf/
Vytvoríme GET žiadosti:
- Riadok žiadosti:
a prihlasovacie údaje: admin/admin. - Na záložke Authorization je potrebné nastaviť parameter
Basic AuthOdosielame. Mali by sme dostať stav "200 OK" a zoznam všetkých podporovaných zariadení.
Odosielame. Mali by sme dostať stav "200 OK" a zoznam všetkých podporovaných zariadení. pripojeného smerovača. Nájdete ich v:

Komentár: Aby ste videli posledné, v mojom prípade bolo potrebné počkať približne 10 minút po vykonaní PUT, kým sa všetky YANG schéma naexportujú do ODL. Do tejto doby pri vykonávaní tohto GET žiadosti sa zobrazí nasledujúce:

Odstránenie routera
Vytvoríme DELETE žiadosti:
- Riadok žiadosti:
DELETE http://10.132.1.202:8181/restconf/config/network-topology:network-topology/topology/topology-netconf/node/jun01 - Na záložke Authorization je potrebné nastaviť parameter
Basic AuthOdosielame. Mali by sme dostať stav "200 OK" a zoznam všetkých podporovaných zariadení.
Časť 6: Zmeníme konfiguráciu routera
Získavame konfiguráciu
Vytvoríme GET žiadosti:
- Riadok žiadosti:
GET http://10.132.1.202:8181/restconf/config/network-topology:network-topology/topology/topology-netconf/node/jun01/yang-ext:mount/ - Na záložke Authorization je potrebné nastaviť parameter
Basic AuthOdosielame. Mali by sme dostať stav "200 OK" a zoznam všetkých podporovaných zariadení.
Odosielame. Mali by sme získať stav "200 OK" a konfiguráciu routera:

Vytvárame konfiguráciu
Ako príklad vytvoríme nasledujúcu konfiguráciu a upravíme ju:
protocols {
bgp {
disable;
shutdown;
}
}Vytvoríme POST žiadosti:
- Riadok žiadosti:
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 - Telo žiadosti (záložka Body):
- Na záložke Authorization je potrebné nastaviť parameter
Basic AuthOdosielame. Mali by sme dostať stav "200 OK" a zoznam všetkých podporovaných zariadení. - Na záložke Headers je potrebné pridať dva hlavičky:
- Accept application/xml
- Content-Type application/xml
Po odoslaní by sme mali získať stav "204 No Content"
Aby sme skontrolovali, že konfigurácia sa zmenila, môžeme využiť predchádzajúcu žiadosť. Ale pre ilustráciu vytvoríme ešte jednu, ktorá nám zobrazí iba informácie o protokoloch nakonfigurovaných na routeri.
Vytvoríme GET žiadosti:
- Riadok žiadosti:
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 - Na záložke Authorization je potrebné nastaviť parameter
Basic AuthOdosielame. Mali by sme dostať stav "200 OK" a zoznam všetkých podporovaných zariadení.
Po vykonaní žiadosti uvidíme nasledujúce:

Zmeníme konfiguráciu
Zmeníme informácie o protokole BGP. Po našich úpravách bude vyzerať nasledovne:
protocols {
bgp {
disable;
}
}Vytvoríme PUT žiadosti:
- Riadok žiadosti:
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 - Telo žiadosti (záložka Body):
- Na záložke Authorization je potrebné nastaviť parameter
Basic AuthOdosielame. Mali by sme dostať stav "200 OK" a zoznam všetkých podporovaných zariadení. - Na záložke Headers je potrebné pridať dva hlavičky:
- Accept application/xml
- Content-Type application/xml
Používajúc predchádzajúcu GET žiadosť, vidíme zmeny:

Odstránenie konfigurácie
Vytvoríme DELETE žiadosti:
- Riadok žiadosti:
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 - Na záložke Authorization je potrebné nastaviť parameter
Basic AuthOdosielame. Mali by sme dostať stav "200 OK" a zoznam všetkých podporovaných zariadení.
Pri volaní GET v žiadosti s informáciami o protokoloch uvidíme nasledujúce:

Doplnenie:
Aby sme zmenili konfiguráciu, nie je nevyhnutné zasielať telo žiadosti vo formáte filestream. Môžeme to urobiť aj vo formáte JSON.
Na tento účel napríklad v žiadosti PUT o zmene konfigurácie zmeníme telo žiadosti na:
{
"junos-conf-protocols:protocols": {
"bgp": {
"description" : "Zmenené v postman"
}
}
}Nezabudnite na karte Hlavičky zmeniť hlavičky na:
- Accept application/json
- Content-Type application/json
Po odoslaní získame nasledujúci výsledok (Odpoveď sledujeme pomocou GET žiadosť):

Časť 7: pridávame Cisco xRV9000
Prečo sa všetci rozprávajú o Juniperi? Poďme sa porozprávať o Cisce!
Našiel som xRV9000 verzie 7.0.2 (monštrum, ktoré potrebuje 8Gb RAM a 4 jadrá. Nie je vo voľnom prístupe, takže sa obráťte na ) — a spustíme ho.
Spustenie kontajnera
Proces vytvárania Docker kontajnera sa zásadne nelíši od Juniperu. Rovnako ako predtým, umiestnime .qcow2 súbor s routerom do adresára, ktorý zodpovedá jeho názvu (v tomto prípade xrv9k) a vykonáme príkaz make docker-image.
O niekoľko minút vidíme, že obraz bol vytvorený:
ubuntu:~$ sudo docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
vrnetlab/vr-xrv9k 7.0.2 54debc7973fc pred 4 hodinami 1.7GB
vrnetlab/vr-vmx 20.1R1.11 b1b2369b453c pred 4 týždňami 4.43GB
debian stretch 614bb74b620e pred 7 týždňami 101MBSpúšťame kontajner:
ubuntu:~$ sudo docker run -d --privileged --name xrv01 54debc7973fcPo chvíli vidíme, že kontajner je spustený:
ubuntu:~$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
058c5ecddae3 54debc7973fc "/launch.py" pred 4 hodinami Beží 4 hodiny (zdravý) 22/tcp, 830/tcp, 5000-5003/tcp, 10000-10099/tcp, 161/udp xrv01Pripojíme sa cez ssh:
ubuntu@ubuntu:~$ ssh vrnetlab@172.17.0.2
Heslo:
RP/0/RP0/CPU0:ios#show version
Pondelok 6. júl 12:19:28.036 UTC
Cisco IOS XR Software, Version 7.0.2
Autorská práva (c) 2013-2020 spoločnosti Cisco Systems, Inc.
Informácie o zostavení:
Vytvoril : ahoang
Vytvorené : Pi 13. mar 22:27:54 PDT 2020
Hostiteľ : iox-ucs-029
Pracovný priestor : /auto/srcarchive15/prod/7.0.2/xrv9k/ws
Verzia : 7.0.2
Miesto : /opt/cisco/XR/packages/
Označenie : 7.0.2
cisco IOS-XRv 9000 () procesor
Systém má uptime 3 hodiny 22 minútPripojíme router k OpenDaylight
Pridanie prebieha veľmi podobne ako pri obraze vMX. Je potrebné len zmeniť názvy.
PUT žiadosti:

Po niekoľkých minútach spustíme GET žiadosť, aby sme overili, že všetko je pripojené:

Zmeníme konfiguráciu
Nastavíme nasledujúcu konfiguráciu:
!
router ospf LAB
mpls ldp auto-config
!Vytvoríme POST žiadosti:
- Riadok žiadosti:
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 - Telo žiadosti (záložka Body):
{ "processes": { "process": [ { "process-name": "LAB", "default-vrf": { "process-scope": { "ldp-auto-config": [ null ] } } } ] } } - Na záložke Authorization je potrebné nastaviť parameter
Basic AuthOdosielame. Mali by sme dostať stav "200 OK" a zoznam všetkých podporovaných zariadení. - Na záložke Headers je potrebné pridať dva hlavičky:
- Accept application/json
- Content-Type application/json
Po jeho vykonaní by sme mali získať stav "204 No Content".
Skontrolujeme, čo sme dosiahli.
Za týmto účelom vytvoríme GET žiadosti:
- Riadok žiadosti:
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 - Na záložke Authorization je potrebné nastaviť parameter
Basic AuthOdosielame. Mali by sme dostať stav "200 OK" a zoznam všetkých podporovaných zariadení.
Po vykonaní by sme mali vidieť nasledovné:

Na odstránenie konfigurácie používame DELETE:
- Riadok žiadosti:
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 - Na záložke Authorization je potrebné nastaviť parameter
Basic AuthOdosielame. Mali by sme dostať stav "200 OK" a zoznam všetkých podporovaných zariadení.
Záver
Celkom, ako ste si mohli všimnúť, postupy pripojenia Cisco a Juniper k OpenDaylight sa nelíšia — to otvára celkom široký priestor pre kreativitu. Od správy konfigurácií všetkých komponentov siete až po vytváranie vlastných sieťových politík.
V tomto tutoriále som uviedol najjednoduchšie príklady interakcie so sieťovým zariadením pomocou OpenDaylight. Bezpochyby môžu byť požiadavky z uvedených príkladov oveľa zložitejšie a dajú sa nakonfigurovať celé služby jedným kliknutím — všetko je obmedzené len vašou fantáziou.
Pokračování následuje…
P.S.
Ak to všetko už náhodou poznáte alebo, naopak, vás ODL zaujalo, odporúčam pozrieť sa na vývoj aplikácií na ODL kontroleri. Môžete začať. .
Úspešné experimenty!
Zoznam literatúry
- / Brian Linkletter
- OpenDaylight Cookbook / Mathieu Lemay, Alexis de Talhouet, Et al
- Programovateľnosť siete pomocou YANG / Benoît Claise, Loe Clarke, Jan Lindblad
- Učenie XML, druhé vydanie / Erik T. Ray
- Účinnejší DevOps / Jennifer Davis, Ryn Daniels
Zdroj: habr.com

