# Callback-miniHOWTO

## Paweł Skonecki, e-mail: stona@fizyka.umcs.lublin.pl
v1.0, Marzec 2000

Dokument ten opisuje, jak za pomocą Linuxa ustawić połączenie zwrotne przy pomocy modemu. Program callbeck opracował Gert Doering, <gert@greenie.muc.de>. Chciałbym podziękować Annie za wyrozumiałość dla pingwinów.

## 1. Wstęp.

## 1.1 Opinie.

Czekam na wszystkie opinie, czy to dobre, czy złe, na temat zawartości tego dokumentu. Starałem się, aby informacje w nim umieszczone były jak najbardziej pewne i dokładne. Daj mi znać gdy znajdziesz jakieś błędy.

Dziękujemy ludziom którzy przysłali by poprawki lub sugestie. Ich wkład uczynił ten dokument o wiele lepszym, niż gdybym tworzył go sam. Wysyłaj komentarze, sugestie i poprawki na adres email autora podany powyżej. Nie mam nic przeciwko odpowiadaniu na pytania, jednak radzę najpierw przeczytać dokument w całości.

## 1.2 Rozpowszechnianie.

Copyright ? 1999 by Paweł Skonecki. Ten dokument może zostać rozpowszechniany na warunkach ustalonych przez Licencję Linux Documentation Project. Skontaktuj się z autorem, jeśli nie jesteś w stanie otrzymać licencji.

Ta dokumentacja jest darmowa. Jest rozpowszechniana z nadzieją, że okaże się użyteczna, jednak bez żadnej gwarancji.

## 2. A może sieć w domu ...

Większość z nas używa sieci korporacyjnych lub uczelnianych w swoim miejscu pracy. Pojawia się jednak potrzeba skorzystania z sieci w domu lub w innym miejscu. Może przecież okazać się iż pracownicy będący w terenie muszą mieć dostęp do danych znajdujących się w Internecie lub też w sieci firmowej. Możemy mieć też do czynienia z sytuacją kiedy firmie będzie opłacać się zapłacić pracownikom za połączenia telefoniczne aby pracowali w domach. Sądzę że optymalnym rozwiązaniem jest zainstalowanie na serwerze z Linuxem i oprogramowania typu callback.

Callback to nic innego jak oddzwanianie pod wskazany numer na koszt firmy. Spróbuję przedstawić jego działanie. Osoba posiadająca odpowiednie uprawnienia dzwoni pod numer modemu będącego w serwerze z Linuxem, tam weryfikuje się po raz pierwszy. Wtedy po stronie użytkownika następuje "zawieszenie modemu" na stan oczekiwania. W tym czasie serwer dzwoni po wskazany numer. Użytkownik weryfikuje się powtórnie. Następuje zestawienie połączenia a impulsy biją po stronie serwera (czyli w firmie), osoba do której oddzwania serwer płaci jedynie za zainicjowanie połączenia.

Podwójna weryfikacja oraz dodatkowe parametry w programie callback uniemożliwiaj by osoby nie powołane wtargnęły na nasz rachunek. Można także ograniczyć osobom korzystającym z tej usługi do dostęp do sieci wewnętrznej lub też całego Internetu. Callback jest elastyczny i pozwala na wiele opcji w stosunku do osób go używających.

W poniższym mini-HOWTO postaram się przedstawić konfigurację serwera callback na Linuxe wytłumaczę jak dostosować swoją maszynę do odbierania połączeń.

## 3. Pierwsze kroki z modemem.

Aby wszystko zadziałało jak należy potrzebujemy niezłego modemu do naszego serwera z Linuxem. W tej mierze istniej ,a różne preferencje administratorów i nie można wskazać tutaj żadnej marki jako faworyta. Warto jednak pamiętać przyzakupie o pewnych zasadach jakimi należy się kierować.

- Nie powinniśmy kupować pod żadnym pozorem modemów typu WinModem ponieważ nie zadziałają one z Linuxem.
- Modem zewnętrzny jest szybszy od urządzenia wewnętrznego ponieważ w ograniczonym zakresie korzysta z zasobów komputera. Ich wadą natomiast jest to iż zajmują one com-a co może potem utrudniać podłączanie następnych urządzeń korzystających z com-ów.
- Warto zainwestować modem w standardzie v.90 ponieważ daje on możliwość szybszej pracy chociaż nie zawsze się to udaje to udaje na słabych łączach.
- Jeżeli już modem wewnętrzny to lepiej z szyna ISA jak PCI ponieważ szkoda złącza PCI na modem
- Nie zaleca się także modemów typu Plug&Play, jeżeli już jest taki należy wyłączyć opcję Plug&Play i nastawić w nim wzorki na następnego wolnego coma.

