Automatisering af netværkstjenester eller hvordan man opretter et virtuelt laboratorium med OpenDaylight, Postman og Vrnetlab

Automatisering af netværkstjenester eller hvordan man opretter et virtuelt laboratorium med OpenDaylight, Postman og Vrnetlab

I denne artikel vil jeg forklare, hvordan man konfigurerer OpenDaylight til arbejde med netværksudstyr, samt vise, hvordan man kan styre dette udstyr ved hjælp af Postman og enkle RESTCONF anmodninger. Vi vil ikke arbejde med hardware, men i stedet opsætte små virtuelle laboratorier med en enkelt router ved hjælp af Vrnetlab ovenpå Ubuntu 20.04 LTS.

Jeg vil først vise den detaljerede opsætning med eksemplet på routeren Juniper vMX 20.1R1.11, og derefter sammenligne den med opsætningen af Cisco xRV9000 7.0.2.

Indhold

  • Nødvendige færdigheder
  • Del 1: kort diskussion om OpenDaylight (herefter ODL), Postman og Vrnetlab og hvorfor vi får brug for dem
  • Del 2: beskrivelse af det virtuelle laboratorium
  • Del 3: konfigurerer OpenDaylight
  • Del 4: konfigurerer Vrnetlab
  • Del 5: ved hjælp af Postman tilslutter den virtuelle router (Juniper vMX) til ODL
  • Del 6: modtager og ændrer routerens konfiguration ved hjælp af Postman og ODL
  • Del 7: tilføjer Cisco xRV9000
  • Konklusion
  • P.S.
  • Litteraturliste

Nødvendige færdigheder

For at artiklen ikke skal blive en lang tekst, har jeg udeladt nogle tekniske detaljer (med links til litteratur, hvor man kan læse om dem).

Derfor foreslår jeg emner, som det ville være godt at (men ikke strengt nødvendigt) kende til, inden man læser:

Del 1: lidt teori

Automatisering af netværkstjenester eller hvordan man opretter et virtuelt laboratorium med OpenDaylight, Postman og Vrnetlab

  • En åben SDN-platform til styring og automatisering af forskellige netværk, støttet af Linux Foundation
  • Java indeni
  • Basert på Model-Driven Service Abstraction Level (MD-SAL)
  • Bruger YANG-modeller til automatisk at oprette RESTCONF API for netværksenheder

Hovedmodulet til netværksstyring. Det er gennem denne, vi vil kommunikere med de tilsluttede enheder. Styres gennem sin egen API.

Man kan læse mere om OpenDaylight her.

Automatisering af netværkstjenester eller hvordan man opretter et virtuelt laboratorium med OpenDaylight, Postman og Vrnetlab

  • Værktøj til API-testning
  • En enkel og brugervenlig grænseflade

I vores tilfælde er det interessant som middel til at sende REST-anmodninger til OpenDaylight API'et. Man kan selvfølgelig også sende anmodninger manuelt, men i Postman ser alt meget mere overskueligt ud og passer perfekt til vores formål.

For dem der ønsker at grave dybere: der er skrevet mange vejledningsmaterialer om det (for eksempel).

Automatisering af netværkstjenester eller hvordan man opretter et virtuelt laboratorium med OpenDaylight, Postman og Vrnetlab

  • Værktøj til opsætning af virtuelle routere i Docker
  • Understøtter: Cisco XRv, Juniper vMX, Arista vEOS, Nokia VSR m.fl.
  • Open Source

Meget interessant, men lidt kendt værktøj. I vores tilfælde vil vi med hjælp fra det starte Juniper vMX og Cisco xRV9000 på almindelig Ubuntu 20.04 LTS.

Man kan læse mere om det på på projektets side.

Del 2: laboratoriearbejde

I denne tutorial vil vi konfigurere følgende system:

Automatisering af netværkstjenester eller hvordan man opretter et virtuelt laboratorium med OpenDaylight, Postman og Vrnetlab

Hvordan fungerer det

  • Juniper vMX stiger i Docker beholderen (med hjælp af Vrnetlab) og fungerer som en helt almindelig virtuel router.
  • ODL tilsluttet routeren og giver mulighed for at styre den.
  • Postman starter på en separat maskine, og gennem den sender vi kommandoer ODL: til at tilslutte/fjerne routeren, ændre konfigurationen osv.

Kommentar til systemets enhed

Juniper vMX og ODL kræver en del ressourcer for at fungere stabilt. Bare vMX beder om 6 Gb RAM og 4 kerner. Derfor blev det besluttet at flytte alle "tunge" enheder til en separat maskine (Heulett Packard Enterprise MicroServer ProLiant Gen8, Ubuntu 20.04 LTS). Routeren kører selvfølgelig ikke "hurtigt", men til små eksperimenter er ydeevnen tilstrækkelig.

Del 3: konfigurerer OpenDaylight

Automatisering af netværkstjenester eller hvordan man opretter et virtuelt laboratorium med OpenDaylight, Postman og Vrnetlab

Den aktuelle version af ODL på tidspunktet for skrivningen er - Magnesium SR1

1) Installerer Java OpenJDK 11 (for mere detaljeret installation herhen)

ubuntu:~$ sudo apt install default-jdk

2) Finder og downloader den nyeste opbygning ODL from here
3) Udpakker den downloadede arkiv
4) Går ind i den fåede mappe
5) Starter ./bin/karaf

På dette trin ODL skal starte, og vi vil befinde os i konsollen (Til ekstern adgang bruges port 8181, hvilket vi vil udnytte senere).

Derefter installerer vi ODL-funktioner, designet til at arbejde med protokoller. NETCONF og RESTCONFFor dette i konsollen ODL kører vi:

opendaylight-user@root> feature:install odl-netconf-topology odl-restconf-all

På dette er den enkleste opsætning ODL afsluttet. (Mere detaljeret kan det læses her).

Del 4: konfigurerer Vrnetlab

Automatisering af netværkstjenester eller hvordan man opretter et virtuelt laboratorium med OpenDaylight, Postman og Vrnetlab

Systemforberedelse

Før installationen Vrnetlab skal de nødvendige pakker til arbejdet installeres. Sådanne som Docker, git, sshpass:

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~$ 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.io

Installation af Vrnetlab

For installation Vrnetlab kloner vi det relevante repository fra github:

ubuntu:~$ cd ~
ubunt~$ git clone https://github.com/plajjan/vrnetlab.git

Går ind i mappen vrnetlab:

ubuntu:~$ cd ~/vrnetlab

Her kan du se alle scripts, der er nødvendige for at køre. Bemærk, at der er lavet en passende mappe for hver type router:

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              xrv9k

Opretter router image

Hver router, der understøttes Vrnetlab, har sin unikke opsætningsprocedure. I tilfælde af Juniper vMX er det tilstrækkeligt at placere .tgz arkivet med routeren (det kan downloades fra den officielle hjemmeside) i vmx-mappen og udføre kommandoen make:

ubuntu:~$ cd ~/vrnetlab/vmx
ubuntu:~$ # Kopier .tgz arkivet med routeren til denne mappe
ubuntu:~$ sudo make

Bygning af billedet vMX vil tage omkring 10-20 minutter. Det er et godt tidspunkt at lave en kop kaffe!

Hvorfor tager det så lang tid, spørger du?

Oversættelse svaret forfatteren til dette spørgsmål:

"Det skyldes, at ved første opstart læser VCP (Control Plane) konfigurationsfilen, der bestemmer, om den vil fungere som VRR VCP i vMX. Tidligere blev denne opstart udført under opstart af Docker, men det betød, at VCP altid blev genstartet en gang, før den virtuelle router blev tilgængelig, hvilket førte til længere boot-tid (omkring 5 minutter). Nu udføres den første opstart af VCP under bygning af Docker-billedet, og da Docker-bygningen ikke kan køres med parameteren --privileged, betyder det, at qemu kører uden hardwareacceleration fra KVM, og derfor tager bygningen meget lang tid. I denne proces vises mange logfiler, så du vil i det mindste kunne se, hvad der sker. Jeg tror, at den lange bygning ikke er så skræmmende, fordi vi kun opretter billedet én gang, men kører det mange gange."

Derefter vil vi kunne se billedet af vores 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         101MB

Starter vr-vmx container

Starter med kommandoen:

ubuntu:~$ sudo docker run -d --privileged --name jun01 b1b2369b453c

Herefter kan vi se oplysninger om aktive containere:

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

Tilslutter til routeren

