
In dit artikel leg ik uit hoe je OpenDaylight werken met netwerkapparatuur kunt instellen, en ik laat zien hoe je met behulp van Postman en eenvoudige RESTCONF verzoeken met deze apparatuur kunt beheersen. We gaan niet met hardware werken, maar we gaan in plaats daarvan kleine virtuele laboratoria opzetten met slechts ƩƩn router met behulp van Vrnetlab boven Ubuntu 20.04 LTS.
Ik zal de gedetailleerde configuratie eerst tonen aan de hand van de router Juniper vMX 20.1R1.11, en vervolgens vergelijken we dit met de configuratie van Cisco xRV9000 7.0.2.
Inhoud
- Vereiste kennis
- Deel 1: kort bespreken we OpenDaylight (hierna ODL), Postman en Vrnetlab en waarom we deze nodig zullen hebben
- Deel 2: beschrijving van het virtuele laboratorium
- Deel 3: configureren we OpenDaylight
- Deel 4: configureren we Vrnetlab
- Deel 5: met behulp van Postman verbinden we de virtuele router (Juniper vMX) met ODL
- Deel 6: we verkrijgen en wijzigen de configuratie van de router met behulp van Postman en ODL
- Deel 7: we voegen Cisco xRV9000 toe
- Conclusie
- P.S.
- Literatuurlijst
Vereiste kennis
Om te voorkomen dat het artikel in een lange tekst verandert, heb ik enkele technische details weggelaten (met verwijzingen naar de literatuur waar je hierover kunt lezen).
Daarom stel ik je de onderwerpen voor die het goed zouden zijn (maar niet noodzakelijk) om te weten voordat je verder leest:
- ,
- /
Deel 1: een beetje theorie

- Open SDN platform voor het beheer en automatisering van verschillende netwerken, ondersteund door Linux Foundation
- Java inside
- Gebaseerd op Model-Driven Service Abstraction Level (MD-SAL)
- Maakt gebruik van YANG-modellen voor het automatisch genereren van RESTCONF API voor netwerkapparaten
De belangrijkste module voor netwerkbeheer. Juist via deze module zullen we communiceren met de aangesloten apparaten. Beheerd via zijn eigen API.
Je kunt meer over OpenDaylight lezen .

- Tool voor het testen van API's
- Eenvoudig en gebruiksvriendelijke interface
In ons geval is het interessant als middel om REST verzoeken naar de OpenDaylight API te verzenden. Natuurlijk kun je ook handmatig verzoeken sturen, maar in Postman ziet alles er heel overzichtelijk uit en het is perfect voor onze doeleinden.
Voor degenen die willen onderzoeken: er zijn veel leermaterialen over geschreven ().

- Tool voor het implementeren van virtuele routers in Docker
- Ondersteunt: Cisco XRv, Juniper vMX, Arista vEOS, Nokia VSR en anderen.
- Open Source
Een zeer interessante, maar weinig bekende tool. In ons geval zullen we Juniper vMX en Cisco xRV9000 op gewone Ubuntu 20.04 LTS draaien.
Je kunt er meer over lezen op .
Deel 2: praktische oefening
In dit tutorial gaan we de volgende systeem instellen:

Hoe het werkt
- Juniper vMX wordt opgestart in Docker container (middelen Vrnetlab) en functioneert als een gewone virtuele router.
- ODL verbonden met de router en maakt het mogelijk deze te beheren.
- Postman gedraaid op een aparte machine en via deze sturen we commando's ODL: voor het verbinden/verwijderen van de router, het wijzigen van configuratie, enz.
Opmerking bij het systeemapparaat
Juniper vMX en ODL vereisen een behoorlijk aantal middelen voor een stabiele werking. Alleen al vMX vereist 6 Gb RAM en 4 cores. Daarom is besloten alle "zware" taken naar een aparte machine te verplaatsen (Hewlett Packard Enterprise MicroServer ProLiant Gen8, Ubuntu 20.04 LTS). De router, natuurlijk, draait er niet op "vlot", maar voor kleine experimenten is de prestatie voldoende.
Deel 3: configuring OpenDaylight

