Мини-HOWTO: Обратный звонок |
---|
Пред. | | |
Процедура
ЧАСТЬ I: Сеть дома?
Большинство из нас пользуются Интернетом на работе. Тем не менее, часто
необходим доступ к сети из дома или другого места вне работы. Возможно,
работать из дома дешевле, чем из здания компании. Думаю, лучшее решение -
установить на сервер Linux программное обеспечение, позволяющее производить
call-back. При помощи технологии call-back, появляется возможность
перезвонить на определенный телефонный номер за счет компании. Я попытаюсь
описать, как это работает. Сначала определенный пользователь звонит на
сервер Linux. Затем пользовательская сторона кладет трубку. В это время
Linux звонит пользователю. Пользователь снова аутентифицируется. И мы
получаем соединение с сервером, причем пользователь платит только за первое
короткое соединение, за остальное платит компания. Двойная проверка и
некоторые возможности в программе, поддерживающей call-back, не позволяют
посторонним пользователям воспользоваться деньгами компании. Кроме того, мы
можем ограничить доступ только пределами внутренней сети или только
Интернетом (Call-back очень гибок). Ниже я попытаюсь представить настройку
call-back сервера под Linux и расскажу, как настроить свой компьютер для
этой операции.
ЧАСТЬ II: Первые шаги с вашим модемом.
Разные администраторы предпочитают разные модемы. Однако, во время покупки
модема, вам нужно придерживаться определенных правил:
Не покупайте Win-Modem, т.к. он не работает под Linux
Внешний модем работает быстрее, чем внутренний.
Внутренний ISA модем лучше PCI (вы можете использовать PCI слот для
чего-нибудь другого)
Не покупайте Plug&Play модем. Если он уже у вас есть, отключите Plug&Play и
настройте модем на свободный COM порт (Plug&Play-HOWTO).
Если у нас есть нужный модем, мы должны настроить систему. Для этого мы
должны проверить на каком он порту, и сделать символьный линк между файлом
устройства и /dev/modem. Например, если у нас модем на COM2, мы пишем:
ln -s /dev/cua1 /dev/modem
Проверяем
lrwxrwxrwx 1 root uucp 9 Sep 19 19:10 /dev/modem -> /dev/cua1
Если модем на другом порту, надо запомнить, что
/dev/cua0 is com1
/dev/cua1 is com2
/dev/cua2 is com3
/dev/cua3 is com4
Для новых ядер:
/dev/ttyS0 is com1
/dev/ttyS1 is com2
/dev/ttyS2 is com3
/dev/ttyS3 is com4
Теперь можно проверить наши настройки при помощи minicom.
ЧАСТЬ III: Звоним на Linux
Для начала, нам нужно настроить параметры ядра - проверяем, установлена ли
поддержка ppp. Если поддержка не включена (ни внутри ядра, ни в виде
модуля), то нам нужно пересобрать ядро (Kernel-HOWTO). Хорошо. Теперь у нас
правильное ядро, и нам нужно поставить программное обеспечение. Поддержка
call-back - это часть программ mgetty-sendfax и ppp. Вы можете найти их в
вашем дистрибутиве. Т.к. в процессе call-back происходит двойная
аутентификация, мы должны создать пользователя, от имени которого
запускается ppp на сервере.
pppuser:klkIOM89mn65H:230:PPP Dialin:/home/pppuser:/etc/ppp/ppplogin
Затем меняем пароль. Информацию о пароле надо добавить в файл
/etc/ppp/pap-secrets (подробнее см. man pppd):
pppuser * password_for_pppuser *
Этот пользователь не имеет програмной оболочки - вместо этого запускается
файл /etc/ppp/ppplogin. Мы можем сделать его
самостоятельно. Например, при помощи vi
/etc/ppp/ppplogin:
#!/bin/sh
exec /usr/sbin/pppd -detach 192.168.1.1:192.168.1.2
где 192.168.1.1 - адрес сервера, 198.168.1.2 - адрес нашей машины.
Выставляем атрибуты файла, делая его запускаемым. Мы используем
демон ppp, поэтому нам надо задать параметры его работы. Редактируем
файл /etc/ppp/options:
netmask 255.255.255.0
proxyarp
lock
crtscts
modem
Опция proxyarp очень важна, если вы хотите иметь доступ в Интернет.
Остальные опции используются для управления модемом. Если вы уберете опцию
proxyarp, то вы сможете работать только с локальной сетью сервера. См.
PPP-HOWTO и man pppd для более подробной информации. Теперь нам надо
настроить модем. Чтобы наш сервер был готов к приему звонков, добавим
строку в файл /etc/inittab (для COM2):
s1:2345:respawn:/sbin/mgetty ttyS1 -D /dev/ttyS1 vt100
Для COM1 она выглядит примерно так:
s0:2345:respawn:/sbin/mgetty ttyS1 -D /dev/ttyS1 vt100
Дайте команду init q. Если в журналах не появилось
сообщений об ошибках, переходим к следующему шагу. Мы должны вернуться в
каталог /etc/ppp и создать файл
options.ttyS1 (для модема на COM1 -
options.ttyS0):
IP_local: IP_remote
для нашей сети это будет:
192.168.1.1:192.168.1.2
Теперь проверим файл /etc/mgetty+sendfax/login.config
на предмет наличия в ней строки:
/AutoPPP/ - a_ppp /usr/sbin/pppd auth -chap +pap login detach kdebug 7 debug
Остальные строки могут начинаться с #.
И наконец, чтобы ppp работало от пользователя pppuser, мы должны установить
флаг suid для pppd:
chmod u+s /usr/sbin/pppd
это даст:
-rwsr-xr-x 1 root root 106892 Jan 11 1999 /usr/sbin/pppd
Я думаю, что очень неплохо добавить эту команду в cron, потому
что у меня возникли проблемы с правами после перезапуска
моего сервера. Наш сервер будет работать в качестве
маршрутизатора. Нам надо разрешить ядру пересылать IP-пакеты.
Для этого в файл /etc/rc.d/rc.local добавим
следующую строку:
echo "1" > /proc/sys/net/ipv4/ip_forward
Если у вас дистрибутив RedHat или ему подобный, то вы можете изменить в
файле/etc/sysconfig/network строку
FORWARD_IPV4=false на FORWARD_IPV4=true.
Для проверки позвоним на Linux, используя для этого скрипт. Если мы делаем
это из MS Windows, поставим галочку "вызвать окно
терминала после соединения". Входим как pppuser с его паролем.
Надеюсь, что все будет работать нормально.
ЧАСТЬ IV: Linux звонит к нам
Мы уже можем позвонить к Linux, и настало время, чтобы Linux позвонил к нам.
Это не очень сложно. Нам нужно отредактировать два файла. Создадим файл
/etc/mgetty+sendfax/callback.conf и пока оставим его пустым.
Теперь настало время узнать номера телефонов наших пользователей, чтобы
сервер сам звонил к ним. Для этого вносим в файл
/etc/mgetty+sendfax/login.conf следующее:
call - - /usr/sbin/callback - S 123456
где call - это псевдо-пользователь, нужный для того, чтобы начать
соединение. Строка в /etc/mgetty+sendfax/login.conf
запускает программу, звонящую на указанный телефонный номер (в нашем случае
это 123456). Похожая процедура может быть выполнена для другого
пользователя. Я попробую объяснить, как это работает. Когда мы звоним на
сервер, он предлагает нам пройти аутентификацию, и мы входим как
псевдо-пользователь `call'. Скрипт на нашем компьютере вешает трубку, и мы
ждем. На сервере запускается программа
/usr/sbin/callback, которая перезванивает нам. Мы
снова проходим проверку, но теперь в качестве пользователя pppuser, и после
этого устанавливается ppp-соединение. Все. Настройка рабочей станции очень
проста. Если у вас MS Windows, вы должны установить удаленный доступ сети и
в свойствах модема найти "установка связи-->дополнительно-->строка
инициализации", где прописываем.
&c0s0=1
Закрываем окно, звоним и заходим на сервер как описано выше. Если мы хотим
использовать Linux, мы должны написать скрипт. Довольно сложно написать
один хороший скрипт на все случаи жизни, т.к. правильная конфигурация ppp
имеет первичное значение. Скрипты, описанные ниже (автор A. Gozdz), я
предложил бы поместить в один каталог. Более подробную информацию читайте в
PPP-HOWTO.
ДЛЯ SLACKWARE:
Конфигурационный файл ppp (модем на COM2) /etc/options
lock
defaultroute
noipdefault
modem
/dev/cua1
33600
crtscts
debug
passive
asyncmap 0 |
и специфичные скрипты
ДЛЯ RED HAT 6.x:
Если у вас M$ Windows, то вы можете использовать следующий
скрипт. Я его не проверял (я использую терминал). Если у вас
возникнут вопросы, спрашивайте автора скрипта - Adrian Debkowski
(adrian@cr-media.pl).
proc main
delay 1
waitfor "ogin:"
transmit "call^M"
waitfor "RING"
transmit "ATA^M"
waitfor "CONNECT"
waitfor "ogin:"
transmit "pppuser^M"
waitfor "word:"
transmit "ppp^M"
endproc |
ЧАСТЬ V: Выводы
Настройка call-back ничуть не сложна, и я не знаю лучшего пути
настроить доступ кроме как через сервер. Настройка, представленная выше -
это результат большого количества попыток. Все то же самое может быть сделано
по-другому - после прочтения всех материалов, относящихся к этой теме (man
pppd, HOWTO-NET4).