Cvičení ve 12. týdnu

Administrace ARP, sériová linka, modem, protokoly SLIP a PPP


Address Resolution Protocol (ARP)

Tradičním komunikačním protokolem mezi systémy UNIX v Internetu je protokol TCP/IP. TCP/IP verze 4 používá svoje unikátní 32-bitové adresy, není vázán na nějakou fyzickou realizaci a pro transport dat využívá vzájemně propojené lokální sítě (např. Ethernet). Nižší protokol lokální sítě bývá silně hardwarově závislý a používá obvykle jiné adresování paketů. Protokol ARP zajišťuje překlad IP adres na odpovídající fyzické adresy uzlů v lokální síti.

Cvičení: Zjistěte svoji fyzickou (hardwarovou) a IP adresu. Použijte příkaz ifconfig.

Předpokládá se, že každá stanice zná svou IP i fyzickou adresu. Chce-li stanice A s IP adresou IP[A] poslat IP paket stanici B s IP adresou IP[B], potřebuje znát fyzickou adresu HW[B] stanice B, aby mohla dotyčný IP paket zabalit do protokolu fyzické sítě a poslat. Adresu HW[B] získá tak, že pošle fyzickou sítí pomocí protokolu ARP broadcast (všesměrový) paket se žádostí o překlad adresy IP[B]. Zatímco ostatní stanice na lokální síti broadcast ignorují, stanice B rozpozná v došlém dotazu svou IP adresu a odpoví. Stanice A pak použije fyzickou adresu z přijaté odpovědi.

Cvičení: ARP dotazy můžete sledovat příkazem tcpdump arp. Nastartujte virtuální stroj FC4. Nakonfigurujte rozhraní eth1, ale nesnažte se pomocí něho komunikovat. Zkuste spustit tcpdump -i eth1 -n arp zatímco na druhém terminálu zkusíte komunikovat s nějakým jiným počítačem pomocí rozhraní eth1.

ARP cache
Aby před každým paketem nemusel odesilatel žádat pomocí ARP o adresu adresáta, udržuje si v paměti tabulku často používaných fyzických adres - ARP cache. Položky ARP cache získává plynule nutnými ARP dotazy a po určitém čase (timeout) je zapomíná, aby síť pružně reagovala na změny adres.

Cvičení: ARP cache vypíšete příkazem arp. Položky označené příznakem C jsou cache a budou po určitém čase automaticky zrušeny. Příznak M znamená, že položka je pevná (explicitně nastavená) a nebude nikdy vymazána. Přiznak P (public) znamená, že položka neslouží jen pro potřebu daného počítače, ale v případě ARP dotazu na tuto položku ze sítě tento počítač odpoví hodnotou položky, ačkoliv může jít i o cizí IP i fyzickou adresu.

Bezpečnost
Protokol ARP není nijak zabezpečen proti zneužití. Pokud některá stanice na lokální síti pošle ARP odpověď i na adresu, která ji nepřísluší, může tak přesměrovat tok IP paketů jiným směrem a tím narušit IP provoz na dané lokální síti. Protokol ARP se přenáší pouze v rámci lokální sítě (jeden segment Ethernet), není proto možné, aby ARP komunikaci narušoval někdo z cizí sítě.

Proxy ARP
Tato technika se používá k oddělení dvou sítí směrovačem (routerem), pokud zároveň chceme, aby se obě sítě chovaly jako síť jediná - tj. např. stejná brána pro obě poloviny, router není vidět - transparentní. Pokud ze sítě A přijde ARP dotaz na IP adresu někoho v síti B, tzn. že na síti A nikdo neodpoví, pošle router na síť A fingovanou ARP odpověď říkající, že počítač s požadovanou IP adresou má fyzickou adresu stejnou jako tento router. Původní stanice si myslí, že odpověděl adresát a že posílá data přímo adresátovi na jeho fyzickou adresu, ale veskutečnosti posílá data na fyzickou adresu routeru a ten si pomocí ARP dotazu zjistí fyzickou adresu cíle v síti B a data tam doručí. Z hlediska stanic se router chová spíše jako inteligentní bridge. Výhodou je, že jednotlivé stanice můžeme beze změny jejich konfigurace (IP-adresa, netmask, gateway) přenášet mezi sítěmi A a B.

Proxy ARP se často používá v souvislosti se sériovou linkou, pokud je nějaký počítač A připojen pouze séroivou linkou (modemem) k počítači (routeru) R, který je na lokální síti (ethernet). Při běžném směrování by sériová linka tvořila z hlediska IP adres jinou síť, než je lokální ethernet, a počítač B by byl gateway do této sítě. Při použití proxy ARP dáme počítači A nějakou volnou IP adresu z rozsahu ethernet sítě a počítač B odpovídá i na ARP dotazy týkající se počítače A. Tím na sebe přesměruje IP provoz pro A, který pak transparentně předává sériovou linkou. Není třeba alokovat další adresní prostor pro sériovou linku, není třeba zasahovat do konfigurace vnějších routerů a může ušetřit i několik ARP paketů.