De huidige versie van ODL op het moment van schrijven is - Magnesium SR1
1) Installeer Java OpenJDK 11 (voor een uitgebreidere installatie )
ubuntu:~$ sudo apt install default-jdk2) Zoek en download de nieuwste build ODL
3) Pak het gedownloade archief uit
4) Ga naar de verkregen directory
5) Start ./bin/karaf
Op deze stap ODL zou het moeten opstarten en we bevinden ons in de console (extern toegang wordt gebruikt via poort 8181, wat we later zullen gebruiken).
Vervolgens installeren we ODL Features, bedoeld voor het werken met protocollen NETCONF en RESTCONF. Hiervoor voeren we in de console uit: ODL opendaylight-user@root> feature:install odl-netconf-topology odl-restconf-all
Op dit moment is de eenvoudigste configuratievoltooid. (Meer details zijn te lezen ODL Deel 4: configureren van Vrnetlab ).
Voor de installatie

Systeem Voorbereiden
moeten we de noodzakelijke pakketten voor de werking installeren. Zoals Vrnetlab sshpass , , :
Installatie van VrnetlabVoor de installatie
klonen we de overeenkomstige repository van GitHub: Vrnetlab ubuntu:~$ cd ~ ubuntu:~$ git clone https://github.com/plajjan/vrnetlab.git
vrnetlabGa naar de map ubuntu:~$ cd ~/vrnetlab:
Hier kunnen we alle scripts zien die nodig zijn om te draaien. Let op dat voor elk type router een overeenkomstige directory is gemaakt:Hier kunt u alle scripts zien die nodig zijn om op te starten. Houd er rekening mee dat voor elk type router een overeenkomende directory is gemaakt:
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 xrv9kWe creƫren het router-image
Elke ondersteunde router Vrnetlab, heeft zijn eigen unieke configuratieprocedure. In het geval van Juniper vMX is het voldoende om het .tgz-archief met de router (dat kan worden gedownload vanaf ) in de directory vmx te plaatsen en de opdracht uit te voeren make:
ubuntu:~$ cd ~/vrnetlab/vmx
ubuntu:~$ # Kopieer het .tgz-archief van de router naar deze directory
ubuntu:~$ sudo makeBouwen van de afbeelding vMX duurt ongeveer 10-20 minuten. Dit is een goed moment om koffie te zetten!
Waarom duurt het zo lang, vraagt u zich af?
Vertaling van de auteur op deze vraag:
"Dit komt doordat bij de eerste start VCP (Control Plane) het configuratiebestand leest dat bepaalt of het als VRR VCP in vMX zal werken. Eerder werd deze opstartprocedure uitgevoerd tijdens het starten van Docker, maar dat betekende dat VCP altijd ƩƩn keer opnieuw werd opgestart voordat de virtuele router beschikbaar werd, wat leidde tot een lange opstarttijd (ongeveer 5 minuten). Nu vindt de eerste opstart van VCP plaats tijdens het bouwen van het Docker-image, en omdat de Docker-bouw niet kan worden uitgevoerd met de parameter āprivileged, betekent dit dat qemu zonder hardwareversnelling van KVM draait en daardoor de bouw veel tijd kost. Tijdens dit proces worden er veel logs weergegeven, zodat u in ieder geval kunt zien wat er gebeurt. Ik denk dat de lange bouw niet zo erg is, omdat we het image maar ƩƩn keer maken en het vele malen opstarten."
Daarna kunnen we het image van onze router zien in Docker:
ubuntu:~$ sudo docker image list
REPOSITORY TAG IMAGE ID CREATED SIZE
vrnetlab/vr-vmx 20.1R1.11 b1b2369b453c 3 weken geleden 4.43GB
debian stretch 614bb74b620e 7 weken geleden 101MBWe starten de container vr-vmx
Start met de opdracht:
ubuntu:~$ sudo docker run -d --privileged --name jun01 b1b2369b453cVervolgens kunnen we de informatie over actieve containers bekijken:
ubuntu:~$ sudo docker container list
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
120f882c8712 b1b2369b453c "/launch.py" 2 minuten geleden Actief 2 minuten (ongezond) 22/tcp, 830/tcp, 5000/tcp, 10000-10099/tcp, 161/udp jun01We verbinden met de router
Het IP-adres van de netwerkinterface van de router kan worden verkregen met de volgende opdracht:
ubuntu:~$ sudo docker inspect --format '{{.NetworkSettings.IPAddress}}' jun01
172.17.0.2Standaard, Vrnetlab maakt een gebruiker router aan vrnetlab/VR-netlab9.
We verbinden met behulp van ssh:
ubuntu:~$ ssh vrnetlab@172.17.0.2
De authenticiteit van host '172.17.0.2 (172.17.0.2)' kan niet worden vastgesteld.
ECDSA sleutelvingerafdruk is SHA256:g9Sfg/k5qGBTOX96WiCWyoJJO9FxjzXYspRoDPv+C0Y.
Weet u zeker dat u wilt doorgaan met verbinden (ja/nee/[vingerafdruk])? ja
Waarschuwing: '172.17.0.2' (ECDSA) definitief toegevoegd aan de lijst van bekende hosts.
Wachtwoord:
--- JUNOS 20.1R1.11 Kernel 64-bit JNPR-11.0-20200219.fb120e7_buil
vrnetlab> show version
Model: vmx
Junos: 20.1R1.11De configuratie van de router is voltooid.
Installatie-aanbevelingen voor routers van verschillende leveranciers zijn te vinden op in de bijbehorende directories.
Deel 5: Postman ā verbind de router met OpenDaylight
Postman installeren
Voor de installatie hoeft u alleen maar de applicatie te downloaden. .
De router verbinden met ODL
unit TRACE verzoek:

- Verzoekregel:
PUT http://10.132.1.202:8181/restconf/config/network-topology:network-topology/topology/topology-netconf/node/jun01 - Inhoud van het verzoek (tabblad Body):
jun01 172.17.0.2 22 vrnetlab VR-netlab9 false jun01_cache - Op het tabblad Autorisatie moet de parameter worden ingesteld op
Basisverificatieen gebruikersnaam/wachtwoord: admin/admin. Dit is nodig voor toegang tot ODL:

- Op het tabblad Headers moeten we twee headers toevoegen:
- Accept application/xml
- Content-Type application/xml
Onze aanvraag is opgesteld. We sturen het. Als alles correct is ingesteld, zouden we de status "201 Created" moeten ontvangen:
![]()
Wat doet deze aanvraag?
We creƫren een node binnen ODL met de parameters van de echte router waarmee we toegang willen krijgen.
xmlns="urn:TBD:params:xml:ns:yang:network-topology"
xmlns="urn:opendaylight:netconf-node-topology"Dit zijn interne namespaces XML (XML namespace) waarvoor ODL deze node wordt aangemaakt.
Daarna is de naam van de router node-id, het adres van de router is host enz.
De meest interessante regel is de laatste. Schema-cache-directory creƫert een directory waarin alle bestanden worden gedownload YANG Schema van de aangesloten router. Je kunt ze vinden in $ODL_ROOT/cache/jun01_cache.
Controleren van de verbinding van de router
unit GET verzoek:
- Verzoekregel:
GET http://10.132.1.202:8181/restconf/operational/network-topology:network-topology/topology/topology-netconf/ - Op het tabblad Autorisatie moet de parameter worden ingesteld op
Basisverificatieen gebruikersnaam/wachtwoord: admin/admin.
We sturen het. We moeten de status "200 OK" en een lijst van alle door het apparaat ondersteunde apparaten ontvangen. YANG Schema:

Opmerking: Om het laatste te zien, moest ik in mijn geval ongeveer 10 minuten wachten na de uitvoering. TRACE, totdat alles YANG-schema wordt geƫxporteerd naar ODL. Tot dat moment zal het volgende worden weergegeven bij het uitvoeren van deze GET aanroep:

Router verwijderen
unit HEAD verzoek:
- Verzoekregel:
DELETE http://10.132.1.202:8181/restconf/config/network-topology:network-topology/topology/topology-netconf/node/jun01 - Op het tabblad Autorisatie moet de parameter worden ingesteld op
Basisverificatieen gebruikersnaam/wachtwoord: admin/admin.
Deel 6: Routerconfiguratie wijzigen
Configuratie ophalen
unit GET verzoek:
- Verzoekregel:
GET http://10.132.1.202:8181/restconf/config/network-topology:network-topology/topology/topology-netconf/node/jun01/yang-ext:mount/ - Op het tabblad Autorisatie moet de parameter worden ingesteld op
Basisverificatieen gebruikersnaam/wachtwoord: admin/admin.
Versturen. We zouden een status "200 OK" en de routerconfiguratie moeten ontvangen:

Configuratie aanmaken
Als voorbeeld creƫren we de volgende configuratie en passen we deze aan:
protocols {
bgp {
disable;
shutdown;
}
}unit PUT verzoek:
- Verzoekregel:
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 - Inhoud van het verzoek (tabblad Body):
- Op het tabblad Autorisatie moet de parameter worden ingesteld op
Basisverificatieen gebruikersnaam/wachtwoord: admin/admin. - Op het tabblad Headers moeten we twee headers toevoegen:
- Accept application/xml
- Content-Type application/xml
Na het verzenden zouden we een status "204 No Content" moeten ontvangen.
Om te controleren of de configuratie is gewijzigd, kan gebruik worden gemaakt van de eerdere aanroep. Maar als voorbeeld maken we een andere aanroep aan die alleen informatie weergeeft over de op de router geconfigureerde protocollen.
unit GET verzoek:
- Verzoekregel:
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 - Op het tabblad Autorisatie moet de parameter worden ingesteld op
Basisverificatieen gebruikersnaam/wachtwoord: admin/admin.
Na het uitvoeren van de aanroep zien we het volgende:

Configuratie wijzigen
We zullen de informatie over het BGP-protocol wijzigen. Na onze acties zal het er als volgt uitzien:
protocols {
bgp {
disable;
}
}unit TRACE verzoek:
- Verzoekregel:
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 - Inhoud van het verzoek (tabblad Body):
- Op het tabblad Autorisatie moet de parameter worden ingesteld op
Basisverificatieen gebruikersnaam/wachtwoord: admin/admin. - Op het tabblad Headers moeten we twee headers toevoegen:
- Accept application/xml
- Content-Type application/xml
Gebruikmakend van de eerdere GET aanroep, zien we de wijzigingen:

Configuratie verwijderen
unit HEAD verzoek:
- Verzoekregel:
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 - Op het tabblad Autorisatie moet de parameter worden ingesteld op
Basisverificatieen gebruikersnaam/wachtwoord: admin/admin.
When calling GET Bij de aanroep met informatie over de protocollen zien we het volgende:

Addition:
Om de configuratie te wijzigen, is het niet noodzakelijk om de body van de aanroep in formaat XML. Dit kan ook in formaat of een ander formaat..
Bijvoorbeeld, in de aanroep TRACE voor het wijzigen van de configuratie vervangen we de body van de aanroep door:
{
"junos-conf-protocols:protocols": {
"bgp": {
"description" : "Gewijzigd in postman"
}
}
}Vergeet niet om op het tabblad Headers de headers als volgt in te stellen:
- Accept application/json
- Content-Type application/json
Na verzending ontvangen we het volgende resultaat (Antwoord bekijken met behulp van GET Verzoek):

