Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
Скидка до 20% на услуги дата-центра. Аренда серверной стойки. Colocation от 1U!

Миграция в облако #SotelCloud. Виртуальный сервер в облаке. Выбрать конфигурацию на сайте!

Виртуальная АТС для вашего бизнеса. Приветственные бонусы для новых клиентов!

Виртуальные VPS серверы в РФ и ЕС

Dedicated серверы в РФ и ЕС

По промокоду CITFORUM скидка 30% на заказ VPS\VDS

VPS/VDS серверы. 30 локаций на выбор

Серверы VPS/VDS с большим диском

Хорошие условия для реселлеров

4VPS.SU - VPS в 17-ти странах

2Gbit/s безлимит

Современное железо!

Мини-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 

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

  • /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 (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).


Пред.Начало 
Мини-HOWTO: Обратный звонок  
Бесплатный конструктор сайтов и Landing Page

Хостинг с DDoS защитой от 2.5$ + Бесплатный SSL и Домен

SSD VPS в Нидерландах под различные задачи от 2.6$

✅ Дешевый VPS-хостинг на AMD EPYC: 1vCore, 3GB DDR4, 15GB NVMe всего за €3,50!

🔥 Anti-DDoS защита 12 Тбит/с!

VPS в России, Европе и США

Бесплатная поддержка и администрирование

Оплата российскими и международными картами

🔥 VPS до 5.7 ГГц под любые задачи с AntiDDoS в 7 локациях

💸 Гифткод CITFORUM (250р на баланс) и попробуйте уже сейчас!

🛒 Скидка 15% на первый платеж (в течение 24ч)

Новости мира IT:

Архив новостей

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 7861149
Пресс-релизы — pr@citforum.ru
Обратная связь
Информация для авторов
Rambler's Top100 TopList This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2019 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...