
Në këtë artikull do të tregoj se si të konfigurosh OpenDaylight për të punuar me pajisjet rrjetësore, si dhe do të tregoj se si me anë të Postman dhe thjesht RESTCONF kërkesave mund të menaxhojmë këtë pajisje. Ne nuk do të punojmë me harduerin, por në vend të kësaj do të zhvillojmë laboratorë virtualë të vegjël me një router të vetëm duke përdorur Vrnetlab në Ubuntu 20.04 LTS.
Konfigurimin e detajuar do ta tregoj fillimisht në shembullin e routerit Juniper vMX 20.1R1.11, pastaj do ta krahasojmë atë me konfigurimin e Cisco xRV9000 7.0.2.
Përmbajtja
- Dija e nevojshme
- Pjesa 1: diskutojmë shkurtimisht OpenDaylight (në vijim ODL), Postman dhe Vrnetlab dhe pse na nevojiten
- Pjesa 2: përshkrimi i laboratorit virtual
- Pjesa 3: konfigurimi OpenDaylight
- Pjesa 4: konfigurimi Vrnetlab
- Pjesa 5: me ndihmën e Postman lidhi routerin virtual (Juniper vMX) me ODL
- Pjesa 6: marrim dhe ndryshojmë konfigurimin e routerit me anë të Postman dhe ODL
- Pjesa 7: shtojmë Cisco xRV9000
- Përfundim
- P.S.
- Lista e Literaturës
Dija e nevojshme
Për të mos u shndërruar artikulli në një përrallë të gjatë, disa detaje teknike i kam lënë jashtë (me lidhje nga literatura ku mund të lexoni për to).
Prandaj, ju propozoj temat që do të ishte mirë (por pothuajse jo domosdoshmërish) të njihni para leximit:
- ,
- /
Pjesa 1: pak teori

- Platforma e hapur SDN për menaxhimin dhe automatizimin e të gjitha llojeve të rrjeteve, e mbështetur nga Fondacioni Linux
- Java brenda
- E ndërtuar mbi Model-Driven Service Abstraction Level (MD-SAL)
- Përdor modele YANG për krijimin automatik të API-ve RESTCONF për pajisjet rrjetësore
Moduli kryesor për menaxhimin e rrjetit. Pikërisht përmes tij ne do të komunikojmë me pajisjet e lidhura. Menaxhohet përmes API-së së tij.
Më shumë informacion për OpenDaylight mund të lexoni .

- Instrumenti për testimin e API
- Një ndërfaqe e thjeshtë dhe e lehtë për t’u përdorur
Në rastin tonë, ai na intereson si mjet për dërgimin e kërkesave REST në API-në e OpenDaylight. Natyrisht, mund të dërgoni kërkesat manualisht, por në Postman gjithçka duket shumë vizualisht dhe për qëllimet tona është më se e përshtatshme.
Për ata që duan të zhbirilojnë: për të janë shkruar shumë materiale mësimore ().

- Instrumenti për zhvillimin e routerëve virtualë në Docker
- Mbështet: Cisco XRv, Juniper vMX, Arista vEOS, Nokia VSR dhe të tjera.
- Open Source
Një mjet shumë interesant, por shumë pak i njohur. Në rastin tonë, me ndihmën e tij do të nisnim Juniper vMX dhe Cisco xRV9000 në një Ubuntu 20.04 LTS të zakonshëm.
Lexo më shumë për të në .
Pjesa 2: laboratori
Në këtë tutorial do të konfigurojmë sistemin e mëposhtëm:

Si funksionon kjo
- Juniper vMX ngrihet në Docker kontejner (me ndihmën e Vrnetlab) dhe funksionon si një ruter virtual i zakonshëm.
- ODL është i lidhur me routerin dhe lejon menaxhimin e tij.
- Postman në një makinë të veçantë dhe nëpërmjet tij dërgojmë komandat ODL: për lidhjen/çlirimin e routerit, ndryshimin e konfigurimit etj.
Koment për pajisjen e sistemit
Juniper vMX dhe ODL kërkojnë një sasi të konsiderueshme burimesh për funksionimin e tij të qëndrueshëm. Një vetëm vMX kë kërkon 6 Gb RAM dhe 4 bërthama. Pra, u mor vendimi për të nxjerrë të gjithë "të rëndët" në një makinë të veçantë (Heulett Packard Enterprise MicroServer ProLiant Gen8, Ubuntu 20.04 LTS). R routeri, sigurisht, nuk "fluturon" aty, por për eksperimente të vogla është mjaftueshëm i fuqishëm.
Pjesa 3: konfigurimi i OpenDaylight

