
I den hÀr artikeln kommer jag att berÀtta hur man konfigurerar OpenDaylight för arbete med nÀtverksutrustning, samt visa hur man med hjÀlp av Postman och enkla RESTCONF förfrÄgningar kan hantera denna utrustning. Vi kommer inte att arbeta med hÄrdvara, utan istÀllet kommer vi att skapa smÄ virtuella labb med en enda router med hjÀlp av Vrnetlab ovanpÄ Ubuntu 20.04 LTS.
Jag kommer att visa en detaljerad konfiguration först med hjÀlp av router Juniper vMX 20.1R1.11, och sedan kommer vi att jÀmföra det med konfigurationen av Cisco xRV9000 7.0.2.
InnehÄll
- NödvÀndiga kunskaper
- Del 1: vi diskuterar kort OpenDaylight (hÀdanefter ODL), Postman och Vrnetlab och varför vi behöver den
- Del 2: beskrivning av det virtuella labbet
- Del 3: stÀller in OpenDaylight
- Del 4: stÀller in Vrnetlab
- Del 5: med hjÀlp av Postman ansluter vi den virtuella routern (Juniper vMX) till ODL
- Del 6: fÄr och Àndrar routerkonfigurationen med hjÀlp av Postman och ODL
- Del 7: lÀgger till Cisco xRV9000
- Slutsats
- P.S.
- Referenslista
NödvÀndiga kunskaper
För att artikeln inte ska bli för lÄng har jag utelÀmnat vissa tekniska detaljer (med referenser till litteratur dÀr man kan lÀsa om dem).
DÀrför föreslÄr jag Àmnen som det Àr bra att (men nÀstan inte obligatoriskt) kÀnna till innan lÀsningen:
- ,
- /
Del 1: lite teori

- Ăppen SDN-plattform för styrning och automatisering av olika nĂ€tverk, stöds av Linux Foundation
- Java inuti
- Baseras pÄ Model-Driven Service Abstraction Level (MD-SAL)
- AnvÀnder YANG-modeller för automatisk skapelse av RESTCONF API för nÀtverksenheter
Huvudmodul för nÀtverkshantering. Precis genom den kommer vi att kommunicera med de anslutna enheterna. Styrs via sin egen API.
Mer om OpenDaylight kan man lÀsa .

- Verktyg för API-testning
- Enkelt och anvÀndarvÀnligt grÀnssnitt
I vÄrt fall Àr det intressant som ett medel för att skicka REST-förfrÄgningar till OpenDaylights API. Man kan visserligen ocksÄ skicka förfrÄgningar manuellt, men i Postman ser allt vÀldigt klart ut och passar vÄra syften som ingen annan.
För de som vill grÀva djupare: det finns mÄnga utbildningsmaterial skrivet om det ().

- Verktyg för att distribuera virtuella routrar i Docker
- Stöder: Cisco XRv, Juniper vMX, Arista vEOS, Nokia VSR etc.
- Ăppen kĂ€llkod
Ett mycket intressant men lite kÀnt verktyg. I vÄrt fall kommer vi att köra Juniper vMX och Cisco xRV9000 pÄ vanlig Ubuntu 20.04 LTS.
LÀs mer om det pÄ .
Del 2: laboratoriearbete
Inom ramen för denna handledning kommer vi att konfigurera följande system:

Hur det fungerar
- Juniper vMX stiger upp i Docker i containern (genom Vrnetlab) och fungerar som en helt vanlig virtuell router.
- ODL kopplad till routern och möjliggör hantering av den.
- Postman körs pÄ en separat maskin och genom den skickar vi kommandon ODL: för att ansluta/diskonnektera routern, Àndra konfiguration och sÄ vidare.
Kommentar till systemets enhet
Juniper vMX och ODL krÀver ganska mycket resurser för sin stabila drift. Bara vMX begÀr 6 Gb RAM och 4 kÀrnor. DÀrför har beslutet fattats att flytta alla "tunga" till en separat maskin (Heulett Packard Enterprise MicroServer ProLiant Gen8, Ubuntu 20.04 LTS). Routern fungerar förstÄs inte "sÀrskilt snabbt", men för mindre experiment rÀcker prestandan.
Del 3: stÀller in OpenDaylight

