
I denne artikkelen vil jeg fortelle deg hvordan du setter opp OpenDaylight for arbeid med nettverksutstyr, og vil også vise hvordan man bruker Postbud og enkelt RESTCONF forespørsler, kan dette utstyret kontrolleres. Vi vil ikke jobbe med maskinvare, men i stedet vil vi distribuere små virtuelle laboratorier med en enkelt ruter som bruker Vrnetlab løpet Ubuntu 20.04 LTS.
Jeg vil først vise det detaljerte oppsettet ved å bruke eksempelet på en ruter Juniper vMX 20.1R1.11, og så sammenligner vi det med innstillingen Cisco xRV9000 7.0.2.
Innhold
- Nødvendig kunnskap
- Часть 1: diskutere kort OpenDaylight (heretter referert til som ODL), Postbud и Vrnetlab og hvorfor trenger vi dem
- Часть 2: beskrivelse av det virtuelle laboratoriet
- Часть 3: tilpasse OpenDaylight
- Часть 4: tilpasse Vrnetlab
- Часть 5: ved bruk av Postbud koble til en virtuell ruter (Juniper vMX) Til ODL
- Часть 6: hent og endre ruterkonfigurasjonen ved hjelp av Postbud и ODL
- Часть 7: legg til Cisco xRV9000
- Konklusjon
- PS
- Bibliografi
Nødvendig kunnskap
For å unngå at artikkelen blir til et ark, har jeg utelatt noen tekniske detaljer (med lenker til litteratur hvor du kan lese om dem).
I denne forbindelse foreslår jeg deg emner som det ville være bra (men nesten ikke nødvendig) å vite før du leser:
- ,
- /
Del 1: litt teori

- En åpen SDN-plattform for administrasjon og automatisering av alle typer nettverk, støttet av Linux Fundament
- Java inne
- Basert på modelldrevet tjenesteabstraksjonsnivå (MD-SAL)
- Bruker YANG-modeller for automatisk å lage RESTCONF API for nettverksenheter
Hovedmodulen for nettverksadministrasjon. Det er gjennom det vi vil kommunisere med tilkoblede enheter. Administrert gjennom sin egen API.
Du kan lese mer om OpenDaylight .

- API-testverktøy
- Enkelt og brukervennlig grensesnitt
I vårt tilfelle er vi interessert i det som et middel for å sende REST-forespørsler til OpenDaylight API. Du kan selvfølgelig sende forespørsler manuelt, men i Postman ser alt veldig oversiktlig ut og er perfekt for våre formål.
For de som vil fordype seg i det: det er skrevet mye undervisningsmateriell på det ().

- Et verktøy for å distribuere virtuelle rutere i Docker
- Støtter: Cisco XRv, Juniper vMX, Arista vEOS, Nokia VSR, etc.
- Open Source
Et veldig interessant, men lite kjent verktøy. I vårt tilfelle skal vi bruke det til å kjøre Juniper vMX og Cisco xRV9000 regelmessig. Ubuntu 20.04 LTS.
Du kan lese mer om ham på .
Del 2: laboratoriearbeid
I denne opplæringen skal vi sette opp følgende system:

Hvordan fungerer det
- Juniper vMX stiger til Docker beholder (ved hjelp Vrnetlab) og fungerer som den vanligste virtuelle ruteren.
- ODL koblet til ruteren og lar deg kontrollere den.
- Postbud lansert på en egen maskin og gjennom den sender vi kommandoer ODL: for å koble til/fjerne en ruter, endre konfigurasjon osv.
Kommentar til systemdesign
Juniper vMX и ODL krever ganske mye ressurser for stabil drift. Bare en vMX Ber om 6 GB RAM og 4 kjerner. Derfor ble det besluttet å flytte alle "tungvekter" til en egen maskin (Heulett Packard Enterprise MicroServer ProLiant Gen8, Ubuntu 20.04 LTS). Ruteren "flyr" selvfølgelig ikke på den, men det er nok ytelse for små eksperimenter.
Del 3: Sette opp OpenDaylight

