dial-up: ppp - point to point protocol

teejuht
 
1. Sissejuhatus
2. Nimeserveri IP näitamine
3.
Modemi masinasse ühendamine
4. Kerneli kompileerimine
5. minicom'iga IPS-sse helistamine
6. automatiseeriva scriptiga ISP-sse helistamine
 

1. Sissejuhatus

Järgnev tekst püüab anda juhtnööre 'dial-up' Interneti ühenduse tekitamiseks ja automatiseerimiseks. See ei ole siiski mitte niivõrd üldjuhu kui minu konkreetse olukorra kirjeldus.

Nn. dial-up'i ühenduse eesmärgiks on saavutada olukord, kus teie masinal on ajutiselt IP number (see 192.168.1.2 kujul asi) ja ta on teiste Internetti ühendatud masinatega põhimõtteliselt samaväärne. Kuigi ta on vaid lühiajaliselt Internetti ühendatud võib ta olla teiste jaoks näiteks ftp, http või mõni muu server. Siiski, talvaliselt teil ei õnnestu nii teha, et hoida nt. oma masinat nt. igal laupäeval 18.00 - 19.00 telefoni otsas üleval ja võimaldada inimestel nii teie serverit kasutada. Asi ei ole mitte rahas (tegelikult on ühenduse kasutamine odavam kui kinos käimine :) mida telefoni eest tuleb maksta.  Asi on selles, et teie IP number omistatakse teile dünaamiliselt st. iga seansi ajal on teil erinev number ja erinevat numberit nimega (nt. www.minukodu.kiirtee.ee) seostada on hoopis raske. Tõsi, võimalik on ka saavutada teenusepakkujaga selline kokkulepe, et te ikkagi saate endale nn. staatilise IP ja isegi nime (www.oolberg.ee) kuid see on oluliselt kallim). Niisiis enamus surelikke saab peale ISP -sse (Internet Service Provider) helistamist numbri dünaamiliselt.

Ja kui te olete ühenduse loonud siis on veel üks oluline asi: teie arvuti peab teadma mis on DNS (Domain Nema Service)-i masina ehk nimeserveri  number. See on see koht kuhu teie masina programmid pöörduvad, kui olete andnud nt. käsu lynx www.ut.ee. Interneti masinad suhtlevad omavahel kasutades IP aadresse numrilisel kujul aga inimesed eelistavad sõnalist kuju, nende DNS masinate töö ongi teisendada neid aadresse sobivale kujule. Muuseas, masina teeb DNS'i  masinaks mitte raud vaid üks seal töötav programm - bind.

Põhjendame ISP seisukohalt miks on neil kasulikum anda numbreid dünaamiliselt.
ISP on põhimõtteliselt endale ostnud mingi domaini (st. ruumi internetis IP aadresside mõttes, nt. 193.48.1.10 .... 193.48.1.20, rohkem aadresse, kallim). Iga IP-ga saaks seostada ühe nime (tõsi, mitte ainult ühe aga nad kõik viitavad samale IP-le) aga seda ei tehta. Jääb mulje, et see ISP saaks endale hankida antud tingimustel mitte rohkem kui 10 klienti ja üle 10 modemil vastuvõtjateks pole ka mõtet. Aga vähe tõenäoline on, et kõik 10 klienti pidevalt ja korraga teenust kasutavad. Just sellepärast, et tõenäoliselt kõik korraga ei helista võib ISP endale hankida nt. 100 klienti mida ka tehakse. Ja nii ongi, et peale ühenduse saamist vaatab vastuvõtja programm järgi milline on parasjagu järgmine vaba IP ning omistab seansi ajaks selle teile. Harva on nii, et 'ISP modem pole kinni' aga IP on kinni.
Tõsi, te võite helistada ISP-sse ja kui teid saadud IP ei rahulda proovida kohe uuesti ja nii seni kuni soovitud IP on käes; juhul kui olete sõpradele lubanud hoida enda masinat igal laupäeval 18.00 - 19.00 üleval mingi konkreetse IP all :)

Niisiis eeldused:
 
 
- ISP (Internet Service Provider) järgmiste olulisete andmetega: 
1. telefon 444111 (see pole päris number :) 
2. nimeserver ehk DNS 193.40.0.12 
3. teil on seal ISP masinas kasutajatunnus ehk account (username ja password))
- modem US Robotics Sportster 33.6 V34+ ISA siini peal 
(tavaliselt on jumperitega pandud IRQ 3 ja COM 2)
- Linux Slackware 3.4 (programmidega minicom, Point to Point Protocol, lynx ja tcp/ip programikomplekt)
- kernel 2.0.35 mis toetab ppp-d.
 
2. Nimeserveri IP näitamine
 
See käib ühe faili muutmisega ja rebooti pole vaja teha.

/etc/resolve.conf:

muuseas rida

nameserver 192.40.0.12

et teie masina programmid teaks sellest peate omama veel teist faili:
/etc/host.conf

order hosts,bind
multi on

3. Modemi masinasse ühendamine

Seame modemi peal jumperid paika ('irq' on irq ja 'sel' on com port) ja paneme ta masinasse. Ühendame telefonile mõeldud seinakontakti kaks juhet modemisse mineva pistiku keskmiste (seal on neid kokku neli) väljavõtete külge (ei ole tähtis kumb on kumb). Tavaliselt on juhe juba valmis ja pole muud kui pista sisse, aga hea ikka teada. Muide, modemitel on tavaliselt kaks ühtemoodi pesa: ühte jookseb juhe seinast ja teise võib ühendada telefoni enda. Nii saab mugavasti telefoni kasutada või modemiga välja helistada-arusaadavalt mitte samaaegaselt :)

4. Kerneli kompilleerimine

Siin peaks olema üldjoontes kursis kuidas kernelit kompileerida, rõhutame igaks juhuks üldisi samme:
- ....
- make menuconfig
- Networking options -> TCP/IP networking
- Network device support -> PPP (point to point) support
- make dep; make clean; make zImage; cp uus kernel vana asemele; lilo

Peale masina bootimist peaks ilmuma kiri (kui ta liiga ruttu mööda kerib saab tagasi Shift + Page Up või käsuga dmesg):

PPP: version 2.2.0 (dynamic channel allocation)
TCP compression code copyright 1989 Regents of the University of California
PPP: Dynamic channel allocation code copyright 1995 Caldera, Inc.
PPP line discipline registered
 

5. minicom'iga IPS-sse helistamine

vaadake et /etc/resolv.conf 'is oleks rida nameserver 193.40.0.12
Minicom tuleb eelnevalt installeerida kui seda pole tehtud. Järgi saab vaadata käsuga which minicom; kui pole siis setup ja N seeria, samast ka Point to Point protocol ja muu tavalise võrgu puhulgi vajalik, TCP/IP ..

minicom käivitub käsuga 'minicom' ja ette tuleb mc värvides ekraan. Seal on kõik puhtas inglise keeles, aga:

- veenuda, et modem on suhtlemiseks valmis tippides sisse 'at' (sõnast attention) peaks ta vastama OK
- helistada saab sisestades atdt444111 või atdp444111 (dt - dial tone nn. digitaalvalimine ja dp - dial pulse nn. analoogvalimine)
- modemi saab hargile panna Ctl-a, z,  h
- Ctl - a, z annab help'i ja võimaluse korraldusi anda
- peale minicom'i käivitamist modem initsialiseeritakse nn. initsialiseerimis-stringiga: vaata Ctl-a, z, o, modem and dialing:

(mina jäin default väärtuste juurde)

A - Init string: ~^M~AT S7=45 S0=0 L1 V1 X4 &c1 E1 Q0^M
B - Reset  string: ~M~ATZ^M~
C - Dialing Prefix #1: ATDP
D - Dialing suffix #1: ^M
.....

^M on ilmselt reavahetust sümboliseeriv kõik muu on keeruline :)

- Ctl a, z, d abil saab luua sissekandeid kus on kirjas telefoninumber, username, passsword .... aga see pole oluline kuivõrd minicom'iga on igapäevaselt tülikas õiendada.

Helistame minicom'iga ISP-sse

ppp ühenduse loomisel peavad kaks programmi ehk daemoni (pppd) omavahel suhtema hakkama: pppd ISP-s ja pppd teie masinas.
pppd daemon  tahab võtmeid mida ta otsib vaikimisi failist /etc/ppp/options, vaadake et see olemas oleks

/etc/ppp/options:

lock
defaultroute
noipdefault
modem
/dev/modem
115200
crtscts
debug
passive

Minu puhul toimub ühenduse loomine minicomi abil sellliselt:

atdp444111
CONNECT 28800/ARQ/V34/LAPM/V42BIS

Annex Command Line Interpreter * Copyright 1991 Xylogics, Inc.

Checking authorization, Please wait ...
Annex username: oolberg
Annex password: 12lenin34

Permission granted
Welcome to Loss-server!

oolberg@loss >ppp
Going to PPP
$£@3 8hjl4lj4lj4 4j4jk4 ja selline jama hakkab tulema ....

Nüüd on mingil tasemel ühendus loodud ja peab kohapeal käivitama pppd daemoni:

minicom tuleb kinni panna ilma toru hargile panemata:

Ctl - z, a, q

ning siis ilmunud prompti taha kirjutada pppd &.

Peale neid samme ilmub ekraanile tekst kuidas ühenduse loomine läheb ning ISP ja teie PC -le omistatud IP numbrid (tänu debug optionilie /etc/ppp/options failis)