Versioni aktual i ODL në momentin e shkruar është - Magnesium SR1
1) Instalojmë Java OpenJDK 11 (për instalimin më të detajuar )
ubuntu:~$ sudo apt install default-jdk2) Gjejmë dhe shkarkojmë ndërtimin e fundit ODL
3) Ç'dekompresojmë arkivin e shkarkuar
4) Shkoni në dosjen e marrë
5) Lansojë . /bin/karaf
Në këtë hap ODL duhet të iniciohet dhe ne do të jemi në konsolë (për qasje nga jashtë përdoret porta 8181, që do ta përdorim më vonë).
Pastaj instalojmë Karakteristikat ODL, të cilat janë të destinuara për të punuar me protokollet NETCONF dhe RESTCONF. Për këtë në konsolë ODL ekzekutojmë:
opendaylight-user@root> feature:install odl-netconf-topology odl-restconf-allNë këtë mënyrë konfigurimi më i thjeshtë ODL përfundoi. (Më shumë mund të lexoni ).
Pjesa 4: konfigurimi i Vrnetlab

Përgatitja e sistemit
Para se të instaloni Vrnetlab është e nevojshme të instaloni paketat e nevojshme për funksionimin e tij. Të tilla si , , :
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...buntu:~$ sudo apt update
ubuntu:~$ sudo apt install -y docker-ce docker-ce-cli containerd.ioInstalimi i Vrnetlab
Për instalimin Vrnetlab klonojmë repositorin përkatës nga github:
ubuntu:~$ cd ~
ubunt...ubunt:~$ git clone https://github.com/plajjan/vrnetlab.gitShkoni në dosjen vrnetlab:
ubuntu:~$ cd ~/vrnetlabKëtu mund të shihni të gjitha skriptet e nevojshme për funksionimin. Vini re se për çdo lloj routeri është krijuar një dosje përkatëse:
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 xrv9kKrijojmë imazhin e routerit
Çdo router që mbështetet Vrnetlab, ka procedurën e saj unike të konfigurimit. Në rastin e Juniper vMX mjafton të hedhim një arkiv .tgz me routerin (mund ta shkarkojmë nga ) në drejtorinë vmx dhe të ekzekutojmë komandën make:
ubuntu:~$ cd ~\/vrnetlab\/vmx
ubuntu:~$ # Kopjojmë në këtë drejtori arkivin .tgz me routerin
ubuntu:~$ sudo makeNdërtimi i imazhit vMX do të zgjasë rreth 10-20 minuta. Koha perfekte për t'u bërë një kafe!
Pse zgjat kaq gjatë, do të pyesni?
Përkthimi e autorit në këtë pyetje:
"Kjo është për shkak se gjatë lançimit të parë VCP (Control Plane) lexon skedarin e konfigurimit, i cili përcakton nëse do të punojë si VCP VRR në vMX. Ndërsa tani ky lançim ndodhte gjatë lançimit të Docker, kishte për pasojë që VCP të rithehet një herë përpara se routeri virtual të bëhej i aksesueshëm, gjë që rezultonte në një kohë të gjatë ngarkimi (rreth 5 minuta). Tani lançimi i parë VCP ndodh gjatë ndërtimit të imazhit Docker, dhe pasi ndërtimi i Docker nuk mund të ekzekutohet me parametrin --privileged, kjo do të thotë se qemu punon pa përshpejtim hardware KVM, dhe kështu ndërtimi zgjat shumë. Gjatë këtij procesi, ka shumë log-e që paraqiten, kështu që të paktën do të mund ta shihni atë që ndodh. Mendoj se ndërtimi i gjatë nuk është aq shqetësues, sepse imazhin e krijojmë një herë, ndërsa e lançojmë shumë herë."
Më pas do të mund të shihni imazhin e routerit tonë në 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 101MBNisemi me kontejnerin vr-vmx
Nisemi me komandën:
ubuntu:~$ sudo docker run -d --privileged --name jun01 b1b2369b453cMund të shikojmë informatat mbi kontejnerët aktivë:
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 jun01Lidhuni me routerin
Adresa IP e ndërfaqes rrjetit të routerit mund të merret me komandën e mëposhtme:
ubuntu:~$ sudo docker inspect --format '{{.NetworkSettings.IPAddress}}' jun01
172.17.0.2Për default, Vrnetlab krijon te routeri përdoruesin vrnetlab/VR-netlab9.
Lidhuni përmes ssh:
ubuntu:~$ ssh vrnetlab@172.17.0.2
Autenticiteti i hostit '172.17.0.2 (172.17.0.2)' nuk mund të vendoset.
Shenja e çelësit ECDSA është SHA256:g9Sfg/k5qGBTOX96WiCWyoJJO9FxjzXYspRoDPv+C0Y.
Jeni të sigurtë që dëshironi të vazhdoni lidhjen (po/jo/[çelësi])? po
Kujdes: Shtuar përherë '172.17.0.2' (ECDSA) në listën e hosteve të njohur.
Fjalëkalimi:
--- JUNOS 20.1R1.11 Kerneli 64-bit JNPR-11.0-20200219.fb120e7_buil
vrnetlab> trego versionin
Modeli: vmx
Junos: 20.1R1.11Me këtë, konfigurimi i routerit ka përfunduar.
Rekomandime për instalimin e routerave të ndryshëm mund të gjenden në në direktorite përkatëse.
Pjesa 5: Postman — lidheni routerin me OpenDaylight
Instalimi i Postman
Për të instaluar, mjafton të shkarkoni aplikacionin .
Lidhja e routerit me ODL
Do të krijojmë PUT kërkesa:

- Vija e kërkesës:
PUT http://10.132.1.202:8181/restconf/config/network-topology:network-topology/topology/topology-netconf/node/jun01 - Trupi i kërkesës (skeda Body):
jun01 172.17.0.2 22 vrnetlab VR-netlab9 false jun01_cache - Në skedën Authorization duhet të vendosni parametrin
Basic Authdhe login/fjalëkalimin: admin/admin. Kjo është e nevojshme për të aksesuar ODL:

- Në skedën Headers duhet të shtoni dy tituj:
- Accept application/xml
- Content-Type application/xml
Kërkesa jonë është formuar. Dërgojmë. Nëse gjithçka është konfiguruar siç duhet, ne duhet të kthejmë statusin "201 Created":
![]()
Çfarë bën kjo kërkesë?
Ne krijojmë një node brenda ODL me parametrat e routerit të vërtetë, me të cilin dëshirojmë të përfitojmë akses.
xmlns="urn:TBD:params:xml:ns:yang:network-topology"
xmlns="urn:opendaylight:netconf-node-topology"Këto janë hapësirat e brendshme të emrave XML (XML namespace) sipas ODL në përputhje me të cilat krijon node.
Pastaj, përkatësisht, emri i routerit është node-id, adresa e routerit është host etj.
Vija më interesante është ajo e fundit. Schema-cache-directory krijon një direktor të cilit i shpërndahen të gjithë skedarët YANG Schema të routerit të lidhur. Mund t'i gjeni ato në $ODL_ROOT/cache/jun01_cache.
Kontrolloni lidhjen e routerit
Do të krijojmë GET kërkesa:
- Vija e kërkesës:
GET http://10.132.1.202:8181/restconf/operational/network-topology:network-topology/topology/topology-netconf/ - Në skedën Authorization duhet të vendosni parametrin
Basic Authdhe login/fjalëkalimin: admin/admin.
Dërguar. Duhet të marrim statusin "200 OK" dhe listën e të gjitha pajisjeve të mbështetura YANG Schema:

Koment: Për të parë të fundit, në rastin tim ishte e nevojshme të prisja rreth 10 minuta pas ekzekutimit PUT, derisa gjithçka YANG sсhema të eksportohen në ODL. Deri në atë moment, teksa ekzekutohet ky GET kërkesë do të shfaqet e përkryer:

Fshijmë routerin
Do të krijojmë FSHI kërkesa:
- Vija e kërkesës:
FSHI http://10.132.1.202:8181/restconf/config/network-topology:network-topology/topology/topology-netconf/node/jun01 - Në skedën Authorization duhet të vendosni parametrin
Basic Authdhe login/fjalëkalimin: admin/admin.
Pjesa 6: Ndryshojmë konfigurimin e routerit
Marrim konfigurimin
Do të krijojmë GET kërkesa:
- Vija e kërkesës:
MERR http://10.132.1.202:8181/restconf/config/network-topology:network-topology/topology/topology-netconf/node/jun01/yang-ext:mount/ - Në skedën Authorization duhet të vendosni parametrin
Basic Authdhe login/fjalëkalimin: admin/admin.
Dërguar. Duhet të marrim statusin "200 OK" dhe konfigurimin e routerit:

Krijojmë konfigurimin
Si një shembull, le të krijojmë këtë konfigurim dhe ta ndryshojmë:
protocols {
bgp {
disable;
shutdown;
}
}Do të krijojmë POST kërkesa:
- Vija e kërkesës:
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 - Trupi i kërkesës (skeda Body):
- Në skedën Authorization duhet të vendosni parametrin
Basic Authdhe login/fjalëkalimin: admin/admin. - Në skedën Headers duhet të shtoni dy tituj:
- Accept application/xml
- Content-Type application/xml
Pasi dërgohet, duhet të marrim statusin "204 No Content"
Për të verifikuar që konfigurimi u ndryshua, mund të përdorim kërkesën e mëparshme. Por për shembull, ne do të krijojmë një tjetër që do na shfaqë vetëm informacionin e protokollave të konfiguruar në router.
Do të krijojmë GET kërkesa:
- Vija e kërkesës:
MERR 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 - Në skedën Authorization duhet të vendosni parametrin
Basic Authdhe login/fjalëkalimin: admin/admin.
Pasi të kryhet kërkesa do të shohim të mëposhtmen:

Ndryshojmë konfigurimin
Do të ndryshojmë informacionin mbi protokollin BGP. Pas veprimeve tona, ai do të duket kështu:
protocols {
bgp {
disable;
}
}Do të krijojmë PUT kërkesa:
- Vija e kërkesës:
VENDOS 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 - Trupi i kërkesës (skeda Body):
- Në skedën Authorization duhet të vendosni parametrin
Basic Authdhe login/fjalëkalimin: admin/admin. - Në skedën Headers duhet të shtoni dy tituj:
- Accept application/xml
- Content-Type application/xml
Duke përdorur kërkesën e mëparshme, shohim ndryshimet: GET Fshijmë konfigurimin

FSHI 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
Do të krijojmë FSHI kërkesa:
- Vija e kërkesës:
kërkesës me informacionin mbi protokollet, do të shohim të mëposhtmen: - Në skedën Authorization duhet të vendosni parametrin
Basic Authdhe login/fjalëkalimin: admin/admin.
Kur thirret GET Shtesë:

Për të ndryshuar konfigurimin, nuk është e nevojshme të dërgoni trupin e kërkesës në formatin
. Kjo mund të bëhet shpejt në formatin XMLPër këtë, për shembull, në kërkesën JSON.
për ndryshimin e konfigurimit, do ta zëvendësojmë trupin e kërkesës me: PUT { "junos-conf-protocols:protocols": { "bgp": { "description" : "Ndryshuar në postman" } } }
{
"junos-conf-protocols:protocols": {
"bgp": {
"description" : "Changed in postman"
}
}
}Mos u harroni të ndryshoni titujt në seksionin Headers në:
- Prano aplikacioni/json
- Përmbajtja-Tip aplikacioni/json
Pas dërgimit do të marrim rezultatin e mëposhtëm (shikoni përgjigjen duke përdorur GET kërkesën):

