# Настройка &kppp; на режим обратного звонка

Материал для этой главы предоставил Martin Häfner, mh@ap-dec717c.physik.uni-karlsruhe.de

## Сервер обратного звонка под управлением ОС &UNIX; или &Linux;

В этом разделе рассказывается об обратном звонке в ОС &UNIX; (&Linux;) и о том, как &kppp; должна быть настроена для соединения с сервером обратного звонка под управлением ОС &UNIX; особое внимание уделяется ОС &Linux; и ее серверу обратного звонка на основе скриптов.

### Что такое Обратный звонок

Для использования Обратного звонка есть несколько причин. Вот некоторые из них:

- Для увеличения безопасности вашей локальной сети

- Для сокращения расходов ваших сотрудников, звонящих извне

- Для контроля стоимости телефонных звонков, по статье организационных расходов:

Представьте себе, что некто дозвонился на ваш сервер входящих звонков и взломал пароль доступа. Зачем же, в таком случае, конфигурировать брандмауэр для вашей сети, если можно таким простым способом получить к ней доступ?

Программное обеспечение обратного звонка запрашивает ваше имя, а затем разъединяется. Далее производится звонок по вашему номеру, который хранится в базе данных на сервере. Клиент поднимает трубку и продолжается процедура установления соединения, если не возникло сбоев. Сервер запрашивает ваше имя пользователя и пароль, зная, что звонили вы (согласно вашему звонку), или же зная, откуда вы звонили. Устанавливается соединение и запускается демон ppp.

Вопрос: как указать клиенту поднять трубку, когда сервер перезванивает ему. Нужна ли специальная программа типа mgetty? Ответ: нет, вам не понадобится специальная программа. В общем, любой клиент может быть использован при соединении с обратным звонком, вы можете использовать даже обыкновенную терминальную программу: minicom, к примеру.

Вам только надо отдать модему команду `Ответить автоматически` на телефонный звонок при поступлении сигнала `RING`. Для этого задайте модему следующую команду:

    AT&SO=1

Эта команда указывает модему поднять трубку после одного звонка (`RING`).

Подобно большинству других программ-клиентов, &kppp; проверяет, не прекращено ли соединение сервером, а затем закрывает текущую сессию, если определен сигнал `NO CARRIER`. Это является настоящей проблемой при настройке обратного звонка. Сигнал `NO CARRIER`, конечно, будет получен в момент прекращения соединения сервером обратного звонка. Некоторые серверы используют специальные программы логина. Так как решить эту проблему? Укажите модему всегда показывать `CARRIER UP` (это не вызовет проблем при указании клиенту повесить трубку). Вы можете осуществить это следующей командой модему:

    AT&C0

Если вам хочется проверить, как все это работает, используйте обыкновенную терминальную программу, например, minicom, позвоните на ваш сервер обратного звонка и посмотрите, что произойдет.

### Настройка &kppp;

Теперь, когда вы увидели применение теории на практике, как настроить &kppp; для осуществления соединения?

Как показано, процедура весьма несложная.

1. Сперва укажите модему принимать входящие соединения, а не прерывать сессию установки соединения при разъединении с сервером обратного звонка при первом звонке. Обе эти опции можно добавить на вкладке Модем в настройках &kppp;, добавив в опцию Строка дозвона следующее: `AT&C0S0=1DT`

   Более никаких изменений в &kppp; не потребуется. Если у вас возникнут проблемы с инициализацией и сбросом установок модема, обратитесь к разделу Устранение неисправностей для получения более детальных сведений.

2. Не забудьте о сервере. Помните, что ОС &UNIX;, &Windows; и Macintosh по-разному обрабатывают концы строк в текстовых файлах и, таким образом, и в процедурах логина. Если вы подключаетесь к серверу под управлением ОС &Windows;, используйте `CR/LF`, для сервера под управлением ОС &UNIX; используйте `CR`, а при подключении к серверу Macintosh используйте `LF`

3. Следующие инструкции применимы к случаю дозвона на сервер обратного звонка под управлением ОС &Linux; с использованием обычной авторизации (не PAP или ей подобной).

   Установите стиль Авторизация во вкладке Дозвон в конфигурации соединения в положение На основе скрипта

