Настройка callback-сервера на базе Linux
 
Автор: (C) Sunil Thomas Thonikuzhiyil
Перевод: (C) Александр Куприн


Введение

Смысл организации dialin-сервера PPP в том, что пользователи устанавливают PPP-соединение с удаленным сервером, дозваниваясь по телефонным линиям с помощью модема. Кроме этого, можно сделать так, чтобы Linux-машина делала обратный звонок пользователю, дозвонившемуся к ней. Этот документ объясняет, как шаг-за-шагом настроить callback-сервер (сервер с функцией обратного дозвона) на базе Linux.

Требования

Мой сервер работает под Debian Potato (ядро 2.4.17). Модем подключен к ttyS0 (COM1) и функционирует и как dialin (принимая звонки), и как callback-модем. Другая моя машина (клиент) работает под Debian Potato и Win98. Внешний модем подключен к ttyS1. Предполагается, что и на сервере и на клиенте установлен минимум программного обеспечения для дозвона к интернет-провайдеру. На сервере, в дополнение к этому, нужно установить пакет mgetty+sendfax.

Идея

В двух словах, callback-сервер работает следующим образом. Сперва я (клиент) дозваниваюсь через модем к моему callback-серверу. Модем на сервере настроен на прием входящих звонков. После установки соединения, сервер предлагает клиенту пройти аутентификацию. Я подключаюсь к нему как особый callback-пользователь. После этого модем на сервере обрывает связь и звонит мне по номеру, который закреплён за моей машиной (клиентом). Модем на клиентской машине уже готов принять обратный звонок и, после установления соединения, происходит повторная авторизация. Теперь я регистрируюсь как обычный PPP-пользователь. Всё -- соединение окончательно установлено.  

Конфигурация dialin-сервера

Для того, чтобы всё вышеизложенное заработало, необходимо сконфигурировать сервер так, чтобы он мог принимать входящее PPP-соединение.

Вот что надо сделать:

1) Создайте нового пользователя pppuser

Измените запись в /etc/passwd относящуюся к pppuser на:
pppuser:x:1001:1001:,,,:/home/pppuser:/usr/sbin/pppd

2) Чтобы последовательный порт мог принимать входящие сообщения, добавьте в /etc/inittab следующую строку:

T0:23:respawn:/sbin/mgetty ttyS0 -D /dev/ttyS0

Перезапустите init, выполнив команду  'init q'.
Это разрешит принимать входящие сообщения через ttyS0.

3) Перейдите в подкаталог /etc/mgetty (Там расположен конфигурационный файл mgetty. В дистрибутиве Redhat всё это располагается в /etc/mgetty+sendfax)
Отредактируйте login.config, добавив строку:

/AutoPPP/ - a_ppp /usr/sbin/pppd file /etc/ppp/options

Закомментируйте все остальные строки

4) В конфигурационном файле /etc/ppp/options пропишите следующее:

         -detach
         asyncmap 0
         modem
         crtscts
         proxyarp
         lock
         require-pap
         refuse-chap
         ms-dns 192.168.50.100 #укажите ip-адрес вашего dns-сервера
         usepeerdns
5) Создайте файл options.ttyS0 в /etc/ppp со следующим содержимым:
     192.168.0.100:192.168.0.2
     noauth
Два ip-адреса, указанные выше -- это адрес вашего сервера и адрес клиента, который он должен получить от сервера. Измените их согласно вашим сетевым настройкам. Если ваш модем подключён к ttyS1, то имя редактируемого файла -- options.ttyS1.

6) Измените права доступа к pppd (в некоторых дистрибутивах у pppd уже есть suid-атрибут)

  chmod u+s /usr/sbin/pppd

7) Создайте алиас для ppp, добавив в /etc/profile такую строку

 alias ppp=`/usr/sbin/pppd -detach'`
Теперь попытайтесь дозвониться к серверу со стороны клиента. Для этого, если вы используете MS Windows, выберите "Мой компьютер", затем "Удалённый доступ к сети", "Новое соединение" и заполните необходимые данные.  Войдите как pppuser и проверьте, работает ли корректно dialin-сервер. Проверьте "пингуется" ли сервер. После этого, вы можете проверить ip-адрес, присвоенный клиенту, воспользовавшись программой winipcfg.

Конфигурация callback

После того, как настройка dialin-сервера завершена, будет несложно настроить callback.

Вот, что нужно сделать.

1) Создать нового пользователя back. (Если кто-то запутался, то речь идёт о настройках на сервере. Прим.перев.)

2) Создать пустой файл с именем callback.conf в /etc/mgetty/. (Если нужно, можете добавить в этот файл строки инициализации для вашего модема. Но обычно его оставляют пустым.)

