Настройка callback-сервера на базе Linux.
Автор : Sunil Thomas Thonikuzhiyil (
[email protected])
Перевод : Александр Куприн
Введение
Смысл организации 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 (http://linuxdoc.org/HOWTO/mini/Call-back.html) (Руcский перевод можете найти здесь (http://linux.yaroslavl.ru/Howto/Howto-mini/call-back-mini-HOWTO.html). Прим.перев.)
2) Linux callback (http://www.bdcol.ee/linux/callback.shtml)
3) Страницы справочного руководства по pppd
4) Mgetty+Sendfax Archive/Documentation (http://www.leo.org/~doering/mgetty/)
Если вы обнаружили проблемы при настройке callback-сервера, обязательно сообщите мне об этом. Комментарии и предложения приветствуются.