Databáze IPv6 adres
Obsah
Potřeba evidovat a spravovat IP adresy v Astronomickém ústavu vedla k vytvoření jednoduché databáze a naprogramování webovského rozhraní pro přístup, prohlížení a administraci. Použitá databáze je MySQL a webovské rozhraní je skript v PHP. Databáze se jmenuje ipv4 a skript je ipv6.php. V návaznosti na databázi byly vytvořeny skripty v Perlu, které umožňují vygenerovat nové konfigurační soubory pro DHCP a DNS. Skripty dovolují restartovat služby novými údaji a prohlížet generované soubory a výstupy z příkazů. Skripty před nahráním nových údajů provádí archivaci stávající konfigurace a dovolují se k libovolné konfiguraci zpětně vrátit. A to, aniž by se musely zadávat příkazy z počítače, ale pouze z webovského rozhraní. Později k databázi jistě přibydou další skripty pro správu. Pomocí údajů v databázi půjde snadněji vyhledat případné nesprávné chování na síti a rychle sjednat nápravu. Některé události ve staré evidenci IP adres nešlo řešit. Velkým přínosem je také možnost spravovat síť dalšími administrátory a vytvořit tak zastupitelnost správců sítě a jejich nezávislost. Je snadno řešitelné přidělit zařízení novou adresu, nebo udělat změnu v DNS.
Databáze běží na počítači centos.asu.cas.cz a lze se k ní připojit na stránce http://ipv4.asu.cas.cz. První stránka je přihlašovací. Musí se zadat jméno a heslo. Nejdříve se zkouší autentizace proti tabulce login v databázi. Pokud tato autentizace nevyjde, zkouší skript zadaného uživatele autentizovat na počítači ldap. Uživatel tedy musí mít minimálně účet na ldap. Pokud je uživatel administrátorem, musí být zadán v tabulce login. Zde má nastaven typ uživatele Admin. Jinak je obyčejným uživatelem a může tabulky jen prohlížet. Ověření proti tabulce login je rychlejší a nezávislé. Doporučujeme zadávat uživatele do tabulky login. Administrátoři mohou do tabulky login zadávat další účty uživatelů a nastavovat jim práva. Mohou také změnit heslo k účtům. Na první stránce je také tato nápověda.
Po úspěšném přihlášení se objeví několik řádek tlačítek. První řádek vypisuje tabulky z databáze. Tabulku Ip adres jde omezit filtrem, což je řádek tabulky sítě. Další tlačítka slouží k úschově tabulek a k vygenerování nové konfigurace DHCP a DNS. Čtvrtý řádek tlačítek slouží k prohlížení aktuální konfigurace DHCP a DNS. Report tlačítko slouží ke zjištění nesrovnalostí mezi tabulou ip a kontrolními skripty, spouštěnými z cronu. Některé textové soubory v prohlížeči nemusí být aktuální. Záleží, zda se v prohlížeči již zobrazily. Pokud chci vidět aktuální údaje, musím pro jistotu dát v prohlížeči příkaz obnovit. Aktuálnost stránky je nastavena její dobou platnosti (expirací). Pokud by při zobrazení každé stránky vypršela doba platnosti, nefungovalo by v prohlížeči zpětné tlačítko. Předchozí stránka by se musela obnovit. Tyto dva režimy v chování jdou proti sobě, lze si však vybrat jen jeden.
Skripty napsané v perlu se spouští na počítači centos a generují konfigurace pro DHCP a DNS čtením údajů z databáze. Pokud mají provést akci, je nutné je spustit jako root. Všechny skripty jsou dostupné pomocí tlačítek z webu. Tady je zajištěno provodení skriptu pod uživatelem root. Pokud však bude nutné tvar generovaných souborů upravit, bude nutné do skriptů zasáhnout.
- ipv6gendhcp
Skript generuje soubor dhcpd.conf a dhcp.conf.sporilov, dhcpd6.conf a dhcpd6.conf.sporilov do adresáře, který je zadán jako parametr. Pokud parametr chybí, je výstupní adresář /var/www/html/ipv4/dhcp. Vstupní tabulky jsou net a ip, net6 a ip6.
- ipv6gendns
Skript generuje soubory pro DNS. Souborů je různý počet podle údajů v tabulkách net a ip. Výsledné soubory se nachází v adresáři /var/www/html/ipv4/dns nebo v adresáři podle nastaveného parametru. Skript čte z aktuální konfigurace sériové číslo v SOA záznamu a odvozuje od něho nové sériové číslo. Sériové číslo je údaj, podle kterého se řídí sekundární DNS servery při stahování nové konfigurace.
- ipv6restartdhcp
Skript má jeden parametr, a to je zdrojový adresář s novým souborem dhcpd.conf a dhcp.conf.sporilov, dhcpd6.conf a dhcpd6.conf.sporilov. Skript nejdříve uloží původní konfiguraci do adresáře /home/download/save/dhcp s příponou data a dvouciferného sériového čísla (maximální počet úschov za den může být 100). Pokud skript není spuštěn z webovského rozhraní, neukládá se údaj pro obnovu do tabulky file. Novou konfiguraci potom nahraje do adresáře /etc a restaruje program dhcpd. Pro Spořilov běží DHCP server na počítaci voip. Skript nahraje novou konfiguraci také tam.
- ipv6restartdns
Skript má jeden parametr, a to je zdrojový adresář, ve kterém se nachází nová konfigurace pro DNS včetně souboru named.conf. Skript nejdříve uloží konfiguraci do adresáře /home/download/save/dns zabalenou pomocí tar a s příponou data a sériového čísla. Pokud skript není spuštěn z webovského rozhraní, neukládá se údaj pro obnovu do tabulky file. Nakonec nahraje novou konfiguraci na příslušné místo a restartuje program named.
- ipv6restore
Skript obnovuje konfiguraci uschovanou předchozím skriptem ipv6restartdhcp nebo ipv6restartdns. Jako povinný parametr má název souboru obnovy s úplnou cestou. Podle názvu souboru určí, zda se jedná o DHCP úschovu nebo DNS úschovu s příponou .tgz . V případě DHCP ještě skript rozlišuje, zda se má obnova provést na Ondřejově nebo na Spořilově. Soubory se zkopírují nebo rozbalí na příslušné místo a restartuje se služba DHCP nebo DNS.
- ipv6cpfile
Skript je pomocný, slouží ke zkopírování konfigurace do adresáře. Apache server je spuštěný pod uživatelem apache a ten nemá přístup k aktuální konfiguraci DHCP nebo DNS serveru. Je také lepší omezit viditelné adresáře serveru a nepouštět Apache server na celý disk. Pokud není určeno parametrem jinak, je cílový adresář /var/www/html/ipv4/view. Tento adresář potom slouží k prohlížení aktuální konfigurace.
- ipv6arp
Skript čte soubory z programu Arpwatch a ukládá je do tabulky arpwatch. Tabulka se před nahráním vynuluje. Soubory Arpwatch jsou v adresáři /var/arpwatch a mají označení podle čísla VLAN sítě. VLAN jednotlivých sítí musí být dotažené a ukončené na počítači centos. Počítač centos má zkonfigurované rozhraní pro tyto VLAN sítě a musí mít přidělenou adresu z každé sítě, z které má číst ARP pakety. Počítač centos tak může vidět broadcastové informace. Čas detekování ARP paketu se zapisuje do tabulky ip, aby byl přehled o aktuálnosti a platnosti IP adresy. Skript se může spuštět jednou denně z cronu.
- ipv6ping
Skrip provádí z počítače centos paralelní ping na všechny adresy podle definovaných sítí v tabulce net. Výsledkem je tabulka ping, v které se aktualizuje čas, pokud je IP adresa dostupná. Čas se také aktualizuje v tabulce ip. Skript je pomocný a slouží k hledání adres počítačů, u kterých není dostupný ARP paket a odpovídají na ping. Podmínkou pro provedení pingu je hodnota sloupce ping v tabulce net a velikost sítě, nepřesahující 1024 adres. Skript se nejlépe hodí spouštět z cronu. Jeho provedení trvá určitý čas, v cronu se musí nastavit perioda spouštění, například 1/2 hodiny. Tabulka ping se nenuluje, ale je možnost řádky ručně rušit.
- ipv6lease
Skript čte adresy pronajaté v DHCP serveru. Výstupem je tabulka lease, jejíž položky se vypisují podle toho, zda pronájem je ještě platný. Respektují se pouze tři poslední hodnoty IP adresy. Sleduje se MAC adresa, jméno a čas vypršení pronájmu. Skript má parametr mysql. Zadáním tohoto parametru dojde k vytvoření tabulky v databázi ipv4. Při spuštěním skriptu bez parametru dojde k vypsání aktuálního pronájmu IP adres na obrazovku.
- ipv6arpdel
Skript vypisuje adresy z Arpwatch databáze, které jsou privátní a typu APIPA. Vznikly asi při špatném načtení parametrů z DHCP serveru. Adresy je možné z Arpwatch databáze zrušit zadáním parametru del. Skript pracuje pouze s databází /var/arpwatch.
- ipv6switch
Skript spouští PHP program listmac. Program pomocí SNMP protokolu vrací tabulku, v které jsou přiřazeny aktuální MAC adresy konkrétním vstupům přepínačů. Jedním z parametrů programu je soubor, který obsahuje switche v síti. Program trvá poměrně dlouho, proto se spouští pravidelně každou hodinu z cronu. Skript ipv6switch údaje ukládá do tabulky switch. Pomocí tabulky je možné dohledat, na kterém portu switche je daná MAC adresa. Spojením tabulek switch a ip provadí tlačítko IpSwitchTab.
- ipv6unload, ipv6load
Skripty jsou stejné, liší se jen v pojmenování. Ipv6unload provádí unload tabulek do adresáře /var/www/html/ipv4/unload. Tabulky se exportují ven z databáze jednou denně. Skript ipv6load natahuje znovu tabulky, vytvořené předchozím ipv6unload. Nejdříve ale přejmenuje původní tabulka na *_old.txt a na ní provede unload. Skript má jako parametr název tabulky, na který chceme provést load. Když zadáme parametr all, provede se load všech tabulek.
- ipv6downloadcoin, ipv6downloadsukl, ipv6nocoin, ipv6sukl
Skripty stahují aktuální adresy dns serverů, které nechceme, aby uživatelé kontaktovali. Výsledkem bude znemožnění dns překladů těchto jmen. Jeden skript slouží pro stahování adres výpočtů kryptoměn a druhý skript stahuje adresy nepovolených léčivých přípravků.
- ipv6netbios
Skript vytváří tabulku netbios jmen počítačů ve Windows známých jako název zařízení. Výsledkem skriptu je tabulka netbios. Tabulka slouží ke správě licencí antivirového programu ESET. Každý netbios dotaz po síti trvá dlouhou dobu a často je počítačem linux, který službu netbios nemá. K urychlení běhu programu se používá paralelní výpočet. Program se znásobí, využívá sdílenou paměť a synchronizuje se pomocí semaforů. Běh programu je tak zkrácen na desetinu doby.
- ipv6notauthdhcp
Skript v reálném čase čte logy dhcp serveru a pokud v nich najde oznámení o neautorizovaném dhcp serveru, pošle na příslušné e-mail adresy upozornění.
V databázi je několik tabulek. Mezi hlavní patří tabulka login, net a ip, net6 a ip6.
- login
Tabulka má pro administrátory, stejně jako tabulka net a ip, tlačítka nový řádek, zrušit řádky a editace řádků. Do tabulky se ukládá jméno uživatele, hashované heslo pomocí md5, příznak, zda se má autentizovat na sunklu nebo z databáze, e-mail adresa, náhodný řetěz o 6 znacích, typ uživatele a čas vytvoření účtu. Náhodný řetěz se dále nevyužívá, typ uživatele může být Admin nebo Guest. Ve formuláři nového uživatele se zadává heslo pro kontrolu dvakrát. Pokud je heslo prázdné, použije se staré. Při zadání nového uživatele se kontroluje, aby jméno bylo jedinečné. Pomocí Checkboxu jde zaškrtnout řádky, se kterými chci pracovat. Když vyčerpám všechny zaškrtnuté Checkboxy, dostanu upozornění, že nebyly zaškrtnuté další řádky.
- last
Tabulka last je informativní a ukazuje 30 posledních připojení k databázi pomocí webu. Tabulka se tedy automaticky zkracuje a nelze ji editovat. Ukládá se jméno uživatele, Ip adresa připojení, čas připojení a čas poslední aktivity.
- event
Tabulka event je informativní a ukazuje 100 posledních událostí v databázi, které vznikly pomocí webu. Tabulka se stejně jako last automaticky zkracuje a nelze ji editovat. Ukládá se čas, jméno uživatele a vlastní událost.
- net, net6
V net tabulce by měly být všechny sítě, které jsou oddělené routrem. Ve formuláři se kontrolují údaje netaddr, mask, dns1, dns2, dns3, gateway, rangefrom, rangeto. Hodnota broadcast se dopočítává z masky. Pokud Ip adresa není zadaná, musí být prázdná nebo 0.0.0.0. Údaje v tabulce se nějak zvlášť nekontrolují. Je na administrátorovi, aby zadal správné údaje. Časem se budou sítě slučovat a velké kontroly by byly na závadu. Hodnoty rangefrom a rangeto musí být v rozsahu netaddr a slouží pro DHCP server pro dynamické přidělování. Pokud síť nemá dynamicky přidělovat adresy, musí být rangefrom a rangeto prázdné. DNS pracuje s údaji netaddr a dnsname, DHCP potřebuje zbylé údaje kromě sloupců location a comment. Tři příznaky gendhcp, gendns, genrevdns slouží k rozlišení, zda se má generovat příslušná konfigurace.
- ip, ip6
Tabulka ip se kontroluje důkladněji. Při zadávání Ip adresy se zjišťuje, zda existuje odpovídající řádek v tabulce net. Kontroluje se jedinečnost Ip adresy a jedinečnost jména a každého aliasu. Pro DHCP a DNS jsou důležité sloupce ip, mac, name, alias. Ostatní informace jsou doplňující a měly by sloužit k rychlému přehledu. Pokud se na síti vyskytne nesprávné chování, je možné rychle najít odpovědnou osobu a zjednat nápravu. Pokud má adresa více aliasu, musí být oddělená jednou mezerou. Mac adresa může být prázdná nebo 00:00:00:00:00:00. Hodnota MAC adresy slouží ke statickému přidělování DHCP adresy. Bylo by vhodné mít počítače nakonfigurované na stahování statické Ip adresy z DHCP serveru. Potom se totiž snadněji a hromadně dá měnit konfigurace z jednoho centra. Odpadá tak nutnost obcházet počítače. DHCP informace se nedostává standardně přes routery. Aby informace procházely, musí být na routerech zkonfigurovaný dhcrelay. Ten umí posílat broadcasty z jedné sítě do druhé. Tabulka má také údaj Validate days - dobu platnosti adresy ve dnech. S údajem se zatím nic nedělá. Webovské rozraní k němu přičte čas a ten ukládá do databáze. Řádek se záporným časem znamená, že už pozbyl platnosti. Měl by se zrušit ručně. V tabulce ip je sloupec dnsname. Neměl by se vyplňovat, pokud dns jméno odpovídá podle tabulky net. V dnsname může být více domén, musí být oddělené jednou mezerou.
- file
Tabulka file ukládá odkaz na zálohy pořízené z webu při zadání příkazu RestartDhcp nebo RestartDNS. Tabulku nejde editovat, lze jenom rušit řádky. Se zrušenými řádky se maže i odpovídající záloha v adresáři /home/download/save/[dhcp|dns]. Počet záloh a velikost na disku se musí upravovat ručně.
- login_old, net_old, ip_old, net6_old, ip6_old
Tyto tabulky jsou předchozími verzemi tabulek, které vznikly přejmenováním při zadání tlačítka Load. Load tlačítko totiž znovu vytváří tabulky login, net, ip z textových souborů s příponou .txt v adresáři /var/www/html/ipv4/unload. Textové soubory mohly vzniknout tlačítkem Unload. Starší textové soubory se přepisují novými, ale předchozí unload v rámci dne je zabalen do taru v adresáři /home/download/save/ipv4.
- arpwatch
Tabulka obsahuje údaje z databáze Arpwatch. Protože databáze může obsahovat více řádků se stejnými údaji, jsou v tabulce tři poslední výskyty dané IP adresy. Poslední MAC adresa a čas je ve sloupcích mac1, time1, nejstarší čas je ve sloupcích mac3, time3. Pokud je rozdíl aktuálního času a času time1 větší než 1/2 roku, řádek je zobrazen červeně. Pokud se mají upravovat údaje v tabulce, musí se editovat zdrojová data v adresáři /var/arpwatch při vypnutém programu. Program se spouští a zastavuje skriptem v adresáři /etc/rc.d/init.d. Tabulka je důležitá pro kontrolu a doplnění správné MAC adresy počítače. Program Arpwatch dovoluje posílat změny MAC adresy do pošty. Jde tím odhalit nastavení dvou stejných adres pro různá zařízení. Posílání pošty je vypnuto. Výpis tabulky arpwatch lze filtrovat podle zvolené sítě tabulky net.
- ping
Tabulka obsahuje adresy a čas, při kterém skript ipv6ping dostal odpověď na ping. Tabulka se nenuluje, ale položky se aktualizují a přidávají. Pokud čas odpovědi je starší než nastavená doba, řádek tabulky je červený. Doporučujeme tyto řádky ručně mazat, protože se tím adresa uvolní pro další použití. Výpis tabulky jde filtrovat podle zvolené sítě tabulky net.
- report
Tabulka se vytváří při stisknutí tlačítka Report. Akce zabere určitý čas, než se zpracují data. Vstupem jsou údaje z tabulky arpwatch a ping. Tabulka zaznamenává adresy, kde:
- nesouhlasí MAC adresa s tabulkou ip,
- nesouhlasí jméno s tabulkou ip,
- adresa není v tabulce ip, ale je v tabulce arpwatch,
- adresa není v tabulce ip, není v tabulce arpwatch, ale je v tabulce ping.
Jednoduchým vybráním řádku tabulky a tlačítkem UpdateFromReport lze nalezené údaje aktualizovat do tabulky ip. Tím budou data v tabulce ip platná. V tabulce report jsou vyloučené adresy, které jsou v rozsahu dynamicky přidělovaných adres serveru DHCP. Tyto rozsahy rangefrom a rangeto jsou uvedeny v tabulce net. Výpis tabulky jde omezit filtrem podle řádku tabulky net. Pozor, tabulka report a free se nevytváří, jestliže počet adres v síti přesáhne 1024.
- free
Tabulka se vytváří při stisknutí tlačítka Report. Akce zabere určitý čas, než se zpracují data. Vstupem jsou údaje z tabulek ip, arpwatch a ping. Hledají se adresy, které nejsou uvedené v žádné tabulce a jsou v rozsahu sítí podle tabulky net. Výstupy tabulky ping lze filtrovat podle řádku tabulky net. V tabulce free nejsou obsažené adresy v rozsahu dynamicky přidělovaných adres serverem DHCP. Pomocí tabulky jde snadno přidělit adresu novému zařízení na síti.
- lease
Tabulka se vytváří při spuštění skriptu ipv6lease s parametrem mysql. Tlačítko LeaseTab skript spustí a tabulka se vypíše. Ke každé adrese je přiřazena trojice MAC adresa, čas konce pronájmu a jméno podle DHCP. Tato trojice se v tabulce opakuje třikrát. Nejnovější čas se vypisuje v pořadí zleva doprava. Pronájmy, které nejsou platné, jsou šedivé.
- switch
Tabulka se aktualizuje skriptem ipv6switch, spouštěným z cronu. V tabulce jsou MAC adresy a historie portu switchů, na kterém se adresa vyskytla. Nejaktuálnější stav končí jménem sloupce, zakončeným 1, potom 2 a 3. Tabulka obsahuje symbolický název switche, číslo interface, index interface a jméno interface.
- netbios
Tabulka zobrazí ip adresy a netbios jména počítačů v síti.
Databáze může být v provozu, když bude mít aktuální údaje. Aktuálnost databáze omezí nesprávnou konfiguraci sítě s duplicitními adresami a vznikne přehled, které Ip adresy jsou volné.
Pokud zadám v programu větší množství změn, je vhodné provést unload tabulek. Tabulky se dostanou ven z databáze a mohou se zálohovat. Kdybych potřeboval něco hromadně opravit, je externí soubor dobrým pomocníkem. Do databáze jde například zahrnout nově definovaný sloupec a provést Load po změně v programu ipv6.php. Load tabulek provede nejdříve přejmenování starých tabulek na _old a ty se potom exportují ven z databáze. Adresář exportu je /var/www/html/ipv4/unload. Před exportem se zabalí soubory z adresáře exportu do adresáře /home/download/save/ipv4.
GenDhcp a GenDNS z tabulek vytváří novou konfiguraci, ale ještě nic nedělá s aktuální konfigurací na serveru. Nové soubory jde v prohlížeči zobrazit. Pokud nedojde k aktualizaci v prohlížeči, je dobré soubor zobrazit v nové záložce
DiffDhcp a DiffDNS provádí příkaz diff s aktuální konfigurací a konfigurací vzniklou z GenDhcp a GenDNS. Je to dobré prohlédnout, abychom viděli změny.
RestartDhcp a RestartDNS už přepisují aktuální konfiguraci a restartují služby. Ale před nahráním nové konfigurace se stará uloží do adresáře /home/download/save/[dhcp|dns]. Z webovské stránky bych se měl dozvědět, zda se služba restartovala nebo skončila s chybou. V případě chyby jde použít starou konfiguraci nebo zjednat nápravu ručně.
Restore podle tabulky file provede obnovu příslušné služby podle vybraného řádku. Restartují se služby. Tlačítko Restore nic neprovádí s databází. Mohu se tak vrátit k libovolné konfiguraci, pokud ji mám v tabulce. Zrušení řádku v tabulce file zruší i odpovídající soubor zálohy. Jak už bylo popsáno, řádek se do tabulky file zapisuje po tlačítku RestartDhcp nebo RestartDNS z webu a ne po spuštění skriptu.
ViewDhcp a ViewDNS dovoluje prohlížet aktuální konfiguraci. Ve Windows IE vadí asociace souborů .zone, pro prohlížení se otevře WordPad.
Tlačítko ReadArp spustí skript ipv6arp. Skript se také spouští z cronu jednou denně.
Tlačítko Report slouží k aktualizaci databáze a vypisuje zjištěné nesrovnalosti. Také poskytuje přehled o volných IP adresách. Jeho provedení zabere určitý čas, protože se vytváří tabulky report a free.