# Anpassa &kppp; för återuppringning

Det här kapitlet är baserat på material som tillhandahållits av Martin Häfner, mh@ap-dec717c.physik.uni-karlsruhe.de.

## &UNIX; eller &Linux; återuppringningsserver

Det här avsnittet introducerar &UNIX; (&Linux;) återuppringning, och hur &kppp; kan anpassas för att ansluta till en &UNIX; återuppringningsserver, i synnerhet till en skriptbaserad &Linux; återuppringningsserver.

### En introduktion till återuppringning

Det finns flera anledningar att fundera på att använda återuppringning. Några av dem är:

- För att öka säkerheten i ditt lokala nätverk

- För att minska kostnader för externa medarbetare

- För att hantera telefonkostnader när samtal deklareras som företagskostnader

Tänk dig att någon ringer numret till din uppringningsserver, och sedan knäcker ett lösenord. Varför bry sig om att underhålla en brandvägg för din Internetanslutning, om det är så lätt att komma åt ditt nätverk?

Ett återuppringningsprogram frågar i allmänhet efter ditt namn, och lägger sedan på. Därefter ringer det tillbaka, vanligtvis med ett nummer som är lagrat på servern i en databas. Klienten svarar och fortsätter med anslutningen som om ingenting hänt. Servern frågar nu efter användarnamn och lösenord, med vetskap om att du är den som du sa du var när du först ringde upp, eller åtminstone att du är där du sa att du var. Anslutningen etableras normalt, och pppd startas.

Nu är den stora frågan, hur talar man om för klienten att den ska svara, när servern ringer tillbaka? Behövs ett speciellt program som mgetty? Svaret är, nej du behöver inte något speciellt klientprogram. I allmänhet kan alla klienter användas för en återuppringd förbindelse, man kan till och med använda ett vanligt terminalprogram som minicom för att ansluta.

Det enda du måste göra är att tala om för ditt modem att `autosvara` när ett `RING` upptäcks av modemet. Det här görs med följande modemkommando:

    AT&SO=1

Det här talar om för modemet att det ska svara efter ett `RING`.

Som många andra klientprogram, kontrollerar &kppp; om anslutningen stängs av servern, och avslutar då den nuvarande sessionen om `NO CARRIER` upptäcks. Det här är alltså det riktiga problemet med att hantera återuppringning. `NO CARRIER` upptäcks förstås i det ögonblicket då återuppringningsservern lägger på. Vissa servrar använder därför ett särskilt inloggningsprogram. Så hur löser man det här problemet? Du talar om för modemet att det alltid ska ange `CARRIER UP` (som inte orsakar några problem om du låter klienten lägga på). Du kan göra detta med följande modemkommando:

    AT&C0

Om du vill prova det här, kan du först använda ett vanligt terminalprogram som minicom, och anropa din återuppringningsserver för att se vad som händer.

### Inställning av &kppp;

Så nu när du har sett teorin i användning, hur ser du till att ställa in &kppp; för att hantera anslutningen?

Proceduren är ganska rättfram, enligt följande:

1. Tala först om för modemet att acceptera anslutningar, och inte stoppa förhandlingen när återuppringningsservern lägger på första gången. Du kan lägga till båda de här alternativen under fliken Modem i &kppp;s inställningar, genom att lägga till strängen `AT&C0S0=1DT` i alternativet Kommando för att ringa upp.

   Det finns inga andra ändringar i &kppp;s inställningar. Om du får problem med initiering och återställning av modemet, kontrollera avsnittet Felsökning för mer information.

2. Fundera på servern ett ögonblick. Kom ihåg att operativsystemen &UNIX;, &Windows; och Macintosh har olika idéer om hur ett radslut i en textfil ser ut, och därför också i inloggningsprocedurer. Om du ansluter till en &Windows;-server, använd `CR/LF`, om du ansluter till en &UNIX;-server, använd `CR`, och om du ansluter till en Macintosh-server, använd `LF`.

3. För de här anvisningarna antar vi att du ringer upp ett &Linux; återuppringningspaket som använder vanlig inloggning (inte PAP eller något sådant).

   Ställ in Autentisering under fliken Uppringning i abonnemangsinställningarna till Skriptbaserad

