27.7. A SLIP használata

Eredetileg készítette: Satoshi Asami. A hozzávalókat biztosította: Guy Helmer és Piero Serini.

27.7.1. A SLIP kliensek beállítása

A következőkben azt mutatjuk be, hogy egy FreeBSD-s gépet miként tudunk egy hálózaton statikus névvel beállítani a SLIP használatával. A dinamikus hálózati nevek használatakor (vagyis amikor a címünk minden egyes tárcsázáskor megváltozhat) egy valamivel bonyolultabb beállításra van szükségünk.

Először is állapítsuk meg, hogy a modemünk melyik soros portra csatlakozik. Sokan /dev/modem néven egy szimbolikus linket hoznak létre a valódi eszközre, például a /dev/cuadN leíróra. Ennek köszönhetően az eszköz tényleges névetől el tudunk vonatkoztatni és soha nem kell módosítanunk semmit, ha a modemet például egy másik portra kell átraknunk. Ugyanis könnyedén kacifántossá tud válni a helyzet, amikor egyszerre kell megváltoztatnunk egy rakat dolgot az /etc könyvtárban és módosítanunk az összes .kermrc állományt!

Megjegyzés: A /dev/cuad0 a COM1 port, a /dev/cuad1 a COM2 és így tovább.

A rendszermag beállításait tartalmazó állományban a következőnek mindenképpen szerepelnie kell:

device   sl

Mivel ez általában a GENERIC rendszermagban megtalálható, így ez nem okoz semmilyen gondot, kivéve, hogy ha korábban már kitöröltük.

27.7.1.1. Amiket csak egyszer kell megtenni

  1. Vegyük fel az otthoni gépünket, az átjárónkat és a névszervereket az /etc/hosts állományba. Erre álljon itt egy konkrét példa:

    127.0.0.1               localhost loghost
    136.152.64.181          water.CS.Example.EDU water.CS water
    136.152.64.1            inr-3.CS.Example.EDU inr-3 slip-gateway
    128.32.136.9            ns1.Example.EDU ns1
    128.32.136.12           ns2.Example.EDU ns2
  2. Figyeljünk oda, hogy az /etc/nsswitch.conf állományban szereplő hosts szakaszban a dns szó előtt a files szónak kell megjelennie. Ezek nélkül mókás dolgok tudnak történni rendszerünkben.

  3. Szerkesszük át az /etc/rc.conf állományt.

    1. A hálózati nevünket a következő sorban tudjuk megadni:

      hostname="az.en.nevem"

      Ide a gépünk teljes internetes hálózati nevét kell beírnunk.

    2. Az alapértelmezett átjárót az alábbi sor módosításával tudjuk beállítani úgy, hogy a

      defaultrouter="NO"

      változó értékét átírjuk:

      defaultrouter="slip-gateway"
  4. Készítsük el az /etc/resolv.conf állományt, amelyben majd a következők legyenek:

    domain CS.Example.EDU
    nameserver 128.32.136.9
    nameserver 128.32.136.12

    Látható, hogy ezek a névfeloldásért felelős szerverek címei. Természetesen a ténylegesen beírandó tartomány (domain) neve és a névszerverek címei mindig az adott környezetünktől függenek.

  5. Állítsuk be egy jelszót a root és toor felhasználóknak (és mindenki másnak, akinek még nem lenne).

  6. Indítsuk újra a számítógépünket és utána győződjünk meg róla, hogy a megfelelő hálózati névvel rendelkezik.

