Настройка "обратного звонка" посредством user ppp в Unix-подобных
системах.
В составе стандартной поставки большинства известных Unix-подобных
систем с открытым кодом имеется ppp. Это универсальное средство для
создания соединений по стандарту ppp с использованием большого
количества расширений этого протокола.
В данном случае нас интересует расширение Microsoft CBCP
(сокращение от CallBack Control Protocol). Он предусматривает
передачу информации о адресе назначения обратного звонка.
Для настройки соединения с использованием CBCP важно уяснить, что
прямое и обратное соединения - это РАЗНЫЕ соединения с разными
параметрами.
Соответственно необходимо создать два профиля соединений. Задача
первого - дозвониться до провайдера, выполнить процедуру
аутентификации, передать CBCP-информацию и завершить соединение.
Задача второго - принять входящее соединение от провайдера.
Запуск ppp с этими профилями можно осуществлять либо "вручную", из
командной оболочки ppp, либо из shell-скрипта (что мы и сделали).
Настройка
Пример файла конфигурации ppp (обычно это находится в /etc/ppp/ppp.conf):
default:
set log Phase Chat LCP IPCP CCP tun command
ident user-ppp VERSION (built COMPILATIONDATE)
set device /dev/cuaa1
set speed 115200
set ifaddr 10.0.0.1/0 10.0.0.2/0 255.255.255.0 0.0.0.0
add default HISADDR
enable dns
dialout:
set dial "ABORT BUSY ABORT NO\sCARRIER TIMEOUT 5
"" AT OK-AT-OK ATE1Q0L1M1 OK \dATDT\T TIMEOUT 40 CONNECT"
set timeout 180 # 3 минуты таймаут (по умолчанию)
set callback cbcp e.164 USER_PHONE_NUMBER
set cbcp USER_PHONE_NUMBER
set phone ISP_PHONE_NUMBER
set authname USERNAME
set authkey USERPASSWORD
dialin:
set dial "ABORT BUSY ABORT NO\sCARRIER TIMEOUT 5
""TIMEOUT 30 RING ATA CONNECT"
set timeout 180 # 3 минуты таймаут (по умолчанию)
disable pap chap
set callback none
Секция "default" содержит параметры и настройки, используемые во
всех остальных секциях этого файла.
Эта секция неявно добавляется в каждую секцию.
В этой секции можно размещать "стандартные глобальные настройки",
которые применяются для всех сессий дозвона;
например, настройки модема и префиксы дозвона, которые обычно не
изменяются, независимо от того с системой какого типа будет
произведено соединение.
Ниже приведено описание строк в "стандартной" секции примера:
* set device /dev/cuaa1
Эта строка сообщает программе PPP, что ей необходимо использовать
первый последовательный порт. В системе FreeBSD устройство
'/dev/cuaa0' - это тот же самый порт, который известен под именем
"COM1:" в системах DOS, Windows и т.д...Если Ваш модем подключен к
порту COM2:, то необходимо указать значение '/dev/cuaa1, если
COM3: - '/dev/cuaa2'.
* set speed 115200
Эта строка устанавливает скорость передачи и приема для соединения
между последовательным портом и модемом.
Если у вас возникнут проблемы при установке модемного соединения,
попробуйте изменить эту величину на значение 57600 или, еще
меньше, на 38400.
* set ifaddr 10.0.0.1/0 10.0.0.2/0 255.255.255.0 0.0.0.0
add default HISADDR
Если вы используете dial-up соединение, без выделенного IP адреса,
то эти строки менять не надо, оставьте как они есть.
Секция "dialout" содержит параметры и настройки, используемые при
прямом (исходящем) звонке к провайдеру:
* set dial "ABORT BUSY ABORT NO\sCARRIER TIMEOUT 5 \"" AT
OK-AT-OK ATE1Q0L1M1 OK \dATDT\T TIMEOUT 40 CONNECT"
ПРИМЕЧАЕНИЕ: (Этот оператор необходимо ввести одной строкой; все
переносы строк, которые Вы встретите в этом документе должны
игнорироваться.)
Эта строка сообщает программе PPP как работать с модемом и
определяет некоторые устаревшие директивы для его управления:
Попытки дозвона ошибочны, если модем вернул код "BUSY" ("ЗАНЯТО"),
Попытки дозвона ошибочны, если модем вернул код "NO CARRIER" ("НЕТ
НЕСУЩЕЙ"),
Программа PPP ожидает завершение каждого последующего события в
течение 5-секундного интервала:
Первоначально программа PPP не ожидает от модема никаких событий
(определяется выше указанием символов ""
в операторе dial)
Программа будет посылать модему строку инициализации "ATE1Q0L1M1"
и ждать ответа "OK". Если ответ не будет получен, то программа
будет вынуждена послать на модем команду "AT" и снова ожидать
ответа "OK",
Перед посылкой в модем строки дозвона программа вынуждена ждать
около 1 секунды (определено символами "\d"
в операторе dial). Часть выражения "ATDT" есть стандартный
модемный префикс для дозвона с использованием тонового набора
номера; если Ваша телефонная линия не поддерживает тоновый набора,
замените "ATDT" на "ATDP".
Символы "\T" определяют место расположения для реального номера
телефона (который будет автоматически
вставляться из параметра "set dial").
И наконец, перед тем как закончится максимальный тайм-аут в 40
секунд, программа PPP ожидает "увидеть"
код "CONNECT"("СОЕДИНЕНИЕ"), возвращаемый модемом.
Ошибка в любой точке этого "диалога" будет интерпретироваться как
ошибка дозвона и программа PPP откажет в соединении.
* set callback cbcp e.164 USER_PHONE_NUMBER
set cbcp USER_PHONE_NUMBER
Эти команды определяют номер телефона, на который будет
перезванивать модем провайдера.
* set phone ISP_PHONE_NUMBER
Номер телефона провайдера
* set authname USERNAME
set authkey USERPASSWORD
Данные учетной записи пользователя (логин и пароль)
Секция "dialin" содержит параметры и настройки, используемые при
обратном (входящем) звонке:
* set dial "ABORT BUSY ABORT NO\sCARRIER TIMEOUT 5 \""TIMEOUT 30 RING ATA CONNECT"
Модем ожидает 30 секунд звонка RING, а потом поднимает трубку ATA
(Более детальную информацию по языку мини-скриптов, используемого
дозвонщиком PPP можно получить, обратившись к man-странице
справочного руководства по "chat".)
Пример скрипта последовательного запуска ppp с профилями прямого,
а затем обратного соединений:
Описанный способ "обкатывался" на FreeBSD 5.0 и показал стабильную
работу.
Примечание 1: У описанного метода есть недостаток - ожидание входящего
звонка будет происходить вне зависимости от результатов прямого. При
необходимости Вы можете доработать описанный способ самостоятельно.
Примечание 2: Поскольку разные модемы и разные системы имеют
персональные особенности, возможно будет необходимо соответственное
изменение профилей. Рекомендуем изучить руководство по ppp, которое
входит в его поставку перед внесением каких-либо изменений.
Описание PPPD
Ваш pppd должен быть собран с поддержкой протокола CBCP (протокол
обратного звонка). Проверить это можно, выполнив следующую команду:
"pppd callback".
Если ответ будет <<unrecognized option>>, значит у Вас pppd собран без
поддержки CBCP. В этом случае для включения поддержки CBCP Вам будет
нужен файл: ftp://ftp.samba.org/pub/ppp/ppp-2.4.2.tar.gz, который необходимо
разархивировать, и из полученного каталога ppp-2.4.2/pppd/ в Makefile.linux
раскоментировать строку CBCP=y после чего собрать и установить pppd.
Дополнительную информацию по установке pppd Вы можете найти в файлах
README.linux и README.cbcp, находящихся в вышеуказанном архиве.
Настройка
1. Разархивировать содержимое архива [22]linux-callback.tar.gz в
каталог /etc/ppp/
2. Отредактировать файл ppp-on-dialer :
+ исправить путь к pppd на тот, по которому у Вас находится
pppd пример: /usr/sbin/pppd /dev/ttyS0 file
/etc/ppp/options-cb.cbcp
+ указать COM-порт, к которому подключен Ваш модем пример:
/usr/sbin/pppd /dev/ttyS0 file /etc/ppp/options.cbcp
3. Отредактировать файл options.cbcp :
+ заменить <<username>> на свой логин;
+ заменить <<callback_phone_number>> номером телефона, с
которого осуществляется связь с интернет.
4. Отредактировать файл pap-secrets :
+ в строке <<login>> farlep <<password>> заменить <<login>> и
<<password>> своими логином и паролем.
5. При необходимости отредактировать файл chat-cbcp :
+ в строке 'OK-+++c-OK' 'ATM1L1' ввести строку инициализации
для Вашего модема мосле символов 'AT .
6. Для установки соединения с Интернет необходимо запустить команду:
ppp-on-dialer <<time>> где <<time>> - время ожидания поступления
звонка (обратного звонка).
Ниже приведены тексты файлов callback-client, chat-cbcp,
options-cb.cbcp, options.cbcp, pap-secrets, ppp-on-dialer, которые
находятся в архиве http://www.mk.farlep.net/support/inet/linux-callback.tar.gz
файл callback-client (права 750):
#!/bin/sh
/usr/bin/chat -v "" ATZ OK "" RING ATA CONNECT