Pjesa 7: shtojmë Cisco xRV9000
Çfarë kemi të gjithë për Juniper-in, le të flasim për Cisco-n!
Kam gjetur një xRV9000 versioni 7.0.2 (monstra, që kërkon 8Gb RAM dhe 4 bërthama. Nuk është e disponueshme për publikun, prandaj kontaktoni në ) — atij do ia nisemi.
Nisja e kontejnerit
Procesi i krijimit të kontejnerit Docker gati nuk ndryshon nga Juniper. Po ashtu, ngrejmë skedarin .qcow2 me router-in në drejtorinë që përkon me emrin e tij, (në këtë rast xrv9k) dhe ekzekutojmë komandën make docker-image.
Pas disa minutash shohim që imazhi është krijuar:
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 101MBNisjmë kontejnerin:
ubuntu:~$ sudo docker run -d --privileged --name xrv01 54debc7973fcPas pak kohe shohim që kontejneri është nisur:
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 xrv01Kthehemi me ssh:
ubuntu@ubuntu:~$ ssh vrnetlab@172.17.0.2
Fjalëkalimi:
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 nga Cisco Systems, Inc.
Informacioni mbi ndërtimin:
Ndërtuar nga : ahoang
Ndërtuar më : Fri Mar 13 22:27:54 PDT 2020
Hosti i ndërtimit : iox-ucs-029
Hapsira punuese : /auto/srcarchive15/prod/7.0.2/xrv9k/ws
Version : 7.0.2
Lokacion : /opt/cisco/XR/packages/
Etiketa : 7.0.2
cisco IOS-XRv 9000 () procesori
Koha e funksionimit të sistemit është 3 orë 22 minutaLidhim router-in me OpenDaylight
Shtimi ndodh në mënyrë plotësisht të ngjashme me imazhin vMX. Thjesht duhet të ndryshojmë emrat.
PUT kërkesa:

Pas pak kohe thërrasim GET kërkesën, për të verifikuar se gjithçka është lidhur:

Ndryshojmë konfigurimin
Të konfigurojmë konfigurimin e mëposhtëm:
!
router ospf LAB
mpls ldp auto-config
!Do të krijojmë POST kërkesa:
- Vija e kërkesës:
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 - Trupi i kërkesës (skeda Body):
{ "processes": { "process": [ { "process-name": "LAB", "default-vrf": { "process-scope": { "ldp-auto-config": [ null ] } } } ] } } - Në skedën Authorization duhet të vendosni parametrin
Basic Authdhe login/fjalëkalimin: admin/admin. - Në skedën Headers duhet të shtoni dy tituj:
- Prano aplikacioni/json
- Përmbajtja-Tip aplikacioni/json
Pas kryerjes së tij duhet të marrim statusin "204 No Content."
Të kontrollojmë se çfarë kemi arritur.
Për këtë do të krijojmë GET kërkesa:
- Vija e kërkesës:
MERR 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 - Në skedën Authorization duhet të vendosni parametrin
Basic Authdhe login/fjalëkalimin: admin/admin.
Pasi pas përfundimit, duhet të shihni si vijon:

Për të hequr konfigurimin, përdorim FSHI:
- Vija e kërkesës:
Fshij 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 - Në skedën Authorization duhet të vendosni parametrin
Basic Authdhe login/fjalëkalimin: admin/admin.
Përfundim
Në përmbledhje, siç e keni vënë re, procedurat e lidhjes së Cisco dhe Juniper me OpenDaylight nuk ndryshojnë — kjo hap një mundësi të gjerë për kreativitet. Duke filluar nga menaxhimi i konfigurimeve të të gjitha komponentëve të rrjetit dhe duke përfunduar me krijimin e politikave të veta të rrjetit.
Në këtë udhëzues kam paraqitur shembuj më të thjeshtë se si mund të ndërveproni me pajisjet e rrjetit duke përdorur OpenDaylight. Pa dyshim, kërkesat nga shembujt e paraqitur mund të bëhen shumë më të komplikuara dhe të konfiguroni shërbime të tëra me një klikim — gjithçka është e kufizuar vetëm nga imagjinata juaj.
To be continued...
P.S.
Nëse ndonjëherë e dini tashmë të gjithë këtë ose, përkundrazi, e keni kaluar dhe ODL ju ka prekur thellë në shpirt, atëherë rekomandoj të shikoni drejt zhvillimit të aplikacioneve mbi kontrollorin ODL. Mund të filloni .
Eksperimente të suksesshme!
Lista e literaturës
- / Brian Linkletter
- OpenDaylight Cookbook / Mathieu Lemay, Alexis de Talhouet, et al
- Programabiliteti i Rrjetit me YANG / Benoît Claise, Loe Clarke, Jan Lindblad
- Mësimi i XML, Botimi i Dytë / Erik T. Ray
- DevOps Efektiv / Jennifer Davis, Ryn Daniels
Burimi: habr.com