Sériová linka
Sériová linka je v Linuxu reprezentována speciálními soubory /dev/ttyS0, /dev/ttyS1, atd. Sériovou linkou realizovanou u PC rozhraním RS-232C lze přímo propojit dva počítače kabelem (sériový laplink) na vzdálenost několika metrů. S použitím převodníku RS-232C/RS-485 lze vzdálenost několikanásobně prodloužit. Na velké vzdálenosti se používá modem, který provádí modulaci signálu. Funkce modemu se ovládají pomocí speciálních příkazů posílaných jako data (AT příkazy).

Parametry sériové linky - rychlost, paritu, počet stop bitů atd. - lze nastavit příkazem setserial (viz. man setserial), ale většina komunikačních programů si umí základní parametry nastavit vlastními prostředky.

Základní funkcí linky je přenos znaků. Přenos můžete vyzkoušet programem minicom (jde o přepis DOSovského telix.exe do UNIXu). Je interaktivní, ovládání má stejné jako DOSovský telix, akorát místo řídící kombinace kláves <CTRL>-<něco> používá kombinaci <CTRL>-<A> <něco>. Hlavní menu je <CTRL>-<A> <Z>. Programy tohoto typu sehrály svou roli v dobách stanic BBS.

Znakový provoz
Propojíte-li si po dvojicích vzájemně počítače sériovou linkou (9-pinový konektor bývá asociován s /dev/ttyS0, zatímco 25-pinnový konektor je reprezentován /dev/ttyS1), můžete na obou stranách spustit program minicom, čímž vytvoříte interaktivní komunikační nástroj - znaky jsou přenášeny linkou a zobrazovány na protějším počítači. Přenos dat není zajištěn žádným protokolem, používá se přímé ASCII kódování.

Terminálový provoz
Spustíte-li na jednom z počítačů místo programu minicom program getty s parametrem /dev/ttyS0, můžete se ze druhého počítače přihlásit na první pomocí programu minicom. Po sériové lince se nepodaří přihlásit uživateli root, protože /dev/ttyS0 není vyjmenováno v /etc/securetty. Z pohledu systému se jedná o externí znakový terminál. Program getty je vhodné vložit do souboru /etc/inittab, aby se spustil vždy po ukončení spojení nebo procesů. Pozor, po přihlášení tímto způsobem obvykle není nastavena proměnná TERM, takže nefungují fullscreenové programy, ani příkaz clear. Proměnnou TERM můžete vždy po přihlášení dodatečně nastavit podle typu terminálu, kde spouštíte minicom, nebo nastavovat automaticky např. z /etc/profile, nebo hodnotu nastavit trvale jako poslední parametr programu getty.

Cvičení: Virtuální počítač FC4 sériovou linku používá pro přístup ke konzoli. Z hostitelského počítače na ní přistupujeme pomocí programu xm console nebo automaticky po spuštění skriptu FC4.sh nebo lze využít i minicom. Prohlédněte si soubor /etc/inittab v počítači FC4 a lokalizujte konfiguraci sériového portu.

IP provoz
Po sériové lince lze přenášet i IP pakety, sériová linka se může chovat jako segment lokální sítě. K tomuto účelu je nutné přepnout mód provozu sériové linky (tzv. serial line discipline), což můžeme učinit např. příkazem slattach. Existuje několik rozšířených protokolů pro přenos IP datagramů po sériové lince - nejjednodušší je SLIP, CSLIP navíc komprimuje IP hlavičku (nepotřebné bity vypouští), protokol PPP umí přenášet současně nejen IP ale i IPX či jiné protokoly umí autorizovat spojení a obě stanice se mohou v rámci PPP dohodnout na tom, jaké IP adresy budou používat. Program slattach aktivuje na lince IP provoz nějakým protokolem a alokuje pro ni v jádře interface - v případě SLIP sl0 (resp. sl1, sl2..., pokud je sl0 již obsazen). Dokud běží slattach, funguje IP provoz, program tedy spouštíme na pozadí, nebo na zvláštním terminálu. Slattach však nenastavuje parametry síťového interface (IP-adresu) ani směrovací tabulky. Proto musíme po slattach požít ještě příkazy ifconfig a route.

- dip
Realizujeme-li pomocí sériové linky spojení komutovanou telefonní linkou, bývá před zahájením IP provozu nutné identifikovat se protější stanici (vesměs textovou komunikací) a teprve potom aktivovat protokol SLIP/CSLIP/PPP. Lze to udělat třeba shellovým scriptem a příkazy typu echo username > /dev/ttyS1 a následně použít příkazy slattach, ifconfig a route. Mnoho starostí ušetří program dip. Umožňuje inicializovat modem, vytočit číslo, navázat rozhovor s protistanicí, autorizovat se, zahájit provoz SLIP, nastavit interface a směrovací tabulky, ale krom toho umožňuje správně reagovat na nezdařené či přerušené spojení. Umí však přenášet jen IP protokol pomocí SLIP, CSLIP nebo PPP.

- pppd
Program pppd patří do stejné kategorie jako dip, ale je mnohem chytřejší. Umí přenášet i jiné protokoly než IP (IPX), lépe zpracovávat možné chyby při spojení a je snadněji konfigurovatelný.