Synchronizace FreeNetIS - Mikrotik
Nejdříve na úvod mírně vysvětlím, proč vůbec nějaký takový skript vzniknul. V době psaní toho textu se naše sdružení Slfree potýkalo s velkým problémem - databáze všech zařízení ve freenetisu takřka skoro vůbec neodpovídala stavu na samotných routerech (v té době výlučně s OS RouterOS od Mikrotik) a po spuštění Přesměrování by tato entropie napáchala nakonec více škody než užitku. Ve volném čase jsem si tedy zkusil napsat jednoduchý parser exportu IP adres z dhcp-serveru z Mikrotiků a ten jsem pak použil při psaní skriptu, který naparserované informace z nich synchronizuje s db freenetisu.
Indetifikace majitelů adres
Největší problémem bylo, jakým způsobem dosáhnout jednoznačné přiřezaní položek (leases) k majitelům (členům). Nakonec bylo rozhodnuto, že komentář každé položky bude zapsán ve tvaru ID 1 - Novák Jan (kde 1 je ID člena Jana Nováka) a synchroniční skript podle něho určí ke kterému členovi určitou IP adresu přiřadí.
Získání exportu
Nejdříve se přihlásíme na některé APčko přes ssh:
[user@pc ~]$ ssh user@10.143.10.1 user@10.143.10.1's password: MMM MMM KKK TTTTTTTTTTT KKK MMMM MMMM KKK TTTTTTTTTTT KKK MMM MMMM MMM III KKK KKK RRRRRR OOOOOO TTT III KKK KKK MMM MM MMM III KKKKK RRR RRR OOO OOO TTT III KKKKK MMM MMM III KKK KKK RRRRRR OOO OOO TTT III KKK KKK MMM MMM III KKK KKK RRR RRR OOOOOO TTT III KKK KKK MikroTik RouterOS 3.7 (c) 1999-2008 http://www.mikrotik.com/ [user@slfree_vlara] >
Vytvoříme export jménem vlara:
[user@slfree_vlara] > /ip dhcp-server lease export file=vlara
Stáhnout si ho nyní můžeme na adrese ftp://user@10.143.10.1/vlara.rsc
Spuštění skriptu
V sekci Zařízení je odkaz Import exportu DHCP z Mikrotiku. Po kliknutí na něj se nám otevře formulář, pomocí něhož nahrajeme náš export do freenetisu a po jehož odeslání se spustí nejdůležitější synchronizační skript.
Synchronizační skript
Podrobný popis chování - pro lepší přehlednost: data z Mikrotiků jsou označeny jako M, data z freenetisu jsou označeny jako F.
Skript je ve skutečnosti callbacková funkce parseru, takže se spustí po každém naparserování jedné položky. Nejdříve identifikuje člena, kterému položka patří a jeho hlavního uživatele. Pak se v databázi IP adres pokusí zjistit, zda IP adresa již v databázi je.
a) pokud existuje - v případě, že zařízení není přiřazeno k žádnému rozhraní => vytvoří pro něj nové zařízení (patřícími uživatelovi, se stejným adresním bodem jako on) a rozhraní a IP adresu k němu přiřadí; - v případě nestejnosti původní MAC adresu v db a MAC adresy z Mikrotiku přepíše první tou druhou;