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

# 27.3. A rendszerszintű PPP alkalmazása

Egyes részeit készítette: Gennady B. Sorokopud és Robert Huff.

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

## 27.3.1. A rendszerszintű PPP beállítása

Mielőtt a gépünkön nekikezdünk a PPP beállításának, ellenőrizzük, hogy a `pppd` megtalálható a `/usr/sbin` könyvtárban és az `/etc/ppp` könyvtár létezik.

A `pppd` két módban képes működni:

1. “kliensként” -- a gépünket soros vonali vagy modemes PPP kapcsolaton keresztül csatlakoztatjuk a külvilághoz

2. “szerverként” -- a számítógépünk egy hálózat része, ahol a többieket a PPP használatával kapcsoljuk össze

Mind a két esetben egy konfigurációs állomány tartalmát kell összeállítanunk (ez az `/etc/ppp/options` vagy a `~/.ppprc`, ha a gépünkön több felhasználó is PPP-t akar használni).

Egy modemes vagy soros vonali szoftverre is szükségünk lesz (ez többnyire a `comms/kermit`), amellyel távoli gépeket tudunk felhívni és feléjük kapcsolatot felépíteni.

## 27.3.2. A `pppd` mint kliens

Az alapjául szolgáló információkat adta: Trev Roydhouse.

A most következő `/etc/ppp/options` állománnyal egy Cisco terminál szerverhez tudunk kapcsolódni egy PPP vonalon keresztül.

    crtscts         # a hardveres forgalomirányítás engedélyezése
    modem           # modem vezérlővonal
    noipdefault     # a távoli PPP szervernek kell IP-címet adnia
                    # ha az IPCP alapú egyeztetés során a távoli gép nem küld
                    # nekünk IP-címet, akkor vegyük ki ezt a beállítást
    passive         # LCP csomagokat várunk
    domain ppp.ize.com      # ide írjuk be a hálózati nevünket

    :távoli_ip    # ide kell írni a távoli PPP szerver IP-címét
                    # a PPP kapcsolaton keresztül erre fogjuk továbbküldeni a csomagokat
                    # ha nem adtuk meg "noipdefault" beállítást, akkor ezt a sort
                    # írjuk át helyi_ip:távoli_ip alakúra

    defaultroute    # adjuk meg ezt a sort is, ha a PPP szerverünket egyben az
                    # alapértelmezett átjárónak is be akarjuk állítani

Így kapcsolódunk:

1. Tárcsázzuk a távoli gépet a Kermit (vagy bármilyen más modemes program) elindításával, majd adjuk meg a felhasználói nevünket és jelszavunkat (vagy bármi mást, amivel a távoli gépen engedélyezni tudjuk a PPP használatát).

2. Lépjünk ki a Kermit programból (anélkül, hogy bontanánk a vonalat).

3. Írjuk be a következőket:

       # /usr/sbin/pppd /dev/tty01 19200

   Ne felejtsük el megadni a megfelelő sebességet és eszközt.

A számítógépünk most már PPP-n keresztül csatlakozik. Ha valamilyen okból nem sikerülne felépíteni a kapcsolatot, akkor vegyük fel a `debug` beállítást is az `/etc/ppp/options` állományba, majd a konzolra érkező üzenetek segítségével próbáljuk meg felderíteni a probléma okát.

Az alábbi `/etc/ppp/pppup` szkript mind a három fázist automatikussá teszi:

    #!/bin/sh
    pgrep -l pppd
    pid=`pgrep pppd`
    if [ "X${pid}" != "X" ] ; then
            echo 'killing pppd, PID=' ${pid}
            kill ${pid}
    fi
    pgrep -l kermit
    pid=`pgrep kermit`
    if [ "X${pid}" != "X" ] ; then
            echo 'killing kermit, PID=' ${pid}
            kill -9 ${pid}
    fi

    ifconfig ppp0 down
    ifconfig ppp0 delete

    kermit -y /etc/ppp/kermit.dial
    pppd /dev/tty01 19200

Az `/etc/ppp/kermit.dial` egy olyan Kermit szkript, amivel tárcsázni tudunk és a távoli gépen elvégezni az összes szükséges hitelesítést (a leírás végén találhatunk is egy ilyen szkriptet példaként).

Az alábbi `/etc/ppp/pppdown` szkripttel tudjuk bontani a PPP vonalat:

    #!/bin/sh
    pid=`pgrep pppd`
    if [ X${pid} != "X" ] ; then
            echo 'killing pppd, PID=' ${pid}
            kill -TERM ${pid}
    fi

    pgrep -l kermit
    pid=`pgrep kermit`
    if [ "X${pid}" != "X" ] ; then
            echo 'killing kermit, PID=' ${pid}
            kill -9 ${pid}
    fi

    /sbin/ifconfig ppp0 down
    /sbin/ifconfig ppp0 delete
    kermit -y /etc/ppp/kermit.hup
    /etc/ppp/ppptest

