Мини-HOWTO: Обратный звонок

Pawel Skonecki

     [email protected]
   

Перевод: Павел Гашев, SWSoft Pte Ltd.

версия 1.1a, Июнь 2000

Этот документ описывает установку call-back в Linux. Хочу поблагодарить Анну за терпение.


1. Введение

1.1. МНЕНИЕ

Мне необходимо ваше мнение об этом документе. Я попытался собрать полную информацию, на сколько это возможно, и буду вам благодарен, если вы найдете ошибки и сообщите мне свои соображения. Это сделает документ полнее. Тем не менее, я не буду отвечать на ваши вопросы, если вы не прочитали текст целиком.


1.2. ИЗДАНИЕ

Документ издается согласно условиям LDP (Linux Documentation Project). Можете связаться с автором, если у вас нет этих условий. Документ бесплатный.


1.3. Авторские права

Авторские права на русский перевод этого текста принадлежат (c) 2000 SWSoft Pte Ltd. Все права зарезервированы.

Этот документ является частью проекта Linux HOWTO.

Авторские права на документы Linux HOWTO принадлежат их авторам, если явно не указано иное. Документы Linux HOWTO, а также их переводы, могут быть воспроизведены и распространены полностью или частично на любом носителе физическом или электронном, при условии сохранения этой заметки об авторских правах на всех копиях. Коммерческое распространение разрешается и поощряется; но так или иначе автор текста и автор перевода желали бы знать о таких дистрибутивах.

Все переводы и производные работы, выполненные по документам Linux HOWTO должны сопровождаться этой заметкой об авторских правах. Это делается в целях предотвращения случаев наложения дополнительных ограничений на распространение документов HOWTO. Исключения могут составить случаи получения специального разрешения у координатора Linux HOWTO с которым можно связаться по адресу приведенному ниже.

Мы бы хотели распространить эту информацию по всем возможным каналам. Но при этом сохранить авторские права и быть уведомленными о всех планах распространения HOWTO. Если у вас возникли вопросы, пожалуйста, обратитесь к координатору проекта Linux HOWTO по электронной почте: , или к координатору русского перевода Linux HOWTO компании SWSoft Pte Ltd. по адресу


2. Процедура

2.1. ЧАСТЬ I: Сеть дома?

Большинство из нас пользуются Интернетом на работе. Тем не менее, часто необходим доступ к сети из дома или другого места вне работы. Возможно, работать из дома дешевле, чем из здания компании. Думаю, лучшее решение - установить на сервер Linux программное обеспечение, позволяющее производить call-back. При помощи технологии call-back, появляется возможность перезвонить на определенный телефонный номер за счет компании. Я попытаюсь описать, как это работает. Сначала определенный пользователь звонит на сервер Linux. Затем пользовательская сторона кладет трубку. В это время Linux звонит пользователю. Пользователь снова аутентифицируется. И мы получаем соединение с сервером, причем пользователь платит только за первое короткое соединение, за остальное платит компания. Двойная проверка и некоторые возможности в программе, поддерживающей call-back, не позволяют посторонним пользователям воспользоваться деньгами компании. Кроме того, мы можем ограничить доступ только пределами внутренней сети или только Интернетом (Call-back очень гибок). Ниже я попытаюсь представить настройку call-back сервера под Linux и расскажу, как настроить свой компьютер для этой операции.


2.2. ЧАСТЬ 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.


2.3. ЧАСТЬ 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 с его паролем. Надеюсь, что все будет работать нормально.


2.4. ЧАСТЬ 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 

и специфичные скрипты

  • /etc/ppp/ppp-call

    
#!/bin/bash
    teksta="Соединение не удалось"
    tekstb="Соединение выполненно"
    # /sbin/setserial /dev/cua1 spd_vhi
    killall -INT pppd 2>/dev/null
    rm -f /var/lock/LCK* /var/run/ppp*.pid
    (/usr/sbin/pppd -detach /dev/ttyS1 115200 \
    connect "/usr/sbin/chat -v -f /etc/ppp/pppcallback" &) || \
    (echo $teksta; ls marsss >/dev/null; exit 1)
    echo $tekstb
    exit 0 

  • /etc/ppp/pppcallback

    TIMEOUT 60
    ABORT 'ERROR'
    ABORT 'BUSY'
    ABORT 'NO ANSWER'
    ABORT 'NO DIALTONE'
    ABORT '\nVOICE\r'
    ABORT '\nRINGING\r\n\r\nRINGING\r'
    '' AT&FH0 <p>'OK-+++\c-OK' 'AT&C0S0=1'
    TIMEOUT 75
    OK ATDT123456
    CONNECT ''
    ogin:-ogin: ppp_pseudouser
    '\nNO CARRIER\r' ''
    TIMEOUT 180
    '\nRING\r' AT&C1A
    CONNECT ''
    TIMEOUT 20
    ogin:-ogin: pppuser
    sword:-sword password_for_pppuser 

  • Теперь вы можете запустить ppp-call. :)

ДЛЯ RED HAT 6.x:

  • /etc/ppp/options

    lock
    defaultroute
    noipdefault
    modem
    33600
    crtscts
    debug
    passive
    asyncmap 0 

  • /etc/ppp/pppcallback

    TIMEOUT 5
    ABORT 'ERROR'
    ABORT 'BUSY'
    ABORT 'NO ANSWER'
    ABORT 'NO DIALTONE'
    ABORT '\nVOICE\r'
    ABORT '\nRINGING\r\n\r\nRINGING\r'
    '' AT&FH0 'OK-+++\c-OK' 'AT&C0S0=1'
    TIMEOUT 40
    OK ATDT5376443 CONNECT ''
    ogin:-ogin: ppp-pseudo-user
    '\nNO CARRIER\r' ''
    TIMEOUT 180
    '\nRING\r' AT&C1A
    CONNECT ''
    TIMEOUT 20
    ogin:-ogin: pppuser
    sword:-sword password_for_ppuser 

  • /usr/bin/ppp-call

    #!/bin/bash
    
    teksta="Соединение не удалось"
    tekstb="Соединение выполненно"
    # /sbin/setserial /dev/cua1 spd_vhi
    killall -INT pppd 2>/dev/null
    rm -f /var/lock/LCK* /var/run/ppp*.pid
    (/usr/sbin/pppd -detach call ppp_call &) || \
    (echo $teksta; ls marsss >/dev/null; exit 1)
    echo $tekstb
    exit 0 

  • Теперь вы можете запустить ppp-call. :)

Если у вас M$ Windows, то вы можете использовать следующий скрипт. Я его не проверял (я использую терминал). Если у вас возникнут вопросы, спрашивайте автора скрипта - Adrian Debkowski ([email protected]).

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


2.5. ЧАСТЬ V: Выводы

Настройка call-back ничуть не сложна, и я не знаю лучшего пути настроить доступ кроме как через сервер. Настройка, представленная выше - это результат большого количества попыток. Все то же самое может быть сделано по-другому - после прочтения всех материалов, относящихся к этой теме (man pppd, HOWTO-NET4).