Linux callback howto.

В багатьох новачків-лінуксоїдів виникає питання: як використовувати послугу зворотнього виклику для роботи в мережі Інтернет. Якщо для користувачів систем М$ цієї проблеми не існує взагалі, то для юнікс-подібних систем потрібно дещо “потанцювати з бубном”. Отже переходимо для розгляду цієї проблеми.

Взагалі для роботи callback в Linux потрібно небагато: ppp версії 2.4.1 чи новішої, зібраної з підтримкою протоколу CBCP, щосьзграфічним_інтерфейсом для роботи через ppp в зручному режимі (не всім зручно працювати в консолі), ще обов'язково: модем та телефонна лінія, не зайвим буде й аккаунт якого-небудь провайдера з callback %).

Перше: підтримка протоколу CBCP в ppp. Якщо ви не впевнені в наявності необхідних опцій, то робимо наступне: завантажуємо сирці ppp з http://ppp.samba.org (або беремо його з диску сирців, якщо він є), розпаковуємо, знаходимо файл ./pppd/Makefile.linux та прибираємо коментар з рядка CBCP=y. Після цього йдуть стандартні:

$ ./configure
$ make
$ su
[root@host]# make install

Треба зауважити, що /usr/sbin/pppd має бути suid.

Отже, маємо ppp з підтримкою всього, що нам потрібно. Можемо починати працювати. Перший (графічний) метод: беремо kppp зі складу KDE 3.3 або chestnut-dialer (що кому до вподоби) й заповнюємо в них усі потрібні поля, у крайньому разі — читаємо інструкцію до вибраної дзвонилки.

Метод другий (консольний): тут вже на що в кого вистачить фантазії, але найголовніше створити peer-конфіги (тека /etc/ppp/peers), наводжу свої:

CB

/dev/ttyS0
115200
connect '/usr/bin/chat -f /etc/ppp/dialCB.ch -r /var/log/chat.report' 
defaultroute
lock
ipcp-accept-local
ipcp-accept-remote
noauth
user *******
callback #######
-detach

CBAnswer

/dev/ttyS0 
115200 
connect '/usr/bin/chat -f /etc/ppp/dialCBAnswer.ch -r 
/var/log/chat.report'
defaultroute 
lock 
ipcp-accept-local 
ipcp-accept-remote 
noauth 
user ******
callback #######
-detach

Гадаю, всі зрозуміли, що замість зірочок пишемо логін, а замість ####### — свій номер.

Тепер створюємо файл /etc/ppp/dialCB.ch, в якому пишемо:

REPORT CONNECT 
ABORT BUSY 
ABORT "NO CARRIER" 
ABORT ERROR 
ABORT "NO DIALTONE" 
"" 
"at&f"
TIMEOUT 5 
OK 
ATDP#######
TIMEOUT 70 
CONNECT

та dialCBAnswer.ch:

REPORT CONNECT 
ABORT BUSY 
ABORT "NO CARRIER" 
ABORT ERROR 
ABORT "NO DIALTONE" 
"" 
"at&f" 
TIMEOUT 5 
OK 
"" 
TIMEOUT 60 
RING 
ATA 
TIMEOUT 40 
CONNECT 

В мене все це працювало за допомогою скрипта:

#!/bin/sh
while [ 1=1 ]; do 
echo "===> Starting pppd" 
/usr/sbin/pppd call CB 
echo "===> Waiting for incoming call" 
/usr/sbin/pppd call CBAnswer 
echo "===> Connection terminated" 
sleep 2 
done

Всі скрипти були написані Олександром Мотіним (mav@alkar.net) та трохи адаптовані мною під лінукс.

З'єднувався запуском, роз'єднувався вбивством скрипта (хоча це й не зовсім зручно, але мене влаштовувало).

Ну а тепер — швидких ліній та “а ні busy ні disconnect'у”.