IPX v Linuxu

1.11.1998

Ú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ě Interentu. 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řes to mají některé významě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 - například IP nebo IPX) a traileru (zakončení rámce s kontrolním součtem). V hlavičce najdeme identifikaci rámce, typ přenášených dat a hardwarovou adresu odesílatele a příjemce (označovaná také jako fyzická MAC adresa). Podle této adresy 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 (viz tab. 1). 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ámceCharakteristika
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
Tab. 1: Ethernetové rámce

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í. 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í. Ty 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řes to 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í slouží utilita 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ě. Tvar použití příkazu vypadá takto:

    ipx_interface činnost [-p] rozhraní typ_rámce číslo_sítě

Činnost Popis
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 (oddělí provoz z předává datagramy z jedné sítě do druhé, pokud je to potřeba). 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é.