IP-adressen til netværksgrænsefladen på routeren kan fås med følgende kommando:

ubuntu:~$ sudo docker inspect --format '{{.NetworkSettings.IPAddress}}' jun01
172.17.0.2

Som standard, Vrnetlab opretter en bruger på routeren vrnetlab/VR-netlab9.
Vi forbinder med ssh:

ubuntu:~$ ssh vrnetlab@172.17.0.2
Den autentiskhed af vært '172.17.0.2 (172.17.0.2)' kan ikke fastslås.
ECDSA nøglefingeraftryk er SHA256:g9Sfg/k5qGBTOX96WiCWyoJJO9FxjzXYspRoDPv+C0Y.
Er du sikker på, at du vil fortsætte med at forbinde (ja/nej/[fingeraftryk])? ja
Advarsel: Permanently added '172.17.0.2' (ECDSA) til listen over kendte værter.
Adgangskode:
--- JUNOS 20.1R1.11 Kerne 64-bit  JNPR-11.0-20200219.fb120e7_buil
vrnetlab> vis version
Model: vmx
Junos: 20.1R1.11

Hermed er opsætningen af routeren færdig.

Anbefalinger til installation for routere fra forskellige producenter kan findes på github-projektet i de relevante mapper.

Del 5: Postman – forbinder routeren til OpenDaylight

Installation af Postman

For at installere er det nok at downloade applikationen from here.

Forbind routeren til ODL

Vi opretter PUT anmodning:

Automatisering af netværkstjenester eller hvordan man opretter et virtuelt laboratorium med OpenDaylight, Postman og Vrnetlab

  1. Anmodningslinje:
    PUT http://10.132.1.202:8181/restconf/config/network-topology:network-topology/topology/topology-netconf/node/jun01
  2. Anmodningskrop (fanen Body):
    jun01
    172.17.0.2
    22
    vrnetlab
    VR-netlab9
    false
    jun01_cache
  3. På fanen Authorization skal parameteren være sat til Basic Auth og brugernavn/adgangskode: admin/admin. Dette er nødvendigt for adgang til ODL:
    Automatisering af netværkstjenester eller hvordan man opretter et virtuelt laboratorium med OpenDaylight, Postman og Vrnetlab
  4. På fanen Headers skal der tilføjes to overskrifter:
    • Accept application/xml
    • Content-Type application/xml

Vores anmodning er dannet. Vi sender. Hvis alt er opsat korrekt, skal vi få status "201 Oprettet":

Automatisering af netværkstjenester eller hvordan man opretter et virtuelt laboratorium med OpenDaylight, Postman og Vrnetlab

Hvad gør denne anmodning?

Vi opretter en node inde i ODL med parametrene for den rigtige router, som vi ønsker at få adgang til.

xmlns="urn:TBD:params:xml:ns:yang:network-topology"
xmlns="urn:opendaylight:netconf-node-topology"

Disse er interne navnerum XML (XML-namespaces) for ODL i overensstemmelse med hvilke det opretter en node.

Dernæst er routerens navn – node-id, routerens adresse – host osv.

Den mest interessante linje – den sidste. Schema-cache-directory opretter et bibliotek, hvor alle filer YANG Schema fra den tilsluttede router skal hentes. De kan findes i $ODL_ROOT/cache/jun01_cache.

Vi tjekker forbindelsen til routeren

Vi opretter GET anmodning:

  1. Anmodningslinje:
    GET http://10.132.1.202:8181/restconf/operational/network-topology:network-topology/topology/topology-netconf/
  2. På fanen Authorization skal parameteren være sat til Basic Auth og brugernavn/adgangskode: admin/admin.

Vi sender. Vi skal modtage status "200 OK" og listen over alle understøttede enheder. YANG Schema:

Automatisering af netværkstjenester eller hvordan man opretter et virtuelt laboratorium med OpenDaylight, Postman og Vrnetlab

Kommentar: For at se det seneste skulle jeg i mit tilfælde vente cirka 10 minutter efter udførelsen. PUT, indtil alt YANG skema eksporteres til ODL. Indtil dette tidspunkt vil der blive vist følgende ved udførelsen af denne GET anmodning:

Automatisering af netværkstjenester eller hvordan man opretter et virtuelt laboratorium med OpenDaylight, Postman og Vrnetlab

Fjerner routeren