Seejärel võib vajutada mõni kord reavahetust ja peaks nägema jälle enda masina prompti.

Nüüd saab kontrollida kas ühendus tegelikult loodi (kui telefoni toru tõsta on kuulda iseloomulik vilin, siiski toru parem mitte tõsta)

bash# ifconfig

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Bcast:127.255.255.255  Mask:255.0.0.0
          UP BROADCAST LOOPBACK RUNNING  MTU:3584  Metric:1
          RX packets:99 errors:0 dropped:0 overruns:0 frame:0
          TX packets:99 errors:0 dropped:0 overruns:0 carrier:0 coll:0

ppp0
          Link encap: Point-to-Point Protocol
          inet addr :193.40.28.110  P-t-P:193.40.28.2 Mask: 255. 255. 255. 0
          UP POINTOPOINT RUNNING MTU : 1500 Metric:1
          RX packets: 5 errors:0 fropped: 0 overruns: 0 frame:0
          TX packets: 6 errors:0 fropped: 0 overruns: 0 carrier:0 coll: 0

inet addr on teie IP ja P-t-P on ISP teiega suhtleva otsa IP

Loomulikult võib proovida:

lynx www.ut.ee
telnet madli.ut.ee
finger [email protected]
....

peaks töötama !

Ja ühenduse lõpetamine:

See on natuke kirurgiline aga nii:

kill -INT `cat /var/adm/ppp0.pid`

Seepeale peaks modem toru ära panema.

Kui aga ei saa kuidagi oma telefoni toru ära panna, siis otsige üles protsess pppd ja tapke ära:

ps aux | grep pppd
kill pppd

ja kui nii ka ei saa siis võtke modemi juhe arvuti külest korraks ära (kuigi voolu all asju pole ilus ära võtta)

6. Automatiseeriva scriptiga ISP-sse helistamine

selleks on vaja kolme scripti:

/etc/ppp/ppp-on:
script defineerib muutujad ja kutsub välja teise scripti mis reaalselt modemiga tegeleb

/etc/ppp/ppp-on-dialer:
script helistab ja suhtleb ISP-ga

/etc/ppp/ppp-off:
script lõpetab ühenduse

Ning scriptid ise on sellised; nad on käivitatavad.

ppp-on:
    #!/bin/sh
  TELEPHONE=444111                    # The telephone number for the connection
  ACCOUNT=oolberg                     # The account name for logon (as in 'George Burns')
  PASSWORD=12lenin34                  # The password for this account (and 'Gracie Allen')
  LOCAL_IP=0.0.0.0                    # Local IP address if known. Dynamic = 0.0.0.0
  REMOTE_IP=0.0.0.0                   # Remote IP address if desired. Normally 0.0.0.0
  NETMASK=255.255.255.0               # The proper netmask if needed
  export TELEPHONE ACCOUNT PASSWORD   #
  DIALER_SCRIPT=/etc/ppp/ppp-on-dialer
  exec /usr/sbin/pppd debug /dev/modem 38400 \
          $LOCAL_IP:$REMOTE_IP \
          connect $DIALER_SCRIPT
 

ppp-on-dialer:

 #!/bin/sh
 /usr/sbin/chat -v                                           \
          TIMEOUT            10                              \
          ABORT              '\nBUSY\r'                      \
          ABORT              '\nNO ANSWER\r'                 \
          ABORT              '\nRINGING\r\n\r\nRINGING\r'    \
          ''                 \rAT                            \
          'OK-+++\c-OK'      ATH0                            \
          TIMEOUT            60                              \
          OK                 ATDP$TELEPHONE                  \
          CONNECT            ''                              \
          sername:--sername: $ACCOUNT                        \
          assword:           $PASSWORD                       \
          TIMEOUT            30                              \
          'loss >'           '\nppp\r'
 

Nagu näha on tegelikult tegemist ühe käsu pppd andmisega kusjuures tal on rohkelt võitmeid :)
 

ppp-off:

#!/bin/sh
kill -INT `cat /var/adm/ppp0.pid`
 
Kasutamine:

ppp-on alustab seanssi ja ppp-off lõpetab selle.

Toodud scripte on vaja loomulikult muuta vastavalt vajadusele, eriti vastavalt sellele kuis ISP teiega suhtleb. Esimene minicom'iga helistamine ongi hea, et näha mida ISP ütleb. Samuti pole ppp-off script eriti elegantne, aga ta töötab paljudel juhtudel :)
Kui ühendus ei katke tapke protsessid chat ja pppd ära või ühendage modemi juhe korraks lahti.

Muide, slackware Point to Point Protocol'i installeerimisel pannakse peale ka script pppsetup ja see peaks ülaltoodud scriptid ise valmis kirjutama aga minul ta seada päris häasti ei teinud. Proovige!