Detekcia IP konfliktu v Linuxe - IPwatchD

01.12.2006 23:57 | Články | Jaroslav Imrich
IP konflikt nastáva v prípade, že dve rôzne zariadenia v lokálnej sieti používajú rovnakú IP adresu. Operačný systém MS Windows na túto nežiadúcu udalosť upozorňuje varovným hlásením a v logoch je možné nájsť aj MAC adresu konfliktného systému. Ak však používate operačný systém GNU/Linux a zúčastnili ste sa IP konfliktu, či už ako strana, ktorá ho spôsobila, alebo ako strana ním postihnutá, pravdepodobne ste si všimli iba opakujúce sa výpadky konektivity. Ich skutočnú príčinu by ste však v systémových logoch hľadali márne, pretože linuxové jadro na túto udalosť vôbec nereaguje.

Detekcia IP konfliktu

IP konflikt je možné odhaliť len v prípadoch, keď váš systém zo siete príjme paket s rovnakou zdrojovou IP adresou ako je ním používaná adresa. Paket však musí pochádzať z iného systému a túto skutočnosť je možné určiť podľa zdrojovej MAC adresy, ktorá je jedinečnou hardvérovou adresou sieťového rozhrania - v prípade počítača sieťovej karty. Ak sa teda k vášmu počítaču dostane zo siete takýto paket, je jasné, že niekde na lokálnej sieti je počítač, ktorý používa rovnakú IP adresu ako váš systém.

V prípade, že sú na lokálnej sieti použité ako rozbočovače switch-e (cca 90% sietí), k vášmu počítaču sa dostanú len pakety jemu priamo adresované. Konfliktný systém by teda musel vygenerovať paket s rovnakou cieľovou adresou ako je jeho vlastná (zdrojová) IP adresa. Takýto paket by však žiadny systém nikdy neodoslal do siete, ale spracoval by ho sám, lebo je v skutočnosti adresovaný jemu samému. Preto je jedinou možnosťou detekovať IP konflikt z tzv. broadcast paketov (ďalej len obežníky), ktoré sú doručené všetkým zariadeniam na lokálnej sieti. Obežníky vysiela napríklad aj Samba, no tá málokedy beží na všetkých počítačoch v sieti, a preto väčšina operačných systémov detekuje IP konflikt z ARP obežníkov.

Výpadky konektivity

S protokolom ARP, ktorý slúži o.i. na zisťovanie MAC adries zariadení v lokálnej sieti, priamo súvisia aj výpadky konektivity sprevádzajúce IP konflikt. Ak chce počítač A s IP adresou 10.1.1.2 komunikovať s počítačom B s IP adresou 10.1.1.3, vyšle najskôr ARP obežník adresovaný všetkým systémom na lokálnej sieti, v ktorom sa pýta: "Kto má IP adresu 10.1.1.3? Odpoveď žiada počítač s IP adresou 10.1.1.2 a MAC adresou AA:AA:BB:BB:CC:CC". Tento obežník dostanú všetky systémy na lokálnej sieti, no odpovie naň iba počítač B ako vlastník príslušnej IP adresy: "10.1.1.3 mám ja a moja MAC adresa je 11:11:22:22:33:33". Počítač A si odpoveď dočasne uloží do pamäte (ďalej len "ARP cache") a je schopný začať komunikáciu s počítačom B. Životnosť údajov v "ARP cache" je však za normálnych podmienok obmedzená a spravidla sa jednotlivé záznamy odstránia, ak nie sú používané dlhšie než jednu minútu. Veľmi dôležité je vedieť, že keď má počítač v "ARP cache" príslušné údaje, nevysiela obežník, ale používa záznam dostupný v pamäti.

Nedostatky tohto spôsobu komunikácie sa prejavujú najmä v prípade, keď sa na lokálnej sieti nachádza systém s duplicitnou IP adresou. Ten totiž odpovedá na ARP obežníky ostatných systémov a zanáša tak do ich "ARP cache" nesprávne údaje. Následkom toho nie sú tieto systémy schopné s vami komunikovať, čo sa prejavuje výpadkom konektivity. V skutočnosti je ale jediným problémom nesprávna MAC adresa v "ARP cache" ostatných systémov. Tomuto javu sa dá predísť používaním tzv. statických ARP záznamov, čo je však najmä vo väčších sieťach náročné na údržbu. Dovolím si pripomenúť, že záznamy v "ARP cache" je možné zobraziť a spravovať pomocou utility "arp", ktorá je štandardnou súčasťou väčšiny operačných systémov.

Zabránenie IP konfliktu

Mnohé operačné systémy pri svojom zavádzaní alebo pri zmene sieťových nastavení vysielajú do siete špeciálny typ ARP obežníka, tzv. "gratuitous ARP". Týmto spôsobom sa snažia zistiť, či náhodou túto IP adresu už nejaké zariadenie v lokálnej sieti nepoužíva. Ak nedostanú žiadnu odpoveď, predpokladajú, že zadaná IP adresa je voľná a začnú ju aktívne používať. Ak odpoveď dostanú, vo väčšine prípadov na túto skutočnosť upozornia vizuálne alebo zalogovaním udalosti a IP adresu sieťovému rozhraniu nepriradia.

Závažným problémom linuxového jadra je skutočnosť, že na "gratuitous ARP" vôbec nereaguje. Systém, ktorý tento obežník vyslal teda nedostane žiadnu odpoveď a spôsobí konflikt. Navyše všetky ostatné systémy na lokálnej sieti po prijatí "gratuitous ARP" obežníka upravia údaje vo svojej "ARP cache".

V drvivej väčšine prípadov by bolo možné IP konfliktu zabrániť okamžitým zaslaním odpovede na "gratuitous ARP" a následné vyslanie tohto obežníka by už len zabezpečilo, že všetky systémy upravia údaje vo svojej "ARP cache" na správne hodnoty.

IP konflikt v Linuxe

V predchádzajúcom texte som už spomínal, že linuxové jadro neobsahuje kód, ktorý by zabezpečil detekciu IP konfliktu a odpovedanie na obežníky typu "gratuitous ARP". Na jednej strane je takéto správanie možné považovať za nesprávne, na druhej strane túto "funkcionalitu" využíva napríklad High-Availability Linux project. Absenciu detekcie IP konfliktu sa snažil riešiť aj Marc Merlin, ktorý vytvoril patch pre linuxový kernel s názvom ARPpatch. Implementoval v ňom logovanie IP konfliktu prostredníctvom syslogu, no z ťažko pochopiteľných príčin bol tento patch vývojármi kernelu odmietnutý s odôvodnením, že túto funkcionalitu môže zabezpečovať jednoduchý daemon. Súhlasím s p. Merlinom a tiež si myslím, že logovanie tejto udalosti i reakciu na "gratuitous ARP" by mal vykonávať kernel. V systémoch, na ktorých je odpoveď na "gratuitous ARP" nežiadúca, by sa mohla táto funkcionalita vypnúť napríklad prostredníctvom pseudo-súborového systému /proc.

Myslím, že je málo pravdepodobné, že by sa mi podarilo zmeniť názor vývojárov jadra. Preto som založil projekt na serveri sourceforge.net a v jazyku Perl vytvoril ukážkovú implementáciu nimi navrhovaného daemona. Nazval som ho IPwatchD a v podstate je to len jednoduchý sniffer, ktorý na zachytávanie a analýzu ARP paketov používa knižnicu libpcap. IPwatchD môže bežať v aktívnom alebo pasívnom móde. V pasívnom móde zabezpečuje iba zaznamenanie IP konfliktu prostredníctvom syslog daemona. V aktívnom móde okrem toho aj reaguje na obežníky typu "gratuitous ARP" a pomocou utility "arpping" na ne odpovedá.

Pre účely tohto článku som pripravil aj špeciálnu výukovú verziu zdrojových kódov, ktorá obsahuje podrobnejšie komentáre. Zatiaľ sa jedná len o beta verziu, a preto uvítam akékoľvek návrhy na zlepšenie kódu alebo architektúry daemona.

Poznámka na záver

