<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
    <TITLE>Настройка callback в pppd</TITLE>
    <META NAME="Author" Content="Juri Milodanovic">
    <META NAME="Keywords" Content="pppd, cbcp, callback, unix, freebsd">
<STYLE>BODY {
        
}
BODY {
        FONT-FAMILY: Tahoma, Arial, sans-serif
}
P {
        FONT-FAMILY: Tahoma, Arial, sans-serif
}
UL {
        FONT-FAMILY: Tahoma, Arial, sans-serif
}
TD {
        FONT-FAMILY: Tahoma, Arial, sans-serif
}
H3 {
        FONT-FAMILY: Tahoma, Arial, sans-serif
}
BODY {
        FONT-SIZE: 9pt
}
P {
        FONT-SIZE: 9pt
}
UL {
        FONT-SIZE: 9pt
}
TD {
        FONT-SIZE: 9pt
}
H3 {
        FONT-SIZE: 14pt
}
PRE {
        FONT-FAMILY: "Courier New", monospace
}
PRE {
        FONT-SIZE: 10pt
}
B {
        COLOR: blue
}
P {
        TEXT-INDENT: 1.5em
}
BLOCKQUOTE {
        MARGIN-TOP: 0px
}
BLOCKQUOTE {
        MARGIN-BOTTOM: 0px
}
BLOCKQUOTE {
        BACKGROUND: #666699; color: #FFFFFF; margin-right: 0px; margin-left: 0px; padding-right: 3px; padding-left: 3px; border-style: solid; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px}
A {
        COLOR: #FFFF99}
A:visited {
        COLOR: #CCCCFF}
A:hover {
        COLOR: #FFCCCC}
A:hover {
        TEXT-DECORATION: underline
}
hr {  color: #FFFFFF}
</STYLE>
<META content="MSHTML 5.00.2614.3401" name=GENERATOR>

<meta http-equiv="Content-Type" content="text/html;charset=windows-1251">
</HEAD>
<BODY bgcolor="#666666" text="#FFFFFF" link="#FFFF99" vlink="#99CCCC" alink="#FFFF33">
<CENTER>
<H3>Настройка callback в pppd</H3></CENTER>
<HR>

<P>Идея прозвонки к провайдеру, который поддерживает callback, основывается на 
использовании chat-скриптов. При первоначальной прозвонке pppd "просит" 
провайдера перезвонить, отключается, а затем модем переходит в режим ожидания 
ответа. После поступления входящего звонка устанавливается PPP-соединение. Более 
подробно о настройке pppd можно прочитать в <A 
href="http://www.nitek.ru/~igor/pppd/">статье Игоря Сысоева</A>, с которой 
настоятельно рекомендую ознакомиться. 
<P>Для такой прозвонки понадобятся два chat-скрипта. Первый - это скрипт, 
который будет запрашивать у удаленной стороны callback. Запишем его в файл 
<STRONG>/etc/ppp/chat-cbcp</STRONG>: 
<BLOCKQUOTE><PRE>#!/bin/sh
#
# Request for callback
#
chat -V -s                                \
        ABORT        "ERROR"                        \
        ABORT        "NO DIALTONE"                \
        TIMEOUT        5                        \
        ""        "AT"                        \
        "OK"        "ATZ"                        \
        "OK"        "ATS7=60\&amp;C0\&amp;D1"        \
        ABORT        "BUSY"                        \
        ABORT        "NO ANSWER"                \
        ABORT        "NO CARRIER"                \
        ABORT        "Login incorrect"        \
        "OK"        "ATDT1234567"                \
        TIMEOUT        30                        \
        "CONNECT"        "\\c"                \
        TIMEOUT        10                        \
        "rname:"        "\\c"

exit 0
</PRE></BLOCKQUOTE>
<P>Скрипт должен иметь права доступа 0500 (<EM>r-x --- ---</EM>). Само собой, 
что вместо <STRONG>1234567</STRONG> вам необходимо указать телефон своего 
провайдера. После того, как дозвонились, удаленная сторона спрашивает 
"<STRONG><EM>Username:</EM></STRONG>" и происходит PAP-аутентификация. В этом 
случае нужно создать файл <STRONG>/etc/ppp/pap-secrects</STRONG> с правами 
доступа 0600 <NOBR>(<EM>rw- --- ---</EM>)</NOBR> и записать в него ваш логин, 
название удаленной системы и пароль: 
<BLOCKQUOTE><PRE>jm        my_isp        pass627789
</PRE></BLOCKQUOTE>
<P>Название удаленной системы может быть любым. Что же касается пароля, то в нем 
могут использоваться специальные символы, например '#', который будет 
рассматриваться как начало комментария. Поэтому такой пароль необходимо 
заключить в двойные кавычки: 
<BLOCKQUOTE><PRE>jm        my_isp        "pass62#7789"
</PRE></BLOCKQUOTE>
<P>Если провайдер PAP-аутентификацию не поддерживает, потребуется небольшая 
переделка скрипта: 
<BLOCKQUOTE><PRE>#!/bin/sh
#
# Request for callback
#
chat -V -s                                \
        ABORT        "ERROR"                        \
        ABORT        "NO DIALTONE"                \
        TIMEOUT        5                        \
        ""        "AT"                        \
        "OK"        "ATZ"                        \
        "OK"        "ATS7=60\&amp;C0\&amp;D1"        \
        ABORT        "BUSY"                        \
        ABORT        "NO ANSWER"                \
        ABORT        "NO CARRIER"                \
        ABORT        "Login incorrect"        \
        "OK"        "ATDT1234567"                \
        TIMEOUT        30                        \
        "CONNECT"        "\\c"                \
        TIMEOUT        10                        \
        "rname:"        "jm"                \
        "sword:"        "pass627789"        \
        "}"                "\\c"

exit 0
</PRE></BLOCKQUOTE>
<P>Проверьте наличие файла <STRONG>/etc/ppp/options</STRONG>: 
<BLOCKQUOTE><PRE>modem
crtscts
asyncmap 0
</PRE></BLOCKQUOTE>
<P>Если pppd находится на этапе отладки, то в него можно еще добавить строки с 
  параметрами &quot;<em><strong>kdebug 7</strong></em>&quot; и &quot;<em><strong>debug</strong></em>&quot;. 
  Обратите внимание, что в <strong>/etc/ppp/options</strong> не должно быть параметра 
  "<strong><em>lock</em></strong>"!
<P> Далее необходимо создать файл <STRONG>/etc/ppp/options.cbcp</STRONG>, который 
  должен содержать следующее: 
<BLOCKQUOTE><PRE>nodefaultroute
noipdefault
nodetach
nopersist
connect '/etc/ppp/chat-cbcp'
user jm
remotename my_isp
callback 3222232
</PRE></BLOCKQUOTE>
<P>Единственная задача этого файла - сообщить удаленной системе, по какому 
телефону она должна перезвонить. Для этого используется параметр 
"<STRONG><EM>callback</EM></STRONG>" с нашим номером телефона. 
<P>Если все сделано правильно, то теперь можно позвонить провайдеру и получить 
от него входящий звонок (<STRONG>cuaa1</STRONG> - это, разумеется, имя 
устройства, на котором висит наш модем): 
<P>
<STRONG><PRE>/usr/sbin/pppd cuaa1 57600 file /etc/ppp/options.cbcp
</PRE></STRONG>
<P>Теперь подготовим второй chat-скрипт, который на эти звонки будет отвечать: 
<BLOCKQUOTE><PRE>#!/bin/sh
#
# dial for callback
/usr/sbin/pppd cuaa1 57600 file /etc/ppp/options.cbcp

# answering...
chat -V        -s                        \
        TIMEOUT        30                \
        ABORT        "ERROR"                \
        "RING"        ATA                \
        "CONNECT"        "\\c"

if [ "$?" = "0" ]; then
        exit 0
fi

exit 1
</PRE></BLOCKQUOTE>
<P>Не забудьте установить на него права доступа 0500 (<EM>r-x --- ---</EM>). 
Конечно, этот скрипт нуждается в небольшом изменении, если не используется PAP: 
<BLOCKQUOTE><PRE>#!/bin/sh
#
# dial for callback
/usr/sbin/pppd cuaa1 57600 file /etc/ppp/options.cbcp

# answering...
chat -V        -s                                \
        TIMEOUT        30                        \
        ABORT        "ERROR"                        \
        "RING"        ATA                        \
        "CONNECT"        "\\c"                \
        TIMEOUT        10                        \
        "rname:"        "jm"                \
        "sword:"        "pass627789"        \
        "}"                "\\c"

if [ "$?" = "0" ]; then
        exit 0
fi

exit 1
</PRE></BLOCKQUOTE>
<P>В файл <STRONG>/etc/ppp/options.dial</STRONG> запишем параметры, которые нам 
действительно нужны для работы: 
<BLOCKQUOTE><PRE>defaultroute
noipdefault
connect '/etc/ppp/chat-dial'
user jm
remotename my_isp
</PRE></BLOCKQUOTE>
<P>Добавление в этот файл параметра "<STRONG><EM>persist</EM></STRONG>" позволит 
восстанавливать связь в случае ее обрыва и т.п. В конечном итоге, запуск pppd 
будет выглядеть так: 
<P>
<STRONG><PRE>/usr/sbin/pppd cuaa1 57600 file /etc/ppp/options.dial
</PRE></STRONG>
<P>Таким образом получается, что стартовавший pppd запускает pppd еще один раз, 
инициируя звонок от провайдера, после чего на него отвечает и устанавливает 
PPP-линк. 
<P>
<HR>

<P><ADREESS>
<DIV align=right>Юрий Милоданович / Juri Milodanovic<BR>
<A href="mailto:jm@evpatoria.net">jm@evpatoria.net</A> </DIV>
<ADDRESS></ADDRESS></BODY></HTML>

<!-- This document saved from http://jm.evpatoria.net/pppd-cbcp.html -->