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ň