A hálózati interfészek indexelése

Fórumok

Sziasztok!

Van egy hálózat menedzsment programom (https://github.com/csikfer/lanview2) ebben ütköztem abba a problémába, hogy a hálózati interfészek indexe (ifIndex) változó. Minden rendszertöltés után más értékeket kapnak a VLAN interfészek, függetlenül a netplan konfigben megadott sorrendtől. A program viszont arra számít, hogy ezek nem változnak, és az újra számozás sem triviális.

A legjobb az lenne, ha a rendszernek (Ubuntu 20.04) valahogy meg lehetne adni az interfész indexeket, vagy legalább a sorrendet kikényszeríteni. Sajnos erre még ötletem sincs.

Az is egy lehetőség, hogy boot után újraírom az indexeket az adatbázisban (Postgresql 12). De nem vagyok egy SQL guru, és nem tudom, hogyan lehet a port rekordok törlése nélkül átírni az egyedinek definiált indexeket. Ha elkezdem átírni az ifIndex értékeket, akkor amíg a végére nem érek, addig sérülni fog az egyediség. Ha letörlöm, és újra írom a rekordokat, az a relációk miatt nem jó megoldás, mert vagy törölni kell azokat is, vagy sikertelen a törlés. Vannak nyakatekert ötleteim, de érdekelne, hogy erre van-e valami szimpatikusabb megoldás?

Hozzászólások

Sajnos ezeréves probléma, mert az SNMP RFC nem követeli meg az "ifIndex" állandóságát, szóval szerintem csak workaround-ok vannak. Hálózati eszközöknél van lehetőség megoldásra, pl. Cisco "snmp-server ifindex persist".

Linuxon régebben ha jól tudom az "ifname" jobb volt erre, de systemd-n szerintem már az sem lesz opció. Keress arra, hogy "linux ifindex persistence" és talán abból meríthetsz ötletet.

Köszi a keresési tippet. Igaz, csak annyit tudtam meg, amit Te is leírtál, de így legalább nem küzdök vele tovább, ez van.

Addig rendben van, hogy nem az indexszel azonosítok egy portott (bár 70e sor programban a fene tudja), de benne van az adatbázisban, és nagyon szarul néz ki, ha nem igaz ami ott van, kivenni kicsit macerás lenne. Arra nem számítottam, hogy örökre kőbevésett az ifIndex, de azért minden betöltésnél újraszámozni, véletlenszerűen, az egy kicsit meglepett.

Marad a megoldás, hogy mindig újra számozom az inerfaces rekordokat az adatbázisban. Majd kitalálom, hogyan, enélkül is kelhetett ez a lehetőség, csak nem futottam még bele, és nem derült ki, hogy ez nem megy.

Routerekban van erre opció. pl ciscoban snmp-server ifindex persist

De az SNMP RFC nem követeli meg a perzisztens ifindex-et (meg dinamikus interfészeknél pl ppp nem is lenne tirivális).

Én LibreNMS-t használok, ott eszköz felvételnél megadhatom, hogy mi legyen a port association mode.

Ez alaból ifIndex. De lehet ifName,ifAlias,ifDescr is. Pl linuxnál a presistent network name  (ens192, enp akármi nevű interfészek) az alap mostanában, tehát szerintem ha ifName alapján dolgozol az nem fog változni.

Lehet, hogy segít, ha az eszközökhöz tartozó kernel modulokat nem engeded automatikusan betöltődni (blacklist), hanem egy saját indítószkript a megfelelő sorrendben tölti be őket, egy közbeiktatott kis várakozási idővel.

Akkor bukott ki a probléma, mikor definiáltam vagy egy tucat VLAN interfészt. Ezeket véletlen sorrendben indexeli, és mind egy modulhoz tartozik. Egyenként kézzel bizonyára felhúzhatóak az interfészek, de ezzel nem szívatnám magam. A problémának ezt a részét elengedtem.