23.3. PPP ХТПЧОС СДТБ

юБУФЙ ДПЛХНЕОФБ РЕТЧПОБЮБМШОП РТЕДПУФБЧЙМЙ Gennady B. Sorokopud, Robert Huff.

23.3.1. оБУФТПКЛБ PPP ХТПЧОС СДТБ

рЕТЕД ОБЮБМПН ОБУФТПКЛЙ PPP ОБ ЧБЫЕН ЛПНРШАФЕТЕ, ХВЕДЙФЕУШ, ЮФП pppd ОБИПДЙФУС Ч /usr/sbin Й ЛБФБМПЗ /etc/ppp УХЭЕУФЧХЕФ.

pppd НПЦЕФ ТБВПФБФШ Ч ДЧХИ ТЕЦЙНБИ:

  1. ч ЛБЮЕУФЧЕ ''ЛМЙЕОФБ'' -- ЛПЗДБ ЧЩ ИПФЙФЕ РПДЛМАЮЙФШ ЛПНРШАФЕТ Л ЧОЕЫОЕНХ НЙТХ ЮЕТЕЪ РПУМЕДПЧБФЕМШОПЕ УПЕДЙОЕОЙЕ PPP ЙМЙ НПДЕНОХА МЙОЙА.

  2. ч ЛБЮЕУФЧЕ ''УЕТЧЕТБ'' -- ЛПЗДБ ЛПНРШАФЕТ РПДЛМАЮЕО Л УЕФЙ Й ЙУРПМШЪХЕФУС ДМС РПДЛМАЮЕОЙС ДТХЗЙИ ЛПНРШАФЕТПЧ ЮЕТЕЪ PPP.

ч ПВЕЙИ УМХЮБСИ ЧБН РПФТЕВХЕФУС ОБУФТПЙФШ ЖБКМ РБТБНЕФТПЧ (/etc/ppp/options ЙМЙ ~/.ppprc ЕУМЙ ОБ ЧБЫЕН ЛПНРШАФЕТЕ ВПМЕЕ ПДОПЗП РПМШЪПЧБФЕМС ТБВПФБАФ У PPP).

чБН РПФТЕВХЕФУС ФБЛЦЕ РТПЗТБННБ ДМС НПДЕНОЩИ/РПУМЕДПЧБФЕМШОЩИ МЙОЙК (РТЕДРПЮФЙФЕМШОП comms/kermit) ДМС ДПЪЧПОБ Й ХУФБОПЧЛЙ УПЕДЙОЕОЙС У ХДБМЕООЩН ИПУФПН.

23.3.2. йУРПМШЪПЧБОЙЕ pppd Ч ЛБЮЕУФЧЕ ЛМЙЕОФБ

пУОПЧБОП ОБ ЙОЖПТНБГЙЙ, РТЕДПУФБЧМЕООПК Trev Roydhouse.

дМС РПДЛМАЮЕОЙС Л МЙОЙЙ PPP ФЕТНЙОБМШОПЗП УЕТЧЕТБ Cisco НПЦЕФ ЙУРПМШЪПЧБФШУС УМЕДХАЭЙК ЖБКМ /etc/ppp/options.

crtscts     # enable hardware flow control
modem           # modem control line
noipdefault     # remote PPP server must supply your IP address
                # if the remote host does not send your IP during IPCP
                # negotiation, remove this option
passive         # wait for LCP packets
domain ppp.foo.com      # put your domain name here

:<remote_ip>    # put the IP of remote PPP host here
                # it will be used to route packets via PPP link
                # if you didn't specified the noipdefault option
                # change this line to <local_ip>:<remote_ip>

defaultroute    # put this if you want that PPP server will be your
                # default router

