PNETLab hálózat szimulátor

Bevezető

A PNETLab egy az EVE-NG-re épülő hálózatszimulációs eszköz, amely az EVE-NG közösségi verziójának funkcióit egészíti ki, így célszerű ezen írás előtt az EVE-NG alapok bejegyzés elolvasása és megismerése, hiszen itt csak megemlítem azokat a részeket, amelyeket ott kifejtettem. Másrészt, mivel a PNETLab egyik legjobb újítása a Docker rendszerbe integrálása, így célszerű a Docker alapok bejegyzés elolvasása is. Hasonlóan az EVE-NG-hez, a PNETLab is egy virtuális gép formájában tölthető le a pnetlab.com oldalról. A virtuális gépet például a VMware, vagy a VirtualBox programban nyithatjuk meg a letöltési oldalon megadott paraméterek beállításával. Miután elindul a virtuális gép, jelentkezzünk be a root felhasználói névvel és a pnet jelszóval, és állítsuk be az EVE-NG-nél már megismert paramétereket. (Itt is érdemes a jelszót az elején változatlanul hagyni.) A gép újraindulása után jelentkezzünk be egy böngészőn keresztül a virtuális gépen megjelenített IP címmel. Ekkor szembesülhetünk az első nagy különbséggel, a PNETLab két üzemmóddal rendelkezik, az online és az offline móddal.

A legfontosabb és legmegnyugtatóbb számunkra, hogy mindkét módban ugyanazokat a funkciókat érhetjük el, tehát ebben nincsen különbség. Az online mód használatához internetkapcsolatra van szükségünk és regisztrálnunk kell, míg offline módban az admin/pnet adatokkal jelentkezhetünk be. Online módban a PNETLab-on keresztül megosztott topológiákhoz (labor fájlokhoz) is hozzáférhetünk, és ilyeneket készíthetünk is, azokat megoszthatjuk vagy eladhatjuk. Offline módban csak azokkal a topológiákkal dolgozhatunk, amelyeket már letöltöttünk vagy magunknak készítettünk. Mindkét módban összesen 10 hozzáférést használhatunk, bár ez a szám növelhető. Kattintsunk az online módra, és első alkalommal regisztráljunk email címünkkel (Sign Up!), majd a sikeres regisztráció után jelentkezzünk be.

A nyitóoldalon láthatjuk a letöltött és a saját magunk által készített labor fájlokat, innen érhetjük el a felhasználók kezelését (Accounts), tölthetünk le labor fájlokat (Download Labs), a sajátjainkat közzé tehetjük (Sell Your Labs). A két legfontosabb menüpont nekünk a System és a Devices. A System alatt érjük el a System Setting oldalt, ahol az egyes szolgáltatások újraindítása mellett az SFTP-vel feltöltött image állományok jogosultságát állíthatjuk be (Fix Permission). (Tehát már nem kell bejelentkezni ehhez a virtuális gépbe ehhez.) A Devices menüpontban előre elkészített Docker képfájlokat tudunk a rendszerbe integrálni. (Erről később majd részletesen is szó lesz.)

Lebegő HTML konzol

Az EVE-NG-hez képest sokkal használhatóbb a HTML konzol, mivel egy lebegő ablakban jelenik meg, és ugyanazon ablakon belül több terminálablakot is meg tud jeleníteni. Ráadásul kijelentkezés nélkül is tudunk váltani rá. Használjuk bátran!

Megosztott képfájlok

A PNETLab számára is a rendszerbe kell másolnunk vagy dynamips, vagy IOL vagy QEMU formában a szükséges eszközök képfájlját. Rendelkezésünkre áll egy ishare parancs, amellyel megosztott képfájlokat tudunk keresni (ishare search) és letölteni (ishare pull) a virtuális gépre. Noha a keresésre számos képfájlt kapunk eredményül, szinte egyetlen letöltés sem jár sikerrel. Viszont nem kell elkeserednünk, mert a keresés eredményeképpen legalább az egyes képfájlok nevét megismerhetjük, és rákeresve azokra, manuálisan letöltve, majd a virtuális gép megfelelő könyvtárába feltöltve használhatjuk is azokat. Keressünk például egy Windows7-es képfájlt az ishare search win paranccsal:

Ezután keressünk rá az interneten a kiválasztott képfájl nevére:

Keressük fel az ábrán látható linket, és innen töltsük le a hda.qcow2 állomnányt:

Ezután már csak az EVE-NG-nél megtanult módon fel kell tölteni a qemu könyvtár egy win-7 alkönyvtárába. Ne felejtsük el a System Setting menüpontban fixálni a jogosultságokat, és máris használhatjuk a Win7-es Node-t a topológiánkban:

(A cikk írása óta a megosztott képfájlok kezelés szerencsére jelentős változáson esett át. Megszüntették az ishare támogatását, helyette az ishare2 használatát tették lehetővé. Noha ezt külön kell telepíteni, segítségével számos előre elkészített képfájlt érhetünk el.)

HTML konzol módú Wireshark

A PNETLab egyik nagyszerű fejlesztése, hogy a Wireshark programot HTML konzol módban tudja futtatni. Ehhez csupán a Devices menüpontban a Wireshark-ot hozzá kell adni a rendszerhez. (Ilyenkor a Wireshark Docker képfájlját installálja fel.) Kattintsunk a Wireshark ikonja alatti Get Device gombra, és várjuk meg, míg a program a rendszerhez adódik. (A Wireshark ilyenkor a virtuális gépre kerül felinstallálásra, tehát a hoszton nem is kell meglennie.) Ezután már csak (ahogyan az EVE-NG-nél is láttuk) egy eszközre jobb gombbal kattintva ki kell választanunk azt a hálózati csatolót, amelyről forgalmazott csomagokat szeretnénk vizsgálni. (Az alábbi képen két PC közötti ICMP csomagokat jelenítjük meg.)

Beépített Docker alkalmazások telepítése

A PNETLab egyik legnagyobb újítása, hogy a virtuális gép már tartalmazza a Docker szolgáltatást, és akár előre elkészített Docker képfájlokat tudunk telepíteni webes felületen keresztül, de akár manuálisan is letölthetjük azokat. (Az EVE-NG esetén a Docker támogatás csak a fizetős, professional változatban volt elérhető.) Először próbáljunk ki két webes képfájlt. (A Wireshark is egy ilyen volt.) Az egyik egy Chrome böngészőt tartalmaz, a másik egy Apache webszervert. Ahogyan korábban már láttuk, ezeket a Devices menüponton keresztül érhetjük el. Itt találjuk meg a leírásukat is. Miután felinstalláltuk a két eszközt, készítsük el a következő kis topológiát.

(A Management(Cloud)-t és a kapcsolót az EVE-NG cikkben leírt módon installálhatjuk fel. Ne felejtsük el a jogosultságok beállítását!) A Docker eszköz kirakásakor válasszuk ki a megfelelő képfájlt, és állítsuk a hálózati csatoló IP konfigurációját DHCP-re. 

A webszervert Telnet kapcsolaton keresztül érjük el, a böngészőket RDP-vel. (Ezt az eszköz Edit ablakában a Primary Console-nál állíthatjuk be.) Mivel DHCP-vel kértünk az Apache szervernek IP címet, így azt le is kell kérdeznünk. Erre vagy az ipconfig a parancsot használjuk, vagy (amennyiben ez nem elérhető, később lesz majd ilyen képfájl) a hostname -I is megteszi. (Természetesen beállíthattuk volna statikusan is a címet, de ilyenkor ne feledkezzünk meg az átjáró és amennyiben szükséges a DNS szerver címének a beállításáról sem.)

Jelenítsük meg az egyik böngészőben az Apache webszerver nyitóoldalát, a másikban pedig egy tetszőleges oldalt az internetről.

Természetesen lehetőség van az interfészek IP címének statikus beállítására is az X.Y.Z.W/P formátumban. (Pl. 192.168.1.10/24) Ilyenkor ne felejtsük el az alapértelmezett átjárót is beállítani (szintén az Edit lapon), amely az az IP cím, amelyen keresztül a szerver PNETLab virtuális gépünk web-es felületét is elértük. Az előre elkészített Docker képfájlok között még több másik is rendelkezésünkre áll (például Ubuntu és CentOS7 szerverek és asztali verziók), melyeket a fentiekhez hasonló módon tudunk kipróbálni, illetve a rendszerbe integrálni.