27.7.1.2. A SLIP kapcsolatok felépítése

  1. Tárcsázzunk és gépeljük be a slip parancsot, majd ezt követően a gépünk nevét és a jelszót. Ez leginkább a konkrét környezettől függ. Ha a Kermit nevű programot használjuk, akkor egy ilyen szkripttel is próbálkozhatunk:

    # a kermit beállítása
    set modem hayes
    set line /dev/modem
    set speed 115200
    set parity none
    set flow rts/cts
    set terminal bytesize 8
    set file type binary
    # a következő makró felelős a tárcsázásért és a bejelentkezésért
    define slip dial 643-9600, input 10 =>, if failure stop, -
    output slip\x0d, input 10 Azonosito:, if failure stop, -
    output silvia\x0d, input 10 Jelszo:, if failure stop, -
    output ***\x0d, echo \x0aCONNECTED\x0a

    Természetesen a felhasználói nevet és a jelszót a sajátunkra kell benne kicserélnünk. Miután ezzel is megvagyunk, a Kermit paranccsorában a csatlakozáshoz egyszerűen csak írjuk be, hogy slip.

    Megjegyzés: Nem javasoljuk, hogy az állományrendszeren a jelszavakat titkosítatlan formában tároljuk. Mindeki csak a saját felelősségére tegyen ilyet.

  2. Hagyjuk el a Kermit programot (a Ctrl-z billentyűkombinációval bármikor fel tudjuk függeszteni a futását) és root felhasználóként írjuk be a következőt:

    # slattach -h -c -s 115200 /dev/modem

    Ha ezután már képesek vagyunk a ping paranccsal elérni az útválasztó másik oldalán található gépet, akkor az azt jelenti, hogy sikerült csatlakoznunk! Ha viszont itt még nem járnánk sikerrel, akkor az slattach parancsnak ne a -c paramétert adjuk meg, hanem a -a paramétert.

27.7.1.3. Hogyan bontsunk egy kapcsolatot

Tegyük a következőket:

# kill -INT `cat /var/run/slattach.modem.pid`

Ez leállítja az slattach programot. Ne felejtsük el azonban, hogy ezt csak a root felhasználóval tudjuk végrehajtani. Ezután térjünk vissza a kermit programhoz (ha felfüggesztettük volna, akkor ehhez a fg parancsra lesz szükségünk), és lépjünk ki belőle (q).

Az slattach(8) man oldala ehhez a ifconfig sl0 down parancsot javasolja, amellyel lényegében leállítjuk a hozzátartozó felületet. Igazából a kettő között nincs semmilyen komolyabb eltérés (mivel az (ifconfig sl0 is ugyanezt eredményezi.)

Néha előfordulhat, hogy a modem egyszerűen nem hajlandó eldobni a vonalat. Ilyen esetekben indítsuk el a kermit programot és lépjünk ki megint. Másodjára általában már sikerül.

27.7.1.4. Hibaelhárítás

Ha valamiért ez mégsem válna be, akkor csak nyugodtan kérdezősködjünk a freebsd-net levelezési listán. A tapasztalatok szerint az embereknek eddig a következőkkel voltak problémáik:

  • Az slattach meghívásakor sem a -c, sem pedig a -a paramétert nem adták meg. (Ez ugyan nem végzetes hiba, de egyes felhasználók szerint ez segített megoldani a gondokat.)

  • Az sl0 helyett s10-et írtak be (egyes betűtípusoknál könnyen össze lehet téveszteni ezeket).

  • Az ifconfig sl0 segítségével ellenőrizhető a felület állapota. Például ilyet láthatunk:

    # ifconfig sl0
    sl0: flags=10<POINTOPOINT>
            inet 136.152.64.181 --> 136.152.64.1 netmask ffffff00
  • Ha a ping(8)no route to host” hibaüzenetet ad, akkor az útválasztási táblázattal van a gond. A netstat -r paranccsal gyorsan ki tudjuk listázni a rendszerünkben jelenleg nyilvántartott utakat:

    # netstat -r
    Routing tables
    Destination      Gateway            Flags     Refs     Use  IfaceMTU    Rtt    Netmasks:
    
    (root node)
    (root node)
    
    Route Tree for Protocol Family inet:
    (root node) =>
    default          inr-3.Example.EDU  UG          8   224515  sl0 -      -
    localhost.Exampl localhost.Example. UH          5    42127  lo0 -       0.438
    inr-3.Example.ED water.CS.Example.E UH          1        0  sl0 -      -
    water.CS.Example localhost.Example. UGH        34 47641234  lo0 -       0.438
    (root node)

    Az előző példákat egy viszonylag forgalmas rendszerből ragadtuk ki. A rendszerünkön megjelenő számok a hálózati aktivitás mértékének függvényei.

27.7.2. A SLIP szerverek beállítása

Ebben a leírásban igyekszünk bemutatni hogyan kell egy FreeBSD típusú rendszer alatt SLIP szervert beállítani, ami általában annyit jelent, hogy a rendszerünben a távoli SLIP kliensek csatlakozásakor automatikusan elindítjuk a kapcsolatokat.

27.7.2.1. Előfeltételek

Ez a szakasz igen szakmai jellegű, ezért az olvasó részéről feltételezünk a témában némi alapismeretet. Ez alatt alapvetően a TPC/IP hálózati protokollt értjük, különös hangsúllyal a hálózatok és hálózati csomópontok címzéséen, a hálózati maszkokon, alhálózatokon, útválasztáson, az olyan útválasztási protokollokon, mint például a RIP. A SLIP beállítása egy betárcsázós szerveren mindezen fogalmak ismeretét igényli, és ha ezekkel még nem lennénk tisztában, akkor olvassuk el például Craig Hunt TCP/IP Network Administration című könyvét (O'Reilly & Associates, Inc.; ISBN: 0-937175-82-X) vagy Douglas Comer TCP/IP protokollról szóló könyveit.

Mindezek mellett még feltételezzük, hogy már beállítottuk a modem(ek)et és a rajtuk keresztüli bejelentkezéshez szükséges állományokat. Ha még nem készítettük volna fel erre a rendszerünket, akkor a 26.4 Szakasz ad részletes tájékoztatást a betárcsázós szolgáltatások beállításáról. A soros vonali eszközmeghajtóval kapcsolatban továbbá érdemes átolvasni a sio(4) oldalt, valamint a ttys(5), gettytab(5), getty(8) és init(8) oldalakat a bejelentkezések modemen keresztüli fogadásáról, illetve talán az stty(1) oldalt a soros port paramétereinek megfelelő beállításáról (mint például a clocal a közvetlenül csatlakozó soros felületek esetében).

27.7.2.2. Gyors áttekintés

A FreeBSD SLIP szerverként általában a következő módon üzemel: a SLIP felhasználó tárcsázza a FreeBSD-s SLIP szerverünket, majd bejelentkezik egy specális SLIP bejelentkezési azonosító használatával, amely a /usr/sbin/sliplogin shellt használja. A sliplogin program az /etc/sliphome/slip.hosts állományban megkeresi a speciális felhasználóhoz tartozó sort, és ha talál egy ilyet, akkor csatlakoztatja a soros vonalat egy rendelkezésre álló SLIP felületre, amelyen aztán a SLIP felültet beállításához lefuttatja az /etc/sliphome/slip.login shell szkriptet.

27.7.2.2.1. Példa SLIP szerveren keresztüli bejelentkezésre

Például, ha a SLIP felhasználó azonosítója Shelmerg, akkor az /etc/master.passwd állományban a hozzátartozó bejegyzést nagyjából ilyen:

Shelmerg:password:1964:89::0:0:Guy Helmer - SLIP:/usr/users/Shelmerg:/usr/sbin/sliplogin

Amikor Shelmerg bejelentkezik, a sliplogin az /etc/sliphome/slip.hosts állományban keresni fog egy felhasználó azonosítójához illeszkedő sort. Például tegyük fel, hogy az /etc/sliphome/slip.hosts állományban szerepel egy ilyen sor:

Shelmerg        dc-slip sl-helmer       0xfffffc00		  autocomp

A sliplogin ezt a sor fogja megtalálni, majd a soros vonalat a következő elérhető SLIP felülethez kapcsolja, amelyen ezután végrehajtja az /etc/sliphome/slip.login szkriptet a következő módon:

/etc/sliphome/slip.login 0 19200 Shelmerg dc-slip sl-helmer 0xfffffc00 autocomp

Ha minden jól megy, akkor az /etc/sliphome/slip.login kiad egy ifconfig parancsot azon a SLIP felületen, amelyre a sliplogin magát csatlakoztatta (amely a fenti példában a 0. SLIP felület volt, és amelyet meg is adtunk slip.login első paramétereként), és így beállítja a helyi IP-címet (dc-slip), a távoli IP-címet (sl-helmer), a SLIP felülethez tartozó hálózati maszkot (0xfffffc00) valamint a további opciókat (autocomp). Ha valami rosszul sülne el, akkor a sliplogin ezekről általában nagyon jó minőségű, információdús üzeneteket készít, amelyeket a syslogd démon pedig a /var/log/messages állományba rögzít. (A syslogd(8) és syslog.conf(5) man oldalak és talán maga az /etc/syslog.conf segíthet kideríteni, hogy a syslogd jelenleg naplóz-e, és ha igen, akkor hova.)

27.7.2.3. A rendszermag beállítása

A FreeBSD alap (vagyis a GENERIC) rendszermagja támogatja a SLIP (sl(4)) használatát. Ha viszont saját rendszermagunk van, akkor előfordulhat, hogy beállítások közé fel kell vennünk a következő sort is:

device   sl

Alapértelmezés szerint a FreeBSD nem továbbít semmilyen csomagot. Amennyiben a FreeBSD SLIP szerverünket útválasztóként is működtetni akarjuk, úgy az /etc/rc.conf állományban a gateway_enable változót át kell állítanunk a YES értékre. Ennek hatására az újraindítás után is megmarad a csomagok továbbítása.

A változtatások azonnali életbeléptetéséhez adjuk ki root felhasználóként a következő parancsot:

# /etc/rc.d/routing start

Ha a FreeBSD rendszermag beállítása során segítségre szorulnánk, akkor olvassuk el 8 fejezetet.

27.7.2.4. A sliplogin beállítása

Ahogy arra már korábban is utaltunk, az /etc/sliphome könyvtárban három állomány felelős a /usr/sbin/sliplogin beállításáért (lásd sliplogin(8)): a slip.hosts, amelyekben a SLIP felhasználókat és a hozzájuk tartozó IP-címeket adjuk meg; a slip.login, amely általában csak a SLIP felületet állítja be; (az elhagyható) slip.logout, amely a soros vonal bontásakor a slip.login hatását igyekszik visszafordítani.

27.7.2.4.1. A slip.hosts beállítása

Az /etc/sliphome/slip.hosts soraiban whitespace karakterekkel tagoltan legalább négy elem szerepel:

  • a SLIP felhasználó bejelentkezési azonosítója

  • a SLIP kapcsolat helyi címe (a SLIP szerveréhez képest)

  • a SLIP kapcsolat távoli címe

  • hálózati maszk

A helyi és távoli címek lehetnek hálózati nevek is (amelyeket vagy az /etc/hosts, vagy pedig az /etc/nsswitch.conf állományban szereplő beállítások alapján tudunk feloldani IP-címre), illetve a hálózati maszk is lehet egy olyan név, amelyet az /etc/networks fel tud oldani. A példaként bemutatott rendszerünkben az /etc/sliphome/slip.hosts állomány nagyjából így épül fel:

#
# login helyi-cím       távoli-cím      maszk            opc1    opc2 
#                                               (normal,compress,noicmp)
#
Shelmerg  dc-slip       sl-helmerg      0xfffffc00      autocomp

A sorok végén az alábbi opciók közül egy vagy több szerepelhet:

  • normal -- a fejléceket nem tömörítjük

  • compress -- a fejlécek tömörítése

  • autocomp -- ha a távoli végpont engedi, akkor tömörítsük a fejléceket

  • noicmp -- az ICMP csomagok tiltása (így például a “ping” által generált csomagok is eldobódnak a sávszélesség felemésztese helyett)

A SLIP kapcsolathoz tartozó helyi és távoli címek megválasztása függ attól, hogy egy külön TCP/IP alhálózatot szentelünk-e neki, vagy a SLIP szerverünkön egy “ARP proxy”-t használunk (amely tulajdonképpen nem egy “valódi” ARP proxy, de ebben a szakaszban így fogunk rá hivatkozni). Ha nem vagyunk biztosak benne, hogy melyik módszert válasszuk vagy hogy miként osszuk ki az IP-címeket, akkor nézzünk utána ezekenek a SLIP használatával kapcsolatos előfeltételek között megemlített könyvekben (27.7.2.1 Szakasz) és/vagy konzultáljunk a hálózatunk karbantartójával.

Ha a SLIP klienseknek külön alhálózatokat osztunk ki, akkor a saját IP-címünkből kell létrehoznunk és kiadnunk ezeket. Ezután valószínűleg a SLIP szerverünkön keresztül még meg kell adnunk egy statikus útvonalat legközelebbi IP útválasztó felé.

Minden más esetben az “ARP proxy” módszert kell alkalmaznunk, ahol a SLIP kliensek IP-címeit a SLIP szerver Ethernet alhálózatából osztjuk ki, és ennek megfelelően az /etc/sliphome/slip.login és /etc/sliphome/slip.logout szkripteket módosítanunk kell úgy, hogy az arp(8) segítségével képesek legyenek a SLIP szerver ARP táblázatában kezelni a “proxy ARP” bejegyzéseket.

27.7.2.4.2. A slip.login beállítása

Egy átlagos /etc/sliphome/slip.login állomány körülbelül ilyen:

#!/bin/sh -
#
#       @(#)slip.login  5.1 (Berkeley) 7/1/90

#
# Egy általános slip vonali bejelentkezési állomány. A sliplogin ezt az alábbi
# paraméterekkel hívja meg:
#      1        2         3        4          5         6     7-n
#   slipegys. ttyseb.  azonosító helyi-cím távoli-cím maszk egyéb-pmek.
#
/sbin/ifconfig sl$1 inet $4 $5 netmask $6

Ez a slip.login állomány az ifconfig segítségével pusztán beállítja a megfelelő SLIP felülethez tartozó helyi, valamint távoli címet és a hálózati maszkot.

Ha ehelyett azonban az “ARP proxy” módszerét választottuk volna (tehát a SLIP kliensekenek nem akarunk egész alhálózatokat kiutalni), akkor az /etc/sliphome/slip.login állomány eképpen alakul:

#!/bin/sh -
#
#       @(#)slip.login  5.1 (Berkeley) 7/1/90

#
# Egy általános slip vonali bejelentkezési állomány. A sliplogin ezt az alábbi
# paraméterekkel hívja meg:
#      1        2         3        4          5         6     7-n
#   slipegys. ttyseb.  azonosító helyi-cím távoli-cím maszk egyéb-pmek.
#
/sbin/ifconfig sl$1 inet $4 $5 netmask $6 
# A SLIP kliensre vonatkozó ARP kéréseket a mi Ethernet címünkkel
# válaszoljuk meg:
/usr/sbin/arp -s $5 00:11:22:33:44:55 pub

Láthatjuk, hogy az előbbi slip.login állomány egy arp -s $5 00:11:22:33:44:55 pub paranccsal egészült ki, ami a SLIP szerver ARP táblázatában hoz létre egy ARP bejegyzést. Ez az ARP bejegyzés gondoskodik róla, hogy a SLIP szerver válaszoljon a saját Ethernetes MAC-címével, amikor egy másik IP csomópont a SLIP kliens IP-címe felől érdeklődik.

Amikor a fenti példából indulunk ki, a benne megadott MAC-címet (00:11:22:33:44:55) feltétlenül cseréljük a rendszerünk Ethernet kártyájának MAC-címével, mert különben az “ARP proxy” egyáltalán nem fog működni! A SLIP szerverünk MAC-címét a netstat -i paranccsal deríthetjük ki, amelynek a kimenetében a második sor valahogy így néz ki:

ed0   1500  <Link>0.2.c1.28.5f.4a         191923	0   129457     0   116

Ebből derül ki, hogy az adott rendszer valódi MAC-címe a 00:02:c1:28:5f:4a -- az arp(8) számára azonban a netstat -i kimenetében szereplő pontokat kettőspontokra kell cserélni, és a tagokat ki kell egészíteni kétkarakteres hexadecimális számokká. Az arp(8) man oldalán tudhatunk meg ennek részleteiről többet.

Megjegyzés: Amikor létrehozzuk az /etc/sliphome/slip.login és /etc/sliphome/slip.logout állományokat, akkor ne felejtsük el hozzájuk beállítani a “végrehajtást” engedélyező bitet sem (tehát ilyenkor mindig adjuk ki a chmod 755 /etc/sliphome/slip.login /etc/sliphome/slip.logout parancsokat is), különben a sliplogin ezeket nem tudja majd elindítani.

27.7.2.4.3. A slip.logout beállítása

Az /etc/sliphome/slip.logout állományra nincs feltétlenül szükségünk (hacsak nem egy “ARP proxy”-t akarunk csinálni), de ha valamiért mégis el akarjuk készíteni, akkor ehhez a következő alapvető slip.logout szkript használható:

#!/bin/sh -
#
#       slip.logout

#
# Egy logout állomány a slip vonalhoz. A sliplogin ezt a szkriptet a
# következő paraméterekkel hívja:
#      1        2         3        4          5         6     7-n
#   slipegys. ttyseb.   login helyi-cím  távoli-cím   maszk opc-pmek.
#
/sbin/ifconfig sl$1 down

Ha az “ARP proxy” módszert használjuk, és az /etc/sliphome/slip.logout felhasználásával akarjuk a SLIP klienshez tartozó ARP bejegyzést törölni, akkor ebből induljunk ki:

#!/bin/sh -
#
#       @(#)slip.logout

#
# Egy logout állomány a slip vonalhoz. A sliplogin ezt a szkriptet a
# következő paraméterekkel hívja:
#      1        2         3        4          5         6     7-n
#   slipegys. ttyseb.   login helyi-cím  távoli-cím   maszk opc-pmek.
#
sbin/ifconfig sl$1 down
# Ne válaszoljunk többet a SLIP kliensre vonatkozó ARP kérésekre
/usr/sbin/arp -d $5

Az arp -d $5 parancs eltávolítja az “ARP proxy” működéséhez bejegyzést, amelyet még a slip.login szkripttel vettünk fel a SLIP kliens bejelentkezésekor.

Talán felesleges ismételgetésnek tűnhet: az /etc/sliphome/slip.logout állománynak létrehozása után állítsuk be a végrehajtásra szóló bitet (vagyis adjuk ki a chmod 755 /etc/sliphome/slip.logout parancsot).

27.7.2.5. Az útválasztással kapcsolatos megfontolások

Ha a hálózatunk többi része (lényegében az internet) és a SLIP klienseink között nem az “ARP proxy” módszerrel közvetítjük a csomagokat, akkor a legközelebbi alapértelmezett átjárókhoz minden bizonnyal fel kell vennünk statikus útvonalakat, így a SLIP kliensek alhálózatai a SLIP szerverünkön keresztül ki tudnak jutni.

27.7.2.5.1. Statikus útvonalak

A legközelebbi alapértelmezett átjárók felé nem minden esetben könnyű felvenni statikus útvonalakat (vagy egyes esetekben pedig egyenesen lehetetlen, mivel nincsenek meg hozzá a jogaink). Ha az intézményünkön belül több átjáró is megtalálható, akkor bizonyos útválasztók, például a Cisco és Proteon gyártmányúak esetében nem csak a SLIP alhálózatok felé kell beállítanunk statikus útvonalakat, hanem azt is meg kell mondanunk, hogy ezekről milyen más útválasztók is tudjanak. Pontosan emiatt a statikus útválasztás beüzemeléséhez szükségünk lesz egy kis utánajárásra és próbálgatásra.

Ha kérdése van a FreeBSD-vel kapcsolatban, a következő címre írhat (angolul): <freebsd-questions@FreeBSD.org>.
Ha ezzel a dokumentummal kapcsolatban van kérdése, kérjük erre a címre írjon: <gabor@FreeBSD.org>.