Jeżeli mamy już modem który będziemy wykorzystywać do komunikacji pomiędzy serwerem a osobami do niego dzwoniącymi. Musimy go zainstalować go w systemie. Aby to zrobić musimy sprawdzić na jaki com-ie jest nastawiony modem i czy nie pokrywa się z już wykorzystywanym. Jeżeli tak jest to trzeba przestawić modem na kolejny wolny com.

Instalacja jest prosta i nie powinna nastręczać problemów. Wystarczy że będziemy się trzymać zasad jakie istniej ,a w systemie.

Aby Linux "zobaczył" modem należy poprowadzić połączenie symboliczne z com-a do urządzenia /dev/modem. Przykładowo jeżeli mamy modem na com 2 piszemy:

    ln -s /dev/cua1 /dev/modem

sprawdzamy teraz komendą `ls -l` czy wszystko jest w porządku:

    lrwxrwxrwx 1 root root 4 Dec 28 15:28 modem -> cua1

Jeżeli wynik jest jak powyżej to oznacza że tak właśnie się stało. Jeżeli modem znajduje się na innym com-ie winniśmy zastosować się do poniższych zasad i poprowadzić odpowiednie połączenie symboliczne.

- /dev/cua0 to com1
- /dev/cua1 to com2
- /dev/cua2 to com3
- /dev/cua3 to com4

Sprawdzamy teraz czy wszystko chodzi przy pomocy minicoma, który powinien znajdować się w większości dystrybucji. Przy jego pomocy dzwonimy pod jakikolwiek numer gdzie znajduje się modem. Teraz czas na dzwonienie do nas ....

## 4. Zadzwoń do Linuxa.

Pierwszym krokiem w udostępnieniu usługi callback na Linuxe jest ustawienie odpowiednich parametrów w jądrze systemu. W tym celu musimy sprawdzić czy nasze jądro systemu obsługuje protokół ppp. Jeżeli tak nie jest to powinno się w kompilować go w jądro systemu albo pozostawić jako moduł do ładowania. Nie jest to miejsce na przedstawiane tego problemu. Dlatego też proszę zapoznać się z Kernel-HOWTO.

Jeżeli już mamy odpowiednio przygotowane jądro czas zabrać się za konfigurację oprogramowania. W tym celu winniśmy zainstalować na naszym serwerze pakiet o nazwie mgetty-sendfax, ponieważ on zawiera w sobie program do oddzwaniania. Nie jest to jego jedyna możliwość, może także wysyłać fax-y oraz pracować jako access-server.

Tu warto wspomnieć o pracy callback-u. Kiedy inicjujemy połączenie z serwerem następuje pierwotna weryfikacja użytkownika. Poproszony jest on o wpisanie hasła a kiedy to uczyni następuje "zawieszenie" modemu po stronie dzwoniącego a serwer oddzwania pod wskazany numer związany z użytkownikiem. Jeżeli nastąpi połączenie następuje drugi monit o username oraz hasło. Jeżeliwszystko pójdzie dobrze to połączenie zostaje zestawione pomiędzy komputerem lokalnym i zdalnym (user uruchomi protokół ppp po stronie serwera).

Tak więc cała operacja składa się z dwóch elementów. Mamy więc do czynienia z dwoma rodzajami użytkowników: pierwszy to użytkownik do callbacku a drugi to ten kóry ma uruchomić protokół ppp po stronie serwera.

Najpierw zajmijmy się drugim z nich. Zakładamy konto o dowolnym username testowo niech to będzie user pppuser.

    pppuser:klkIOM89mn65H:230:PPP Dialin:/home/pppuser:/etc/ppp/ppplogin

Następnie zmieniamy mu hasło. Jak można zauważyć nie ma on normalnego shall-a do logowania ale pliczek w /etc/ppp/ppplogin. Musimy go własnoręcznie przygotować.

Przechodzimy do tego katalogu i przy pomocy jakiegokolwiek edytora tworzymy plik i wprowadzamy odpowiednie parametry np.: vi ppplogin. Wewnątrz niego wpisujemy.

    #!/bin/sh
    exec /usr/sbin/pppd -detach 192.168.1.1:192.168.1.2

gdzie adres 192.168.1.1 to adres serwera w którym jest modem a adres 192.168.1.2 to adres jaki przypisaliśmy naszemu modemowi. Pamiętajmy nadać temu plikowi prawo wykonywania.

Ponieważ ppp domyślnie sprawdza co znajduje się w pliku /etc/ppp/options musimy go stworzyć aby wpisać odpowiednie wartości.

Podobnie jak w powyższym przypadku tworzymy plik przy pomocy dowolnego edytora i wpisujemy odpowiednio:

    netmask 255.255.255.0
    proxyarp
    lock
    crtscts
    modem

Najważniejsza z powyższych opcji jest proxyarp, umożliwia on wyjście na świat poprzez modem w serwerze. Jej brak może być korzystny jeżeli nie chcemy aby nasi pracownicy używali Internetu a jedynie sieci lokalnej. Pozostałe z nich oprócz netmask (tego nie trzeba tłumaczyć), dotyczą kontroli modemu.

Teraz przechodzimy do konfiguracji modemu w systemie w taki sposób aby zaraz po jego starcie był gotowy do pracy czyli odbierania połączeń.

Uruchamiamy dowolny edytor a w nim plik /etc/inittab gdzie dopisujemy poniższą linę.

    s1:2345:respawn:/sbin/mgetty ttyS1 -D /dev/ttyS1 vt100

jest ona prawidłowa dla modemów które znajdują się na com2, jeżeli jest inaczej poprawiamy ją. Np dla com-a 1 wyglądać powinna

    s0:2345:respawn:/sbin/mgetty ttyS0 -D /dev/ttyS0 vt100

Wykonujemy teraz polecenie `init q` i jeżeli nie mamy informacji o błędach w logach sytemu przechodzimy do następnego etapu.

Wracamy do katalogu /etc/ppp gdzie tworzymy plik options.ttyS1 (jeżeli mamy modem na com 1 options.ttyS0) a w nim wpisujemy adesy IP.

    IP_localne:IP_dla_modemu_zdalnego

dla naszej sieci będzie to 192.168.1.1:192.168.1.2

Mamy już wiele - przed zadzwonieniem do naszego systemu, sprawdzamy co znajduje się w pliku /etc/mgetty+sendfax/login.config

Najważniejsza jest linia podobna do tej:

    /AutoPPP/ - a_ppp /usr/sbin/pppd auth -chap +pap login detach kdebug 7 debug

Pozostałe możemy zaznaczyć znakiem #. Ważną sprawą jest także nadanie odpowiedniego suida demonowi ppp, tak aby użytkownik pppuser mógł go uruchomić oraz podnieść na nim interfejs.

    chmod u+s /usr/sbin/pppd

czego efektem będzie

    -rwsr-xr-x 1 root root 106892 Jan 11 1999 /usr/sbin/pppd

Od tego momentu użytkownik pppuser będzie mógł uruchomić demona ppp. Warto dopisać zmianę preferencji pppd w cronie, u mnie po restarcie systemu dochodziło do samoczynnej zmiany preferencji. Aby zweryfikować nasze dokonania dzwonimy pod numer naszego serwera. Jeżeli robimy to z Windows-o'w wywołujemy okno terminala a jeżeli wykorzystujemy do tego Linuxa to poprawiamy skrypty z których korzystamy dzwoniąc do naszego provaidera. Logujemy się do systemu jako pppuser z haslem mu nadanym. Mam nadzieję że wszystko jest w porządku.

## 5. Teraz Linux dzwoni do mnie ...

Możemy dodzwaniać się już do naszego Linuxa. Pora teraz na to aby on do nas zadzwonił. Nie wymaga to specjalnego już wysiłku wystarczy wyedytować jeden plik. Zanim jednak to zrobimy musimy zebrać numery telefonów od osób które maj ,a korzystać z tej usługi. Sprawdzamy teraz czy w katalogu /etc/mgetty+sendfax znajduje się plik o nazwie callback.config. Jeżeli tam się znajduje to pozostawiamy go w spokoju. Można wypełnić go treścią ale nie ma najmniejszej potrzeby ponieważ jego pusta zawartość nie ma wpływu na funkcjonowanie callbacku. Ważne tylko aby tam był.