Saját Docker alkalmazás telepítése

Az eddig a webes felületről felinstallált Docker alkalmazások teljesen hagyományos Docker képfájlokként kerülnek be a rendszerbe. Listázzuk csak ki őket:

Természetesen parancssoros felületről is felinstallálhatunk képfájlokat. Húzzunk le például az OwnCLoud alkalmazást a docker pull owncloud paranccsal, tegyük fel a laborfájlban a korábban felinstallált Chrome böngészővel együtt, és nyissuk meg a weboldalát. (Itt most statikus IP címeket állítottunk be.)

Python támogatás – Netmiko

Aki már próbát Python-t installálni, biztos sokszor találkozott olyan inkompatibilitási problémákkal, amelyeket elég nehéz megoldani. Szerencsére a PNETLab mögött álló virtuális gépen ilyen problémákat nem tapasztalhatunk. Példaképpen installáljuk fel a Netmiko Python könyvtárat, és próbáljuk is ki. (A Netmiko teszi lehetővé, hogy python programból SSH-n keresztül parancsokat futtassunk le a Cisco hálózati eszközökön, és feldolgozzuk azok kimenetét.) Jelentkezzünk be a PNETLab virtuális gépbe, majd először frissítsük a csomaglistát, majd telepítsük a python-netmiko csomagot: apt-get update -y apt-get install -y python-netmiko (Előfordulhat, hogy a csomag felinstallálása nem sikerül, mert az apt-get zárolva marad. Ilyenkor törölni kell a /var/lib/dpkg könyvtárból a lock és a lock-frontend 0 bájt méretű fájlokat, majd újra ki kell adni a parancsot.) Készítsünk el most egy nagyon egyszerű topológiát, rakjunk fel egyetlen kapcsolót, mely lásson ki a netre, rendeljünk hozzá IP címet, és konfiguráljunk rajta SSH hozzáférést (név: bob, jelszó: cisco).

Próbáljunk bejelentkezni a virtuális gépről SSH-val: ssh bob@192.168.6.140 Azt tapasztaljuk, hogy nem sikerül a bejelentkezés, és egy ehhez hasonló üzenetet kapunk:

Unable to negotiate with 192.168.6.140 port 22: no matching key exchange method found. Their offer: diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1

A megoldás egyszerű: Nyissuk meg a virtuális gépen a /etc/ssh/ssh_config fájlt, és vegyük ki a megjegyzés jelet a Chiper sor elől. HA még így sem sikerülne, szúrjuk ennek a fájlnak az elejére ezt a sort:

KexAlgorithms diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1

Amennyiben a hibaüzenet így néz ki:

no matching host key type found. Their offer: ssh-rsa

Akkor ugyanebbe a fájlba ezeket a sorokat kell elhelyezni:

HostKeyAlgorithms = +ssh-rsa
PubkeyAcceptedAlgorithms = +ssh-rsa

Ezután remélhetőleg sikeres lesz már az SSH bejelentkezés. (Ne felejtsük el az ssh szolgáltatást minden módosítás után újraindítani!) A Windows-os hoszt gépről is bejelentkezhetünk, de innen érdemes például a putty segédprogramot használnunk, mert a Windows beépített ssh kliense is ezt a hibát dobja. Ezután már kipróbálhatjuk a netmiko modult is. Egy szerkesztőben írjuk meg az alábbi kis python programot:

from netmiko import ConnectHandler

net_connect = ConnectHandler(
    device_type="cisco_xe",
    host="192.168.6.140",
    username="bob",
    password="cisco",
)

output = net_connect.send_command(
    "show vlan brief"
)
print(output)

Másoljuk fel a virtuális gépre, és futtassuk le. (Fontos, hogy a programnak ne a netmiko.py nevet adjuk, mert akkor hibával leáll az importálás.) Eredményül megkapjuk a kapcsoló VLAN információit:

Természetesen bonyolultabb programot is írhatunk, és bonyolultabb topológián is futtathatjuk. Arra viszont ügyeljünk, hogy ha olyan alhálózatban érhető el az eszköz, amelyet nem ismer a virtuális gép vagy a Windows, akkor vegyük fel hozzá a szükséges statikus útvonalakat.