
I denne artikel vil jeg forklare, hvordan man konfigurerer OpenDaylight til arbejde med netværksudstyr, samt vise, hvordan man kan styre dette udstyr ved hjælp af Postman og enkle RESTCONF anmodninger. Vi vil ikke arbejde med hardware, men i stedet opsætte små virtuelle laboratorier med en enkelt router ved hjælp af Vrnetlab ovenpå Ubuntu 20.04 LTS.
Jeg vil først vise den detaljerede opsætning med eksemplet på routeren Juniper vMX 20.1R1.11, og derefter sammenligne den med opsætningen af Cisco xRV9000 7.0.2.
Indhold
- Nødvendige færdigheder
- Del 1: kort diskussion om OpenDaylight (herefter ODL), Postman og Vrnetlab og hvorfor vi får brug for dem
- Del 2: beskrivelse af det virtuelle laboratorium
- Del 3: konfigurerer OpenDaylight
- Del 4: konfigurerer Vrnetlab
- Del 5: ved hjælp af Postman tilslutter den virtuelle router (Juniper vMX) til ODL
- Del 6: modtager og ændrer routerens konfiguration ved hjælp af Postman og ODL
- Del 7: tilføjer Cisco xRV9000
- Konklusion
- P.S.
- Litteraturliste
Nødvendige færdigheder
For at artiklen ikke skal blive en lang tekst, har jeg udeladt nogle tekniske detaljer (med links til litteratur, hvor man kan læse om dem).
Derfor foreslår jeg emner, som det ville være godt at (men ikke strengt nødvendigt) kende til, inden man læser:
- ,
- /
Del 1: lidt teori

- En åben SDN-platform til styring og automatisering af forskellige netværk, støttet af Linux Foundation
- Java indeni
- Basert på Model-Driven Service Abstraction Level (MD-SAL)
- Bruger YANG-modeller til automatisk at oprette RESTCONF API for netværksenheder
Hovedmodulet til netværksstyring. Det er gennem denne, vi vil kommunikere med de tilsluttede enheder. Styres gennem sin egen API.
Man kan læse mere om OpenDaylight .

- Værktøj til API-testning
- En enkel og brugervenlig grænseflade
I vores tilfælde er det interessant som middel til at sende REST-anmodninger til OpenDaylight API'et. Man kan selvfølgelig også sende anmodninger manuelt, men i Postman ser alt meget mere overskueligt ud og passer perfekt til vores formål.
For dem der ønsker at grave dybere: der er skrevet mange vejledningsmaterialer om det ().

- Værktøj til opsætning af virtuelle routere i Docker
- Understøtter: Cisco XRv, Juniper vMX, Arista vEOS, Nokia VSR m.fl.
- Open Source
Meget interessant, men lidt kendt værktøj. I vores tilfælde vil vi med hjælp fra det starte Juniper vMX og Cisco xRV9000 på almindelig Ubuntu 20.04 LTS.
Man kan læse mere om det på .
Del 2: laboratoriearbejde
I denne tutorial vil vi konfigurere følgende system:

Hvordan fungerer det
- Juniper vMX stiger i Docker beholderen (med hjælp af Vrnetlab) og fungerer som en helt almindelig virtuel router.
- ODL tilsluttet routeren og giver mulighed for at styre den.
- Postman starter på en separat maskine, og gennem den sender vi kommandoer ODL: til at tilslutte/fjerne routeren, ændre konfigurationen osv.
Kommentar til systemets enhed
Juniper vMX og ODL kræver en del ressourcer for at fungere stabilt. Bare vMX beder om 6 Gb RAM og 4 kerner. Derfor blev det besluttet at flytte alle "tunge" enheder til en separat maskine (Heulett Packard Enterprise MicroServer ProLiant Gen8, Ubuntu 20.04 LTS). Routeren kører selvfølgelig ikke "hurtigt", men til små eksperimenter er ydeevnen tilstrækkelig.
Del 3: konfigurerer OpenDaylight

Den aktuelle version af ODL på tidspunktet for skrivningen er - Magnesium SR1
1) Installerer Java OpenJDK 11 (for mere detaljeret installation )
ubuntu:~$ sudo apt install default-jdk2) Finder og downloader den nyeste opbygning ODL
3) Udpakker den downloadede arkiv
4) Går ind i den fåede mappe
5) Starter ./bin/karaf
På dette trin ODL skal starte, og vi vil befinde os i konsollen (Til ekstern adgang bruges port 8181, hvilket vi vil udnytte senere).
Derefter installerer vi ODL-funktioner, designet til at arbejde med protokoller. NETCONF og RESTCONFFor dette i konsollen ODL kører vi:
opendaylight-user@root> feature:install odl-netconf-topology odl-restconf-allPå dette er den enkleste opsætning ODL afsluttet. (Mere detaljeret kan det læses ).
Del 4: konfigurerer Vrnetlab

