# Konfiguracja połączeń zwrotnych w &kppp;

Rozdział bazuje na materiale udostępnionym przez Martin'a Häfner'a, mh@ap-dec717c.physik.uni-karlsruhe.de

## Serwer połączeń zwrotnych w systemach &UNIX; lub &Linux;

Ten rozdział stanowi wprowadzenie do technologii połączeń zwrotnych w systemach &UNIX; (&Linux;) oraz ich konfiguracji w programie &kppp;. Szczególną uwagę zwrócono na konfigurację połączenia do opartego na skryptach serwera połączeń zwrotnych w systemie &Linux; callback server

### Wprowadzenie do połączeń zwrotnych

Wykorzystanie technologii połączeń zwrotnych może być przydatne z wielu powodów, np.:

- dla podniesienie poziomu bezpieczeństwa sieci

- w celu zmniejszenie kosztów połączeń dla współpracowników

- do kontroli kosztów telefonów, gdy są one kosztami uzyskania przychodów w firmie

Wyobraźmy sobie sytuację, w której ktoś dzwoni na numer serwera dostępowego sieci i łamie hasło dostępu. Po co instalować i utrzymywać sieciowe zapory, skoro dostęp do sieci jest taki prosty?

Oprogramowanie połączeń zwrotnych, najpierw prosi o podanie nazwy użytkownika, a następnie rozłącza się. Następnie serwer dzwoni na numer, zdefiniowany przez administratora i przechowywany na serwerze w bazie danych. Komputer inicjujący połączenie, odbiera telefon i kontynuuje proces łączenia dalej tak jakby nic się nie stało. Serwer wymaga teraz podania nazwy użytkownika i hasła, wiedząc że nikt nie próbuje podszyć się pod autoryzowanego użytkownika. Następuje ostateczne nawiązanie połączenia i uruchomienie aplikacji pppd.

Należy odpowiedzieć sobie teraz na pytanie, jak zmusić komputer użytkownika inicjującego połączenie, do odebrania telefonu gdy serwer oddzwoni. Czy niezbędny jest specjalny program, taki jak np.mgetty? Odpowiedź brzmi nie, nie ma potrzeby uruchamiania specjalnych programów, właściwie każdy program typu terminal np.minicom może być wykorzystany w tej sytuacji.

Niezbędne jest tylko wysłanie do modemu polecenia włączającej tryb `Automatycznej odpowiedzi`, dzięki czemu modem "podniesie słuchawkę" gdy odbierze sygnał: `RING`. Polecenie sterujące dla modemu wygląda następująco:

    AT&SO=1

Polecenie nakazuje modemowi podniesienie słuchawki po wykryciu sygnału dzwonienia `RING`.

Jak wiele innych programów typu klient, &kppp; sprawdza czy połączenie zostało zamknięte przez serwer, a następnie przerywa sesję połączeniową po wykryciu sygnału `NO CARRIER` z modemu. Stanowi to pewne utrudnienie przy konfiguracji połączeń zwrotnych. Sygnał `NO CARRIER` będzie odebrany w momencie gdy serwer się rozłączy i trudno oczekiwać iż modem będzie pokazywać stan `CARRIER UP` przez cały czas. Niektóre rozwiązania połączeń zwrotnych wymagają specjalnego oprogramowania po stronie klienta aby uzyskać zamierzone działanie, jednak możliwe jest takie skonfigurowanie modemu aby to osiągnąć. Można to zrobić za pomocą następującego polecenia::

    AT&C0

W celu przetestowania działania tego polecenia, można wykorzystać program minicom, zadzwonić na numer serwera połączeń zwrotnych i zobaczyć co się stanie.

### Konfiguracja programu &kppp;

Po przedstawieniu teoretycznych założeń działania połączeń zwrotnych, należy omówić szczegóły konfiguracji programu &kppp; do obsługi połączenia zwrotnego.

Procedura jest całkiem prosta, i wygląda następująco:

1. Najpierw należy nakazać modemowi, aby akceptował połączenia przychodzące, oraz aby nie przerywał procedury negocjacji protokołów w chwili gdy serwer połączeń zwrotnych rozłączy się po raz pierwszy. Możesz ustawić obie opcje w karcie Modem okna konfiguracyjnego &kppp;, poprzez wpisanie `AT&C0S0=1DT` w polu: Polecenie dzwonienia.

   Nie ma potrzeby dokonywania innych zmian w konfiguracji programu &kppp;. Jeżeli jednak pojawią się problemy we współpracy z modemem, to należy poszukać dodatkowych informacji w rodziale Rozwiązywanie problemów niniejszej dokumentacji.

2. Konfiguracja połączenia zwrotnego po stronie serwera jest w dużym stopniu uzależniona od wykorzystywanego systemu operacyjnego. Systemy operacyjne &UNIX;, &Windows; orazMacintosh wykorzystują różne kody znaków końca linii, i podczas procedury logowania należy się do tego dostosować. Jeżeli następuje połączenie do serwera systemu &Windows; należy używać znaków: `CR/LF`, jeżeli jest to serwer &UNIX; to koniec linii określa się za pomocą `CR`, natomiast w przypadku serwera Macintosh jest to znak `LF`

3. W niniejszej instrukcji przyjęto założenie, że połączenie następuje z serwerem zwrotnym opartym o system &Linux;, używającym standardowego polecenia login (tzn. nie jest to specjalny protokół autoryzacji typu PAP itp.).

   W polu wyboru Uwierzytelnianie w karcie Dzwonienie okna konfiguracji nowego połączenia, należy wybrać opcję Oparte na skrypcie

