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ň