IPX v Linuxu -=-=-=-=-=-=-= Milan Keršláger, 11. května 1998 A novice was trying to fix a broken lisp machine by turning the power off and on. Knight, seeing what the student was doing spoke sternly, "You cannot fix a machine by just power-cycling it with no understanding of what is going wrong." Knight turned the machine off and on. The machine worked. -- vtip z MIT (David Moon spolu s Tomem Knithem z větší části vytvořili lispové stroje.) Úvod do IPX/SPX S protokolem IPX/SPX se setkáváme denně, zejména v prostředí Novell NetWare, kde je klíčovým protokolem. Protokol IPX/SPX počítá s vysokou rychlostí a nízkou chybovostí lokálních sítí a je jednodušší než protokol TCP/IP, který je používán v rozlehlém světě Internetu. To je hlavní důvod, proč je v lokálních sítích tolik používán. Jeho konfigurace i implementace je jednoduchá a neskrývá mnoho úskalí. Protokol IPX (Internetwork Packet eXchange) pracuje jako datagramová služba a je tak obdobou protokolu IP. Naproti tomu SPX (Sequenced Packet eXchange) je navazováním spojení velice blízký protokolu TCP. K čemu to bude dobré Všechny počítače v síti jsou si při vzájemné komunikaci rovny. Přesto mají některé významnější postavení než ostatní. Jsou to většinou specializované stanice, které nabízejí své služby ostatním stanicím. Takovým počítačům říkáme servery, stanicím pak klienti a říkáme, že používáme architekturu klient-server. Určitě je velmi výhodné umět i z Linuxu využívat všech služeb, které nabízejí servery Novell Netware. Abychom mohli s těmito servery komunikovat, musíme umět nakonfigurovat svůj Linux tak, aby jim rozuměl. V dalším povídání budu přepokládat, že máme k dispozici síť typu Ethernet (např. tenký koaxiál nebo kroucenou dvoulinku), a podíváme se blíže, jak to všechno zařídit. Začneme od začátku, tedy od toho, jak komunikace na Ethernetových sítích vlastně funguje. Nejprve se pokusím objasnit význam pojmů datagram, paket a rámec. Datagram je celistvá informace, kterou přenášíme mezi počítači. Datagram může být při přepravě dělen na více částí a takovýmto samostatným částem říkáme pakety. Aby mohl být paket přepravován po síti typu Ethernet, je ho potřeba doplnit o další nezbytné informace nutné pro jeho přepravu po síťovém médiu, a takovémuto rozšířeném paketu říkáme rámec. Ethernetové rámce Základem přepravy dat na sítích typu Ethernet jsou takzvané rámce, které přepravují obecně jakákoliv data mezi jednotlivými počítači. Každý rámec představuje balík dat, který je možno vyslat v rámci jednoho segmentu k jinému počítači. Skládá se z hlavičky, těla (obsahuje přenášená data, tedy paket vyšší vrstvy) a traileru (zakončení rámce s kontrolním součtem). Hlavní část hlavičky tvoří hardwarová adresa odesílatele a příjemce (označovaná také jako fyzická MAC adresa), podle které síťové rozhraní dokáže samo rozeznat rámce, které jsou mu určeny a nemusí tak rušit počítač zbytečnými přerušeními. MAC adresa je pevně dána výrobcem síťové karty a většinou ji není možné měnit. Teoreticky by se na světě neměly vyskytovat dvě Ethernetové karty se stejnou MAC adresou, ale může se to stát, i když výbor IEEE (Institute of Electrical and Electronics Engineers) přiděluje každému výrobci blok adres. Pokud na takové karty narazíte, je to nepříjemné a máte z pekla štěstí :-). Rámec je závislý na použitém přepravním médiu. Když datagram opouští Ethernet a je dále přepravován například po sériové lince, jsou zachována pouze data z těla rámce a ta pak putují dále obalena jiným přepravním protokolem. Abychom neměli pocit, že je všechno jednoduché, existuje více norem, které předepisují, jak má hlavička rámce v sítích typu Ethernet vypadat. Síťová karta musí umět správně dekódovat přijatý rámec, jinak ho může považovat za chybný. Proto je vhodné používat na segmentu pokud možno jen jeden rámec a nepřivádět jak síťovou kartu tak administrátora do schizofrenického stavu. Otázkou pak ovšem zůstává, který rámec je ten pravý. Název rámce Charakteristika Ethernet 802.2 dnešní standard firmy Novell, umí přepravovat pouze IPX/SPX Ethernet 802.3 původní standard firmy Novell, umí přepravovat pouze IPX/SPX Ethernet II umí přepravovat IPX/SPX i TCP/IP, nejrozšířenější, nejjednodušš Ethernet SNAP umí přepravovat IPX/SPX i TCP/IP Pokud chcete používat ve své síti protokol TCP/IP, nevyhnete se použití jednoho z posledních dvou rámců. Nejvýhodnějším je určitě Ethernet II, protože je nejjednodušší ze všech a hlavně je univerzální (lze v něm přepravovat kromě IPX/SPX a TCP/IP spoustu dalších protokolů). O rámci 802.2 se někdy říká, že je přenášen v rámci 802.3 (při použití paketového analyzátoru se tak jeho struktury jeví). Ethernet SNAP je kombinací rámců 802.2 a 802.3. Rozumný důvod, proč firma Novell tak vehementně prosazuje právě první dva, neznám. Někdy není možné na jednom segmentu vystačit jen s jedním rámcem, protože například některé BootROMky nebo stanice se staršími ovladači rámec Ethernet II neumějí. Ovšem určitě platí, že v jednoduchosti je síla. Proto raději důkladně zvažte, co všechno Vám na segmentu bude běhat. Neexistuje žádný důvod, proč by neměl být rámec Ethernet II používán. Osobně používám na segmentech jen jeden rámec (Ethernet II) a ostatní přidávám jen v případě nezbytné nutnosti. Windows 95 není vhodné nechávat u protokolu IPX/SPX používat autodetekci rámců, protože to občas vede k nepochopitelným výpadkům, zvláště ve větších sítích. Dělení na více sítí Protože rámce neobsahují možnost, jak je jednoduše směrovat mezi více segmenty (ani to není jejich úkol), je směrování zajištěno protokolem vyšší vrstvy, v našem případě tedy protokolem IPX. Adresa se v IPX datagramu skládá z čísla sítě a čísla uzlu, které kopíruje uz výše zmíněnou MAC adresu síťové karty. Každý segment musí mít jiné číslo sítě a pokud provozujeme na jednom segmentu více rámců, pak i každý rámec musí mít různá čísla sítí. Všechna síťová rozhraní na jednom segmentu se stejným rámcem používají stejná čísla sítí. Ta určuje administrátor při instalaci serverů a pokud dojde ke konfliktu, v horším případě to vyřadí z provozu celý segment. Stanice si obvykle zjistí číslo sítě ze serveru sama, bez nutnosti přesné konfigurace. Vnitřní sítě Vnitřní sítě (tzv. internal network) slouží pro snadné směrování datagramů ze stanic na místo, které Vám poskytuje nějakou službu. Vnitřní číslo sítě proto potřebuje jen server, stanice bez něj bude pracovat a vlastně ho ani na nic nepotřebuje. Vnitřní číslo sítě definuje jakousi virtuální síť uvnitř serveru, na které sice není určen žádný rámec, ale přesto musí být její číslo jedinečné a nesmí se tedy shodovat s jiným číslem sítě v naší lokální síti. Spolupráce Linuxu s NetWare servery Servery Novell NetWare nejčastěji komunikují se stanicemi pomocí protokolu IPX, ten je ovšem pouze přepravním protokolem. Dnes můžeme jako přepravní protokol využít také TCP/IP a překročit tak mnohem větší vzdálenosti než s protokolem IPX, ovšem konfigurace síťových rozhraní u stanic je pak výrazně složitější. Navíc je podpora TCP/IP pro NetWare na straně Linuxu zatím v plenkách. Proto se dále budeme zabývat pouze první a zřejmě také nejrozšířenější variantou. Protokoly v prostředí NetWare Aby si stanice se servery při vzájemném rozhovoru rozuměly, přepravovaná data měla logiku a strukturu, potřebujeme další protokoly, které budou v IPX přepravovány. Nejvýznamějším takovým protokolem je NCP (NetWare Core Protocol), který umožňuje klientům přístup k síťovým diskům, tiskárnám a dalším sdíleným zařízením. Pomocí tohoto protokolu se uživatelé také k serverům NetWare přihlašují. Dalším protokolem, se kterým se setkáme, je SAP (Service Advertisement Protocol). Tímto protokolem jednotlivé servery ohlašují a nabízejí své služby v síti pomocí broadcastů. Posledním zajímavým protokolem je RIP (Routing Information Protocol), pomocí kterého si mezi sebou IPX směrovače (routery) vyměňují informace o známých sítích. Ty se pak odrazí ve směrovacích tabulkách a tím je umožněno, aby směrovače mohly předávat datagramy i do jiných sítí, než ve které pracuje stanice. Přes router může být zajištěn i překlad rámce, ale pokud se tak děje na jednom segmentu, povede to k duplikaci provozu. To je další důvod, proč je vhodnější používat na všech stanicích v síti pouze jeden jediný rámec. Konfigurace IPX v Linuxu Pokud má Linux vystupovat jako obyčejná stanice, která rozumí protokolu IPX, bude vystupovat jako klient a bude využívat zdroje a služby (např. sdílení disků a tisk na síťových tiskárnách), které mu budou pomocí sítě poskytovány servery. Při konfiguraci musíme začít od základu a tím je protokol IPX. Podpora protokolu IPX musí být povolena při kompilaci jádra Linuxu (CONFIG_IPX). Pokud ji máme připravenu jako modul, musíme ho nejprve do jádra ručně zavést (neplatí pro nejnovější verzi NCP utilit). Pokud podporu IPX v jádru nemáme, nezbude nám nic jiného, než si přeložit jádro znovu. Pak je potřeba správně nakonfigurovat síťové rozhraní, k čemuž potřebujeme několik utilit, které najdeme v balíku ncpfs. V tomto balíku se nachází většina utilit, které pro práci s IPX budeme v Linuxu potřebovat. Uživatelům distribuce RedHat 5.0 stačí nainstalovat balík ncpfs-2.0.11-3.i386.rpm nebo podobný, IPX je v jádrech k dispozici jako modul. Síťové rozhraní můžeme nechat nakonfigurovat automaticky, pokud je na síti už IPX používáno. Automatickou konfiguraci obstarává jádro odposlechem provozu na síti. Pokud na síti není žádný IPX provoz, musíme rozhraní nakonfigurovat ručně. Pro běžný provoz automatickou konfiguraci nedoporučuji, protože Windows 95 vysílají do sítě chybné pakety a to pak může vést k nesprávnému rozpoznání čísla sítě a používaných typů rámců, proto je vhodná spíše jen pro první kroky. Pro manuální konfiguraci potřebujete znát číslo sítě pro každý používaný rámec. Pokud ho nevíte, informujte se u svého administrátora. Automatická konfigurace: modprobe ipx ipx_configure --auto_interface=on --auto_primary=on cat /proc/net/ipx_* Automatickou konfiguraci je vhodné zkontrolovat podle výpisu souboru /proc/net/ipx_interface, který obsahuje seznam všech registrovaných IPX rozhraní včetně typů rámců a čísel sítí. Automatické nakonfigurování rozhraní může chvíli trvat (cca 10-30 vteřin). K ruční konfiguraci IPX rozhraní můžeme použít utilitu ipx_interface. Právě jedno rozhraní by mělo být přepínačem -p označeno jako primární. Takové rozhraní je považováno za implicitní a je použito, když v programu při otevírání soketu neuvedeme číslo sítě. ipx_interface činnost [-p] rozhraní typ_rámce číslo_sítě add přidává IPX rozhraní, vždy je nutné uvést název rozhraní a typ rámce. Pokud není uvedeno číslo sítě, je zjištěno odposlechem. del ruší na uvedeném rozhraní uvedený rámec delall ruší všechna rozhraní check zobrazí konfiguraci příslušného rozhraní Typ rámce může být 802.2 pro rámec Ethernet 802.2, 802.3 pro rámec Ethernet 802.3, EtherII pro rámec Ethernet II a Snap pro rámec Ethernet SNAP. Příklad ruční konfigurace rozhraní pro rozhraní eth0, rámec Ethernet II, číslo sítě 12 (primární interface) a rámec 802.3, číslo sítě 13: modprobe ipx ipx_interface add -p eth0 etherii 12 ipx_interface add eth0 802.3 13 Po těchto krocích si můžeme ověřit konfiguraci například takto: monkey: # cat /proc/net/ipx_interface Network Node_Address Primary Device Frame_Type 00000012 00A024D6F9F9 Yes eth0 EtherII 00000013 00A024D6F9F9 No eth0 802.3 monkey: # cat /proc/net/ipx_route Network Router_Net Router_Node 00003333 00000012 0020AFF67402 00001111 00000013 0020AFF67402 00000013 Directly Connected 00000012 Directly Connected monkey: # ifconfig eth0 eth0 Link encap:Ethernet HWaddr 00:A0:24:D6:F9:F9 inet addr:10.1.1.1 Bcast:10.1.1.255 \ Mask:255.255.255.0 IPX/Ethernet II addr:00000012:00A024D6F9F9 IPX/Ethernet 802.3 addr:00000013:00A024D6F9F9 UP BROADCAST RUNNING MULTICAST MTU:1500 \ Metric:1 RX packets:587 errors:0 dropped:0 overruns:0 TX packets:141 errors:0 dropped:0 overruns:0 Interrupt:10 Base address:0x6100 Správnou funkci síťového rozhraní můžeme ověřit například výpisem dostupných NetWare serverů pomocí příkazu slist: monkey: > slist Known NetWare File Servers Network Node Address ------------------------------------------------- PRUM 0003333 000000000001 PAT 0001111 000000000001 Pokud bychom chtěli nakonfigurovaná rozhraní z nějakého důvodu zrušit, mohli bychom postupovat například takto (na vašem systému nemusí být nutně použity všechny uvedené příkazy): ipx_configure --auto_interface=off --auto_primary=off ipx_interface delall rmmod ipx Linux jako IPX směrovač Pokud si to budeme přát, Linux může fungovat jako směrovač IPX protokolu mezi různými sítěmi. Směrování je prováděno na úrovni jádra operačního systému podle údajů ve směrovací tabulce IPX (vypsat si ji můžeme už zmíněným příkazem cat /proc/net/ipx_route Tuto činnost Linux vykonává podobně jako NW server a stejně jako on musí ohlašovat ostatním směrovačům a stanicím, jaké jsou dostupné sítě, a zárověn musí sám dle hlášení ostatních směrovačů automaticky upravovat své směrovací tabulky pro IPX protokol. O tuto činnost se stará zvláštní program. Tento zvláštní program bývá označován jako démon a stačí ho vlastně jen spustit. O vše ostatní se postará sám, pokud před tím správně nakonfigurujeme všechna síťová rozhraní, což už ale perfektně umíme. Zajímavé je, že pokud budeme používat program Mars, o kterém ještě bude řeč, nebudeme démona potřebovat, protože je přímo součástí Marsu. To je velmi sympatické, i když možná někdy už méně praktické. výheň