# Налаштування зворотного виклику у &kppp;

Цю главу засновано на матеріалах, наданих Martin Häfner, mh@ap-dec717c.physik.uni-karlsruhe.de

## Сервер зворотного виклику &UNIX; або &Linux;

Цей розділ є вступним до вивчення механізмів зворотного виклику у &UNIX; (&Linux;), його присвячено налаштуванню &kppp; для з’єднання з сервером зворотного виклику &UNIX;, зокрема заснованому на скриптах серверу зворотного виклику &Linux;

### Вступні зауваження щодо зворотного виклику

Існує декілька причин для використання зворотного виклику. Ось деякі з них:

- Так можна підвищити безпеку вашої локальної мережі

- Так можна зменшити витрати зовнішніх співробітників

- Так можна зменшити витрати за телефонними рахунками, у яких вартість дзвінків обчислюється за бізнес-тарифами

Подумайте про те, що хтось може набрати номер, за яким ви додзвонюєтеся до сервера, а потім підібрати ваш пароль. Навіщо перейматися підтримкою брандмауера для з’єднання з мережею Інтернет, якщо ваш доступ до мережі може бути таким простим?

Програмне забезпечення для здійснення зворотного виклику зазвичай запитує ваш комп’ютер про його назву, а потім вішає слухавку. Після цього буде здійснено дзвінок на ваш комп’ютер, зазвичай, за номером, який зберігається на сервері у базі даних. Після цього клієнтська програма на вашому комп’ютері піднімає слухавку і продовжує процес з’єднання, якщо не трапиться нічого непередбаченого. Після цього сервер запитає ваш комп’ютер про ім’я користувача і пароль для того, щоб переконатися, що ви саме той, за кого себе видавали, коли додзвонилися уперше, або принаймні, ви знаходитеся саме там, де треба. Встановлюється з’єднання у звичайному режимі і запускається pppd.

Тепер виникає питання: як повідомити клієнтській програмі, що слід підняти слухавку після того, як сервер здійснить зворотній виклик? Чи потрібна для цього особлива програма, на зразок mgetty? Відповідь на це питання: ні вам не потрібна особлива клієнтська програма. Загалом кажучи, для з’єднанням зі зворотним викликом можна використовувати будь-яку клієнтську програму, ви навіть можете скористатися для з’єднання звичайною термінальною програмою, на зразок minicom.

Єдине, що потрібно зробити, це повідомити вас модем про те, що слід виконати команду `AutoAnswer`, коли модемом буде виявлено подію `RING`. Це можна зробити за допомогою такої команди модема:

    AT&SO=1

Ця команда наказує модемові підняти слухавку після одного повідомлення `RING` (дзвінок).

Подібно до більшості інших клієнтських програм, &kppp; перевіряє, чи було розірвано з’єднання сервером, а потім припиняє поточний сеанс, якщо було виявлено подію `NO CARRIER` (відсутній носій сигналу). Це є справжньою проблемою під час встановлення зв’язку зі зворотним викликом. Звичайно ж, після того, як сервер зворотних викликів повісить слухавку, буде виявлено подію `NO CARRIER`. Тому на деяких серверах задіяно особливу програму реєстрації. Отже, як вирішують проблему? Ви наказуєте вашому модему весь час показувати стан `CARRIER UP` (це не призводить до проблем, якщо ви наказуєте клієнтові повісити слухавку.) Зробити це можна за допомогою такої команди, відданої модему:

    AT&C0

Якщо ви бажаєте перевірити все це, для початку можна скористатися звичайною термінальною програмою, такою яка minicom, і подзвонити на ваш сервер зворотних викликів, а потім подивитися що станеться.

### Налаштування &kppp;

Отже, тепер, коли ми ознайомилися з теорією у дії, як щодо того, щоб налаштувати обробку подібного типу з’єднання у &kppp;?

Процедура є достатньо очевидною, її викладено нижче.

1. Спочатку накажіть модемові приймати з’єднання і не зупиняти процес встановлення з’єднання, коли сервер зворотних викликів повісить слухавку вперше. Ви можете ввести обидві вказані команди на вкладці Модем налаштувань &kppp;, якщо додасте у поле Рядок додзвону команду `AT&C0S0=1DT`.

   Більше нічого змінювати у налаштуваннях &kppp; не потрібно. Якщо у вас будуть проблеми з ініціалізацією модема і поновленням налаштувань, прочитайте розділ Вирішення проблем, щоб пошукати відповіді на ваші питання.

2. Поміркуємо трохи про поведінку вашого сервера. Згадаємо про те, що операційні системи &UNIX;, &Windows; і Macintosh мають різні погляди на те, яка слід завершувати рядок у текстовому файлі, а отже, і під час процедури реєстрації. Якщо ви з’єднуєте ваш комп’ютер з сервером &Windows;, слід використовувати `CR/LF`, якщо з’єднання відбувається з сервером &UNIX;, — `CR`, а якщо з сервером Macintosh, — `LF`

3. Надалі ми будемо припускати, що ви намагаєтесь з’єднати ваш комп’ютер з пакунком для зворотних викликів &Linux;, який використовує звичайну реєстрацію (без PAP або подібних налаштувань).

   Встановіть режим Автентифікації на вкладці Дзвонити налаштування облікового запису у значення Через скрипт

4. Тепер вам слід створити скрипт реєстрації. Можливість редагування скриптів реєстрації є однією з дуже корисних можливостей &kppp;. Скористатися нею можна на вкладці Скрипт реєстрації діалогового вікна Редагування рахунку.

   У нашому прикладі для користувача `userxyz` слід викликати наведений нижче скрипт. Серверу зворотних викликів вже відома таблиця імен і відповідних номерів телефонів, отже вам слід обрати номер телефону, який використовуватиметься для умовної назви з’єднання, яку слід вказати з міркувань безпеки.

   Для кожного з рядків вам слід обрати критерій зі спадного списку, розташованого у діалоговому вікні ліворуч, і ввести дію у текстове поле, розташоване праворуч. Для додавання нового рядка до скрипту слід натиснути кнопку Додати. Для вставки рядка всередині скрипту ви можете скористатися кнопкою Вставити, кнопка Вилучити допоможе вам вилучити рядок, у якому ви припустилися помилки.

   Остаточний вигляд скрипту має бути приблизно таким (без рядків коментарів, показаних тут після символу #)

       Expect       ogin:           # пам’ятайте, це звичайна термінальна реєстрація
       ID           ""              # kppp надсилає ідентифікатор, який ви вказали
       у головному діалоговому вікні
       Expect       for userxyz:    # показати список доступних номерів телефонів,
       з якого користувач має обрати потрібний
       Send         userxyz-home    # користувач бажає зворотного виклику
       на його домашній номер
       Expect       ogin:           # тепер запущено процедуру зворотного
       виклику, нове з’єднання, а отже нова реєстрація.
       ID
       Expect       assword:        # тепер надсилаємо ваш пароль
       Expect       >            # зачекати на запрошення на введення команди (текст
       запрошення може бути різним)
       Send         start_ppp       # ця команда запускає pppd

   Після очікування на запит реєстрації комп’ютер користувача надішле ідентифікатор користувача і зачекає на список доступних номерів телефонів для вказаного імені користувача. Після цього комп’ютер користувача повідомить сервер про те, який з запропонованих номерів слід використати для зворотного виклику. Для цього &kppp; може відкрити окреме діалогове вікно, ним можна скористатися якщо ви часто змінюєте місця, з яких телефонуєте, наприклад, якщо ви відповідаєте за продажі і часто змінюєте готелі. Після цього сервер очікуватиме на ім’я користувача і пароль для реєстрації, а тим часом повісить слухавку і здійснить дзвінок до користувача. Після надсилання даних для реєстрації &kppp; зачекає на запрошення на введення команди, а потім виконає невеличкий скрипт (тут він має назву `start_ppp`), який запустить pppd на сервері.

   Скрипт `start_ppp` може виглядати так:

       #!/bin/sh
       stty -echo
       exec /usr/sbin/pppd -detach silent modem

   Звичайно ж, налаштування сервера PPP не є предметом поточного документа. Докладні відомості з цього питання можна дістати з сторінок довідника (man) з pppd.

Всі інші налаштування, зокрема налаштування pppd і параметри IP, працюватимуть у звичному режимі, ніякого додаткового програмного забезпечення для зв’язку не знадобиться.

Інструмент зворотного виклику &kppp; і інші програми, зокрема mgetty або будь-яку інша програма faxgetty, можуть працювати на одному послідовному порті. Проблем з додзвоном через те, що &kppp; створює файл блокування, який повідомляє програму getty про те, що інша програма (у нашому випадку, звичайно ж, &kppp;) використовує вже використовує лінію, не буде.

### Вирішення проблем

Існує декілька відомих проблем, пов’язаних з роботою &kppp; у режимі зворотного виклику:

- Оскільки ви увімкнули автовідповідь на модемі, вам слід відновити налаштування модема після розірвання з’єднання. У іншому випадку ваш модем продовжуватиме відповідати на будь-які дзвінки, а це не дуже добре, якщо відповідна лінія є лінією вашого основного телефону.

- &kppp; має невеличкі проблеми з спільним використанням лінії разом з іншою програмою, на зразок mgetty. Якщо програму запущено разом з mgetty на одній телефонній лінії, &kppp; не зможе правильно ініціалізувати модем.

- &kppp; не може надіслати запит певному користувачеві на введення відомостей під час реєстрації за допомогою скрипту. На жаль, якщо використовувати приклад скрипту, наведений вище, &kppp; знову питатиме про ім’я користувача, коли сервер зворотного виклику запитає про нього. Ви можете позбутися від цих проблем, якщо безпосередньо вкажете ваш ідентифікатор користувача у скрипті реєстрації (це не дуже універсальний спосіб, але він працює).

## Зворотний виклик RAS &Windows; NT

У &Windows; NT використовується зовсім інший підхід, який значно відрізняється від описаного вище. Для NT потрібне розширення самого протоколу PPP, яке називається CBCP (Call Back Control Protocol — протокол керування зворотним викликом). pppd підтримує такий протокол, але вам слід перезібрати pppd. Якщо хтось має досвід успішного встановлення зв’язку з сервером зворотного виклику NT, будь ласка, повідомте про нього авторові цього підручника.