
In dit artikel vertel ik je hoe je dit moet instellen OpenDaylight voor het werken met netwerkapparatuur, en ik zal je ook laten zien hoe je het moet gebruiken Postbode en eenvoudig RESTCONF verzoeken om deze apparatuur te kunnen bedienen. We gaan niet met hardware werken, maar we gaan in plaats daarvan kleine virtuele labs implementeren met een enkele router. Vrnetlab over Ubuntu 20.04 LTS.
Ik zal eerst de gedetailleerde instellingen laten zien met een router als voorbeeld. Juniper vMX 20.1R1.11, en dan vergelijken we het met de instelling Cisco xRV9000 7.0.2.
Inhoud
- Noodzakelijke kennis
- Часть 1: kort bespreken OpenDaylight (hierna te noemen OAO), Postbode и Vrnetlab en waarom hebben we ze nodig?
- Часть 2: beschrijving van het virtuele laboratorium
- Часть 3: we zijn bezig met opzetten OpenDaylight
- Часть 4: we zijn bezig met opzetten Vrnetlab
- Часть 5: door gebruik te maken van Postbode een virtuele router aansluiten (Juniper vMX) Tot OAO
- Часть 6: de routerconfiguratie ophalen en wijzigen met behulp van Postbode и OAO
- Часть 7: Cisco xRV9000 toevoegen
- Conclusie
- PS
- Bibliografie
Noodzakelijke kennis
Om te voorkomen dat het artikel een sheet wordt, heb ik enkele technische details weggelaten (met verwijzingen naar de literatuur waar u hierover kunt lezen).
In dit verband wil ik je een aantal onderwerpen voorstellen die goed (maar bijna niet noodzakelijk) zijn om te weten voordat je gaat lezen:
- ,
- /
Deel 1: Een beetje theorie

- Een open SDN-platform voor het beheren en automatiseren van alle soorten netwerken, ondersteund door Linux Foundation
- Java binnen
- Gebaseerd op Model-Driven Service Abstraction Level (MD-SAL)
- Gebruikt YANG-modellen om automatisch RESTCONF API's te genereren voor netwerkapparaten
De hoofdmodule voor netwerkbeheer. Via internet kunnen wij communiceren met verbonden apparaten. Beheerd via een eigen API.
Lees meer over OpenDaylight .

- API-testtool
- Eenvoudige en gebruiksvriendelijke interface
In ons geval zijn we geïnteresseerd in het gebruik ervan als middel om REST-verzoeken naar de OpenDaylight API te sturen. Uiteraard kun je handmatig verzoeken versturen, maar in Postman ziet alles er overzichtelijk uit en voldoet het prima aan onze wensen.
Voor degenen die er dieper op in willen gaan: er is veel educatief materiaal over geschreven ().

- Een tool voor het implementeren van virtuele routers in Docker
- Ondersteunt: Cisco XRv, Juniper vMX, Arista vEOS, Nokia VSR en andere.
- Open-Source
Een zeer interessant, maar weinig bekend hulpmiddel. In ons geval zullen we het gebruiken om Juniper vMX en Cisco xRV9000 op een reguliere machine te draaien. Ubuntu 20.04 LTS.
U kunt er meer over lezen op .
Deel 2: Labwerk
In deze tutorial gaan we het volgende systeem opzetten:

Hoe werkt dit
- Juniper vMX stijgt in havenarbeider container (met middelen Vrnetlab) en functioneert als een normale virtuele router.
- OAO verbonden met de router en geeft u de mogelijkheid deze te bedienen.
- Postbode draait op een aparte machine en we sturen er opdrachten doorheen OAO: om de router aan te sluiten/te verwijderen, de configuratie te wijzigen, etc.
Commentaar op het systeemapparaat
Juniper vMX и OAO hebben behoorlijk wat hulpbronnen nodig om stabiel te kunnen functioneren. Slechts één vMX vereist 6 GB RAM en 4 cores. Daarom werd besloten om alle 'zwaargewichten' naar een aparte machine te verplaatsen (Heulett Packard Enterprise MicroServer ProLiant Gen8, Ubuntu 20.04 LTS). Natuurlijk is de router niet superieur, maar voor kleine experimenten zijn de prestaties voldoende.
Deel 3: OpenDaylight instellen