Vi opretter DELETE anmodning:

  1. Anmodningslinje:
    DELETE http://10.132.1.202:8181/restconf/config/network-topology:network-topology/topology/topology-netconf/node/jun01
  2. På fanen Authorization skal parameteren være sat til Basic Auth og brugernavn/adgangskode: admin/admin.

Del 6: Ændrer routerkonfigurationen

Henter konfigurationen

Vi opretter GET anmodning:

  1. Anmodningslinje:
    GET http://10.132.1.202:8181/restconf/config/network-topology:network-topology/topology/topology-netconf/node/jun01/yang-ext:mount/
  2. På fanen Authorization skal parameteren være sat til Basic Auth og brugernavn/adgangskode: admin/admin.

Vi sender. Vi skal modtage status "200 OK" og routerens konfiguration:

Automatisering af netværkstjenester eller hvordan man opretter et virtuelt laboratorium med OpenDaylight, Postman og Vrnetlab

Opretter konfiguration

Som eksempel opretter vi følgende konfiguration og ændrer den:

protocols {
    bgp {
        disable;
        shutdown;
    }
}

Vi opretter POST anmodning:

  1. Anmodningslinje:
    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
  2. Anmodningskrop (fanen Body):
  3. På fanen Authorization skal parameteren være sat til Basic Auth og brugernavn/adgangskode: admin/admin.
  4. På fanen Headers skal der tilføjes to overskrifter:
    • Accept application/xml
    • Content-Type application/xml

Efter sendningen skal vi modtage status "204 No Content".

For at kontrollere, at konfigurationen er ændret, kan vi bruge den tidligere anmodning. Men for eksemplets skyld opretter vi endnu en, der kun vil vise os oplysninger om de protokoller, der er konfigureret på routeren.

Vi opretter GET anmodning:

  1. Anmodningslinje:
    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
  2. På fanen Authorization skal parameteren være sat til Basic Auth og brugernavn/adgangskode: admin/admin.

Efter udførelsen af anmodningen vil vi se følgende:

Automatisering af netværkstjenester eller hvordan man opretter et virtuelt laboratorium med OpenDaylight, Postman og Vrnetlab

Ændrer konfigurationen

Vi ændrer oplysningerne om BGP-protokollen. Efter vores handlinger vil den se således ud:

protocols {
    bgp {
        disable;
    }
}

Vi opretter PUT anmodning:

  1. Anmodningslinje:
    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
  2. Anmodningskrop (fanen Body):
  3. På fanen Authorization skal parameteren være sat til Basic Auth og brugernavn/adgangskode: admin/admin.
  4. På fanen Headers skal der tilføjes to overskrifter:
    • Accept application/xml
    • Content-Type application/xml

Ved hjælp af den tidligere GET anmodning ser vi ændringerne:

Automatisering af netværkstjenester eller hvordan man opretter et virtuelt laboratorium med OpenDaylight, Postman og Vrnetlab

Fjerner konfigurationen

Vi opretter DELETE anmodning:

  1. Anmodningslinje:
    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
  2. På fanen Authorization skal parameteren være sat til Basic Auth og brugernavn/adgangskode: admin/admin.

Ved kald af GET Fra anmodningen med oplysninger om protokollerne ser vi følgende:

Automatisering af netværkstjenester eller hvordan man opretter et virtuelt laboratorium med OpenDaylight, Postman og Vrnetlab

Sårbarheden er bekræftet i mange officielle Docker-billeder, herunder billeder af couchbase, elasticsearch, flink, solr, storm osv.

For at ændre konfigurationen er det ikke nødvendigt at sende anmodningens krop i formatet XML. Det kan også gøres i formatet JSON.

For eksempel i anmodningen PUT til ændring af konfigurationen udskifter vi anmodningens krop med:

{
    "junos-conf-protocols:protocols": {
        "bgp": {
            "description" : "Ændret i postman" 
        }
    }
}

Husk at ændre overskrifterne i fanen Headers til:

  • Accept application/json
  • Content-Type application/json

Efter sendingen modtager vi følgende resultat (se svaret ved hjælp af GET anmodningen):

Automatisering af netværkstjenester eller hvordan man opretter et virtuelt laboratorium med OpenDaylight, Postman og Vrnetlab

Del 7: Tilføj Cisco xRV9000

