
W tym artykule powiem Ci jak skonfigurować OpenDaylight do pracy ze sprzętem sieciowym i pokażę Ci również, jak go używać Listonosz i proste KONF.REST żąda, aby ten sprzęt mógł być kontrolowany. Nie będziemy pracować ze sprzętem, ale zamiast tego wdrożymy małe laboratoria wirtualne z jednym routerem, korzystając z Laboratorium sieciowe przez Ubuntu 20.04 LTS.
Najpierw pokażę szczegółowe ustawienia na przykładzie routera. Juniper vMX 20.1R1.11, a następnie porównujemy go z ustawieniem Cisco xRV9000 7.0.2.
Zawartość
- Niezbędna wiedza
- Часть 1:krótko omówić OpenDaylight (zwany dalej ODL), Listonosz и Laboratorium sieciowe i dlaczego ich potrzebujemy
- Часть 2:opis wirtualnego laboratorium
- Часть 3:ustawiamy OpenDaylight
- Часть 4:ustawiamy Laboratorium sieciowe
- Часть 5:za pomocą Listonosz podłącz wirtualny router (Jałowiec vMX) Do ODL
- Часть 6:pobierz i zmień konfigurację routera za pomocą Listonosz и ODL
- Часть 7:dodanie Cisco xRV9000
- wniosek
- PS
- Bibliografia
Niezbędna wiedza
Aby artykuł nie stał się długą opowieścią, pominąłem pewne szczegóły techniczne (i podałem odnośniki do literatury, w której można o nich przeczytać).
W związku z tym proponuję Ci tematy, które warto (choć nie jest to konieczne) poznać przed lekturą:
- ,
- /
Część 1: Trochę teorii

- Otwarta platforma SDN do zarządzania i automatyzacji wszelkiego rodzaju sieci, obsługiwana przez Linux Foundation
- Jawa w środku
- Na podstawie poziomu abstrakcji usług opartego na modelach (MD-SAL)
- Wykorzystuje modele YANG do automatycznego generowania interfejsów API RESTCONF dla urządzeń sieciowych
Główny moduł do zarządzania siecią. Za jego pośrednictwem będziemy komunikować się z urządzeniami podłączonymi do sieci. Zarządzane poprzez własne API.
Więcej informacji na temat OpenDaylight można znaleźć .

- Narzędzie do testowania API
- Prosty i łatwy w użyciu interfejs
W naszym przypadku interesuje nas on jako sposób na wysyłanie żądań REST do API OpenDaylight. Oczywiście, możesz wysyłać prośby ręcznie, ale w programie Postman wszystko wygląda bardzo przejrzyście i idealnie nadaje się do naszych celów.
Dla tych, którzy chcą zgłębić temat: istnieje wiele materiałów edukacyjnych na ten temat ().

- Narzędzie do wdrażania wirtualnych routerów w Dockerze
- Obsługuje: Cisco XRv, Juniper vMX, Arista vEOS, Nokia VSR i inne.
- open Source
Bardzo ciekawe, choć mało znane narzędzie. W naszym przypadku użyjemy go do uruchomienia Juniper vMX i Cisco xRV9000 na zwykłym komputerze. Ubuntu 20.04 LTS.
Więcej na ten temat możesz przeczytać tutaj .
Część 2: Praca laboratoryjna
W tym samouczku skonfigurujemy następujący system:

Jak to działa
- Jałowiec vMX wzrasta w Doker pojemnik (z środkami Laboratorium sieciowe) i działa jak standardowy wirtualny router.
- ODL podłączony do routera i umożliwia sterowanie nim.
- Listonosz działa na oddzielnej maszynie i wysyłamy przez nią polecenia ODL: aby podłączyć/usunąć router, zmienić konfigurację, itp.
Komentarz do urządzenia systemowego
Jałowiec vMX и ODL do stabilnego działania wymagają sporej ilości zasobów. Tylko jeden vMX wymaga 6 GB pamięci RAM i 4 rdzeni. Dlatego postanowiono przenieść wszystkie „ciężkie” urządzenia na osobną maszynę (Heulett Packard Enterprise MicroServer ProLiant Gen8, Ubuntu 20.04 LTS). Router oczywiście na nim nie „lata”, ale jego wydajność jest wystarczająca do małych eksperymentów.
Część 3: Konfigurowanie OpenDaylight

Aktualna wersja ODL w momencie pisania tego tekstu to Magnesium SR1
1) Zainstaluj Java OpenJDK 11 (aby uzyskać bardziej szczegółową instalację )
ubuntu:~$ sudo apt install default-jdk2) Znajdź i pobierz najnowszą wersję ODL
3) Rozpakuj pobrane archiwum
4) Przejdź do katalogu wynikowego
5) Uruchom ./bin/karaf
Na tym etapie ODL powinien się uruchomić i znajdziemy się w konsoli (Do dostępu zewnętrznego używany jest port 8181, którego użyjemy później).
Następnie instalujemy Funkcje ODL, zaprojektowany do pracy z protokołami NETKONF и KONF.REST. Aby to zrobić w konsoli ODL wykonujemy:
opendaylight-user@root> feature:install odl-netconf-topology odl-restconf-allTo jest najprostsza konfiguracja. ODL zakończony. (Więcej na ten temat możesz przeczytać tutaj ).
Część 4: Konfigurowanie Vrnetlab

Przygotowanie systemu
Przed montażem Laboratorium sieciowe Do jego działania konieczna jest instalacja pakietów niezbędnych do jego uruchomienia. Jak na przykład , , :
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.ioInstalowanie Vrnetlab
Do instalacji Laboratorium sieciowe sklonuj odpowiednie repozytorium z githuba:
ubuntu:~$ cd ~
ubuntu:~$ git clone https://github.com/plajjan/vrnetlab.gitPrzejdź do katalogu wirtualna sieć:
ubuntu:~$ cd ~/vrnetlabTutaj możesz zobaczyć wszystkie skrypty potrzebne do uruchomienia. Należy pamiętać, że dla każdego typu routera utworzono odpowiedni 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 xrv9kUtwórz obraz routera
Każdy obsługiwany router Laboratorium sieciowe, ma swoją własną, unikalną procedurę konfiguracji. W przypadku Jałowiec vMX musimy tylko przesłać archiwum .tgz za pomocą routera (możesz je pobrać z ) do katalogu vmx i uruchom polecenie make:
ubuntu:~$ cd ~/vrnetlab/vmx
ubuntu:~$ # Копируем в эту директорию .tgz архив с роутером
ubuntu:~$ sudo makeSkładanie obrazu vMX zajmie to około 10-20 minut. Czas zrobić sobie kawę!
Dlaczego tak długo, pytasz?
Tłumaczenie odpowiedź autora na to pytanie:
„Dzieje się tak, ponieważ VCP (Control Plane) uruchamia się po raz pierwszy, odczytuje plik konfiguracyjny, który określa, czy będzie działać jako VRR VCP w vMX. Wcześniej to uruchomienie było wykonywane podczas uruchamiania Dockera, ale oznaczało to, że VCP był zawsze restartowany raz, zanim wirtualny router był dostępny, co prowadziło do długich czasów rozruchu (około 5 minut). Teraz pierwsze uruchomienie VCP jest wykonywane podczas kompilacji obrazu Dockera, a ponieważ kompilacji Dockera nie można uruchamiać z opcją --privileged, oznacza to, że qemu działa bez sprzętowej akceleracji KVM, a zatem kompilacja trwa bardzo długo. Podczas tego procesu jest dużo danych wyjściowych dziennika, więc przynajmniej można zobaczyć, co się dzieje. Myślę, że długa kompilacja nie jest taka zła, ponieważ budujemy obraz raz i uruchamiamy go wiele razy”.
Następnie będziesz mógł zobaczyć obraz naszego routera w Doker:
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 101MBUruchamianie kontenera vr-vmx
Uruchom poleceniem:
ubuntu:~$ sudo docker run -d --privileged --name jun01 b1b2369b453cNastępnie możemy przyjrzeć się informacjom o aktywnych kontenerach:
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 jun01Łączenie z routerem
Adres IP interfejsu sieciowego routera można uzyskać za pomocą następującego polecenia:
ubuntu:~$ sudo docker inspect --format '{{.NetworkSettings.IPAddress}}' jun01
172.17.0.2Domyślny, Laboratorium sieciowe tworzy użytkownika na routerze VR-netlab9.
Połącz za pomocą 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.11To kończy konfigurację routera.
Zalecenia dotyczące instalacji routerów różnych dostawców można znaleźć na stronie w odpowiednich katalogach.
Część 5: Postman — podłączanie routera do OpenDaylight
Instalowanie Postmana
Aby zainstalować, wystarczy pobrać aplikację .
Podłączanie routera do ODL
stwórzmy PUT wniosek:

- Ciąg zapytania:
PUT http://10.132.1.202:8181/restconf/config/network-topology:network-topology/topology/topology-netconf/node/jun01 - Treść żądania (zakładka Body):
<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 karcie Autoryzacja należy ustawić parametr
Basic Authi login/hasło: admin/admin. Jest to wymagane do uzyskania dostępu do ODL:

- Na karcie Nagłówki należy dodać dwa nagłówki:
- Akceptuj aplikację/xml
- Typ zawartości aplikacja/xml
Nasze zapytanie zostało wygenerowane. Wysyłamy. Jeżeli wszystko zostało skonfigurowane poprawnie, powinniśmy otrzymać status „201 Utworzono”:
![]()
Co robi to zapytanie?
Tworzymy węzeł wewnątrz ODL z parametrami prawdziwego routera, do którego chcemy uzyskać dostęp.
xmlns="urn:TBD:params:xml:ns:yang:network-topology"
xmlns="urn:opendaylight:netconf-node-topology"Są to wewnętrzne przestrzenie nazw. XML (Przestrzeń nazw XML) dla ODL zgodnie z którym tworzy węzeł.
Ponadto nazwa routera jest odpowiednia identyfikator węzła, adres routera — gospodarz i tak dalej.
Najciekawsza jest ostatnia linijka. Schemat-katalog-pamięci-podręcznej tworzy katalog, do którego pobierane są wszystkie pliki Schemat YANG podłączony router. Można je znaleźć w $ODL_ROOT/cache/jun01_cache.
Sprawdzanie połączenia z routerem
stwórzmy GET wniosek:
- Ciąg zapytania:
GET http://10.132.1.202:8181/restconf/operational/network-topology:network-topology/topology/topology-netconf/ - Na karcie Autoryzacja należy ustawić parametr
Basic Authi login/hasło: admin/admin.
Wysyłamy. Powinien otrzymać status „200 OK” i listę wszystkich obsługiwanych urządzeń Schemat YANG:

Komentarz:Aby zobaczyć to drugie, w moim przypadku konieczne było odczekanie około 10 minut po wykonaniu PUT, pa wszystkim Schemat YANG zostanie rozładowany na ODL. Do tego momentu podczas wykonywania tej czynności GET Zapytanie zwróci następujące wyniki:

Usuwanie routera
stwórzmy DELETE wniosek:
- Ciąg zapytania:
DELETE http://10.132.1.202:8181/restconf/config/network-topology:network-topology/topology/topology-netconf/node/jun01 - Na karcie Autoryzacja należy ustawić parametr
Basic Authi login/hasło: admin/admin.
Część 6: Zmiana konfiguracji routera
Pobieranie konfiguracji
stwórzmy GET wniosek:
- Ciąg zapytania:
GET http://10.132.1.202:8181/restconf/config/network-topology:network-topology/topology/topology-netconf/node/jun01/yang-ext:mount/ - Na karcie Autoryzacja należy ustawić parametr
Basic Authi login/hasło: admin/admin.
Wysyłamy. Powinieneś otrzymać status „200 OK” i konfigurację routera:

Utwórz konfigurację
Jako przykład utwórzmy następującą konfigurację i ją zmodyfikujmy:
protocols {
bgp {
disable;
shutdown;
}
}stwórzmy POST wniosek:
- Ciąg zapytania:
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 - Treść żądania (zakładka Body):
<bgp xmlns="http://yang.juniper.net/junos/conf/protocols"> <disable/> <shutdown> </shutdown> </bgp> - Na karcie Autoryzacja należy ustawić parametr
Basic Authi login/hasło: admin/admin. - Na karcie Nagłówki należy dodać dwa nagłówki:
- Akceptuj aplikację/xml
- Typ zawartości aplikacja/xml
Po wysłaniu powinieneś otrzymać status „204 Brak zawartości”
Aby sprawdzić czy konfiguracja uległa zmianie, możesz skorzystać z poprzedniego zapytania. Jednak dla przykładu utworzymy inny, który będzie wyświetlał informacje tylko o protokołach skonfigurowanych na routerze.
stwórzmy GET wniosek:
- Ciąg zapytania:
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 karcie Autoryzacja należy ustawić parametr
Basic Authi login/hasło: admin/admin.
Po wykonaniu zapytania zobaczymy następujący widok:

Zmiana konfiguracji
Zmieńmy informacje o protokole BGP. Po wykonaniu naszych czynności będzie to wyglądać tak:
protocols {
bgp {
disable;
}
}stwórzmy PUT wniosek:
- Ciąg zapytania:
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 - Treść żądania (zakładka Body):
<protocols xmlns="http://yang.juniper.net/junos/conf/protocols"> <bgp> <disable/> </bgp> </protocols> - Na karcie Autoryzacja należy ustawić parametr
Basic Authi login/hasło: admin/admin. - Na karcie Nagłówki należy dodać dwa nagłówki:
- Akceptuj aplikację/xml
- Typ zawartości aplikacja/xml
Korzystając z poprzedniego GET żądanie, widzimy zmiany:

Usuń konfigurację
stwórzmy DELETE wniosek:
- Ciąg zapytania:
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 karcie Autoryzacja należy ustawić parametr
Basic Authi login/hasło: admin/admin.
Kiedy dzwonisz GET poproszeni o informacje o protokołach zobaczymy następujące wyniki:

Dodanie:
Aby zmienić konfigurację, nie jest konieczne wysyłanie treści żądania w formacie XML. Można to również zrobić w formacie JSON.
W tym celu na przykład w żądaniu PUT aby zmienić konfigurację zastępujemy treść żądania następującą:
{
"junos-conf-protocols:protocols": {
"bgp": {
"description" : "Changed in postman"
}
}
}Nie zapomnij zmienić nagłówków na karcie Nagłówki na:
- Akceptuj aplikację/json
- Typ zawartości aplikacja/json
Po wysłaniu otrzymamy następujący wynik (Odpowiedź sprawdzamy za pomocą GET wniosek):

Część 7: Dodawanie Cisco xRV9000
Czemu wszyscy rozmawiamy o jałowcu, jałowcu? Porozmawiajmy o Cisco!
Znalazłem wersję xRV9000 7.0.2 (bestia, która potrzebuje 8 GB pamięci RAM i 4 rdzeni). Nie jest dostępna bezpłatnie, więc skontaktuj się z ) - uruchomimy go.
Prowadzenie kontenera
Proces tworzenia kontenera Docker prawie niczym nie różni się od procesu tworzenia kontenera Juniper. Podobnie wrzucamy plik .qcow2 z routerem do katalogu odpowiadającego jego nazwie (w tym przypadku xrv9k) i wykonujemy polecenie make docker-image.
Po kilku minutach zobaczymy, że obraz został utworzony:
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 101MBUruchamiamy kontener:
ubuntu:~$ sudo docker run -d --privileged --name xrv01 54debc7973fcPo pewnym czasie widzimy, że kontener został uruchomiony:
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 xrv01Połącz się przez 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 minutesPodłączanie routera do OpenDaylight
Dodawanie odbywa się w sposób dokładnie podobny do vMX. Wystarczy zmienić nazwy.
PUT wniosek:

Po pewnym czasie dzwonimy GET zapytanie sprawdzające czy wszystko jest podłączone:

Zmiana konfiguracji
Ustawmy następującą konfigurację:
!
router ospf LAB
mpls ldp auto-config
!stwórzmy POST wniosek:
- Ciąg zapytania:
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 - Treść żądania (zakładka Body):
{ "processes": { "process": [ { "process-name": "LAB", "default-vrf": { "process-scope": { "ldp-auto-config": [ null ] } } } ] } } - Na karcie Autoryzacja należy ustawić parametr
Basic Authi login/hasło: admin/admin. - Na karcie Nagłówki należy dodać dwa nagłówki:
- Akceptuj aplikację/json
- Typ zawartości aplikacja/json
Po jego wykonaniu powinieneś otrzymać status "204 Brak zawartości".
Sprawdźmy, co mamy.
Aby to zrobić, utworzymy GET wniosek:
- Ciąg zapytania:
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 karcie Autoryzacja należy ustawić parametr
Basic Authi login/hasło: admin/admin.
Po wykonaniu polecenia powinieneś zobaczyć następujące informacje:

Aby usunąć konfigurację, użyj DELETE:
- Ciąg zapytania:
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 karcie Autoryzacja należy ustawić parametr
Basic Authi login/hasło: admin/admin.
wniosek
Jak zapewne zauważyłeś, procedury podłączania Cisco i Juniper do OpenDaylight niczym się nie różnią, co otwiera ogromne pole do popisu dla kreatywności. Od zarządzania konfiguracją wszystkich komponentów sieciowych po tworzenie własnych zasad sieciowych.
W tym samouczku podałem podstawowe przykłady interakcji ze sprzętem sieciowym za pomocą OpenDaylight. Oczywiście zapytania z podanych przykładów można uczynić dużo bardziej złożonymi, a całe usługi można skonfigurować jednym kliknięciem myszy - wszystko ogranicza jedynie Twoja wyobraźnia*
To be continued ...
PS
Jeśli już to wszystko wiesz lub wręcz przeciwnie, masz to już za sobą i ODL zdobył Twoje serce, to polecam zainteresować się tworzeniem aplikacji na kontrolerze ODL. Możemy zacząć .
Udane eksperymenty!
Referencje
- / Brian Linkletter
- Książka kucharska OpenDaylight / Mathieu Lemay, Alexis de Talhouet i in.
- Programowalność sieciowa z YANG / Benoît Claise, Loe Clarke, Jan Lindblad
- Nauka XML, drugie wydanie / Erik T. Ray
- Efektywne DevOps / Jennifer Davis, Ryn Daniels
Źródło: www.habr.com