Den aktuella versionen av ODL vid skrivandet av artikeln Àr - Magnesium SR1
1) Installerar Java OpenJDK 11 (för mer detaljerad installation )
ubuntu:~$ sudo apt install default-jdk2) Hittar och laddar ner den senaste byggnaden ODL
3) Packar upp den nedladdade arkivet
4) GÄr till den erhÄllna katalogen
5) Startar ./bin/karaf
Vid detta steg ODL ska startas och vi hamnar i konsolen (För Ätkomst utifrÄn anvÀnds port 8181, vilket vi kommer att dra nytta av senare).
Vidare installerar vi ODL-funktioner, avsedda för arbete med protokoll NETCONF och RESTCONF. För detta i konsolen ODL utför vi:
opendaylight-user@root> feature:install odl-netconf-topology odl-restconf-allHÀr Àr den enklaste instÀllningen ODL slutförd. (Mer detaljerad information kan lÀsas ).
Del 4: stÀller in Vrnetlab

Förberedelse av systemet
Innan installationen Vrnetlab mÄste nödvÀndiga paket installeras för detsamma. SÄdana 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 -
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.ioInstallation av Vrnetlab
För installation Vrnetlab klonar det relevanta förrÄdet frÄn github:
ubuntu:~$ cd ~
ubuntu:~$ git clone https://github.com/plajjan/vrnetlab.gitGÄr till katalogen vrnetlab:
ubuntu:~$ cd ~/vrnetlabHÀr kan du se alla skript som behövs för att köra. Observera att för varje typ av router har en motsvarande katalog skapats:
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 xrv9kSkapar en image av routern
Varje router som stöds Vrnetlab, har sin unika konfigurationsprocedur. I vÄrt fall Juniper vMX behöver vi bara lÀgga .tgz-arkivet med routern (kan laddas ner frÄn ) i vmx-katalogen och köra kommandot make:
ubuntu:~$ cd ~\/vrnetlab\/vmx
ubuntu:~$ # Kopiera .tgz-arkivet med routern till denna katalog
ubuntu:~$ sudo makeSamla avbilden vMX tar ungefÀr 10-20 minuter. Perfekt tid att brygga en kopp kaffe!
Varför tar det sÄ lÄng tid, undrar ni?
ĂversĂ€ttning författaren pĂ„ denna frĂ„ga:
"Det beror pĂ„ att vid första körningen lĂ€ser VCP (Control Plane) konfigurationsfilen, som bestĂ€mmer om den ska fungera som VRR VCP i vMX. Tidigare gjordes denna start vid Docker-start, men det innebar att VCP alltid startades om en gĂ„ng innan den virtuella routern blev tillgĂ€nglig, vilket resulterade i lĂ„ng boot-tid (ungefĂ€r 5 minuter). Nu sker den första starten av VCP under byggandet av Docker-image, och eftersom Docker-byggandet inte kan köras med parametern âprivileged, innebĂ€r det att qemu körs utan hĂ„rdvaruaccelerering KVM och att byggnaden dĂ€rför tar mycket tid. Under denna process skrivs mĂ„nga loggar, sĂ„ att du Ă„tminstone kan se vad som hĂ€nder. Jag tycker att den lĂ„nga byggtiden inte Ă€r sĂ„ hemsk, eftersom vi skapar imagen en gĂ„ng men kör den mĂ„nga gĂ„nger."
Efter det kommer vi att kunna se imagen av vÄr 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 101MBKör containern vr-vmx
Kör med kommandot:
ubuntu:~$ sudo docker run -d --privileged --name jun01 b1b2369b453cDĂ€refter kan vi se information om aktiva containrar:
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 jun01Ansluter till routern
IP-adressen till routerns nÀtverksgrÀnssnitt kan erhÄllas med följande kommando:
ubuntu:~$ sudo docker inspect --format '{{.NetworkSettings.IPAddress}}' jun01
172.17.0.2Som standard, Vrnetlab skapar en anvÀndarrouter vrnetlab/VR-netlab9.
Ansluter med ssh:
ubuntu:~$ ssh vrnetlab@172.17.0.2
Authenticiteten för vÀrden '172.17.0.2 (172.17.0.2)' kan inte faststÀllas.
ECDSA nyckelavtryck Àr SHA256:g9Sfg/k5qGBTOX96WiCWyoJJO9FxjzXYspRoDPv+C0Y.
Ăr du sĂ€ker pĂ„ att du vill fortsĂ€tta ansluta (ja/nej/[fingeravtryck])? ja
Varning: Permanently added '172.17.0.2' (ECDSA) to the list of known hosts.
Lösenord:
--- JUNOS 20.1R1.11 Kernel 64-bit JNPR-11.0-20200219.fb120e7_buil
vrnetlab> show version
Modell: vmx
Junos: 20.1R1.11Nu Àr routerinstÀllningen klar.
Installationsrekommendationer för routrar frÄn olika tillverkare finns pÄ i motsvarande kataloger.
Del 5: Postman â koppla routern till OpenDaylight
Installera Postman
För installationen rÀcker det att ladda ner applikationen .
Ansluta routern till ODL
Vi skapar PUT förfrÄgan:

- BegÀrningsrad:
PUT http://10.132.1.202:8181/restconf/config/network-topology:network-topology/topology/topology-netconf/node/jun01 - BegÀrningens kropp (fliken Body):
jun01 172.17.0.2 22 vrnetlab VR-netlab9 false jun01_cache - PÄ fliken Authorization mÄste parametern stÀllas in pÄ
Basic Authoch anvÀndarnamn/lösenord: admin/admin. Detta Àr nödvÀndigt för Ätkomst till ODL:

- PÄ fliken Headers mÄste tvÄ rubriker lÀggas till:
- Accept application/xml
- Content-Type application/xml
VÄr förfrÄgan Àr formulerad. Vi skickar. Om allt har konfigurerats korrekt bör vi fÄ tillbaka status "201 Created":
![]()
Vad gör denna förfrÄgan?
Vi skapar en node inom ODL med parametrar för den verkliga routern som vi vill fÄ Ätkomst till.
xmlns="urn:TBD:params:xml:ns:yang:network-topology"
xmlns="urn:opendaylight:netconf-node-topology"Detta Àr interna namnrymder XML (XML-namnrymd) för ODL enligt vilket den skapar en node.
DĂ€refter, motsvarande, namnet pĂ„ routern â det Ă€r node-id, routerns adress â host och sĂ„ vidare.
Den mest intressanta raden â den sista. Schema-cache-directory skapar en katalog dĂ€r alla filer YANG Schema för den anslutna routern laddas ner. Du kan hitta dem i $ODL_ROOT/cache/jun01_cache.
Kontrollerar routerns anslutning
Vi skapar GET förfrÄgan:
- BegÀrningsrad:
GET http://10.132.1.202:8181/restconf/operational/network-topology:network-topology/topology/topology-netconf/ - PÄ fliken Authorization mÄste parametern stÀllas in pÄ
Basic Authoch anvÀndarnamn/lösenord: admin/admin.
Vi skickar. Vi bör fÄ status "200 OK" och en lista över alla stödjda enheter. YANG Schema:

Kommentar: För att se det senaste, i mitt fall var jag tvungen att vÀnta ungefÀr 10 minuter efter att ha genomfört det PUT, medan allt YANG-schema laddas ner pÄ ODL. Fram till dess, nÀr denna GET begÀran görs, kommer följande att visas:

Tar bort routern
Vi skapar TA BORT förfrÄgan:
- BegÀrningsrad:
DELETE http://10.132.1.202:8181/restconf/config/network-topology:network-topology/topology/topology-netconf/node/jun01 - PÄ fliken Authorization mÄste parametern stÀllas in pÄ
Basic Authoch anvÀndarnamn/lösenord: admin/admin.
Del 6: Ăndrar routerns konfiguration
HĂ€mtar konfigurationen
Vi skapar GET förfrÄgan:
- BegÀrningsrad:
GET http://10.132.1.202:8181/restconf/config/network-topology:network-topology/topology/topology-netconf/node/jun01/yang-ext:mount/ - PÄ fliken Authorization mÄste parametern stÀllas in pÄ
Basic Authoch anvÀndarnamn/lösenord: admin/admin.
Skickar. Vi bör fÄ status "200 OK" och routerns konfiguration:

Skapar konfiguration
Som exempel kommer vi att skapa följande konfiguration och Àndra den:
protocols {
bgp {
disable;
shutdown;
}
}Vi skapar POST förfrÄgan:
- BegÀrningsrad:
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 - BegÀrningens kropp (fliken Body):
- PÄ fliken Authorization mÄste parametern stÀllas in pÄ
Basic Authoch anvÀndarnamn/lösenord: admin/admin. - PÄ fliken Headers mÄste tvÄ rubriker lÀggas till:
- Accept application/xml
- Content-Type application/xml
Efter att ha skickat bör vi fÄ status "204 No Content"
För att kontrollera att konfigurationen har Àndrats kan vi anvÀnda den tidigare begÀran. Men för exemplet kommer vi att skapa en till som bara ger oss information om de protokoll som Àr konfigurerade pÄ routern.
Vi skapar GET förfrÄgan:
- BegÀrningsrad:
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Ä fliken Authorization mÄste parametern stÀllas in pÄ
Basic Authoch anvÀndarnamn/lösenord: admin/admin.
Efter att ha utfört begÀran kommer vi att se följande:

Ăndrar konfigurationen
Vi kommer att Àndra informationen om BGP-protokollet. Efter vÄra ÄtgÀrder kommer det att se ut sÄ hÀr:
protocols {
bgp {
disable;
}
}Vi skapar PUT förfrÄgan:
- BegÀrningsrad:
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 - BegÀrningens kropp (fliken Body):
- PÄ fliken Authorization mÄste parametern stÀllas in pÄ
Basic Authoch anvÀndarnamn/lösenord: admin/admin. - PÄ fliken Headers mÄste tvÄ rubriker lÀggas till:
- Accept application/xml
- Content-Type application/xml
Genom att anvÀnda den tidigare GET begÀran ser vi Àndringarna:

Tar bort konfigurationen
Vi skapar TA BORT förfrÄgan:
- BegÀrningsrad:
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Ä fliken Authorization mÄste parametern stÀllas in pÄ
Basic Authoch anvÀndarnamn/lösenord: admin/admin.
Vid anrop av GET frÄn begÀran med information om protokollen ser vi följande:

TillÀgg:
För att Àndra konfigurationen Àr det inte nödvÀndigt att skicka begÀrans kropp i formatet XML. Det kan göras i formatet JSON.
Till exempel, i begÀran PUT för att Àndra konfigurationen byter vi ut begÀrans kropp till:
{
"junos-conf-protocols:protocols": {
"bgp": {
"description" : "Changed in postman"
}
}
}Glöm inte att Àndra pÄ fliken Headers till:
- Accept application/json
- Content-Type application/json
Efter att ha skickat fÄr vi följande resultat (se svaret med hjÀlp av GET förfrÄgan):