дМС РПДЛМАЮЕОЙС:

  1. дПЪЧПОЙФЕУШ ОБ ХДБМЕООЩК ИПУФ, ЙУРПМШЪХС kermit (ЙМЙ МАВХА ДТХЗХА НПДЕНОХА РТПЗТБННХ), Й ЧЧЕДЙФЕ ЧБЫЕ ЙНС РПМШЪПЧБФЕМС Й РБТПМШ (ЙМЙ ФЕ ДБООЩЕ, ЛПФПТЩЕ ФТЕВХАФУС ДМС ХУФБОПЧМЕОЙС PPP УПЕДЙОЕОЙС У ХДБМЕООЩН ИПУФПН).

  2. чЩКДЙФЕ ЙЪ kermit (ВЕЪ ПВТЩЧБ УПЕДЙОЕОЙС).

  3. чЧЕДЙФЕ УМЕДХАЭЕЕ:

    # /usr/src/usr.sbin/pppd.new/pppd /dev/tty01 19200
    

    хВЕДЙФЕУШ, ЮФП ЧЩВТБОЩ РПДИПДСЭБС УЛПТПУФШ Й РТБЧЙМШОПЕ ЙНС ХУФТПКУФЧБ.

фЕРЕТШ ЧБЫ ЛПНРШАФЕТ РПДЛМАЮЕО РП PPP. еУМЙ УПЕДЙОЕОЙЕ ОЕ УПУФПСМПУШ, ЧЩ НПЦЕФЕ ДПВБЧЙФШ РБТБНЕФТ debug Л ЖБКМХ /etc/ppp/options, Й ПФУМЕДЙФШ РТПВМЕНХ РП УППВЭЕОЙСН ОБ ЛПОУПМЙ.

уМЕДХАЭЙК УЛТЙРФ /etc/ppp/pppup РТПЧЕДЕФ ЧУЕ 3 УФБДЙЙ Ч БЧФПНБФЙЮЕУЛПН ТЕЦЙНЕ:

#!/bin/sh
ps ax |grep pppd |grep -v grep
pid=`ps ax |grep pppd |grep -v grep|awk '{print $1;}'`
if [ "X${pid}" != "X" ] ; then
        echo 'killing pppd, PID=' ${pid}
        kill ${pid}
fi
ps ax |grep kermit |grep -v grep
pid=`ps ax |grep kermit |grep -v grep|awk '{print $1;}'`
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

/etc/ppp/kermit.dial ЬФП УЛТЙРФ kermit, ЛПФПТЩК ДПЪЧБОЙЧБЕФУС ДП ХДБМЕООПЗП ИПУФБ Й РТПИПДЙФ ОЕПВИПДЙНХА БЧФПТЙЪБГЙА (РТЙНЕТ ФБЛПЗП УЛТЙРФБ ОБИПДЙФУС Ч ЛПОГЕ ЬФПЗП ТБЪДЕМБ).

йУРПМШЪХКФЕ УМЕДХАЭЙК УЛТЙРФ /etc/ppp/pppdown ДМС ПФЛМАЮЕОЙС ПФ PPP МЙОЙЙ:

#!/bin/sh
pid=`ps ax |grep pppd |grep -v grep|awk '{print $1;}'`
if [ X${pid} != "X" ] ; then
        echo 'killing pppd, PID=' ${pid}
        kill -TERM ${pid}
fi

ps ax |grep kermit |grep -v grep
pid=`ps ax |grep kermit |grep -v grep|awk '{print $1;}'`
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

рТПЧЕТШФЕ, ЪБРХЭЕО МЙ ЕЭЕ pppd, ЧЩРПМОЙЧ /usr/etc/ppp/ppptest, ЛПФПТЩК ЧЩЗМСДЙФ РТЙНЕТОП ФБЛ:

#!/bin/sh
pid=`ps ax| grep pppd |grep -v grep|awk '{print $1;}'`
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

дМС ПВТЩЧБ УПЕДЙОЕОЙС, ЧЩРПМОЙФЕ /etc/ppp/kermit.hup, ЛПФПТЩК ДПМЦЕО УПДЕТЦБФШ:

set line /dev/tty01    ; put your modem device here
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

уХЭЕУФЧХЕФ БМШФЕТОБФЙЧОЩК НЕФПД, ЙУРПМШЪХАЭЙК chat ЧНЕУФП kermit:

дМС ХУФБОПЧМЕОЙС УПЕДЙОЕОЙС pppdДПУФБФПЮОП ДЧХИ ЖБКМПЧ.