3) В /etc/mgetty/login.config добавляется следующая строка:

back - - /usr/sbin/callback -S 2561

После ключа -S нужно указать номер, по которому сервер должен сделать обратный звонок клиенту.

Конфигурация клиентов

1) MS Windows 98

Откройте папку "Мой компьютер", далее "Удалённый доступ к сети", "Новое соединение" и укажите данные, необходимы для дозвона к PPP-серверу. Кроме этого, в настройках модема на закладке "Подключения" нажмите кнопку "Дополнительно" и в строке инициализации  модема укажите следующее:

  &c0s0=1

Затем в свойствах модема на закладке "Параметры" включите элемент (checkbox) "Открыть окно терминала до набора номера". (Названия пунктов взяты из Windows 98 Russian SE. Прим. перев.)

Вы можете оставить поля с именем пользователя и паролем пустыми.

Начните дозваниваться к серверу. После дозвона в открывшемся окне терминала вы увидите приглашения для аутентификации.

Войдите в систему как 'back' (специальный пользователь для обратного дозвона).

Теперь модем со стороны сервера оборвёт связь, подождёт несколько секунд и позвонит вам. После установки callback-соединения вам предложат пройти повторно авторизацию. Введите логин pppuser и пароль. Нажмите "продолжить" на окне терминала. Теперь вы в системе. Проверьте снова "пингуется" ли сервер.

Возможно, для регистрации надо написать скрипт, но я ещё не пробовал это сделать. Процедура регистрации может отличаться в разных версиях Wiindows. И помните, очень важно установить строку инициализации для модема (&c0s0=1).

2) Linux

Конфигурирование Linux-клиента выглядит немного сложнее. Вот, что нужно было сделать с моей машиной (Debian, ядро 2.4.17)

1) Создать файл /etc/ppp/options с таким содержимым (В оригинале стояло /etc/options, но это, скорее всего, опечатка. Должно быть /etc/ppp/options. Хотя, не имея Debian под рукой -- гарантировать не могу. Прим.перев.):

        lock
        defaultroute
        noipdefault
        modem
        115200
        crtscts
        debug
        passive
        asyncmap 0
2) Создать файл ppp-callback в /etc/ppp/peers/ и прописать в нём следующее:
    ttyS1 19200 crtscts
    connect '/usr/sbin/chat -v -f /etc/ppp/chat-callback'
    noauth
3) Создать файл /etc/ppp/chat-callback, где указать
        ABORT BUSY
        ABORT VOICE
        ABORT "NO DIALTONE"
        ABORT "NO ANSWER"
        "" ATZ
        OK ATDT2562             # Телефонный номер сервера
        CONNECT \d\d
        ogin: \q\dback
        TIMEOUT 90
        RING AT&C0S0=1
        ogin: \q\dpppuser
        assword: \q\dpasswordforppuser
В скрипте измените значения номера телефона, логина и пароля на те, которые вы будете реально использовать. (Просмотрите документацию на ваш модем, возможно, для него понадобятся дополнительно параметры инициализации. Не исключено, что нужно будет заменить ATZ на что-то типа AT&FX2.)

4) Создайте скрипт /usr/bin/pppcall и напишите в нём следующее

  #!/bin/bash
  /usr/sbin/pppd -detach call ppp-callback &

Сделайте его исполняемым
Теперь вы можете позвонить на сервер, используя скрипт pppcall

(Обращаю ваше внимание на то, что автор статьи напутал с именами файлов. В оригинале статьи в пункте 2) имя файла -- pppcalback. В пункте 4) с ключом call было указано имя pppcall. Более подробно смотрите man по pppd(8), ключ call. Прим.перев.)

Дополнительная информация

Следующие документы помогли мне понять и написать вышеизложенное:
1) Callback mini howto (Руcский перевод можете найти здесь. Прим.перев.)
2) Linux callback
3) Страницы справочного руководства по pppd
4) Mgetty+Sendfax Archive/Documentation

Если вы обнаружили проблемы при настройке callback-сервера, обязательно сообщите мне об этом. Комментарии и предложения приветствуются.


Sunil Thomas Thonikuzhiyil

Я работаю консультантом по информационным технологиям в Kerala Legislative Assembly Trivandrum, Индия. "Запал" на Linux в 1996. Имею степень магистра по информатике (Masters in Computer Science) в Cochin University. Интересуюсь всеми видами операционных систем. В свободное время люблю послушать индийскую классическую музыку.


Copyright (C) 2002, Sunil Thomas Thonikuzhiyil.
Copying license http://www.linuxgazette.com/copying.html
Published in Issue 77 of Linux Gazette, April 2002

Вернуться на главную страницу