A `/usr/etc/ppp/ppptest` elindításával ellenőrizni tudjuk, hogy a `pppd` még mindig fut. Ez valahogy így néz ki:

    #!/bin/sh
    pid=`pgrep pppd`
    if [ X${pid} != "X" ] ; then
            echo 'pppd running: PID=' ${pid-NONE}
    else
            echo 'No pppd running.'
    fi
    set -x
    netstat -n -I ppp0
    ifconfig ppp0

A vonal bontásához az `/etc/ppp/kermit.hup` szkriptet kell elindítanunk, amiben a következő szerepelnek:

    set line /dev/tty01	; ide írjuk be a saját modemünket
    set speed 19200
    set file type binary
    set file names literal
    set win 8
    set rec pack 1024
    set send pack 1024
    set block 3
    set term bytesize 8
    set command bytesize 8
    set flow none

    pau 1
    out +++
    inp 5 OK
    out ATH0\13
    echo \13
    exit

A `kermit` helyett a `chat` programot is használhatjuk:

A következő két állomány már elég egy kapcsolat létrehozásához `pppd` használatával:

`/etc/ppp/options`:

    /dev/cuad1 115200

    crtscts		# a hardveres forgalomirányítás engedélyezése
    modem		# modemes vezérlővonal
    connect "/usr/bin/chat -f /etc/ppp/login.chat.script"
    noipdefault	# a távoli PPP kiszolgálónak adnia kell egy IP-címet
    	        # ha a távoli gép nem küldi az IP-címünk az IPCP alapú egyeztetés során
                    # akkor távolítsuk el ezt a beállítást
    passive         # LCP csomagokat várunk
    domain sajat.tartomany	# ide írjuk be a saját tartománynevünket

    :		# a távoli PPP kiszolgáló IP-címét tegyük ide
    	        # ezen keresztül fogjuk továbbküldeni a PPP kapcsolaton áthaladó csomagokat
                    # nem adtuk meg a "noipdefault" beállítást, akkor ezt
                    # sort írjuk át helyi_ip:távoli_ip alakúra

    defaultroute	# ez a sor akkor kell, ha a PPP szerver lesz az
    	        # alapértelmezett átjárónk is

`/etc/ppp/login.chat.script`:

> Megjegyzés: A most következőt egyetlen sorba kell írnunk.

    ABORT BUSY ABORT 'NO CARRIER' "" AT OK ATDTtelefon.szám
      CONNECT "" TIMEOUT 10 ogin:-\\r-ogin: bejelentkezési-azonosító
      TIMEOUT 5 sword: jelszó

Miután ezeket telepítettük és a megfelelőképpen módosítottuk, már csak a `pppd` parancsot kell kiadnunk, valahogy így:

    # pppd

## 27.3.3. A `pppd` mint szerver

Az `/etc/ppp/options` állományban nagyjából a következőknek kell szerepelnie:

    crtscts                         # hardveres forgalomirányítás
    netmask 255.255.255.0           # hálózati maszk (nem kötelező)
    192.114.208.20:192.114.208.165  # a helyi és távoli gépek IP-címei
                                    # a helyi IP-nek el kell térnie az Ethernet
                                    # (vagy más egyéb) felülethez tartozó címtől.
                                    # a távoli IP a távoli géphez rendelt IP-cím
    domain ppp.ize.com              # a saját tartományunk
    passive                         # az LCP csomagok várása
    modem                           # modemes vonal

Az alábbi `/etc/ppp/pppserv` szkript a pppd démont szervernek állítja be:

    #!/bin/sh
    pgrep -l pppd
    pid=`pgrep pppd`
    if [ "X${pid}" != "X" ] ; then
            echo 'killing pppd, PID=' ${pid}
            kill ${pid}
    fi
    pgrep -l kermit
    pid=`pgrep kermit`
    if [ "X${pid}" != "X" ] ; then
            echo 'killing kermit, PID=' ${pid}
            kill -9 ${pid}
    fi

    # reset ppp interface
    ifconfig ppp0 down
    ifconfig ppp0 delete

    # enable autoanswer mode
    kermit -y /etc/ppp/kermit.ans

    # run ppp
    pppd /dev/tty01 19200

A szerver leállítására a következő `/etc/ppp/pppservdown` szkriptet kell használnunk:

    #!/bin/sh
    pgrep -l pppd
    pid=`pgrep pppd`
    if [ "X${pid}" != "X" ] ; then
            echo 'killing pppd, PID=' ${pid}
            kill ${pid}
    fi
    pgrep -l kermit
    pid=`pgrep kermit`
    if [ "X${pid}" != "X" ] ; then
            echo 'killing kermit, PID=' ${pid}
            kill -9 ${pid}
    fi
    ifconfig ppp0 down
    ifconfig ppp0 delete

    kermit -y /etc/ppp/kermit.noans