4. Сейчас вам надо создать скрипт логина. Редактирование скрипта логина являетсяодной из наиболее приятных функций программы &kppp;. Эта опция доступна на вкладке Скрипт логина в диалоге Редактирование соединения.

   В этом примере пользователь `userxyz` должен вызвать следующий скрипт. Серверу обратного звонка уже задана таблица имен и соответствующие телефонные номера, в целях безопасности создать псевдоним для соответствующего вам номера телефона.

   Для каждой строки выберите критерий из раскрывающегося списка в левой стороне диалога и введите действие в поле справа. Нажмите на кнопку Добавить для добавления строки в скрипт. Кнопкой Вставить добавляйте строки в середину скрипта, а кнопкой Удалить удаляйте строку, если в ней допущена ошибка.

   Полностью скрипт будет выглядеть примерно так (без комментариев, начинающихся здесь с символа #)

       Expect       ogin:           # помните, что это обыкновенный теминальный логин
       ID           ""              # kppp отправляет имя пользователя, установленное в
       главном экране
       Expect       for userxyz:    # отображается список доступных номеров,
       пользователь должен сделать выбор
       Send         userxyz-home    # пользователь хочет, чтобы ему перезвонили
       по домашнему номеру
       Expect       ogin:           # выполняется процесс обратного дозвона,
       новое соединение и новый логин.
       ID
       Expect       assword:        # отправить пароль
       Expect       >            # ожидать приглашения (оно
       может отличаться)
       Send         start_ppp       # эта команда запускает демон ppp

   После появления запроса на вход, пользователь отправляет свое имя пользователя и ожидает появления списка доступных этому пользователю телефонных номеров. Эатем он указывает серверу, по какому из предложенных номеров нужно произвести звонок. Для этого &kppp; может создать диалог, если вы часто переезжаете, к примеру, если вы являетесь агентом по продажам и переезжаете из гостиницы в гостиницу. Теперь сервер ожидает имя пользователя и пароль для авторизации, тем временем, сервер прерывает соединение и перезванивает пользователю. Данные для авторизации отправлены, &kppp; ожидает приглашения системы и запускает небольшой скрипт (здесь `start_ppp`), который запускает демон ppp на сервере.

   Скрипт `start_ppp` выглядит примерно так, как показано ниже:

       #!/bin/sh
       stty -echo
       exec /usr/sbin/pppd -detach silent modem

   Конечно, настройка PPP-сервера выходит за рамки этого документа. Детальные сведения находятся на man-странице демона ppp. Замечательное описание сервера обратного звонка доступно по адресу: http://ap-dec717c.physik.uni-karlsruhe.de/~mh/callback

Все остальные настройки, такие как настройка демона ppp или настройки IP-протокола будут работать нормально, и для дозвона вам не понадобятся другие программы.

Обратный звонок в &kppp; и другие программы типа mgetty или же faxgetty могут выполняться на одном последовательном порте. Проблем с дозвоном быть не должно, так как &kppp; создает файл блокировки и указывает программе getty, что другое приложение (в этом случае &kppp;) использует порт.

### Устранение неисправностей

Известные проблемы с программой &kppp;, работающей в режиме обратного звонка:

- Так как вы инициализируете модем для ответов на звонок, после разъединения нужно сбросить установки модема в начальное состояние. Иначе модем продолжит отвечать на звонки, что не так уж и хорошо, если рассмотренная телефонная линия является основной для вас.

- У &kppp; есть мелкие недостатки, когда она использует одну линию наряду с другой программой, такой как mgetty. Если mgetty в процессе выполнения использует ту же линию, то &kppp; не может правильно инициализировать модем.

- &kppp; не в состоянии запросить некоторый тип ввода во время логина на основе скрипта. К сожалению, при использовании примера скрипта, приведенного выше, &kppp; также запрашивает имя пользователя второй раз, при запросе сервера обратного звонка. От этого можно избавиться, если прописать ваше имя пользователя в скрипт логина (неудобно и некрасиво, зато срабатывает).

### Ресурсы Интернета о серверном программном обеспечении

Программное обеспечение для сервера обратного звонка под управлением ОС &Linux; доступно во многих местах.

Хорошо известная мощная программа mgetty способна работать с соединениями по принципу обратного звонка. Описание настройки mgetty для этой цели находится по адресу http://www.dyer.demon.co.uk/slug/tipscrip.htm, написанное Colin McKinnon, colin@new.co.uk.

Существует готовый к использованию пакет для ОС &Linux;: http://www.icce.rug.nl/docs/programs/callback/callback.html. Этот пакет поддерживает Frank B. Brokken, frank@icce.rug.nl. Так как настройка, несмотря на прямолинейность, весьма сложна, то я написал короткое вступление для нее: http://ap-dec717c.physik.uni-karlsruhe.de/~mh/callback/, в котором также содержатся более подробные сведения об обратном звонке.

## Обратный звонок службы RAS в ОС &Windows; NT

В ОС &Windows; NT используется подход, совершенно отличный от описанного выше. NT требует наличия расширения к протоколу PPP, поз названием CBCP (Протокол контроля обратного звонка). У демона ppp есть поддержка этого протокола, но вам придется перекомпилировать демон ppp. Если кому-нибудь удалось успешно соединиться с сервером обратного звонка под управлением NT, просьба дать нам знать об этом.