Ключевые слова:ppp, callback, cbcp, dialup, (найти похожие документы)
From: faq.altlinux.ru
Date: Wed, 14 Apr 2006 18:21:07 +0000 (UTC)
Subject: Обратный звонок с PAP+CBCP
Оригинал: http://faq.altlinux.ru/index.php?action=single&nf=1&qid=511
Обратный звонок с PAP+CBCP.
Данный материал основывается на статье Александра Огурцова
(г.Николаев, Украина) и слегка дополняет его.
Описаный ниже способ не претендует на оптимальность. Но обеспечивает
соединение и работает.
Система ALT Linux Compact 2.3
При первоначальной прозвонке к провайдеру pppd осуществляет соединение,
производит PAP-авторизацию и согласно протоколу CBCP передает телефонный
номер, по которому должна перезвонить удаленная система. После этого
соединение разрывается. Наша система начиная с этого момента ждёт
дозвона от узла провайдера, после осущесвления которого и устанавливается
собственно соединение, поднятие IP адресов etc. Таким образом, должны
существовать два сценария поведения демона pppd (chat-скрипта) при
соединении в таких условиях. Один для исходящего, второй для входящего
соединения. А вот тут и начинается самое интересное -- в дистрибутиве Альт
демон pppd собран с поддержкой протокола обратного дозвона в том числе и
CBCP, в более ранних версиях дистрибутива пакет, похоже, назывался
pppd-callback. Так вот второй скрипт - ответа на звонок - создается
автоматически и находится в файле /etc/ppp/callback-client. Протокол
обработки обратного звонка регистрируется в событиях netevent и дозвон
от провайдера обрабатывается именно этим скриптом.
/etc/ppp/callback-client
#!/bin/sh
# Script callback-client
# Script parameters: delay time in seconds
DELAY="$1"
/usr/sbin/chat -v -t 2 "" \d+++\d\c OK ATH0 OK
sleep $DELAY
/usr/sbin/chat -v "" ATZ OK "" RING. ATA SAY "RING" CONNECT
Дальше создаём файл дозвона к провайдеру /etc/ppp/chat-cbcp
с содержимым типа такого (не забудьте в строке ATDT указать номер своего
провайдера):
/etc/ppp/chat-cbcp
#!/bin/sh
#Request for CallbacK
#
/usr/sbin/chat -v\
TIMEOUT 7\
ABORT "\nERROR\r"\
ABORT "\nNO DIALTONE\r"\
ABORT "\nBUSY\r"\
ABORT "\nNO ANSWER\r"\
ABORT "\nNO CARRIER\r"\
ABORT "\nLogin incorect\r"\
'' AT\
SAY "Modem Initialization\n"\
'OK-+++\c-OK' 'ATH0L2M2V1W2X4&c1E1q0'\
SAY "Dialing to ISP\n"\
TIMEOUT 60\
OK ATDT479700\
CONNECT ''\
SAY "Connected...\n"\
TIMEOUT 30\
ogin:\c
exit 0
Пишем файл /etc/ppp/options.cbcp
defaultroute
noipdefault
persist
nodetach
connect '/etc/ppp/chat-cbcp'
user Ваш_логин
remotename Имя_провайдера
callback Номер_дозвона_к_Вам
И, наконец, создаём скрипт, который будет дозваниваться -- он очень простой
/etc/ppp/ppp-on-dialer
#!/bin/sh
#
#Try to Connect Farlep CallBack
/usr/sbin/pppd /dev/modem 115200 file /etc/ppp/options.cbcp
Убедитесь, что в файле /etc/ppp/pap-secrets прописана строка вида
Ваш логин Имя_провайдера Пароль_у_провайдера
При коректно настроеной сети всё готово для соединения с провайдером. Да,
кстати, не забудьте, что обратный дозвон у провайдера является отдельной
услугой, проконсультируйтесь в службе тех.поддержки провайдера о
предоставлении вам таковой.
Второй вопрос -- о том, как сделать этот дозвон доступным под
пользовательским аккаунтом? Воспользуюсь советом Михаила Шигорина.
Дозваниваться могут пользователи из группы UUCP
grep uucp /etc/group
uucp:x:14:uucp,into,ну и остальные через запятую
Права доступа к файлам и устройствам следующие:
-rwxr-xr-x. . 1 root. . .root. 211 ... /etc/ppp/callback-client
-rwxr-x---. . 1 root. . .uucp. 586 ... /etc/ppp/chat-cbcp
-rw-r--r--. . 1 root. . .root. 103 ... /etc/ppp/options.cbcp
-rwxr-x---. . 1 root. . .uucp. 116 ... /etc/ppp/ppp-on-dialer
-rw-------. . 1 root. . .root. 26 ... /etc/ppp/pap-secrets
lrwxrwxrwx. . 1 root. . .root. 10 ... /dev/modem -> /dev/ttyS1
crw-rw----. . 1 root. . .uucp. 4,. 65 ... /dev/ttyS1
-rws--x---. . 1 root. . .uucp. 218904 ... /usr/sbin/pppd
После этого на рабочем столе пользователя можно создать ссылку на файл
/etc/ppp/ppp-on-dialer и запускать соединение одним щелчком. Для
индикации работы ppp меня вполне устраивает апплет в gkrelm.
Несколько учетных записей.
В моем конкретном случае используются интернет-карты с определенным
балансом, по истечении которого учетная запись (логин) аннулируется. Для
дальнейшей работы в сети необходимо изменить имя пользователя в
/etc/ppp/options.cbcp а также логин и пароль в /etc/ppp/pap-secrets
Один раз в месяц это не напрягает :-) А как быть, если в разное время
суток используются разные аккаунты с различными принципами тарификации?
Руками менять надоест, особенно если один работает днем, а второй ночью
:-)
Все очень просто. Имя пользователя (в том числе и для последующей PAP
аутентификации) содержит в себе файл /etc/ppp/options.cbcp
Так и создадим ему брата-близнеца со вторым аккаунтом, допустим
/etc/ppp/options.cbcp2 а также сделаем второй скрипт дозвона
/etc/ppp/ppp-on-dialer2 которого попросим в качестве файла опций для
pppd использовать наш /etc/ppp/options.cbcp2
/etc/ppp/ppp-on-dialer2
#!/bin/sh
#
#Try to Connect Farlep CallBack
/usr/sbin/pppd /dev/modem 115200 file /etc/ppp/options.cbcp2
Также необходимо в /etc/ppp/pap-secrets второй (третьей, четвертой и
т.д.) указать пароль своего второго аккаунта.
Ваш_логин2 Имя_провайдера Пароль_у_провайдера2
У меня таким образом работает днем одна карта с почасовой оплатой, а
ночью - вторая, без ограничения по времени, но с ограничением в доступе по
времени суток.
Звоним и качаем по расписанию.
Так вот, по ночам я, как и все нормальные люди, обычно сплю :-) Но
почему бы компьютеру не поработать?
Для этого нам необходим пакет crontabs, vixie-cron и запущенный сервис crond.
Чтобы не мешать своими закачками, дозвонами крону выполнять свои
основные функции
1. Создадим свой каталог /etc/cron.night в котором разместим симлинк на
/etc/ppp/ppp-on-dialer2
2. Немного модифицируем /etc/ppp/options.cbcp2 добавив в нем строку:
linkname NIGHT
(! эта опция требует, чтобы pppd запускался от имени root -- чтобы получить
доступ в каталог /var/run) Благодаря этой опции будет создаваться
персональный PID файл при дозвоне нашим конкретным "ночным" скриптом.
3. Укажем крону, когда мы хотим звонить, дописав в /etc/crontab строку
(см. /etc/crontab.temlate для примера)
05 2 * * * root run-parts /etc/cron.night
Таким образом каждый день в 2:05 крон будет выполнять все программы,
скрипты, которые Вы поместите в /etc/cron.night (и выполнять будет от
имени root, что нам и необходимо)
Теперь необходимо научить систему правильно реагировать на дозвон
конкретным скриптом. Создаем (если его еще нет) /etc/ppp/ip-up.local
(я просто скопировал ip-up -> ip-up.local дабы потом не заморачиваться
всякими chmod :-)
/etc/ppp/ip-up.local
#!/bin/sh
if [ -e /var/run/ppp-NIGHT.pid ]; then
wget -c -P /куда/положить -i список_адресов.txt &
fi
exit 0
Все. Можно спать спокойно :-)
PS. На основе этого можно наплодить сценариев дозвона с различными
параметрами linkname и вариантов реакций на эти дозвоны в
/etc/ppp/ip-up.local напр. позвонил, проверил почту и отвалился (это самое простое, что
пришло в голову :-) Остальное за Вашей фантазией и потребностью.