De huidige versie van ODL op het moment van schrijven is Magnesium SR1
1) Installeer Java OpenJDK 11 (voor meer gedetailleerde installatie )
ubuntu:~$ sudo apt install default-jdk2) Zoek en download de nieuwste build OAO
3) Pak het gedownloade archief uit
4) Ga naar de resulterende directory
5) Lanceren ./bin/karaf
Bij deze stap OAO moet starten en we komen in de console terecht (voor externe toegang wordt poort 8181 gebruikt, deze gebruiken we later).
Vervolgens installeren we ODL-functies, ontworpen om met protocollen te werken NETCONF и RESTCONF. Om dit in de console te doen OAO wij voeren uit:
opendaylight-user@root> feature:install odl-netconf-topology odl-restconf-allDit is de eenvoudigste opstelling. OAO voltooid. (Hier kunt u er meer over lezen ).
Deel 4: Vrnetlab instellen

Het systeem voorbereiden
Voor installatie Vrnetlab Het is noodzakelijk om de pakketten te installeren die vereist zijn voor de werking ervan. Zoals , , :
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 installeren
Voor installatie Vrnetlab kloon de bijbehorende repository van github:
ubuntu:~$ cd ~
ubuntu:~$ git clone https://github.com/plajjan/vrnetlab.gitGa naar de map vrnetlab:
ubuntu:~$ cd ~/vrnetlabHier ziet u alle scripts die nodig zijn om het programma uit te voeren. Houd er rekening mee dat er voor elk type router een bijbehorende directory is aangemaakt:
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 xrv9kEen routerimage maken
Elke router die ondersteund wordt Vrnetlab, heeft zijn eigen unieke installatieprocedure. In geval van Juniper vMX we hoeven alleen maar een .tgz-archief te uploaden met de router (je kunt het downloaden van ) naar de vmx-map en voer de opdracht uit make:
ubuntu:~$ cd ~/vrnetlab/vmx
ubuntu:~$ # Копируем в эту директорию .tgz архив с роутером
ubuntu:~$ sudo makeEen imago opbouwen vMX duurt ongeveer 10-20 minuten. Het is tijd om koffie te zetten!
Waarom zo lang, vraagt u zich af?
Vertaling het antwoord van de auteur op deze vraag:
Dit komt doordat VCP (Control Plane) de eerste keer dat het wordt uitgevoerd, een configuratiebestand leest dat bepaalt of het als een VRR-VCP in vMX wordt uitgevoerd. Voorheen werd dit uitgevoerd tijdens het opstarten van Docker, maar dit betekende dat VCP altijd één keer opnieuw werd opgestart voordat de virtuele router beschikbaar was, wat leidde tot lange opstarttijden (ongeveer 5 minuten). Nu wordt VCP voor het eerst uitgevoerd tijdens de build van de Docker-image. Omdat Docker-builds niet kunnen worden uitgevoerd met de optie --privileged, betekent dit dat qemu draait zonder KVM-hardwareversnelling, waardoor de build erg lang duurt. Er is veel log-output tijdens dit proces, dus je kunt in ieder geval zien wat er gebeurt. Ik denk dat de lange build niet zo erg is, omdat we de image één keer bouwen en deze vervolgens meerdere keren uitvoeren.
Hierna kunt u het beeld van onze router zien in havenarbeider:
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 101MBDe vr-vmx-container starten
Voer het commando uit:
ubuntu:~$ sudo docker run -d --privileged --name jun01 b1b2369b453cVervolgens kunnen we kijken naar informatie over actieve containers:
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 jun01Verbinding maken met de router
Het IP-adres van de netwerkinterface van de router kan worden verkregen met behulp van de volgende opdracht:
ubuntu:~$ sudo docker inspect --format '{{.NetworkSettings.IPAddress}}' jun01
172.17.0.2Standaard, Vrnetlab maakt een gebruiker aan op de router vrnetlab/VR-netlab9.
Verbinding maken met behulp van 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.11Hiermee is de routerinstallatie voltooid.
Installatie-aanbevelingen voor routers van verschillende leveranciers vindt u op in de juiste mappen.
Deel 5: Postbode - de router aansluiten op OpenDaylight
Postman installeren
Om te installeren, downloadt u eenvoudig de applicatie .
Een router verbinden met ODL
Laten we creëren PUT verzoek:

- Zoekreeks:
PUT http://10.132.1.202:8181/restconf/config/network-topology:network-topology/topology/topology-netconf/node/jun01 - Aanvraagbody (tabblad Body):
<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> - Op het tabblad Autorisatie moet u de parameter instellen
Basic Authen login/wachtwoord: admin/admin. Dit is vereist om toegang te krijgen tot ODL:

- Op het tabblad Kopteksten moet u twee kopteksten toevoegen:
- Accepteer applicatie/xml
- Inhoudstype applicatie/xml
Ons verzoek is gegenereerd. Wij versturen. Als alles correct is ingesteld, zouden we de status "201 Created" moeten terugkrijgen:
![]()
Wat doet deze query?
We creëren een knooppunt binnen OAO met de parameters van de echte router waartoe we toegang willen.
xmlns="urn:TBD:params:xml:ns:yang:network-topology"
xmlns="urn:opendaylight:netconf-node-topology"Dit zijn interne naamruimten. XML (XML-naamruimte) voor OAO op basis waarvan het een knooppunt creëert.
Verder is de naam van de router dienovereenkomstig knooppunt-id, routeradres — gastheer en zo verder.
De interessantste regel is de laatste. Schema-cache-directory creëert een directory waar alle bestanden worden gedownload YANG-schema aangesloten router. Je kunt ze vinden in $ODL_ROOT/cache/jun01_cache.
De routerverbinding controleren
Laten we creëren Begin verzoek:
- Zoekreeks:
GET http://10.132.1.202:8181/restconf/operational/network-topology:network-topology/topology/topology-netconf/ - Op het tabblad Autorisatie moet u de parameter instellen
Basic Authen login/wachtwoord: admin/admin.
Wij versturen. Moet de status "200 OK" krijgen en een lijst met alle ondersteunde apparaten YANG-schema:

Commentaar:Om dit laatste te zien, moest ik in mijn geval ongeveer 10 minuten wachten na de uitvoering PUTDag iedereen YANG-schema zal worden gelost op OAO. Tot nu toe, bij het uitvoeren van deze Begin De query zal het volgende opleveren:

De router verwijderen
Laten we creëren VERWIJDEREN verzoek:
- Zoekreeks:
DELETE http://10.132.1.202:8181/restconf/config/network-topology:network-topology/topology/topology-netconf/node/jun01 - Op het tabblad Autorisatie moet u de parameter instellen
Basic Authen login/wachtwoord: admin/admin.
Deel 6: De routerconfiguratie wijzigen
De configuratie ophalen
Laten we creëren Begin verzoek:
- Zoekreeks:
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 u de parameter instellen
Basic Authen login/wachtwoord: admin/admin.
Wij versturen. U zou de status "200 OK" en de routerconfiguratie moeten ontvangen:

Een configuratie maken
Laten we als voorbeeld de volgende configuratie maken en wijzigen:
protocols {
bgp {
disable;
shutdown;
}
}Laten we creëren POST verzoek:
- Zoekreeks:
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 - Aanvraagbody (tabblad Body):
<bgp xmlns="http://yang.juniper.net/junos/conf/protocols"> <disable/> <shutdown> </shutdown> </bgp> - Op het tabblad Autorisatie moet u de parameter instellen
Basic Authen login/wachtwoord: admin/admin. - Op het tabblad Kopteksten moet u twee kopteksten toevoegen:
- Accepteer applicatie/xml
- Inhoudstype applicatie/xml
Na het verzenden zou u de status "204 Geen inhoud" moeten ontvangen
Om te controleren of de configuratie is gewijzigd, kunt u de vorige query gebruiken. Maar om een voorbeeld te geven, maken we er nog een die alleen informatie weergeeft over de protocollen die op de router zijn geconfigureerd.
Laten we creëren Begin verzoek:
- Zoekreeks:
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 u de parameter instellen
Basic Authen login/wachtwoord: admin/admin.
Nadat u de query hebt uitgevoerd, ziet u het volgende:

De configuratie wijzigen
Laten we de informatie over het BGP-protocol wijzigen. Na onze acties ziet het er als volgt uit:
protocols {
bgp {
disable;
}
}Laten we creëren PUT verzoek:
- Zoekreeks:
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 - Aanvraagbody (tabblad Body):
<protocols xmlns="http://yang.juniper.net/junos/conf/protocols"> <bgp> <disable/> </bgp> </protocols> - Op het tabblad Autorisatie moet u de parameter instellen
Basic Authen login/wachtwoord: admin/admin. - Op het tabblad Kopteksten moet u twee kopteksten toevoegen:
- Accepteer applicatie/xml
- Inhoudstype applicatie/xml
Met behulp van de vorige Begin verzoek, zien we de veranderingen:

Verwijder de configuratie
Laten we creëren VERWIJDEREN verzoek:
- Zoekreeks:
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 u de parameter instellen
Basic Authen login/wachtwoord: admin/admin.
Wanneer gebeld Begin verzoek met informatie over protocollen zullen we het volgende zien:

aan te vullen:
Om de configuratie te wijzigen is het niet nodig om de aanvraagtekst in het formaat te versturen XML. Dit kan ook in het formaat JSON.
Hiervoor wordt bijvoorbeeld in het verzoek PUT Om de configuratie te wijzigen, vervangen we de aanvraagtekst met:
{
"junos-conf-protocols:protocols": {
"bgp": {
"description" : "Changed in postman"
}
}
}Vergeet niet de kopteksten op het tabblad Kopteksten te wijzigen in:
- Accepteer applicatie/json
- Content-Type toepassing/json
Na het verzenden ontvangen wij het volgende resultaat (Wij bekijken het antwoord met behulp van Begin verzoek):

Deel 7: Cisco xRV9000 toevoegen
Waarom hebben we het allemaal over Juniper, Juniper? Laten we het over Cisco hebben!
Ik vond xRV9000 versie 7.0.2 (een beest dat 8 GB RAM en 4 cores nodig heeft. Het is niet gratis verkrijgbaar, dus neem contact op ) - we lanceren het.
Een container laten draaien
Het proces voor het maken van een Docker-container verschilt nauwelijks van dat van Juniper. Op dezelfde manier gooien we het .qcow2-bestand met de router in de directory die overeenkomt met de naam ervan (in dit geval xrv9k) en voeren we de opdracht uit make docker-image.
Na een paar minuten zien we dat de afbeelding is gemaakt:
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 101MBWe lanceren de container:
ubuntu:~$ sudo docker run -d --privileged --name xrv01 54debc7973fcNa enige tijd zien we dat de container gestart is:
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 xrv01Verbinding maken via 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 minutesDe router verbinden met OpenDaylight
Het toevoegen gebeurt op een vergelijkbare manier als vMX. Je hoeft alleen de namen te veranderen.
PUT verzoek:

Na een tijdje bellen we Begin query om te controleren of alles is aangesloten:

De configuratie wijzigen
Laten we de volgende configuratie instellen:
!
router ospf LAB
mpls ldp auto-config
!Laten we creëren POST verzoek:
- Zoekreeks:
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 - Aanvraagbody (tabblad Body):
{ "processes": { "process": [ { "process-name": "LAB", "default-vrf": { "process-scope": { "ldp-auto-config": [ null ] } } } ] } } - Op het tabblad Autorisatie moet u de parameter instellen
Basic Authen login/wachtwoord: admin/admin. - Op het tabblad Kopteksten moet u twee kopteksten toevoegen:
- Accepteer applicatie/json
- Content-Type toepassing/json
Na de uitvoering ontvangt u de status "204 Geen inhoud".
Laten we eens kijken wat we hebben.
Om dit te doen, zullen we: Begin verzoek:
- Zoekreeks:
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 u de parameter instellen
Basic Authen login/wachtwoord: admin/admin.
Na de uitvoering zou u het volgende moeten zien:

Om de configuratie te verwijderen, gebruikt u VERWIJDEREN:
- Zoekreeks:
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 - Op het tabblad Autorisatie moet u de parameter instellen
Basic Authen login/wachtwoord: admin/admin.
Conclusie
Zoals u wellicht hebt opgemerkt, zijn de procedures voor het verbinden van Cisco en Juniper met OpenDaylight niet anders. Dit biedt behoorlijk wat ruimte voor creativiteit. Van het beheren van de configuratie van alle netwerkcomponenten tot het maken van uw eigen netwerkbeleid.
In deze tutorial heb ik eenvoudige voorbeelden gegeven van hoe u met behulp van OpenDaylight met netwerkapparatuur kunt communiceren. Natuurlijk kunnen de query's uit de gegeven voorbeelden veel complexer worden gemaakt en kunnen complete services met één muisklik worden geconfigureerd - alles wordt alleen beperkt door uw verbeelding*
Wordt vervolgd ...
PS
Als je al deze kennis al hebt of als je er al doorheen bent gegaan en ODL je hart heeft veroverd, dan raad ik je aan om eens te kijken naar het ontwikkelen van applicaties op de ODL-controller. We kunnen beginnen .
Veel succes met de experimenten!
Referenties
- / Brian Linkletter
- OpenDaylight Kookboek / Mathieu Lemay, Alexis de Talhouet, Et al
- Netwerkprogrammeerbaarheid met YANG / Benoît Claise, Loe Clarke, Jan Lindblad
- XML leren, tweede editie / Erik T. Ray
- Effectieve DevOps / Jennifer Davis, Ryn Daniels
Bron: www.habr.com

