# &kppp; seadistamine tagasihelistamiseks

Selle peatüki allikaks on Martin Häfneri mh@ap-dec717c.physik.uni-karlsruhe.de materjal

## &UNIX; või &Linux; tagasihelistamisserver

See osa tutvustab sissejuhatavalt &UNIX; (&Linux;) tagasihelistamist ning seda, kuidas seadistada &kppp; ühenduma &UNIX; tagasihelistamisserveriga, eriti aga skriptil baseeruva &Linux; tagasihelistamisserveriga

### Sissejuhatus tagasihelistamisse

Tagasihelistamise kasutamiseks on mitu põhjust. Mõned neist on järgmised:

- Kohaliku võrgu turvalisuse suurendamine

- Väliste kaastöötajate kulude kahandamine

- Telefoniarvete kontrollimine, kui kõnesid hinnatakse ärikuludena

Mõtle: keegi helistab sinu numbrile serveril ja murrab sinu parooli lahti. Jah, milleks üldse oma internetiühendusel tulemüüri hoida, kui ligipääs võrgule nii lihtne on?

Tagasihelistamistarkvara päris tavaliselt sinu nime ja katkestab siis ühenduse. Seejärel helistatakse sulle tagasi, tavaliselt numbril, mis on salvestatud serveri andmebaasi. Klient võtab kõne vastu ja jätkab rahulikult sissehelistamisteenuse kasutamist. Server pärib nüüd kasutajanime ja parooli, teades, et tegemist on sellega, kes sa ütlesid end esimese kõne ajal olevat - või vähemalt, et see keegi asub selles kohas, kus ta ütles end esimese kõne ajal asuvat. Rajatakse normaalne ühendus ja käivitatakse pppd.

Tekib suur küsimus: kuidas panna klient telefoni vastu võtma, kui server tagasi helistab? Kas selleks on vaja erilist rakendust, näiteks mgetty? Vastus: ei, mingit erilist klientrakendust ei ole vaja. Üldiselt võib tagasihelistamisühenduseks kasutada enam-vähem iga klienti, isegi täiesti tavalist terminali, näiteks minicom.

Piisab vaid sellest, et anda modemile käsk `AutoAnswer`, mis vastab kõnele, kui modem saab signaali `RING`. Seda saab teha järgmise modemikäsuga:

    AT&SO=1

See annab modemile korralduse kõne vastu võtta pärast ühekordset signaali `RING`.

Sarnaselt paljudele klientrakendustele kontrollib &kppp;, kas server on ühenduse sulgenud, ning peatab aktiivse seansi, kui tuvastab signaali `NO CARRIER`. Siin peitubki tagasihelistamise ainus tõeline probleem. Signaal `NO CARRIER` tuvastatakse mõistagi hetkel, mil tagasihelistamisserver kõne katkestab. Seepärast kasutavad mõned serverid spetsiaalset sisselogimisrakendust. Kuidas probleem lahendada? Modemile tuleb anda korraldus tunnustada kogu aeg signaali `CARRIER UP` (mis ei tekita mingeid probleeme, kui annad kliendile korralduse kõne katkestada). Seda saab teha järgmise käsuga:

    AT&C0

Kui soovid seda testida, kasuta esmalt tavalist terminali, näiteks minicom, ja võta kõne oma tagasihelistamisserverile, et näha, mis juhtub.

### &kppp; seadistamine

Teooria on nüüd läbi, aga kuidas panna &kppp; sellist ühendust tunnistama ja käsitlema?

See on õigupoolest üsna lihtne.

1. Kõigepealt anna modemile korraldus ühendusi vastu võtta ning mitte peatada läbirääkimisi, kui tagasihelistamisserver kõne esimesel korral katkestab. Mõlemat võimalust saab määrata &kppp; seadistustedialoogi kaardil Modem, kui lisada võimalusele Numbrivalimise käsustring string `AT&C0S0=1DT`

   Midagi muud &kppp; seadistustes muuta ei tule. Kui modemi initsialiseerimisel ja lähtestamisel esineb probleeme, uuri lähemalt osa Probleemid.

2. Mõtle nüüd korraks serveri peale. Arvesta, et &UNIX;, &Windows; ja Macintoshi operatsioonisüsteemid lõpetavad erinevalt rida tekstifailis ning seetõttu ka sisselogimisprotseduuris. Kui võtab ühendust &Windows; serveriga, kasuta `CR/LF`, &UNIX; serveri korral `CR` ja Macintoshi serveri puhul `LF`

3. Käesolevate juhiste juures eeldame, et kasutad helistamiseks &Linux; tagasihelistamispaketti tavalise sisselogimisega (mitte PAP või midagi sellist).

   Määra konto seadistustedialoogis kaardil Helistamine autentimise võimaluseks Skriptil baseeruv