4. Następnie należy utworzyć skrypt logowania. Narzędzie do edycji skryptów, jest jedną z najciekawszych funkcji programu &kppp; Narzędzie jest dostępne w oknie dialogowym Ustawienia połączenia w karcie Skrypt.

   W przedstawionym przykładzie, użytkownik `userxyz` powinien mieć ustawiony następujący skrypt logowania. Ponieważ serwer połączeń zwrotnych ma skonfigurowaną tablicę nazw użytkowników i odpowiadające im numery telefonów, należy skonfigurować tu użytkownika z nazwą alternatywną (inną niż nazwa użytkownika na serwerze), dla celów bezpieczeństwa.

   Dla każdej linii skryptu, należy wybrać kryteria z listy wyboru po lewej stronie okna dialogowego, i wpisać parametry dotyczące wybranej akcji po prawej stronie listy wyboru. Naciśnięcie przycisku Dodaj spowoduje dodanie odpowiedniej linii do skryptu. Można wstawić linię w środku edytowanego skryptu za pomocą przycisku Wstaw, zaś usunięcie linii odbywa się za pomocą przycisku Usuń.

   Kompletny skrypt połączeniowy powinien wyglądać następująco (znak # oznacza komentarz):

       Expect       ogin:           # wykorzystywany jest standardowy terminal
       ID           ""              # program kppp wysyła nazwę użytkownika ustawioną
        w głównym oknie logowania
       Expect       for userxyz:    # lista dostępnych numerów zostaje
       wyświetlona, użytkownik powinien jeden z nich wybrać
       Send         userxyz-home    # użytkownik prosi o połączenie zwrotne
       na numer telefonu domowego
       Expect       ogin:           # proces połączenia zwrotnego jest kontynuowany
       serwer nawiązuje nowe połączenie, dlatego też pojawia się pytanie o login.
       Send          ID
       Expect       assword:        # następnie należy wysłać hasło
       Send        password
       Expect       >            # oczekiwanie na pojawienie się znaku zachęty
       (może on różnie wyglądać)
       Send         start_ppp       # uruchomienie demona pppd na serwerze

   Po otrzymaniu żądania zalogowania, użytkownik wysyła swoją nazwę i oczekuje na listę dostępnych dla niego numerów telefonicznych. Następnie przesyła do serwera, informację o wybranym numerze, dla celów nawiązania połączenia zwrotnego. W programie &kppp; może pojawiać się okno dialogowe z informacją o oferowanych przez serwer numerach, co może być przydatne gdy użytkownik często zmienia swoją lokalizację, np. jest przedstawicielem handlowym i dzwoni z różnych hoteli. Po dokonaniu wyboru, serwer rozłącza się i nawiązuje połączenie dzwoniąc na wybrany przez użytkownika numer, a następnie ponownie prosi o podanie nazwy użytkownika i hasła. Po przesłaniu informacji o autoryzacji, &kppp; oczekuje na pojawienie się znaku zachęty, a następnie uruchamia krótki skrypt (tutaj: `start_ppp`), który uruchamia demona pppd na serwerze.

   Skrypt `start_ppp` może wyglądać następująco:

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

   Uruchomienie i konfiguracja serwera PPP wykracza poza zakres niniejszej instrukcji. Więcej informacji na ten temat dostępne jest w dokumentacji programu pppd.

Pozostałe zagadnienia konfiguracyjne tzn. ustawienie pppd konfiguracja adresu IP są ustawiane standardowo, nie ma potrzeby uruchamiania żadnych dodatkowych programów.

Program &kppp; jak też i pozostałe programy takie jak mgetty lub faxgetty, mogą wykorzystywać ten sam port szeregowy. Nie stanowi to problemu, gdyż program &kppp; tworzy specjalny plik zabezpieczający, który informuje inne aplikacje iż &kppp; zajmuje linię w tym momencie. Dzięki temu nie ma konfliktów w dostępnie do portu szeregowego, nie zdarzy się sytuacja, aby jednocześnie korzystała z niego więcej niż jedna aplikacja.

### Rozwiązywanie problemów

Istnieje kilka znanych problemów w działaniu programu &kppp; w trybie połączeń zwrotnych.

- Po przestawieniu trybu pracy modemu na automatyczną odpowiedź, konieczne może być wyzerowanie modemu po zakończeniu połączenia. W innym przypadku, modem będzie kontynuował "podnoszenie słuchawki", co nie jest pożądane w przypadku gdy jest to też linia telefoniczna.

- Program &kppp; może mieć niewielkie problemy podczas jednoczesnego wykorzystania linii przez inne programu jak np. mgetty. Jeżeli mgetty działa i wykorzystuje linię modemową, &kppp; nie będzie mógł poprawnie zainicjować modemu.

- Program &kppp; nie jest w stanie odpytywać użytkownika w trakcie wykonywania skryptu logowania. Powoduje to niestety, iż tak jak w podanym wyżej skrypcie przykładowym, &kppp; pyta o nazwę użytkownika dwa razy, drugi raz po oddzwonieniu przez serwer połączeń zwrotnych. Można tego uniknąć poprzez zakodowanie nazwy użytkownika na stałe w skrypcie logowania (nie jest to rozwiązanie elastyczne, ale działa).

## Połączenia zwrotne w module RAS systemu &Windows; NT

System &Windows; stosuje całkowicie odmienne podejście w zakresie połączeń zwrotnych. Wymagane jest rozszerzenie protokołu PPP nazywaneCBCP (Call Back Control Protocol - Protokół Połączeń Zwrotnych). Program demona pppd oferuje wsparcie dla tego protokołu, lecz konieczne w tym celu może być ponowne skompilowanie aplikacji pppd. Twórcy programu proszą o wszelkie informacje od osób, które odniosły sukces przy łączeniu się do serwera połączeń zwrotnych w systemie NT.