Mojím hlavným cieľom bolo v krátkosti a nenáročne objasniť problematiku vzniku a detekcie IP konfliktov, ktorá je však veľmi úzko spätá s protokolom ARP a sieťovým modelom TCP/IP. Zistil som, že je veľmi náročné písať o téme, kde "všetko so všetkým súvisí" a udržať text prehľadný a pochopiteľný pre čo najširší okruh čitateľov. Akékoľvek nejasnosti sa preto rád pokúsim vysvetliť v diskusii pod článkom.

    • pekne 02.12.2006 | 01:13
      Avatar uid0 Debian  Používateľ
      len malicka chybicka - utilita arpping je vlastne arping :)
      Debian. apt-get into it…
    • na detekciu 14.12.2006 | 01:19
      balon   Návštevník
      konfliktu by pomohol podla mna arpwatch, konflikt ale neriesi ...
      • Re: 16.12.2006 | 09:33
        jariq   Návštevník
        Neskusal som to sice, ale myslim, ze arpwatch by naozaj mohol logovat pripadne IP konflikty lokalneho systemu, na ktorom bezi. Je to vsak skor monitorovaci nastroj zachytavajuci zmeny MAC adries v *celej* lokalnej sieti, a preto je vhodne nasadit ho najma na branu siete, kde ma kazdy klient pridelenu stale tu istu IP adresu - ci uz staticky alebo dynamicky cez DHCP. Navyse, ako si uz spomenul, neriesi problem s gratuitous ARP a teda moze konflikt iba pasivne zaznamenat. S ipwatchd ma spolocnu jednu nevyhodu. Je to daemon, ktoreho musis nainstalovat, nakonfigurovat, spustit.. Nemyslim, ze by si bezny pouzivatel dal tu namahu, a preto som zacal hladat jednoduchsie riesenie v podobe integracie funkcionality do Gnome Network Monitor-u. Uvitam akykolvek napad ako analyzovat prichadzajuce ARP pakety bez prav roota :)
    • ludkovia 28.12.2006 | 11:45
      Vister   Návštevník
      začnite používať konecne norámalny, komerčný operačný systém. Nie zbúchaniny. Hned budete mať množstvo času pre iné, než len riešenie problémov. Windows Vista prichádza, tak prejdite aj VY. Ste proti komunizmu, nie? Tak nepoužívajte jeho výtvor a politiku. "všetko kazdemu zadarmo a rovnako" ne?
      • Re: ludkovia 31.12.2006 | 10:59
        Avatar uid0 Debian  Používateľ
        > Ste proti komunizmu, nie? preco to predpokladas?
        Debian. apt-get into it…
        • Re: ludkovia 30.12.2006 | 10:41
          zero0x   Návštevník
          hehe tomu sa hovori debilko :) myslim ze s propagaciou visty sa daleko nedostanes, ak si si nevsimol tato stranka je predovsetkym o linuxe :)
          • Re: ludkovia 05.01.2007 | 11:09
            Gusto   Návštevník
            WinSHITY ma sklamali. . . tak mi tu nechci vraviet ze su dobre. Ne dost ze musim kamosom stale na novo instalovat alebo opravovat lebo spadli :)))) Tak mi tu nic nevrav o Winoch. a uz vobec ne o Viste.
            • Re: ludkovia 01.10.2009 | 00:09
              HvkhEYSMkavfAQMeeG   Návštevník
              zenegra what is alprazolam [url="http://www.joshstricklandonline.com/zenegra-what-is-alprazolam.html"]zenegra what is alprazolam[/url] http://www.joshstricklandonline.com/zenegra-what-is-alprazolam.html 287509 does effexor cause [url="http://www.joshstricklandonline.com/does-effexor-cause.html"]does effexor cause[/url] http://www.joshstricklandonline.com/does-effexor-cause.html qxp man s health diet phentermine pill [url="http://www.joshstricklandonline.com/man-s-health-diet-phentermine-pill.html"]man s health diet phentermine pill[/url] http://www.joshstricklandonline.com/man-s-health-diet-phentermine-pill.html 8-OO hoodia gordonii dex l10 review [url="http://www.joshstricklandonline.com/hoodia-gordonii-dex-l10-review.html"]hoodia gordonii dex l10 review[/url] http://www.joshstricklandonline.com/hoodia-gordonii-dex-l10-review.html 885 buy intravenous tramadol [url="http://www.barkerforsenate.com/buy-intravenous-tramadol.html"]buy intravenous tramadol[/url] http://www.barkerforsenate.com/buy-intravenous-tramadol.html 661299
          • Re: ludkovia 03.08.2009 | 03:47
            OSbOKpyrw   Návštevník
            OtkXg6 pjvsevubqckv, [url=http://qrieqfyxnkgr.com/]qrieqfyxnkgr[/url], [link=http://sedjmfgjwmnt.com/]sedjmfgjwmnt[/link], http://uaqeuyjdgpnq.com/
    • IP Konflikt 16.01.2007 | 12:21
      Tomas   Návštevník
      Mam Win XP a som pripojeny na wlan siet a velakrat sa mi stava ze mi windows SP2 vypise system error a ze moja ip ma konflikt s inym systemom v sieti to znamena ze niekto v sieti si dal rovnaku ip ako mam ja. Problem je v tom ze mi pocas toho ip konfliktu nejde dobre net a ma vypadky. Pokial sa doticna osoba neodpoji alebo nezmeni ip adresu na inu som bez internetu. Za internet platim a mam dojem ze nejaky hacker na druhej strane siete ktory klonuje moju ip chce docielit to abi som si vypol pocitac a on si vtedy moze pouzivat moju ip a znov aj internet nakolko mac adresa nieje v tejto wlan sieti podstatna. Chcel bi som zistit ci bi mi pouzivanie linuxu pri surfovani nejako pomohlo kedze linux nedetekuje ip konflikt. Takze ked niekto naklonuje moju ip adresu ci bi linux mal vypadky netu ako windows. Dik
      • Re: IP Konflikt 16.01.2007 | 21:22
        Avatar Andrej "karči" Krajči Gentoo  Administrátor
        a co by sa stalo keby si si ty zmenil IP adresu? Dokial viem tak ked v CMD (start -> run -> cmd) napises ipconfig /renew tak by si to malo aj IP adresu zmenit. (niesom isty, u mna doma na LAN take problemy nemam)
        "IB, thy name is homework." -- IB
      • Re: IP Konflikt 16.01.2007 | 21:50
        jariq   Návštevník
        Predpokladam, ze vypadky, ktore pozorujes su sposobene zmenou zaznamu o tvojej IP adrese v ARP cache na smerovaci (routeri). Linux ti v tomto pripade nijako nepomoze, prave naopak, ani by si nevedel, ze problemy sposobuje IP konflikt. Najrozumnejsie riesenie je zajst za tvojim providerom a poziadat ho, aby situaciu riesil. Jednak by mohol na routeri zaviest staticke ARP zaznamy, alebo pripajat pouzivatelov cez VPN (virtualna privatna siet). Prve riesenie sice nezamedzi tomu, aby s tebou niekto linku "zdielal", ale aspon pouzije rovnaku MAC adresu a nebudes pocitovat vypadky. Druhe riesenie je trochu narocnejsie na vykon routera i know-how tvojho ISP, takze ho pravdepodobne nebude chciet implementovat, ale bolo by riesenim konecnym.
    • viac ip? 17.01.2007 | 22:27
      Marko   Návštevník
      ahoj,
      dakujem za tento script, dlho som hladal riesenie ip konfliktov a veci, co som skusal, nefungovali..
      len by som mal poznamocku: co ip aliasy? ci uz eth0:0 alebo ip addr.. ja mam na mojej masine styri ip, takze spustam styri modifikovane scripty. asi by to slo urobit aj jednym, ale kvoli prehladnosti mi toto riesenie vyhovuje.
      tu je diff originalneho a upraveneho scriptu, ak by to niekomu pomohlo (btw. robil som to narychlo este pred sviatkami, je to funkcne, ale k dokonalosti to ma daleko): ipwatchd.diff
    • problem 08.06.2007 | 20:14
      vevinka   Návštevník
      potrebujem pomoct, mam IP switcher a ked som menila adresu vypisalo mi ze na sieti je ten IP konflikt a nechce ma pustit na internet. az na to ze ne routri sme 4 a vsetkym ide net len na mojom kompe nie. co mam robit?
    • I also really like it. 20.06.2009 | 21:55
      Albert   Návštevník
      buy levitra -levitra buy propecia -propecia buy zithromax -zithromax buy xenical -xenical buy ultram -ultram buy fioricet -fioricet buy valium -valium buy acomplia -acomplia buy prozac -prozac buy ativan -ativan
    • surrounded by friends. 24.06.2009 | 19:42
      Ballard   Návštevník
      best price ambien - ambien buy diazepam - diazepam online wellbutrin - wellbutrin order alprazolam - alprazolam buy prozac - prozac online tamiflu - tamiflu order lorazepam - lorazepam order online nexium - nexium zoloft info - zoloft buy klonopin - klonopin
    • I am new to blogging world 15.07.2009 | 08:15
      Gail   Návštevník
      • Príspevok bol vymazaný.