/etc/ppp/options:

/dev/cuaa1 115200

crtscts     # enable hardware flow control
modem       # modem control line
connect "/usr/bin/chat -f /etc/ppp/login.chat.script"
noipdefault # remote PPP serve must supply your IP address
            # if the remote host doesn't send your IP during
                # IPCP negotiation, remove this option
passive         # wait for LCP packets
domain <your.domain>  # put your domain name here

:       # put the IP of remote PPP host here
            # it will be used to route packets via PPP link
                # if you didn't specified the noipdefault option
                # change this line to <local_ip>:<remote_ip>

defaultroute    # put this if you want that PPP server will be
            # your default router

/etc/ppp/login.chat.script:

ъБНЕЮБОЙЕ: чУЕ ЬФП НПЦЕФ ВЩФШ ТБУРПМПЦЕОП ОБ ПДОПК УФТПЛЕ.

ABORT BUSY ABORT 'NO CARRIER' "" AT OK ATDT<phone.number>
  CONNECT "" TIMEOUT 10 ogin:-\\r-ogin: <login-id>
  TIMEOUT 5 sword: <password>

лБЛ ФПМШЛП ЬФЙ ЖБКМЩ ВХДХФ УПЪДБОЩ Й ПФТЕДБЛФЙТПЧБОЩ, ОЕПВИПДЙНП ФПМШЛП ЪБРХУФЙФШ pppd, ЧПФ ФБЛ:

# pppd

23.3.3. йУРПМШЪПЧБОЙЕ pppd Ч ЛБЮЕУФЧЕ УЕТЧЕТБ

/etc/ppp/options ДПМЦЕО УПДЕТЦБФШ РТЙНЕТОП УМЕДХАЭЕЕ:

crtscts                         # Hardware flow control
netmask 255.255.255.0           # netmask (not required)
192.114.208.20:192.114.208.165  # IP's of local and remote hosts
                                # local ip must be different from one
                                # you assigned to the Ethernet (or other)
                                # interface on your machine.
                                # remote IP is IP address that will be
                                # assigned to the remote machine
domain ppp.foo.com              # your domain
passive                         # wait for LCP
modem                           # modem line

уМЕДХАЭЙК УЛТЙРФ /etc/ppp/pppserv ХЛБЦЕФ pppd ТБВПФБФШ Ч ЛБЮЕУФЧЕ УЕТЧЕТБ:

#!/bin/sh
ps ax |grep pppd |grep -v grep
pid=`ps ax |grep pppd |grep -v grep|awk '{print $1;}'`
if [ "X${pid}" != "X" ] ; then
        echo 'killing pppd, PID=' ${pid}
        kill ${pid}
fi
ps ax |grep kermit |grep -v grep
pid=`ps ax |grep kermit |grep -v grep|awk '{print $1;}'`
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

йУРПМШЪХКФЕ ЬФПФ УЛТЙРФ /etc/ppp/pppservdown ДМС ПУФБОПЧЛЙ УЕТЧЕТБ:

#!/bin/sh
ps ax |grep pppd |grep -v grep
pid=`ps ax |grep pppd |grep -v grep|awk '{print $1;}'`
if [ "X${pid}" != "X" ] ; then
        echo 'killing pppd, PID=' ${pid}
        kill ${pid}
fi
ps ax |grep kermit |grep -v grep
pid=`ps ax |grep kermit |grep -v grep|awk '{print $1;}'`
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

уМЕДХАЭЙК kermit УЛТЙРФ (/etc/ppp/kermit.ans) ЧЛМАЮЙФ/ПФЛМАЮЙФ ТЕЦЙН ПФЧЕФБ НПДЕНБ ОБ ЧИПДСЭЙЕ ЪЧПОЛЙ. пО ДПМЦЕО ЧЩЗМСДЕФШ РТЙНЕТОП ФБЛ:

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   ; change this to out ATS0=0\13 if you want to disable
                ; autoanswer mode
inp 5 OK
echo \13
exit

