FreeBSD kézikönyv
Előző | Fejezet 27. A PPP és a SLIP | Következő

# 27.7. A SLIP használata

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

> Figyelem: Ez a szakasz csak FreeBSD 7.`X` rendszerekre érvényes.

## 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/cuad`N`` 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. Amit 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.

Előző | Tartalom | Következő
PPP ATM felett (PPPoA) | Fel | Elektronikus levelezés

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>.