4. Nu måste du bygga upp inloggningsskriptet. Att redigera inloggningsskript är en av de verkligt häftiga funktionerna i &kppp;. Du hittar det under fliken Inloggningsskript i dialogrutan Ändra abonnemanget.

   I det här exemplet kräver användaren `anvxyz` att följande skript anropas. Återuppringningsservern känner redan till namntabellen och motsvarande telefonnummer, så du väljer telefonnumret som ska användas med ett alias, av säkerhetshänsyn.

   Välj alternativ från kombinationsrutan till vänster i dialogrutan för varje linje, och skriv in åtgärden i textrutan till höger. Välj Lägg till för att lägga till varje linje i skriptet. Du kan använda Infoga för att lägga till en rad mitt i skriptet, och Ta bort för att ta bort en rad om du gör ett misstag.

   Hela skriptet ska se ut ungefär så här (utan kommentarerna, som visas här med ett inledande # tecken)

       Expect       ogin:           # kom ihåg, vi gör en vanlig terminalinloggning
       ID           ""              # kppp skickar användarnamn som
                                      du ställde in i huvuddialogrutan
       Expect       for anvxyz:     # en lista på tillgängliga nummer
                                      visas, användaren ska välja ett
       Send         anvxyz-hem      # användaren vill bli återuppringd
                                      på sitt hemnummer
       Expect       ogin:           # Återuppringningsprocessen kör nu en
                                      ny anslutning, och alltså en ny inloggning.
       ID
       Expect       assword:        # Skicka nu ditt lösenord
       Expect       >               # Vänta på kommandoprompten
                                      (kan variera)
       Send         start_ppp       # Det här kommandot startar pppd

   Efter att ha väntat på inloggningsbegäran, skickar användaren sin identitet och väntar på en lista av tillgängliga telefonnummer för det användarnamnet. Därefter talar han om för servern vilket av alla tillgängliga nummer som han vill bli återuppringd med. &kppp; kan visa en dialogruta för det här, om din plats ofta ändras, t.ex. om du är en försäljare och flyttar från hotell till hotell. Nu väntar sig servern användare och lösenord för inloggning, men under tiden lägger servern på och ringer tillbaka till användaren. Autentiseringsinformationen skickas, och &kppp; väntar på en kommandoprompt, och startar ett litet skript (som heter `start_ppp` här) som kör igång pppd på servern.

   Skriptet `start_ppp` kan se ut ungefär som följer:

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

   Att ställa in en PPP-server är förstås utanför det här dokumentets omfattning. Se manualsidorna för pppd för detaljerad information. En utmärkt beskrivning av en återuppringningsserver finns på http://ap-dec717c.physik.uni-karlsruhe.de/~mh/callback.

Alla andra inställningsdetaljer, som inställning av pppd eller IP-inställningar fungerar som vanligt, och ingen särskild programvara behövs för att svara.

Återuppringning med &kppp; och andra program som mgetty eller vilken annat faxprogram som helst kan köras på samma serieport. Det finns inga problem med att svara, eftersom &kppp; skapar en låsfil som talar om för faxprogrammet att ett annat program (i det här fallet förstås &kppp;), använder linjen för tillfället.

### Felsökning

Det finns några kända problem med &kppp; i återuppringningsläge:

- När du initierar modemet att svara automatiskt, måste du återställa det efter din anslutning har avslutats. Annars kommer modemet fortsätta att svara, något som inte är en bra idé om linjen i fråga är din vanliga telefonlinje.

- &kppp; har vissa småproblem när en linje delas med ett annat program, som mgetty. Om mgetty kör via samma modemlinje, kan inte &kppp; initiera modemet på ett riktigt sätt.

- &kppp; klarar inte av att ge en prompt för viss inmatning från användaren under skriptbaserad inloggning. När exemplet ovan används frågar &kppp; tyvärr också efter användarnamnet andra gången som återuppringningsservern frågar efter det. Du kan bli av med det här genom att hårdkoda ditt användarnamn i inloggningsskriptet (inte särskilt flyttbart eller trevligt, men det fungerar).

### Resurser på Internet för serverprogramvara

Paket med programvara för &Linux; återuppringningsservrar är tillgängliga på många ställen.

Det välkända programmet mgetty är mycket kraftfullt, och kan också hantera anslutningar med återuppringning. En beskrivning av hur man ställer in mgetty för detta syfte är tillgänglig på http://www.dyer.demon.co.uk/slug/tipscrip.htm, av Colin McKinnon, colin@wew.co.uk.

Det finns också ett paket färdigt att använda för &Linux; på http://www.icce.rug.nl/docs/programs/callback/callback.html. Det här paketet underhålls av Frank B. Brokken, frank@icce.rug.nl. Eftersom inställningen, fastän rättfram, inte är särskilt lätt, har jag skrivit en kort introduktion till det på http://ap-dec717c.physik.uni-karlsruhe.de/~mh/callback/, som också innehåller en mer allmän introduktion till återuppringning.

## &Windows; NT RAS återuppringning

&Windows; NT använder ett helt annan metod än den som beskrivs ovan. NT kräver en utökning av själva PPP-protokollet, benämnd CBCP (Call Back Control Protocol). pppd har stöd för det här protokollet, men du måste kompilera om pppd. Om någon har erfarenhet av att ansluta till en NT-återuppringningsserver med lyckat resultat, låt oss få veta det.