Systemforberedelse
Før installationen Vrnetlab skal de nødvendige pakker til arbejdet installeres. Sådanne som , , :
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.ioInstallation af Vrnetlab
For installation Vrnetlab kloner vi det relevante repository fra github:
ubuntu:~$ cd ~
ubunt~$ git clone https://github.com/plajjan/vrnetlab.gitGår ind i mappen vrnetlab:
ubuntu:~$ cd ~/vrnetlabHer kan du se alle scripts, der er nødvendige for at køre. Bemærk, at der er lavet en passende mappe for hver type router:
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 xrv9kOpretter router image
Hver router, der understøttes Vrnetlab, har sin unikke opsætningsprocedure. I tilfælde af Juniper vMX er det tilstrækkeligt at placere .tgz arkivet med routeren (det kan downloades fra ) i vmx-mappen og udføre kommandoen make:
ubuntu:~$ cd ~/vrnetlab/vmx
ubuntu:~$ # Kopier .tgz arkivet med routeren til denne mappe
ubuntu:~$ sudo makeBygning af billedet vMX vil tage omkring 10-20 minutter. Det er et godt tidspunkt at lave en kop kaffe!
Hvorfor tager det så lang tid, spørger du?
Oversættelse forfatteren til dette spørgsmål:
"Det skyldes, at ved første opstart læser VCP (Control Plane) konfigurationsfilen, der bestemmer, om den vil fungere som VRR VCP i vMX. Tidligere blev denne opstart udført under opstart af Docker, men det betød, at VCP altid blev genstartet en gang, før den virtuelle router blev tilgængelig, hvilket førte til længere boot-tid (omkring 5 minutter). Nu udføres den første opstart af VCP under bygning af Docker-billedet, og da Docker-bygningen ikke kan køres med parameteren --privileged, betyder det, at qemu kører uden hardwareacceleration fra KVM, og derfor tager bygningen meget lang tid. I denne proces vises mange logfiler, så du vil i det mindste kunne se, hvad der sker. Jeg tror, at den lange bygning ikke er så skræmmende, fordi vi kun opretter billedet én gang, men kører det mange gange."
Derefter vil vi kunne se billedet af vores router i 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 101MBStarter vr-vmx container
Starter med kommandoen:
ubuntu:~$ sudo docker run -d --privileged --name jun01 b1b2369b453cHerefter kan vi se oplysninger om aktive containere:
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 jun01Tilslutter til routeren
IP-adressen til netværksgrænsefladen på routeren kan fås med følgende kommando:
ubuntu:~$ sudo docker inspect --format '{{.NetworkSettings.IPAddress}}' jun01
172.17.0.2Som standard, Vrnetlab opretter en bruger på routeren vrnetlab/VR-netlab9.
Vi forbinder med ssh:
ubuntu:~$ ssh vrnetlab@172.17.0.2
Den autentiskhed af vært '172.17.0.2 (172.17.0.2)' kan ikke fastslås.
ECDSA nøglefingeraftryk er SHA256:g9Sfg/k5qGBTOX96WiCWyoJJO9FxjzXYspRoDPv+C0Y.
Er du sikker på, at du vil fortsætte med at forbinde (ja/nej/[fingeraftryk])? ja
Advarsel: Permanently added '172.17.0.2' (ECDSA) til listen over kendte værter.
Adgangskode:
--- JUNOS 20.1R1.11 Kerne 64-bit JNPR-11.0-20200219.fb120e7_buil
vrnetlab> vis version
Model: vmx
Junos: 20.1R1.11Hermed er opsætningen af routeren færdig.
Anbefalinger til installation for routere fra forskellige producenter kan findes på i de relevante mapper.
Del 5: Postman – forbinder routeren til OpenDaylight
Installation af Postman
For at installere er det nok at downloade applikationen .
Forbind routeren til ODL
Vi opretter PUT anmodning:

- Anmodningslinje:
PUT http://10.132.1.202:8181/restconf/config/network-topology:network-topology/topology/topology-netconf/node/jun01 - Anmodningskrop (fanen Body):
jun01 172.17.0.2 22 vrnetlab VR-netlab9 false jun01_cache - På fanen Authorization skal parameteren være sat til
Basic Authog brugernavn/adgangskode: admin/admin. Dette er nødvendigt for adgang til ODL:

- På fanen Headers skal der tilføjes to overskrifter:
- Accept application/xml
- Content-Type application/xml
Vores anmodning er dannet. Vi sender. Hvis alt er opsat korrekt, skal vi få status "201 Oprettet":
![]()
Hvad gør denne anmodning?
Vi opretter en node inde i ODL med parametrene for den rigtige router, som vi ønsker at få adgang til.
xmlns="urn:TBD:params:xml:ns:yang:network-topology"
xmlns="urn:opendaylight:netconf-node-topology"Disse er interne navnerum XML (XML-namespaces) for ODL i overensstemmelse med hvilke det opretter en node.
Dernæst er routerens navn – node-id, routerens adresse – host osv.
Den mest interessante linje – den sidste. Schema-cache-directory opretter et bibliotek, hvor alle filer YANG Schema fra den tilsluttede router skal hentes. De kan findes i $ODL_ROOT/cache/jun01_cache.
Vi tjekker forbindelsen til routeren
Vi opretter GET anmodning:
- Anmodningslinje:
GET http://10.132.1.202:8181/restconf/operational/network-topology:network-topology/topology/topology-netconf/ - På fanen Authorization skal parameteren være sat til
Basic Authog brugernavn/adgangskode: admin/admin.
Vi sender. Vi skal modtage status "200 OK" og listen over alle understøttede enheder. YANG Schema:

Kommentar: For at se det seneste skulle jeg i mit tilfælde vente cirka 10 minutter efter udførelsen. PUT, indtil alt YANG skema eksporteres til ODL. Indtil dette tidspunkt vil der blive vist følgende ved udførelsen af denne GET anmodning:

Fjerner routeren
Vi opretter DELETE anmodning:
- Anmodningslinje:
DELETE http://10.132.1.202:8181/restconf/config/network-topology:network-topology/topology/topology-netconf/node/jun01 - På fanen Authorization skal parameteren være sat til
Basic Authog brugernavn/adgangskode: admin/admin.
Del 6: Ændrer routerkonfigurationen
Henter konfigurationen
Vi opretter GET anmodning:
- Anmodningslinje:
GET http://10.132.1.202:8181/restconf/config/network-topology:network-topology/topology/topology-netconf/node/jun01/yang-ext:mount/ - På fanen Authorization skal parameteren være sat til
Basic Authog brugernavn/adgangskode: admin/admin.
Vi sender. Vi skal modtage status "200 OK" og routerens konfiguration:

Opretter konfiguration
Som eksempel opretter vi følgende konfiguration og ændrer den:
protocols {
bgp {
disable;
shutdown;
}
}Vi opretter POST anmodning:
- Anmodningslinje:
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 - Anmodningskrop (fanen Body):
- På fanen Authorization skal parameteren være sat til
Basic Authog brugernavn/adgangskode: admin/admin. - På fanen Headers skal der tilføjes to overskrifter:
- Accept application/xml
- Content-Type application/xml
Efter sendningen skal vi modtage status "204 No Content".
For at kontrollere, at konfigurationen er ændret, kan vi bruge den tidligere anmodning. Men for eksemplets skyld opretter vi endnu en, der kun vil vise os oplysninger om de protokoller, der er konfigureret på routeren.
Vi opretter GET anmodning:
- Anmodningslinje:
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 - På fanen Authorization skal parameteren være sat til
Basic Authog brugernavn/adgangskode: admin/admin.
Efter udførelsen af anmodningen vil vi se følgende:

Ændrer konfigurationen
Vi ændrer oplysningerne om BGP-protokollen. Efter vores handlinger vil den se således ud:
protocols {
bgp {
disable;
}
}Vi opretter PUT anmodning:
- Anmodningslinje:
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 - Anmodningskrop (fanen Body):
- På fanen Authorization skal parameteren være sat til
Basic Authog brugernavn/adgangskode: admin/admin. - På fanen Headers skal der tilføjes to overskrifter:
- Accept application/xml
- Content-Type application/xml
Ved hjælp af den tidligere GET anmodning ser vi ændringerne:

Fjerner konfigurationen
Vi opretter DELETE anmodning:
- Anmodningslinje:
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 - På fanen Authorization skal parameteren være sat til
Basic Authog brugernavn/adgangskode: admin/admin.
Ved kald af GET Fra anmodningen med oplysninger om protokollerne ser vi følgende:

Sårbarheden er bekræftet i mange officielle Docker-billeder, herunder billeder af couchbase, elasticsearch, flink, solr, storm osv.
For at ændre konfigurationen er det ikke nødvendigt at sende anmodningens krop i formatet XML. Det kan også gøres i formatet JSON.
For eksempel i anmodningen PUT til ændring af konfigurationen udskifter vi anmodningens krop med:
{
"junos-conf-protocols:protocols": {
"bgp": {
"description" : "Ændret i postman"
}
}
}Husk at ændre overskrifterne i fanen Headers til:
- Accept application/json
- Content-Type application/json
Efter sendingen modtager vi følgende resultat (se svaret ved hjælp af GET anmodningen):

Del 7: Tilføj Cisco xRV9000
Hvad med alt dette om Juniper? Lad os tale om Cisco!
Jeg har fundet en xRV9000 version 7.0.2 (et monster, der kræver 8 Gb RAM og 4 kerner. Den ligger ikke frit tilgængelig, så kontakt ) - det er den, vi vil starte.
Start af container
Processen med at oprette en Docker-container adskiller sig ikke meget fra Juniper. Tilsvarende placerer vi .qcow2-filen med routeren i den relevante mappe (i dette tilfælde xrv9k) og udfører kommandoen make docker-image.
Efter et par minutter ser vi, at billedet er oprettet:
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 101MBVi starter containeren:
ubuntu:~$ sudo docker run -d --privileged --name xrv01 54debc7973fcEfter et stykke tid ser vi, at containeren er startet:
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 xrv01Vi opretter forbindelse 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 minutesVi tilslutter routeren til OpenDaylight
Tilføjelsen sker på helt samme måde som med vMX-billedet. Det er kun navnet, der skal ændres.
PUT anmodning:

Efter et stykke tid udfører vi GET anmodningen for at tjekke, at alt er tilsluttet:

Ændrer konfigurationen
Vi konfigurerer følgende opsætning:
!
router ospf LAB
mpls ldp auto-config
!Vi opretter POST anmodning:
- Anmodningslinje:
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 - Anmodningskrop (fanen Body):
{ "processes": { "process": [ { "process-name": "LAB", "default-vrf": { "process-scope": { "ldp-auto-config": [ null ] } } } ] } } - På fanen Authorization skal parameteren være sat til
Basic Authog brugernavn/adgangskode: admin/admin. - På fanen Headers skal der tilføjes to overskrifter:
- Accept application/json
- Content-Type application/json
Efter gennemførelsen skal vi få status "204 No Content".
Lad os tjekke, hvad vi har fået.
For dette opretter vi GET anmodning:
- Anmodningslinje:
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 - På fanen Authorization skal parameteren være sat til
Basic Authog brugernavn/adgangskode: admin/admin.
Efter udførelsen skal du se følgende:

For at fjerne konfigurationen bruger vi DELETE:
- Anmodningslinje:
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 - På fanen Authorization skal parameteren være sat til
Basic Authog brugernavn/adgangskode: admin/admin.
Konklusion
Som du måske har bemærket, er procedurerne for tilslutning af Cisco og Juniper til OpenDaylight ikke forskellige — dette åbner op for en bred vifte af kreative muligheder. Fra at styre konfigurationerne af alle netværkskomponenter til at skabe egne netværkspolitikker.
I denne tutorial har jeg givet de enkleste eksempler på, hvordan man kan interagere med netværksudstyr ved hjælp af OpenDaylight. Uden tvivl kan anmodningerne fra de givne eksempler gøres meget mere komplekse og konfigureres til hele tjenester med et enkelt klik — alt er kun begrænset af din fantasi*
Fortsætter…
P.S.
Hvis du allerede kender alt dette, eller hvis du derimod har gennemgået det og har fået en forkærlighed for ODL, så vil jeg anbefale at se nærmere på applikationsudvikling på ODL-controlleren. Du kan starte med .
Held og lykke med eksperimenterne!
Litteraturliste
- / Brian Linkletter
- OpenDaylight Cookbook / Mathieu Lemay, Alexis de Talhouet, Et al
- Network Programmability with YANG / Benoît Claise, Loe Clarke, Jan Lindblad
- Learning XML, Second Edition / Erik T. Ray
- Effective DevOps / Jennifer Davis, Ryn Daniels
Kilde: habr.com

