
V tomto článku vám ukážu, jak nastavit OpenDaylight pracovat se síťovým zařízením a také ukázat, jak je používat Listonoš a jednoduché RESTCONF toto zařízení lze ovládat. Nebudeme pracovat s hardwarem, ale místo toho nasadíme malé virtuální laboratoře s využitím jediného routeru Vrnetlab přes Ubuntu 20.04 LTS.
Podrobné nastavení ukážu nejprve na příkladu routeru Juniper vMX 20.1R1.11a poté jej porovnáme s nastavením Cisco xRV9000 7.0.2.
Obsah
- Nezbytné znalosti
- část 1: krátce diskutujte OpenDaylight (dále ODL), Listonoš и Vrnetlab a proč je potřebujeme
- část 2: popis virtuální laboratoře
- část 3: přizpůsobit OpenDaylight
- část 4: přizpůsobit Vrnetlab
- část 5: používáním Listonoš připojit virtuální router (Juniper vMX) Komu ODL
- část 6: získat a změnit konfiguraci routeru pomocí Listonoš и ODL
- část 7: přidejte Cisco xRV9000
- Závěr
- PS
- Bibliografie
Nezbytné znalosti
Aby se článek nezměnil v list, vynechal jsem některé technické detaily (s odkazy na literaturu, kde si o nich můžete přečíst).
V této souvislosti vám nabízím témata, která by bylo dobré (ale téměř ne nutné) před čtením znát:
- ,
- /
Část 1: trocha teorie

- Otevřená platforma SDN pro správu a automatizaci všech druhů sítí, podporovaná o Linux Nadace
- Java uvnitř
- Na základě modelem řízené úrovně abstrakce služeb (MD-SAL)
- Používá modely YANG k automatickému generování RESTCONF API pro síťová zařízení
Hlavní modul pro správu sítě. Právě přes něj budeme komunikovat s připojenými zařízeními. Spravováno přes vlastní API.
Můžete si přečíst více o OpenDaylight .

- Nástroj pro testování API
- Jednoduché a snadno použitelné rozhraní
V našem případě nás zajímá jako prostředek pro odesílání REST požadavků do OpenDaylight API. Požadavky můžete samozřejmě posílat ručně, ale v Postman vypadá vše velmi přehledně a dokonale vyhovuje našim účelům.
Pro ty, kteří chtějí kopat: bylo na něm napsáno mnoho školicích materiálů ().

- Nástroj pro nasazení virtuálních směrovačů v Dockeru
- Podporuje: Cisco XRv, Juniper vMX, Arista vEOS, Nokia VSR atd.
- Open Source
Velmi zajímavý, ale málo známý nástroj. V našem případě ho použijeme k běžnému spuštění Juniper vMX a Cisco xRV9000. Ubuntu 20.04 LTS.
Více si o tom můžete přečíst na .
Část 2: Lab
V tomto tutoriálu nastavíme následující systém:

Jak to funguje
- Juniper vMX vstává přístavní dělník kontejner (prostřednictvím Vrnetlab) a funguje jako nejběžnější virtuální router.
- ODL připojený k routeru a umožňuje vám jej ovládat.
- Listonoš spuštěn na samostatném stroji a přes něj posíláme příkazy ODL: připojení/odpojení routeru, změna konfigurace atd.
Komentář k zařízení systému
Juniper vMX и ODL vyžadují poměrně hodně zdrojů pro jejich stabilní provoz. Pouze jeden vMX žádá 6 Gb RAM a 4 jádra. Proto bylo rozhodnuto přesunout všechny „těžké váhy“ na samostatný stroj (Heulett Packard Enterprise MicroServer ProLiant Gen8, Ubuntu 20.04 LTS). Router na něm samozřejmě „neletí“, ale na malé experimenty výkon stačí.
Část 3: Nastavení OpenDaylight

Aktuální verze ODL v době psaní tohoto článku je Magnesium SR1
1) Nainstalujte Java Open JDK 11 (pro podrobnější instalaci )
ubuntu:~$ sudo apt install default-jdk2) Najděte a stáhněte si nejnovější sestavení ODL
3) Rozbalte stažený archiv
4) Přejděte do výsledného adresáře
5) Spusťte ./bin/karaf
V tomto kroku ODL by se mělo spustit a ocitneme se v konzoli (pro přístup zvenčí slouží port 8181, který později využijeme).
Dále nainstalujte Vlastnosti ODLnavržený pro práci s protokoly NETCONF и RESTCONF. Chcete-li to provést v konzole ODL provádíme:
opendaylight-user@root> feature:install odl-netconf-topology odl-restconf-allToto je nejjednodušší nastavení. ODL dokončeno. (Další podrobnosti viz ).
Část 4: Nastavení Vrnetlab