A következő Kermit szkript (`/etc/ppp/kermit.ans`) engedélyezi vagy tiltja le a modem automatikus válaszadását. Körülbelül így épül fel:

    set line /dev/tty01
    set speed 19200
    set file type binary
    set file names literal
    set win 8
    set rec pack 1024
    set send pack 1024
    set block 3
    set term bytesize 8
    set command bytesize 8
    set flow none

    pau 1
    out +++
    inp 5 OK
    out ATH0\13
    inp 5 OK
    echo \13
    out ATS0=1\13   ; "ATS0=0\13"-ra írjuk át, ha le akarjuk tiltani az
                    ; automatikus válaszadást
    inp 5 OK
    echo \13
    exit

Az `/etc/ppp/kermit.dial` elnevezésű szkriptet használhatjuk arra, hogy tárcsázzunk távoli gépeket és hitelesítsük magunkat rajtuk. Írjuk át az igényeinknek megfelelően, tegyük bele a bejelentkezéshez szükséges azonosítót és jelszót, illetve a modemünk és a távoli gép válaszai szerint módosítsuk az `input` utasításokat.

    ;
    ; írjuk ide azt a com vonalat, amire a modemünk csatlakozik:
    ;
    set line /dev/tty01
    ;
    ; ide kerül a modem sebessége:
    ;
    set speed 19200
    set file type binary            ; teljes 8 bites állomány-átvitel
    set file names literal
    set win 8
    set rec pack 1024
    set send pack 1024
    set block 3
    set term bytesize 8
    set command bytesize 8
    set flow none
    set modem hayes
    set dial hangup off
    set carrier auto                ; adjuk meg a SET CARRIER utasítást is, ha kell
    set dial display on             ; adjuk meg a SET DIAL utasítást is, ha kell
    set input echo on
    set input timeout proceed
    set input case ignore
    def \%x 0                       ; a bejelentkezés számlálója
    goto slhup

    :slcmd                          ; tegyük a modemet parancs módba
    echo Tegyuk a modemet parancs modba.
    clear                           ; töröljük a be nem olvasott karaktereket a bemeneti pufferből
    pause 1
    output +++                      ; a Hayes-féle helyettesítési szekvenciák használata
    input 1 OK\13\10                ; várjuk meg az OK jelzést
    if success goto slhup
    output \13
    pause 1
    output at\13
    input 1 OK\13\10
    if fail goto slcmd              ; ha a modem nem válaszol OK-val, akkor próbálkozzunk újra

    :slhup                          ; bontsuk a vonalat
    clear                           ; töröljük ki a be nem olvasott karaktereket a bemeneti pufferből
    pause 1
    echo A vonal bontasa.
    output ath0\13                  ; a kapcsolat létrejöttét jelző Hayes-parancs
    input 2 OK\13\10
    if fail goto slcmd              ; ha nincs OK válasz, akkor tegyük a modemet parancs módba

    :sldial                         ; tárcsázzuk a számot
    pause 1
    echo Dialing.
    output atdt9,550311\13\10       ; ide írjuk a telefonszámot
    assign \%x 0                    ; nullázzuk le az időzítőt

    :look
    clear                           ; töröljük az olvasatlan karaktereket a bemeneti pufferből
    increment \%x                   ; számoljuk a másodperceket
    input 1 {CONNECT }
    if success goto sllogin
    reinput 1 {NO CARRIER\13\10}
    if success goto sldial
    reinput 1 {NO DIALTONE\13\10}
    if success goto slnodial
    reinput 1 {\255}
    if success goto slhup
    reinput 1 {\127}
    if success goto slhup
    if < \%x 60 goto look
    else goto slhup

    :sllogin                        ; bejelentkezés
    assign \%x 0                    ; nullázzuk le az időzítőt
    pause 1
    echo A bejelentkezes keresese.

    :slloop
    increment \%x                   ; számoljuk a másodperceket
    clear                           ; töröljük az olvasatlan karaktereket a bemeneti pufferből
    output \13
    ;
    ; ide írjuk be a várható bejelentkezési sablont:
    ;
    input 1 {Felhasznaloi nev: }
    if success goto sluid
    reinput 1 {\255}
    if success goto slhup
    reinput 1 {\127}
    if success goto slhup
    if < \%x 10 goto slloop      ; tízszer próbálkozzunk a bejelentkezéssel
    else goto slhup                 ; 10 sikertelen próbálkozás után bontsuk a vonalat és kezdjük újra

    :sluid
    ;
    ; ide írjuk be a felhasználói azonosítónkat:
    ;
    output ppp-login\13
    input 1 {Jelszo: }
    ;
    ; ide tegyük a hozzá tartozó jelszót:
    ;
    output ppp-password\13
    input 1 {Atvaltas SLIP modba.}
    echo
    quit

    :slnodial
    echo \7Nincs vonal.  Ellenorizzuk a telefonvonalat!\7
    exit 1

    ; local variables:
    ; mode: csh
    ; comment-start: "; "
    ; comment-start-skip: "; "
    ; end:

Előző | Tartalom | Következő
A felhasználói PPP alkalmazása | Fel | PPP kapcsolatok hibaelhárítása

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