уЛТЙРФ, ОБЪЩЧБАЭЙКУС /etc/ppp/kermit.dial, ЙУРПМШЪХЕФУС ДМС ДПЪЧПОБ Й БХФЕОФЙЖЙЛБГЙЙ ОБ ХДБМЕООПН ИПУФЕ. чБН РПФТЕВХЕФУС РТЙУРПУПВЙФШ ЕЗП РПД УПВУФЧЕООЩЕ ОХЦДЩ. рПНЕУФЙФЕ ЧБЫ МПЗЙО Й РБТПМШ Ч ЬФПФ УЛТЙРФ; ЧБН ФБЛЦЕ РПФТЕВХЕФУС ЙЪНЕОЙФШ ПРЕТБФПТЩ input Ч ЪБЧЙУЙНПУФЙ ПФ ПФЧЕФПЧ ПФ НПДЕНБ Й ХДБМЕООПЗП ИПУФБ.

;
; put the com line attached to the modem here:
;
set line /dev/tty01
;
; put the modem speed here:
;
set speed 19200
set file type binary            ; full 8 bit file xfer
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                ; Then SET CARRIER if necessary,
set dial display on             ; Then SET DIAL if necessary,
set input echo on
set input timeout proceed
set input case ignore
def \%x 0                       ; login prompt counter
goto slhup

:slcmd                          ; put the modem in command mode
echo Put the modem in command mode.
clear                           ; Clear unread characters from input buffer
pause 1
output +++                      ; hayes escape sequence
input 1 OK\13\10                ; wait for OK
if success goto slhup
output \13
pause 1
output at\13
input 1 OK\13\10
if fail goto slcmd              ; if modem doesn't answer OK, try again

:slhup                          ; hang up the phone
clear                           ; Clear unread characters from input buffer
pause 1
echo Hanging up the phone.
output ath0\13                  ; hayes command for on hook
input 2 OK\13\10
if fail goto slcmd              ; if no OK answer, put modem in command mode

:sldial                         ; dial the number
pause 1
echo Dialing.
output atdt9,550311\13\10               ; put phone number here
assign \%x 0                    ; zero the time counter

:look
clear                           ; Clear unread characters from input buffer
increment \%x                   ; Count the seconds
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                        ; login
assign \%x 0                    ; zero the time counter
pause 1
echo Looking for login prompt.

:slloop
increment \%x                   ; Count the seconds
clear                           ; Clear unread characters from input buffer
output \13
;
; put your expected login prompt here:
;
input 1 {Username: }
if success goto sluid
reinput 1 {\255}
if success goto slhup
reinput 1 {\127}
if success goto slhup
if < \%x 10 goto slloop         ; try 10 times to get a login prompt
else goto slhup                 ; hang up and start again if 10 failures

:sluid
;
; put your userid here:
;
output ppp-login\13
input 1 {Password: }
;
; put your password here:
;
output ppp-password\13
input 1 {Entering SLIP mode.}
echo
quit

:slnodial
echo \7No dialtone.  Check the telephone line!\7
exit 1

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

ьФПФ, Й ДТХЗЙЕ ДПЛХНЕОФЩ, НПЗХФ ВЩФШ УЛБЮБОЩ У ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

рП ЧПРТПУБН, УЧСЪБООЩН У FreeBSD, РТПЮЙФБКФЕ ДПЛХНЕОФБГЙА РТЕЦДЕ ЮЕН РЙУБФШ Ч <questions@FreeBSD.org>.
рП ЧПРТПУБН, УЧСЪБООЩН У ЬФПК ДПЛХНЕОФБГЙЕК, РЙЫЙФЕ <doc@FreeBSD.org>.
рП ЧПРТПУБН, УЧСЪБООЩН У ТХУУЛЙН РЕТЕЧПДПН ДПЛХНЕОФБГЙЙ, РЙЫЙФЕ Ч ТБУУЩМЛХ <frdp@FreeBSD.org.ua>.
йОЖПТНБГЙС РП РПДРЙУЛЕ ОБ ЬФХ ТБУУЩМЛХ ОБИПДЙФУС ОБ УБКФЕ РТПЕЛФБ РЕТЕЧПДБ.