Данный материал основывается на статье Александра Огурцова
(г.Николаев, Украина) и слегка дополняет его.
Описаный ниже способ не претендует на оптимальность. Но обеспечивает
соединение и работает.
Система 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+++dc 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 "nERRORr"
ABORT "nNO DIALTONEr"
ABORT "nBUSYr"
ABORT "nNO ANSWERr"
ABORT "nNO CARRIERr"
ABORT "nLogin incorectr"
'' AT
SAY "Modem Initializationn"
'OK-+++c-OK' 'ATH0L2M2V1W2X4&c1E1q0'
SAY "Dialing to ISPn"
TIMEOUT 60
OK ATDT479700
CONNECT ''
SAY "Connected...n"
TIMEOUT 30
ogin:c
exit 0
Убедитесь, что в файле /etc/ppp/pap-secrets прописана строка вида
Ваш логин Имя_провайдера Пароль_у_провайдера
При коректно настроеной сети всё готово для соединения с провайдером. Да,
кстати, не забудьте, что обратный дозвон у провайдера является отдельной
услугой, проконсультируйтесь в службе тех.поддержки провайдера о
предоставлении вам таковой.
Второй вопрос -- о том, как сделать этот дозвон доступным под
пользовательским аккаунтом? Воспользуюсь советом Михаила Шигорина.
Дозваниваться могут пользователи из группы UUCP
grep uucp /etc/group
uucp:x:14:uucp,into,ну и остальные через запятую
После этого на рабочем столе пользователя можно создать ссылку на файл
/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/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 напр. позвонил, проверил почту и отвалился (это самое простое, что
пришло в голову :-) Остальное за Вашей фантазией и потребностью.