Synchronizace FreeNetIS - Mikrotik

Z Freenetis Wiki
Přejít na: navigace, hledání

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; v případě, že se majitelé IP adresy v F a v M liší, nastaví majitelem toho z M

b) pokud neexistuje - nejdříve testuje zda-li existuje zadaná MAC adresa z M:

I) pokud existuje - najde všechny IP adresy patřící k rozhraní této MAC adresy, 1 -> použije ji, více -> použije první, žádná -> vytvoří novou => IP adresu z M sem uloží; opět v případě, že se majitelé MAC adresy v F a v M liší, nastaví majitelem toho z M

II) pokud neexistuje - vytvoří úplně nové zařízení, s novým rozhraním a novou IP adresou, patřící majiteli z M


Problém "FreenetIS bug jak prase"

Skript počítá se stěhováním členů - pokud MAC adresa existuje, pouze změní IP adresu, segmenty, subnety, atd. Jedná se ale o dvojsečnou zbraň - pokud má člen (většinou technik sdružení) stejnou MAC adresu na více APčkách (např. NB použitý při zapojování) a tato IP adresa je "oIDečkována", je reálná možnost, že při spuštění skriptu mu to povolí NB na druhé straně sítě, ale doma bude přesměrováný (viz. Tomáš Dulík :-)). TODO: Opravit? Jak?