Deel 7: Cisco xRV9000 toevoegen
Wat weten we allemaal over Juniper? Laten we het eens over Cisco hebben!
Ik heb een xRV9000 version 7.0.2 gevonden (een beest dat 8Gb RAM en 4 cores nodig heeft. Het is niet vrij beschikbaar, dus neem contact op met ) ā en dat gaan we draaien.
Container starten
Het proces van het maken van een Docker-container verschilt praktisch niet van Juniper. Net als voorheen plaatsen we het .qcow2-bestand met de router in de directory die overeenkomt met zijn naam (in dit geval xrv9k) en voeren we het commando uit make docker-image.
Na een paar minuten zien we dat de afbeelding is aangemaakt:
ubuntu:~$ sudo docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
vrnetlab/vr-xrv9k 7.0.2 54debc7973fc 4 uur geleden 1.7GB
vrnetlab/vr-vmx 20.1R1.11 b1b2369b453c 4 weken geleden 4.43GB
debian stretch 614bb74b620e 7 weken geleden 101MBWe starten de container:
ubuntu:~$ sudo docker run -d --privileged --name xrv01 54debc7973fcNa een poosje zien we dat de container is gestart:
ubuntu:~$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
058c5ecddae3 54debc7973fc "/launch.py" 4 uur geleden Up 4 uur (gezond) 22/tcp, 830/tcp, 5000-5003/tcp, 10000-10099/tcp, 161/udp xrv01We verbinden via SSH:
ubuntu@ubuntu:~$ ssh vrnetlab@172.17.0.2
Wachtwoord:
RP/0/RP0/CPU0:ios#show version
Maandag 6 juli 12:19:28.036 UTC
Cisco IOS XR Software, Version 7.0.2
Copyright (c) 2013-2020 door Cisco Systems, Inc.
Buildinformatie:
Gebouwd door : ahoang
Gebouwd op : Vrijdag 13 maart 22:27:54 PDT 2020
Gebouwd Host : iox-ucs-029
Werkplek : /auto/srcarchive15/prod/7.0.2/xrv9k/ws
Versie : 7.0.2
Locatie : /opt/cisco/XR/packages/
Label : 7.0.2
cisco IOS-XRv 9000 () processor
Systeem uptime is 3 uur 22 minutenWe verbinden de router met OpenDaylight
De toevoeging gebeurt op exact dezelfde manier als met de vMX-afbeelding. We hoeven alleen de namen te veranderen.
TRACE verzoek:

Na een tijdje roepen we GET de aanvraag op om te controleren of alles is verbonden:

Configuratie wijzigen
We stellen de volgende configuratie in:
!
router ospf LAB
mpls ldp auto-config
!unit PUT verzoek:
- Verzoekregel:
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 - Inhoud van het verzoek (tabblad Body):
{ "processes": { "process": [ { "process-name": "LAB", "default-vrf": { "process-scope": { "ldp-auto-config": [ null ] } } } ] } } - Op het tabblad Autorisatie moet de parameter worden ingesteld op
Basisverificatieen gebruikersnaam/wachtwoord: admin/admin. - Op het tabblad Headers moeten we twee headers toevoegen:
- Accept application/json
- Content-Type application/json
Na het uitvoeren zouden we de status "204 No Content" moeten ontvangen.
Laten we controleren wat we hebben bereikt.
Om dit te doen, maken we GET verzoek:
- Verzoekregel:
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 - Op het tabblad Autorisatie moet de parameter worden ingesteld op
Basisverificatieen gebruikersnaam/wachtwoord: admin/admin.
Na uitvoering zouden we het volgende moeten zien:

Om de configuratie te verwijderen gebruiken we HEAD:
- Verzoekregel:
VERWIJDER 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 - Op het tabblad Autorisatie moet de parameter worden ingesteld op
Basisverificatieen gebruikersnaam/wachtwoord: admin/admin.
Conclusie
Zoals u wellicht hebt gemerkt, verschillen de aansluitprocedures voor Cisco en Juniper met OpenDaylight niet ā dit biedt een ruime vrijheid voor creatieve oplossingen. Van het beheren van configuraties van alle netwerkcomponenten tot het creĆ«ren van unieke netwerkwijzen.
In deze tutorial heb ik de eenvoudigste voorbeelden gegeven van hoe u kunt communiceren met netwerkapparatuur via OpenDaylight. Ongetwijfeld kunnen de verzoeken in de gegeven voorbeelden veel complexer worden gemaakt en kunnen hele diensten met een muisklik worden ingesteld ā de enige beperking is uw verbeeldingskracht*
Wordt vervolgdā¦
P.S.
Als u dit alles al weet of als u helemaal verliefd bent geworden op ODL, raad ik aan om eens te kijken naar de ontwikkeling van toepassingen op de ODL-controller. U kunt beginnen .
Succesvolle experimenten!
Literatuurlijst
- / Brian Linkletter
- OpenDaylight Cookbook / Mathieu Lemay, Alexis de Talhouet, Et al
- Netwerkprogrammeertaal met YANG / BenoƮt Claise, Loe Clarke, Jan Lindblad
- Learning XML, Tweede Editie / Erik T. Ray
- Effectieve DevOps / Jennifer Davis, Ryn Daniels
Bron: habr.com