Teraz czas na wpisanie numerów telefonów jakie wcześniej zebraliśmy. Będziemy kreować pseudo użytkowników powiązanych z numerami ich telefonów.

W tym celu wpisujemy do pliku /etc/mgetty+sendfax/login.conf linijkę tekstu podobną do poniższej

    call - - /usr/sbin/callback - S 123456

gdzie call to pseudo użytkownik potrzebny do zainicjowania połączenia zwrotnego, a linia /etc/mgetty+sendfax/ uruchamia program który oddzwania pod wskazany numer (w tym przypadku jest to 123456). Podobnie czynimy z innymi użytkownikami przypisując pseudo użytkownikom poszczególne numery telefonów. Postaram się teraz wytłumaczyć jak całą operacja wygląda w praktyce. Gdy dzwonimy do naszego serwera ten prosi nas o weryfikację. Wtedy to logujemy się jako pseudo użytkownik, w tym przypadku call. Skrypt w naszym komputerze zawesza modem w oczekiwaniu a połączenie zostaje przerwane. Program callbeck zaczyna działać i oddzwania do nas. Weryfikujemy się powtórnie jako pppuser zestawiamy połączenie oraz postawienie interfejsu ppp na serwerze. I to już wszystko.

Czeka nas teraz skonfigurowanie stacji roboczych pracujących z naszym serwerem.

W przypadku Windows operacja jest dość prosta. Instalujemy Dial-up dla naszego numeru dostępowego a następnie we właściwościach modemu znajdujemy zakładkę "Właściwości" --> Rozszerzone ---> Ekstra gdzie wpisujemy

    &c0 s0=1

Zamykamy okienko i dzwonimy. Logujemy się według opisu powyżej. Gdy chcemy zastosować Linux-a, to musimy odwołać się do skryptów. Trudno jest podać jakiś jeden dobry skrypt dla naszego Linuxa. Ważne jest to aby mieć dobrze skonfigurowane ppp w systemie (sprawdź to dzwoniąc jako pppuser najpierw przez skrypty).

Poniżej skrypty napisane przez A. Góździa. Najlepiej jak wsadzisz wszystko do katalogu /etc/ppp i tam będziesz odpalał swoje skrypty. Nie musisz tego koniecznie robić tego w tym miejscu jest to tylko moja sugestia. Dokładnie o pisaniu skryptów pod Linuxem możesz poczytać w PPP-HOWTO.

Najpierw jednak plik konfiguracyjny dla demona ppp (przykład dla modemu na comie 2).

    /etc/options
    lock
    defaultroute
    noipdefault
    modem
    /dev/cua1
    33600
    crtscts
    debug
    passive
    asyncmap 0

I właściwe skrypty:

- Pierwszy o nazwie ppp-call

      #!/bin/bash
      teksta="Polaczenie nieudane"
      tekstb="Chyba bedziesz polaczony"
      # /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

- Drugi nazwany 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
      'OK-+++\c-OK' 'AT&C0S0=1'
      TIMEOUT 75
      OK ATDT5376443
      CONNECT ''
      ogin:-ogin: ppp_pseudouser
      '\nNO CARRIER\r' ''
      TIMEOUT 180
      '\nRING\r' AT&C1A
      CONNECT ''
      TIMEOUT 20
      ogin:-ogin: pppuser
      sword:-sword ppp

Powyższe dwa skrypty powinny wystarczyć dla prawidłowego funkcjonowania całości. Pozostaje teraz odpalić ppp-call :)

## 6. Podsumowanie.

Jak widać konfiguracja oddzwaniania nie jest skomplikowana i polega głównie na prawidłowym zestawieniu serwera ppp na Linuxie. Nie znam lepszej drogi na zrobienie acces-servera. Przedstawiona konfiguracja jest wynikiem prób i błędów, można zrobić ją całkowicie inaczej. Dlatego proponuję przejrzenie wszelkiej dokumentacji do tego zagadnienia to jest man pppd, NET3-HOWTO oraz PPP-HOWTO.

Callback może być przyjemną alternatywą w pracy zdalnej.

Inne moje dokumenty znajdziesz ftp://ftp.fizyka.umcs.lublin.pl/pub/priv/stona

Paweł Skonecki

e-mail: stona@fizyka.umcs.lublin.pl