Den nåværende versjonen av ODL i skrivende stund er Magnesium SR1
1) Installer Java OpenJDK 11 (for mer detaljert installasjon )
ubuntu:~$ sudo apt install default-jdk2) Finn og last ned den nyeste versjonen ODL
3) Pakk ut det nedlastede arkivet
4) Gå til den resulterende katalogen
5) Lansering ./bin/karaf
På dette trinnet ODL skal starte og vi vil finne oss selv i konsollen (For ekstern tilgang brukes port 8181, som vi vil bruke senere).
Deretter installerer vi ODL-funksjoner, designet for å fungere med protokoller NETCONF и RESTCONF. For å gjøre dette i konsollen ODL gjøre:
opendaylight-user@root> feature:install odl-netconf-topology odl-restconf-allDette er det enkleste oppsettet ODL fullført. (For mer informasjon kan du lese ).
Del 4: Sette opp Vrnetlab

Klargjøring av systemet
Før installasjon Vrnetlab du må installere pakkene som kreves for at det skal fungere. Som for eksempel , , :
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.ioInstallerer Vrnetlab
For installasjon Vrnetlab klone det tilsvarende depotet fra github:
ubuntu:~$ cd ~
ubuntu:~$ git clone https://github.com/plajjan/vrnetlab.gitGå til katalogen vnetlab:
ubuntu:~$ cd ~/vrnetlabHer kan du se alle skriptene som kreves for å kjøre. Vær oppmerksom på at for hver type ruter er det opprettet en tilsvarende katalog:
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 xrv9kLage et bilde av ruteren
Hver ruter som støttes Vrnetlab, har sin egen unike oppsettsprosedyre. Når Juniper vMX Alt vi trenger å gjøre er å laste opp .tgz-arkivet med ruteren (du kan laste det ned fra ) til vmx-katalogen og utfør kommandoen make:
ubuntu:~$ cd ~/vrnetlab/vmx
ubuntu:~$ # Копируем в эту директорию .tgz архив с роутером
ubuntu:~$ sudo makeBygg bildet vMX vil ta ca. 10-20 minutter. Det er på tide å gå og lage kaffe!
Hvorfor så lenge, spør du?
oversettelse forfatterens svar på dette spørsmålet:
"Dette er fordi når VCP (Control Plane) først starter, leser den en konfigurasjonsfil som bestemmer om den skal kjøres som en VRR VCP i vMX. Tidligere ble denne oppstarten gjort under Docker-oppstart, men dette betydde at VCP alltid ble startet på nytt en gang før den virtuelle ruteren ble tilgjengelig, noe som resulterte i lang oppstartstid (ca. 5 minutter) Nå gjøres den første VCP-kjøringen under Docker-bildebyggingen, og siden Docker-byggingen ikke kan kjøres med --privileged-alternativet, betyr dette at qemu kjører uten KVM-maskinvareakselerasjon og tar derfor veldig lang tid å bygge. Mange logger sendes ut under denne prosessen, så du kan i det minste se hva som skjer. Jeg tror ikke en lang build er så ille fordi at vi lager et bilde en gang , men lanser mange."
Etterpå kan du se bildet av ruteren vår 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 101MBLansering av vr-vmx-beholderen
Vi starter den med kommandoen:
ubuntu:~$ sudo docker run -d --privileged --name jun01 b1b2369b453cDeretter kan vi se informasjon om aktive beholdere:
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 jun01Kobler til ruteren
IP-adressen til ruterens nettverksgrensesnitt kan fås med følgende kommando:
ubuntu:~$ sudo docker inspect --format '{{.NetworkSettings.IPAddress}}' jun01
172.17.0.2Misligholde, Vrnetlab oppretter en bruker på ruteren vrnetlab/VR-netlab9.
Koble til ved hjelp av 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.11Dette fullfører ruteroppsettet.
Installasjonsanbefalinger for rutere fra ulike leverandører finner du på i de aktuelle katalogene.
Del 5: Postmann - kobler ruteren til OpenDaylight
Installerer Postman
For å installere, last ned applikasjonen .
Kobler ruteren til ODL
La oss skape PUT be om:

- Spørrestreng:
PUT http://10.132.1.202:8181/restconf/config/network-topology:network-topology/topology/topology-netconf/node/jun01 - Forespørselstekst (Brødtekst-fanen):
<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> - På Autorisasjon-fanen må du angi parameteren
Basic Authog pålogging/passord: admin/admin. Dette kreves for å få tilgang til ODL:

- På fanen Overskrifter må du legge til to overskrifter:
- Godta søknad/xml
- Innholdstype-applikasjon/xml
Vår forespørsel er fullført. Vi sender. Hvis alt var riktig konfigurert, bør vi returnere statusen "201 Opprettet":
![]()
Hva gjør denne forespørselen?
Vi lager en node inni ODL med parametrene til den virkelige ruteren som vi vil ha tilgang til.
xmlns="urn:TBD:params:xml:ns:yang:network-topology"
xmlns="urn:opendaylight:netconf-node-topology"Dette er interne navnerom XML (XML-navneområde) for ODL i henhold til hvilken den oppretter node.
Videre, følgelig navnet på ruteren er node-id, ruteradresse - vert og så videre.
Den mest interessante linjen er den siste. Schema-cache-katalog oppretter en katalog der alle filene lastes ned YANG-skjema tilkoblet ruter. Du kan finne dem i $ODL_ROOT/cache/jun01_cache.
Sjekker rutertilkoblingen
La oss skape GET be om:
- Spørrestreng:
GET http://10.132.1.202:8181/restconf/operational/network-topology:network-topology/topology/topology-netconf/ - På Autorisasjon-fanen må du angi parameteren
Basic Authog pålogging/passord: admin/admin.
Vi sender. Bør motta en "200 OK"-status og en liste over alle støttede enheter YANG-skjema:

Kommentar: For å se sistnevnte var det i mitt tilfelle nødvendig å vente ca. 10 minutter etter utførelse PUTdet er alt for nå YANG-skjema vil bli losset på ODL. Frem til dette punktet, når du utfører dette GET spørringen vil vise følgende:

Fjerner ruteren
La oss skape SLETT be om:
- Spørrestreng:
DELETE http://10.132.1.202:8181/restconf/config/network-topology:network-topology/topology/topology-netconf/node/jun01 - På Autorisasjon-fanen må du angi parameteren
Basic Authog pålogging/passord: admin/admin.
Del 6: Endre ruterkonfigurasjonen
Henter konfigurasjonen
La oss skape GET be om:
- Spørrestreng:
GET http://10.132.1.202:8181/restconf/config/network-topology:network-topology/topology/topology-netconf/node/jun01/yang-ext:mount/ - På Autorisasjon-fanen må du angi parameteren
Basic Authog pålogging/passord: admin/admin.
Vi sender. Skal motta statusen "200 OK" og ruterkonfigurasjonen:

Opprette en konfigurasjon
Som et eksempel, la oss lage følgende konfigurasjon og endre den:
protocols {
bgp {
disable;
shutdown;
}
}La oss skape POST be om:
- Spørrestreng:
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 - Forespørselstekst (Brødtekst-fanen):
<bgp xmlns="http://yang.juniper.net/junos/conf/protocols"> <disable/> <shutdown> </shutdown> </bgp> - På Autorisasjon-fanen må du angi parameteren
Basic Authog pålogging/passord: admin/admin. - På fanen Overskrifter må du legge til to overskrifter:
- Godta søknad/xml
- Innholdstype-applikasjon/xml
Etter sending skal du få statusen "204 No Content"
Du kan bruke forrige spørring for å bekrefte at konfigurasjonen er endret. Men for eksempel vil vi lage en annen som bare viser oss informasjon om protokollene som er konfigurert på ruteren.
La oss skape GET be om:
- Spørrestreng:
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å Autorisasjon-fanen må du angi parameteren
Basic Authog pålogging/passord: admin/admin.
Etter å ha utført forespørselen, vil vi se følgende:

Endring av konfigurasjonen
La oss endre informasjonen om BGP-protokollen. Etter våre handlinger vil det se slik ut:
protocols {
bgp {
disable;
}
}La oss skape PUT be om:
- Spørrestreng:
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 - Forespørselstekst (Brødtekst-fanen):
<protocols xmlns="http://yang.juniper.net/junos/conf/protocols"> <bgp> <disable/> </bgp> </protocols> - På Autorisasjon-fanen må du angi parameteren
Basic Authog pålogging/passord: admin/admin. - På fanen Overskrifter må du legge til to overskrifter:
- Godta søknad/xml
- Innholdstype-applikasjon/xml
Bruker forrige GET forespørsel, vi ser endringene:

Sletter konfigurasjonen
La oss skape SLETT be om:
- Spørrestreng:
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å Autorisasjon-fanen må du angi parameteren
Basic Authog pålogging/passord: admin/admin.
Når du ringer GET forespørsel med informasjon om protokoller vil vi se følgende:

supplere:
For å endre konfigurasjonen er det ikke nødvendig å sende forespørselsteksten i formatet XML. Dette kan også gjøres i formatet JSON.
For å gjøre dette, for eksempel i forespørselen PUT for å endre konfigurasjonen, erstatt forespørselsteksten med:
{
"junos-conf-protocols:protocols": {
"bgp": {
"description" : "Changed in postman"
}
}
}Ikke glem å endre overskriftene på fanen Overskrifter til:
- Godta søknad/json
- Content-Type-applikasjon/json
Etter sending får vi følgende resultat (Vi ser på svaret ved hjelp av GET be om):

Del 7: Legg til Cisco xRV9000
Hva handler vi om Juniper, ja om Juniper? La oss snakke om Cisco!
Jeg fant xRV9000 versjon 7.0.2 (et beist som trenger 8 Gb RAM og 4 kjerner. Det er ikke fritt tilgjengelig, så kontakt ) - la oss starte den.
Kjøre en container
Prosessen med å lage en Docker-beholder er praktisk talt ikke forskjellig fra Juniper. På samme måte slipper vi .qcow2-filen med ruteren i katalogen som tilsvarer navnet (i dette tilfellet xrv9k) og utfører kommandoen make docker-image.
Etter noen minutter ser vi at bildet er opprettet:
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 101MBLa oss starte beholderen:
ubuntu:~$ sudo docker run -d --privileged --name xrv01 54debc7973fcEtter en tid ser vi at beholderen har 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 xrv01Koble til 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 minutesKoble ruteren til OpenDaylight
Legging skjer på en helt lik måte som vMX. Du trenger bare å endre navnene.
PUT be om:

Etter en stund ringer vi GET be om å sjekke at alt er tilkoblet:

Endring av konfigurasjonen
La oss sette opp følgende konfigurasjon:
!
router ospf LAB
mpls ldp auto-config
!La oss skape POST be om:
- Spørrestreng:
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 - Forespørselstekst (Brødtekst-fanen):
{ "processes": { "process": [ { "process-name": "LAB", "default-vrf": { "process-scope": { "ldp-auto-config": [ null ] } } } ] } } - På Autorisasjon-fanen må du angi parameteren
Basic Authog pålogging/passord: admin/admin. - På fanen Overskrifter må du legge til to overskrifter:
- Godta søknad/json
- Content-Type-applikasjon/json
Etter utførelse bør du få statusen "204 No Content".
La oss sjekke hva vi har.
For dette vil vi skape GET be om:
- Spørrestreng:
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å Autorisasjon-fanen må du angi parameteren
Basic Authog pålogging/passord: admin/admin.
Etter utførelse bør du se følgende:

For å slette konfigurasjonen bruk SLETT:
- Spørrestreng:
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å Autorisasjon-fanen må du angi parameteren
Basic Authog pålogging/passord: admin/admin.
Konklusjon
Totalt sett, som du kanskje har lagt merke til, er ikke prosedyrene for å koble Cisco og Juniper til OpenDaylight annerledes - dette åpner for et ganske stort rom for kreativitet. Starter fra å administrere konfigurasjoner av alle nettverkskomponenter og slutter med å lage dine egne nettverkspolicyer.
I denne opplæringen ga jeg enkle eksempler på hvordan du kan samhandle med nettverksutstyr ved hjelp av OpenDaylight. Uten tvil kan forespørslene fra eksemplene ovenfor gjøres mye mer komplekse og hele tjenester kan konfigureres med ett museklikk - alt begrenses bare av fantasien din*
To be continued ...
PS
Hvis du plutselig allerede vet alt dette, eller tvert imot, har gått gjennom det og ODL har sunket inn i sjelen din, så anbefaler jeg å se mot å utvikle applikasjoner på en ODL-kontroller. Du kan begynne .
Lykke til med eksperimenter!
Referanser
- /Brian Linkletter
- OpenDaylight Cookbook / Mathieu Lemay, Alexis de Talhouet, et al
- Nettverksprogrammerbarhet med YANG / Benoît Claise, Loe Clarke, Jan Lindblad
- Lære XML, andre utgave / Erik T. Ray
- Effektiv DevOps / Jennifer Davis, Ryn Daniels
Kilde: www.habr.com