4. Nüüd tuleb luua sisselogimisskript. Sisselogimisskriptide loomine ja redigeerimine on üks &kppp; vaimustavaid võimalusi. Selle leiab dialoogi Konto redigeerimine kaardil Sisselogimisskript.

   Antud näites tuleb kasutajal `kasutajaxyz` helistamisel pruukida järgnevat skripti. Tagasihelistamisserveril on juba olemas nimed ja vastavad telefoninumbrid, nii et turvalisuse huvides vali telefoninumber aliasega.

   Iga rea puhul vali dialoogis vasakul paiknevast hüpikkastist vajalik kriteerium ning kirjuta tegevus sellest paremal asuvasse tekstikasti. Klõpsuga nupul Lisa saad iga rea skripti lisada. Keskel asuva nupuga Lisa saab rea lisada suvalisse kohta skriptis (vaikimisi lisatakse see lõppu) ning nupuga Eemalda rea kustutada, kui juhtusid vea tegema.

   Kogu skript peaks välja nägema umbes nii (küll ilma kommentaarideta, mis siin algavad märgiga #)

       Expect       ogin:           # pea meeles, et me kasutame tavalist terminalis sisselogimist
       ID           ""              # kppp saadab peadialoogis määratud
       kasutajanime
       Expect       for kasutajaxyz:    # näidatakse saadaolevate numbrite nimekirja,
       kust kasutaja peaks ühe valima
       Send         kasutajaxyz-home    # kasutaja soovib tagasihelistamist
       oma kodusel numbril
       Expect       ogin:           # Tagasihelistamisprotsess on käimas,
       uus ühendus ja sestap ka uus sisselogimine.
       ID
       Expect       assword:        # Nüüd saada oma parool
       Expect       >            # Oota käsuviipa (selle
       viiba vorm võib erineda)
       Send         start_ppp       # see käsk käivitab pppd

   Pärast sisselogimissoovi ootamist saadab kasutaja oma kasutajanime ja ootab sellele kasutajale kättesaadavate telefoninumbrite nimekirja. Seejärel ütleb ta serverile, millisel pakutavatest numbritest tuleks tagasi helistada. &kppp; võib selleks dialoogi avada, kui sinu asukoht sageli muutub, ⪚ kui oled müügiagent ja elad peamiselt hotellides. Seejärel ootab server autentimiseks kasutajanime ja parooli, kuid enne seda lõpetab kõne ja helistab tagasi. Nüüd saadetakse autentimisinfo, &kppp; ootab käsurea viipa ning käivitab siis väikese skripti (antud näites nimega `start_ppp`), mis käivitab serveril pppd.

   `start_ppp` skript näeb välja umbes selline:

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

   Mõistagi ei ole selles käsiraamatus ruumi ega võimalust kirjeldada PPP serveri seadistamist. Täpsemat infot leiab soovi korral pppd manuaalilehekülgedelt.

Kõik muud asjad, näiteks pppd või IP seadistused, töötavad nagu tavaliselt ning kõne jaoks ei ole vaja mingit erilist tarkvara.

&kppp; tagasihelistamisrakendus ja muud rakendused, näiteks mgetty või mingi muu faxgetty võivad töötada ühel ja samal jadapordil. Sissehelistamisel probleeme ei teki, sest &kppp; loob lukustusfaili, mis ütleb getty-rakendusele, et liini kasutab parajasti mingi muu rakendus (antud juhul siis mõistagi &kppp;).

### Probleemid

&kppp; tagasihelistamisrežiimil on siiski ka mõningaid teadaolevaid probleeme:

- Modemit automaatseks vastamiseks initsialiseerides tuleb modem lähtestada pärast ühenduse sulgemist. Vastasel juhul jätkab modem liini hõivamist, mis ei ole sugugi hea mõte, kui see liin on sinu ainus ja/või peamine telefoniliin.

- &kppp;-l võib olla mõningaid pisiprobleeme liini jagamisel teiste rakendustega, näiteks mgetty. Kui mgetty töötab samal modemiliinil, ei suuda &kppp; modemit korrektselt initsialiseerida.

- &kppp; ei suuda pakkuda viipa teatud kasutaja sisendile skriptil baseeruva sisselogimise ajal. Kui kasutad ülaltoodud näidisskripti, küsib &kppp; õnnetuseks kasutajanime ka teist korda, kui tagasihelistamisserver seda nõuab. Sellest hädast võib lahti saada oma kasutajanime otse sisselogimisskripti kirjutades (see ei ole küll eriti kena, aga vähemalt toimib...)

## &Windows; NT RAS tagasihelistamine

&Windows; NT kasutab täiesti teistsugust lähenemist kui äsjakirjeldatu. NT nõuab lausa PPP protokolli laienduse kasutamist, mis kanab nime CBCP (Call Back Control Protocol). pppd toetab seda protokolli, kuid selleks tuleb pppd uuesti kompileerida. Kui kellelgi on õnnestunud edukalt võtta ühendust NT tagasihelistamisserveriga, võiks sellest ka mulle teada anda.