Příprava systému
Před instalací Vrnetlab musíte nainstalovat balíčky potřebné pro jeho provoz. Jako , , :
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.ioInstalace Vrnetlab
Chcete-li nainstalovat Vrnetlab naklonujte odpovídající úložiště z github:
ubuntu:~$ cd ~
ubuntu:~$ git clone https://github.com/plajjan/vrnetlab.gitPřejděte do adresáře vrnetlab:
ubuntu:~$ cd ~/vrnetlabZde můžete vidět všechny skripty potřebné ke spuštění. Vezměte prosím na vědomí, že pro každý typ routeru byl vytvořen odpovídající adresář:
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 xrv9kVytvořte image routeru
Každý router, který je podporován Vrnetlab, má svůj vlastní jedinečný postup nastavení. Když Juniper vMX stačí nahrát archiv .tgz s routerem (můžete si jej stáhnout z ) do adresáře vmx a spusťte příkaz make:
ubuntu:~$ cd ~/vrnetlab/vmx
ubuntu:~$ # Копируем в эту директорию .tgz архив с роутером
ubuntu:~$ sudo makeBudování obrazu vMX bude trvat asi 10-20 minut. Je čas jít na kávu!
Proč tak dlouho, ptáte se?
Překlad autor na tuto otázku:
"Je to proto, že při prvním spuštění VCP (Control Plane) načte konfigurační soubor, který určuje, zda poběží jako VRR VCP ve vMX. Dříve se toto spouštění provádělo během spouštění Dockeru, ale to znamenalo, že VCP byl vždy jednou restartován předtím, než byl virtuální router k dispozici, což mělo za následek dlouhou dobu spouštění (asi 5 minut) Nyní se první spuštění VCP provádí během sestavení obrazu Docker, a protože sestavení Dockeru nelze spustit pomocí - -privilegovaná možnost, to znamená, že qemu funguje bez hardwarové akcelerace KVM a sestavení tedy trvá velmi dlouho. Během tohoto procesu se vydává mnoho protokolů, takže alespoň vidíte, co se děje. Myslím, že dlouhé sestavení není tak děsivé, protože vytvoříme obrázek jednou, ale spustíme mnoho."
Poté, co uvidíte obrázek našeho routeru v přístavní dělník:
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 101MBSpusťte kontejner vr-vmx
Začneme příkazem:
ubuntu:~$ sudo docker run -d --privileged --name jun01 b1b2369b453cDále můžeme vidět informace o aktivních kontejnerech:
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 jun01Připojování k routeru
IP adresu síťového rozhraní routeru lze získat pomocí následujícího příkazu:
ubuntu:~$ sudo docker inspect --format '{{.NetworkSettings.IPAddress}}' jun01
172.17.0.2výchozí, Vrnetlab vytvoří uživatele na routeru vrnetlab/VR-netlab9.
Spojení s 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.11Tím je nastavení routeru dokončeno.
Doporučení k instalaci pro routery různých výrobců naleznete na v příslušných adresářích.
Část 5: Pošťák - připojte router k OpenDaylight
Instalace pošťáka
Pro instalaci stačí stáhnout aplikaci .
Připojení routeru k ODL
Pojďme tvořit PUT poptávka:

- Řetězec dotazu:
PUT http://10.132.1.202:8181/restconf/config/network-topology:network-topology/topology/topology-netconf/node/jun01 - Tělo požadavku (karta Tělo):
<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> - Na záložce Autorizace musíte nastavit parametr
Basic Autha přihlašovací jméno/heslo: admin/admin. Toto je nutné pro přístup k ODL:

- Na kartě Záhlaví je třeba přidat dvě záhlaví:
- Přijmout aplikaci/xml
- Aplikace typu obsahu/xml
Naše žádost byla vznesena. Poslali jsme. Pokud bylo vše správně nakonfigurováno, měli bychom vrátit stav „201 Created“:
![]()
Co tato žádost dělá?
Uvnitř vytvoříme uzel ODL s parametry skutečného routeru, ke kterému chceme přistupovat.
xmlns="urn:TBD:params:xml:ns:yang:network-topology"
xmlns="urn:opendaylight:netconf-node-topology"Toto jsou interní jmenné prostory XML (jmenný prostor XML) pro ODL podle kterého vytváří uzel.
Dále je to název routeru node-id, adresa routeru - hostitel a tak dále.
Nejzajímavější řádek je poslední. Adresář Schema-cache- vytvoří adresář, kam se stahují všechny soubory Schéma YANG připojený router. Najdete je v $ODL_ROOT/cache/jun01_cache.
Kontrola připojení routeru
Pojďme tvořit GET poptávka:
- Řetězec dotazu:
GET http://10.132.1.202:8181/restconf/operational/network-topology:network-topology/topology/topology-netconf/ - Na záložce Autorizace musíte nastavit parametr
Basic Autha přihlašovací jméno/heslo: admin/admin.
Poslali jsme. Měl by obdržet stav „200 OK“ a seznam všech podporovaných zařízením Schéma YANG:

Komentář: Chcete-li vidět to druhé, v mém případě bylo nutné počkat asi 10 minut po provedení PUTaž do všech schéma YANG vyložit na ODL. Až do tohoto bodu, při provádění tohoto GET dotaz zobrazí následující:

Smažte router
Pojďme tvořit DELETE poptávka:
- Řetězec dotazu:
DELETE http://10.132.1.202:8181/restconf/config/network-topology:network-topology/topology/topology-netconf/node/jun01 - Na záložce Autorizace musíte nastavit parametr
Basic Autha přihlašovací jméno/heslo: admin/admin.
Část 6: Změňte konfiguraci routeru
Získání konfigurace
Pojďme tvořit GET poptávka:
- Řetězec dotazu:
GET http://10.132.1.202:8181/restconf/config/network-topology:network-topology/topology/topology-netconf/node/jun01/yang-ext:mount/ - Na záložce Autorizace musíte nastavit parametr
Basic Autha přihlašovací jméno/heslo: admin/admin.
Poslali jsme. Mělo by se zobrazit stav „200 OK“ a konfigurace routeru:

Vytvořte konfiguraci
Jako příklad vytvoříme následující konfiguraci a upravíme ji:
protocols {
bgp {
disable;
shutdown;
}
}Pojďme tvořit POST poptávka:
- Řetězec dotazu:
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 - Tělo požadavku (karta Tělo):
<bgp xmlns="http://yang.juniper.net/junos/conf/protocols"> <disable/> <shutdown> </shutdown> </bgp> - Na záložce Autorizace musíte nastavit parametr
Basic Autha přihlašovací jméno/heslo: admin/admin. - Na kartě Záhlaví je třeba přidat dvě záhlaví:
- Přijmout aplikaci/xml
- Aplikace typu obsahu/xml
Po odeslání by měli obdržet stav „204 Žádný obsah“
Chcete-li zkontrolovat, zda se konfigurace změnila, můžete použít předchozí dotaz. Ale například vytvoříme další, který bude zobrazovat informace pouze o protokolech nakonfigurovaných na routeru.
Pojďme tvořit GET poptávka:
- Řetězec dotazu:
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 - Na záložce Autorizace musíte nastavit parametr
Basic Autha přihlašovací jméno/heslo: admin/admin.
Po provedení požadavku uvidíme následující:

Změňte konfiguraci
Změňme informace o protokolu BGP. Po našich akcích to bude vypadat takto:
protocols {
bgp {
disable;
}
}Pojďme tvořit PUT poptávka:
- Řetězec dotazu:
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 - Tělo požadavku (karta Tělo):
<protocols xmlns="http://yang.juniper.net/junos/conf/protocols"> <bgp> <disable/> </bgp> </protocols> - Na záložce Autorizace musíte nastavit parametr
Basic Autha přihlašovací jméno/heslo: admin/admin. - Na kartě Záhlaví je třeba přidat dvě záhlaví:
- Přijmout aplikaci/xml
- Aplikace typu obsahu/xml
Pomocí předchozího GET žádost, vidíme změny:

Smažte konfiguraci
Pojďme tvořit DELETE poptávka:
- Řetězec dotazu:
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 - Na záložce Autorizace musíte nastavit parametr
Basic Autha přihlašovací jméno/heslo: admin/admin.
Při zavolání GET požadavek s informacemi o protokolech, uvidíme následující:

Dodatek:
Pro změnu konfigurace není nutné zasílat tělo požadavku ve formátu XML. To lze provést i ve formátu JSON.
K tomu například v dotazu PUT pro změnu konfigurace nahraďte tělo požadavku:
{
"junos-conf-protocols:protocols": {
"bgp": {
"description" : "Changed in postman"
}
}
}Nezapomeňte změnit záhlaví na kartě Záhlaví na:
- Přijmout aplikaci/json
- Aplikace/json typu obsahu
Po odeslání získáme následující výsledek (podíváme se na odpověď pomocí GET žádost):

Část 7: Přidání Cisco xRV9000
Co jsme všichni o Juniper, ano Juniper? Pojďme mluvit o Cisco!
Našel jsem xRV9000 verze 7.0.2 (bestie, která potřebuje 8Gb RAM a 4 jádra. Není volně dostupná, tak kontaktujte ) - pojďme to spustit.
Provoz kontejneru
Proces vytváření kontejneru Docker se prakticky neliší od Juniperu. Podobně pustíme soubor .qcow2 s routerem do adresáře odpovídajícího jeho názvu (v tomto případě xrv9k) a provedeme příkaz make docker-image.
Po několika minutách vidíme, že obrázek byl vytvořen:
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 101MBSpustíme kontejner:
ubuntu:~$ sudo docker run -d --privileged --name xrv01 54debc7973fcPo chvíli vidíme, že kontejner začal:
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 xrv01Připojte se přes 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 minutesPřipojení routeru k OpenDaylight
Přidávání probíhá zcela podobným způsobem u vMX. Jen musíme změnit jména.
PUT poptávka:

Zavolej po chvíli GET dotaz na kontrolu, zda je vše připojeno:

Změňte konfiguraci
Nastavíme následující konfiguraci:
!
router ospf LAB
mpls ldp auto-config
!Pojďme tvořit POST poptávka:
- Řetězec dotazu:
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 - Tělo požadavku (karta Tělo):
{ "processes": { "process": [ { "process-name": "LAB", "default-vrf": { "process-scope": { "ldp-auto-config": [ null ] } } } ] } } - Na záložce Autorizace musíte nastavit parametr
Basic Autha přihlašovací jméno/heslo: admin/admin. - Na kartě Záhlaví je třeba přidat dvě záhlaví:
- Přijmout aplikaci/json
- Aplikace/json typu obsahu
Po jeho provedení by měli obdržet stav „204 Žádný obsah“.
Pojďme zkontrolovat, co máme.
K tomu vytvoříme GET poptávka:
- Řetězec dotazu:
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 - Na záložce Autorizace musíte nastavit parametr
Basic Autha přihlašovací jméno/heslo: admin/admin.
Po provedení byste měli vidět následující:

Chcete-li odebrat konfiguraci, použijte DELETE:
- Řetězec dotazu:
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 - Na záložce Autorizace musíte nastavit parametr
Basic Autha přihlašovací jméno/heslo: admin/admin.
Závěr
Celkově se, jak jste si mohli všimnout, postupy připojení Cisco a Juniper k OpenDaylight neliší – otevírá se tak docela široký prostor pro kreativitu. Počínaje správou konfigurace všech síťových komponent a konče tvorbou vlastních síťových politik.
V tomto tutoriálu jsem uvedl nejjednodušší příklady toho, jak můžete komunikovat se síťovým zařízením pomocí OpenDaylight. Dotazy z výše uvedených příkladů lze bezesporu mnohem složitější a nastavit celé služby jedním kliknutím myši - vše je omezeno pouze vaší fantazií *
Chcete-li se pokračovat ...
PS
Pokud to všechno najednou už víte nebo naopak prošli a propadli duši ODL, pak doporučuji poohlédnout se po vývoji aplikací na ODL kontroleru. Můžete začít .
Úspěšné experimenty!
Reference
- /Brian Linkletter
- OpenDaylight kuchařka / Mathieu Lemay, Alexis de Talhouet, et al
- Programovatelnost sítě s YANG / Benoît Claise, Loe Clarke, Jan Lindblad
- Učení XML, druhé vydání / Erik T. Ray
- Efektivní DevOps / Jennifer Davis, Ryn Daniels
Zdroj: www.habr.com