Del 7: lÀgger till Cisco xRV9000
Vad pratar vi om nÀr vi pratar om Juniper? LÄt oss prata om Cisco!
Jag har en xRV9000 version 7.0.2 (ett monster som krĂ€ver 8Gb RAM och 4 kĂ€rnor. Den Ă€r inte fritt tillgĂ€nglig, sĂ„ kontakta ) â vi ska starta den.
Starta containern
Processen för att skapa en Docker-container skiljer sig inte nÀmnvÀrt frÄn Juniper. PÄ samma sÀtt lÀgger vi in .qcow2-filen med routern i katalogen som motsvarar dess namn, (i det hÀr fallet xrv9k) och kör kommandot make docker-image.
Efter nÄgra minuter ser vi att bilden har skapats:
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 kör containern:
ubuntu:~$ sudo docker run -d --privileged --name xrv01 54debc7973fcEfter en stund ser vi att containern har startat:
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 ansluter via ssh:
ubuntu@ubuntu:~$ ssh vrnetlab@172.17.0.2
Lösenord:
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 av Cisco Systems, Inc.
Bygginformation:
Byggd av : ahoang
Byggd den : Fri Mar 13 22:27:54 PDT 2020
Byggd vÀrd : iox-ucs-029
Arbetsyta : /auto/srcarchive15/prod/7.0.2/xrv9k/ws
Version : 7.0.2
Plats : /opt/cisco/XR/packages/
Etikett : 7.0.2
cisco IOS-XRv 9000 () processor
Systemdriftstid Àr 3 timmar 22 minuterVi ansluter routern till OpenDaylight
TillÀgget sker pÄ exakt samma sÀtt som med vMX-bilden. Vi behöver bara byta namn.
PUT förfrÄgan:

Efter en stund kallar vi pÄ GET förfrÄgan för att kontrollera att allt har anslutits:

Ăndrar konfigurationen
Vi konfigurerar följande instÀllning:
!
router ospf LAB
mpls ldp auto-config
!Vi skapar POST förfrÄgan:
- BegÀrningsrad:
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 - BegÀrningens kropp (fliken Body):
{ "processes": { "process": [ { "process-name": "LAB", "default-vrf": { "process-scope": { "ldp-auto-config": [ null ] } } } ] } } - PÄ fliken Authorization mÄste parametern stÀllas in pÄ
Basic Authoch anvÀndarnamn/lösenord: admin/admin. - PÄ fliken Headers mÄste tvÄ rubriker lÀggas till:
- Accept application/json
- Content-Type application/json
Efter att ha utfört detta bör vi fÄ status "204 No Content".
Vi kontrollerar vad vi fÄtt.
För detta skapar vi GET förfrÄgan:
- BegÀrningsrad:
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Ä fliken Authorization mÄste parametern stÀllas in pÄ
Basic Authoch anvÀndarnamn/lösenord: admin/admin.
Efter att ha slutfört bör du se följande:

För att ta bort konfigurationen anvÀnder vi TA BORT:
- BegÀrningsrad:
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Ä fliken Authorization mÄste parametern stÀllas in pÄ
Basic Authoch anvÀndarnamn/lösenord: admin/admin.
Slutsats
Som du kanske har mĂ€rkt, Ă€r procedurerna för att ansluta Cisco och Juniper till OpenDaylight ganska lika â detta öppnar en ganska stor möjlighet för kreativitet. FrĂ„n hantering av konfigurationer av alla nĂ€tverkskomponenter till att skapa egna nĂ€tverkspolicyer.
I denna handledning har jag gett enkla exempel pĂ„ hur man kan interagera med nĂ€tverksutrustning via OpenDaylight. Utan tvekan kan förfrĂ„gningarna i de givna exemplen göras mycket mer komplexa, och hela tjĂ€nster kan konfigureras med ett enda musklick â allt begrĂ€nsas bara av din fantasi*
FortsĂ€ttning följerâŠ
P.S.
Om du redan kÀnner till allt detta, eller om du tvÀrtom har blivit fascinerad av ODL, sÄ rekommenderar jag att du tittar pÄ apputveckling pÄ ODL-kontrollern. Du kan börja .
Lycka till med experimenten!
Referenslista
- / Brian Linkletter
- OpenDaylight Cookbook / Mathieu Lemay, Alexis de Talhouet, Et al
- NĂ€tverksprogrammering med YANG / BenoĂźt Claise, Loe Clarke, Jan Lindblad
- LĂ€ra sig XML, andra upplagan / Erik T. Ray
- Effektiv DevOps / Jennifer Davis, Ryn Daniels
KĂ€lla: habr.com