Hvad med alt dette om Juniper? Lad os tale om Cisco!
Jeg har fundet en xRV9000 version 7.0.2 (et monster, der kræver 8 Gb RAM og 4 kerner. Den ligger ikke frit tilgængelig, så kontakt Cisco) - det er den, vi vil starte.

Start af container

Processen med at oprette en Docker-container adskiller sig ikke meget fra Juniper. Tilsvarende placerer vi .qcow2-filen med routeren i den relevante mappe (i dette tilfælde xrv9k) og udfører kommandoen make docker-image.

Efter et par minutter ser vi, at billedet er oprettet:

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         101MB

Vi starter containeren:

ubuntu:~$ sudo docker run -d --privileged --name xrv01 54debc7973fc

Efter et stykke tid ser vi, at containeren er 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   xrv01

Vi opretter forbindelse 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 minutes

Vi tilslutter routeren til OpenDaylight

Tilføjelsen sker på helt samme måde som med vMX-billedet. Det er kun navnet, der skal ændres.
PUT anmodning:
Automatisering af netværkstjenester eller hvordan man opretter et virtuelt laboratorium med OpenDaylight, Postman og Vrnetlab

Efter et stykke tid udfører vi GET anmodningen for at tjekke, at alt er tilsluttet:
Automatisering af netværkstjenester eller hvordan man opretter et virtuelt laboratorium med OpenDaylight, Postman og Vrnetlab

Ændrer konfigurationen

Vi konfigurerer følgende opsætning:

!
router ospf LAB
 mpls ldp auto-config
!

Vi opretter POST anmodning:

  1. Anmodningslinje:
    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
  2. Anmodningskrop (fanen Body):
    {
        "processes": {
            "process": [
                {
                    "process-name": "LAB",
                    "default-vrf": {
                        "process-scope": {
                            "ldp-auto-config": [
                                null
                            ]
                        }
                    }
                }
            ]
        }
    }
  3. På fanen Authorization skal parameteren være sat til Basic Auth og brugernavn/adgangskode: admin/admin.
  4. På fanen Headers skal der tilføjes to overskrifter:
    • Accept application/json
    • Content-Type application/json

Efter gennemførelsen skal vi få status "204 No Content".

Lad os tjekke, hvad vi har fået.
For dette opretter vi GET anmodning:

  1. Anmodningslinje:
    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
  2. På fanen Authorization skal parameteren være sat til Basic Auth og brugernavn/adgangskode: admin/admin.

Efter udførelsen skal du se følgende:

Automatisering af netværkstjenester eller hvordan man opretter et virtuelt laboratorium med OpenDaylight, Postman og Vrnetlab

For at fjerne konfigurationen bruger vi DELETE:

  1. Anmodningslinje:
    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
  2. På fanen Authorization skal parameteren være sat til Basic Auth og brugernavn/adgangskode: admin/admin.

Konklusion

Som du måske har bemærket, er procedurerne for tilslutning af Cisco og Juniper til OpenDaylight ikke forskellige — dette åbner op for en bred vifte af kreative muligheder. Fra at styre konfigurationerne af alle netværkskomponenter til at skabe egne netværkspolitikker.
I denne tutorial har jeg givet de enkleste eksempler på, hvordan man kan interagere med netværksudstyr ved hjælp af OpenDaylight. Uden tvivl kan anmodningerne fra de givne eksempler gøres meget mere komplekse og konfigureres til hele tjenester med et enkelt klik — alt er kun begrænset af din fantasi*

Fortsætter…

P.S.

Hvis du allerede kender alt dette, eller hvis du derimod har gennemgået det og har fået en forkærlighed for ODL, så vil jeg anbefale at se nærmere på applikationsudvikling på ODL-controlleren. Du kan starte med from here.

Held og lykke med eksperimenterne!

Litteraturliste

  1. Vrnetlab: Emulér netværk ved hjælp af KVM og Docker / Brian Linkletter
  2. OpenDaylight Cookbook / Mathieu Lemay, Alexis de Talhouet, Et al
  3. Network Programmability with YANG / Benoît Claise, Loe Clarke, Jan Lindblad
  4. Learning XML, Second Edition / Erik T. Ray
  5. Effective DevOps / Jennifer Davis, Ryn Daniels

Kilde: habr.com

Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere 🔥 Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere | ProHoster