27.3. A rendszerszintű PPP alkalmazása
Egyes részeit készítette:
Sorokopud, Gennady B. és Huff, Robert.
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:
„kliensként” — a
gépünket soros vonali vagy modemes PPP
kapcsolaton keresztül csatlakoztatjuk a
külvilághoz
„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: Roydhouse, Trev.
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:
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).
Lépjünk ki a
Kermit programból
(anélkül, hogy bontanánk a
vonalat).
Í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: