IP svyazi. Vy smozhzte " zatem nachat' ispol'zovat' obychnye setevye uslugi na SLIP svyazi. CHtoby zavershit' svyaz', prosto vyzovite dip c opciej -k. |to poshlet hangup signal dip processu, ispol'zuya id dip zapis' v /etc/dip.pid: (4) # kill -k Na dip script yazyke, klyuchevye slova imeyushchie prefiks s simvolom $ oboznachayut razlichnye imena. Dip imeet predopredelennoe mnozhestvo peremennyh, kotorye budut budut perechisleny nizhe. $remote i $local, - 133 - naprimer, soderzhat hostnames lokal'nogo i neznachitel'nogo hosta, vovlechennyh v SLIP svyaz'. Pervyh dva operatora v tipovom script - poluchayut komandy, kotorye yavlyayutsya dip sposobom ustanovki peremennyh. Zdes', lokal'nyj i neznachitel'nyj hostname ustanovlenn k vlager i cowslip, sootvetstvenno. Sleduyushchie pyat' operatorov ustanavlivayut liniyu terminala i modema. Reset posylaet reset stroku k modemu; dlya Hayes-sovmestimyh modemov, eto komanda ATZ. Sleduyushchij operator ignoriruet reakciyu modema, tak chto login chat v liniyah rabotal pravil'no. Shat - dovol'no prost: on prosto nabiraet nomer 41988, nomer telefona cowslip, i podsoedinyatsya v account Svlager cherez parol' hey-jude. Wait komanda zastavit dip zhdat' stroku, dannuyu kak ego pervyj argument; nomer, dannyj kak vtoroj argument delaet wait time, esli nikakaya stroka ne byla poluchena. If komandy razbrosany v procedure vhoda v sistemu, i proveryayut to, chto nikakaya oshibka ne poyavilas' pri vypolnenii etoj komandy. Itogovye(final) komandy, vypolnennye posle logging, zadany po umolchaniyu, kotorye zastavyat SLIP svyazat' zadannyj po umolchaniyu marshrut so vsemi hostami, i rezhimom, kotoryj otklyuchaet SLIP na linii i konfiguriruet interface i tablicu marshrutov(routing tables) dlya Vas. 4. Sm. newsgroup alt.tla dlya bolee palindromicheskoj zabavy s akronimami s tremya simvolami. 8.3.2 Dip ssylka. "Hotya shiroko ispol'zuemyj, dip ne byl eshche ochen' horosho opisan. Poetomu, v etom razdele my dadim ssylku dlya bol'shinstva dip komand. Vy mozhete poluchit' kratkij obzor vseh komand, vyzyvaya dip v test rezhime, i vvodya help komandu. Dlya togo, chtoby vyyasnyat' otnositel'no sintaksisa komandy, Vy mozhete nabrat' ego bez kakih-libo argumentov; konechno eto ne rabotaet s komandami, kotorym ne nuzhny nikakie argumenty. $ dip -t - 134 - DIP: Dialup IP Protocol Driver version 3.3.7 (12/13/93) Written by Fred N. van Kempen, MicroWalt Corporation. DIP> help DIP knows about the following commands: databits default dial echo flush get goto help if init mode modem parity print port reset send sleep speed stopbits term wait DIP> echo Usage: echo on|off DIP> Na vsem protyazhenii, primery, kotorye vydelyayut DIP> prompt pokazyvayut, kak vvesti komandu v test rezhime, i chto output proizvoditsya. Primery, ispytyvayushchie nedostatok v prompt dolzhny prinimat'sya kak script otryvok. 8.3.2.1 Komandy Modema. Imeetsya ryad romand, dlya kotoryh dip obespechivaet konfiguraciyu vashej posledovatel'noj linii i modema. Nekotorye iz nih - ochevidny, takie kak port, kotoryj vybiraet posledovatel'nyj port, i bystrodejstvie, bity dannyh, stopovye bity, i chetnost', kotorye ustanavlivayut obshchie parametry linii. Komanda modema vybiraet tip modema. V nastoyashchee vremya, edinstvenyj podderzhivaemyj tip - HAYES. Vy dolzhny obespechit' dip tipom modema, ili on otkazhetsya nabirat' nomer i vypolnyat' reset komandy. Reset komanda posylaet reset stroku na modem; ispol'zuemaya stroka zavisit ot izbrannpgo vami tipa modema. Dlya Hayes-sovmestimyh modemov, eto - ATZ. Flush code mozhet ispol'zovat'sya dlya togo, chtoby ubrat' vse reakcii, kotorye modem posylaet so far. Inache chat script mog by byt' sputannym, potomu chto on chitaet OK reakcii iz bolee rannih komand. - 135 - Komanda init vybiraet initialization stroku, kotoruyu nuzhno nabrat' pered naborom nomera. Znachenie po umolchaniyu dlya Hayes modemov - "ATE0 Q0 V1 X1'', kotoraya vklyuchaet otobrazhenie na ekrane komand i long result code, i vybiraet nabor vslepuyu (net proverki tona shkaly). Komanda dial v konce posylaet initialization stroku na modem i nabiraet nomer sistemy. Zadannaya po umolchaniyu dial komanda dlya Hayes modemov - ATD. 8.3.2.2 echo i term. Komanda ECHO sluzhit kak pomoshch' v otladke, v kotoroj ispol'zovanie ECHO ON delaet dip ECHO na konsoli i vse posylaet k poryadkovomu ustrojstvu. On mozhet byt' vyklyuchen snova, nabiraya ECHO OFF. Dip takzhe pozvolyaet Vam ostavit' script rezhim vremenno i vstupit' v terminal rezhim. V etom rezhime, Vy mozhete ispol'zovat' dip tochno tak zhe kak i obychnuyu terminal programmu, pishushchej v posledovatel'nuyu liniyu i chityushchej iz nee. CHtoby ostavit' etot rezhim, vvedite " Ctrl-] ". 8.3.2.3 Get Komanda. Get komanda - dip sposob ustanovki peremennoj. Samaya prostaya forma - ustanovit' peremennuyu kak konstantu, kak eto delalos' v vysheupomyanutom primere. Vy mozhete, takzhe zaprosit' pol'zovatelya dlya vhoda opredelyaya klyuchevoe slov vmesto znacheniya: DIP> get $local ask Enter the value for $local: Tretij metod sostoit v tom, chtoby poprobovat' poluchit' znachenie ot otdalennogo hosta. Prichudlivo, na pervyj vzglyad, no eto ochen' polezno v nekotoryh sluchayah: nekotorye SLIP servery ne pozvolyayut Vam ispol'zovat' Vash sobstvennyj IP adres na SLIP svyazi, no budet pripisyvat' Vam odin iz ob®edineniya adresov vsyakij raz, kogda Vy - 136 - nabiraete nomer, pechataya soobshchenie, kotoroe informiruet Vas otnositel'no adresa k kotoromu Vy byli naznacheny. Esli prosmotry soobshcheniya - chto - nibud' vrode etogo ``Your address: 193.174.7.202'', to sleduyushchij fragment dip koda dopustil by Vas do podbora adresa: wait address: 10 get $locip remote 8.3.2.4 Print komanda |to komanda k ECHO tekstu k dip konsoli. Lyubaya iz dip peremennyh mozhet ispol'zovat'sya v print komandah, takie kak: DIP> print Using port $port at speed $speed Using port cua3 at speed 38400 8.3.2.5 Peremennye imena(Variable Names) Dip tol'ko ponimaet predopredelennoe mnozhestvo peremennyh. Peremennoe imya vsegda nachinaetsya s simvola dollar i dolzhen byt' napisan v nizhnem registre. $local i $locip peremennye soderzhat nazvanie lokal'nogo imeni hosta i IP adresa. Ustanovka hostname zastavlyaet dip sohranit' kanonicheskiij hostname v $local, v to zhe samoe vremya pripisyvaya $locip sootvetstvuyushchij IP adres. Analogichnaya veshch' sluchaetsya pri ustanovke $locip. $remote i $rmtip peremennye delayut tozhe samoe dlya otdalennyh hostov i adresov. $mtu soderzhit MTU znachenie dlya soedineniya. |ti pyat' peremennyh - edinstvenye, kotorye mogut byt' naznacheny neposredstvenno ispol'zuya get komandu. Host drugih peremennyh mozhet byt' tol'ko ustanovlen cherez sootvetstvuyushchie komandy, no mozhet ispol'zovat' i print opreratory; eto - $modem, $port, i $speed. $errlvl - peremennaya, cherez kotoruyu Vy mozhete obrashchat'sya k - 137 - rezul'tatu poslednej vypolnenoj komandy. Uroven' oshibki 0 ukazyvaet na uspeh, v to vremya kak nenulevoe znachenie oboznachaet oshibku. 8.3.2.6 If i Goto Komandy If komanda - bolee uslovnaya shtuka, chem to chto obychno podruzamevayat  pod if. Sintaksis: if var op number goto label gde vyrazhenie dolzhno byt' prostym sravneniem mezhdu odnoj iz peremennyh $errlvl, $locip, i $rmtip. Vtoroj operand dolzhen byt' celym chislom; operator op mozhet byt' odin iz ==,!=, <,>, < =, i > =. Komanda goto delaet vypolnenie iz script continue stroki, nesushchej etu metku. Metka dolzhna poyavit'sya kak pervyj token v linii, i nemedlenno dolzhna okanchivat'sya dvoetochiem. 8.3.2.7 send, wait i sleep |ti komandy vypolnyayut prostye chat scripts v dip. Send vyvodit ego argumenty na posledovatel'nuyu liniyu. On ne podderzhivaet peremennye, no ponimaet vse C-style backslash character sequences tipa \n i \b. Znak til'dy (~) ispol'zuetsya kak sokrashchenie dlya karetki return/newline. wait beret slovo kak argument, i prosmatrivaet ves' vhod na posledovatel'noj linii, poka on ne raspoznaet eto slovo. Slovo samo po sebe neposredstvenno ne mozhet soderzhat' probely. Vyborochno Vy mozhete dat' wait timeout value kak vtoroj argument; esli ozhidaemoe slovo ne polucheno vnutri v techenii zadannogo vremeni, komanda vozvratitsya so znacheniem $errlvl ravnym 1. - 138 - Sleep operator mozhet byt' ispol'zovan dlya togo, chtoby zhdat' nekotoroe kolichestvo vremeni, naprimer, patiently zhdet lyubuyu login posledovatel'nost' dlya zaversheniya. I snova, interval opredelen v sekundah. 8.3.2.8 mode i default |ti komandy ispol'zuyutsya dlya togo, chtoby pereklyuchit' posledovatel'nuyu liniyu v SLIP rezhim i skonfigurirovat' interface. Mode komanda - poslednyaya komanda, vypolnennaya dip pered gongom v daemon rezhime. Poka oshibka ne poyavlyaetsya, komanda nichego ne vozvrashchaet. Mode beret nazvanie protokola kak argument. Dip postoyanno raspoznaet SLIP i CSLIP kak podhodyashchie imena. Tekushchaya versiya dip ne ponimaet adcptive SLIP. Posle otklyucheniya SLIP rezhima na posledovatel'noj linii, dip vypolnyaet ifconfig dlya togo, chtoby skonfigurirovat' interface kak dvuhtochechnuyu svyaz'(point-to-point link), i vyzvat' marshrut k mnozhestvu marshrutov neznachitel'nogo hosta. Esli, krome togo, script vypolnyaet zadannuyu po umolchaniyu komandu pered mode, to dip takzhe zadact po umolchaniyu tochku marshruta na SLIP svyaz'. 8.4 Zapusk v server rezhime Ustanovka vashego SLIP klienta byla trudnoj chast'yu. Vypolnenie protivopolozhnogo, a imenno konfigurirovanie vashego hosta dlya togo, chtoby dejstvovat' kak SLIP server, - namnogo proshche. Edinstvennyj sposob sdelat' eto - ispol'zovat' dip v server rezhime, kotoryj mozhet byt' dostignut, vyzyvaya ego kak diplogin. Ego glavnyj fajl konfiguracii - /etc/diphosts, kotoryj prisoedinyaet login imena k adresu etogo hosta. V kachestve al'ternativy, Vy mozhete takzhe ispol'zovat' sliplogin, BSD-proizvodnoe sredstvo, kotoroe opisyvaet bolee - 139 - gibkuyu shemu konfiguracii, kotoraya pozvolyaet Vam vypolnit' shell scripts vsyakij raz, kogda host soedinyaetsya i raz®edinyaetsya. V nastoyashchee vremya eto proishodit na Bete. Obe programmy trebuyut, chtoby Vy ustanovili odin login account na kazhdogo SLIP klienta. Naprimer, predstavte chto Vy obespechivaete SLIP obsluzhivanie Arthur Dent v Dent.beta.com, Vy mogli by sozdat' account nazvannyj dent, dobavlyaya sleduyushchyuyu stroku k vashemu fajlu parolya(passwd file): dent:*:501:60:Arthur Dent's SLIP account:/tmp:/usr/sbin/diplogin Vposledstvii, Vy dolzhny byli by ustanovit parol' Dent(a), utilitu passwd. Teper', kogda dent podklyuchen, dip zapustitsya kak server. CHtoby opredelit', dejstvitel'no li emu razresheno ispol'zovat' SLIP, nuzhno najti imya pol'zovatelya v /etc/diphosts. |tot fajl podrobno opisyvaet& ptava dostupa i parametry soedineniya dlya kazhdogo SLIP pol'zovatelya. Tipovaya zapis' dlya dent mogla by byt' pohozha na: dent::dent.beta.com:Arthur Dent:SLIP,296 Pervaya iz otdelyaemyh dvoetochiem oblastej - imya pol'zovatelya pod kotorym on dolzhen vojti. Vtoraya oblast' mozhet soderzhat' dopolnitel'nyj parol' (sm. nizhe). Tret'ya - hostname ili IP adres vyzyvaemogo hosta. Dalee idet informacionnaya oblast' bez special'nogo znacheniya (poka eshche). Poslednyaya oblast' opisyvaet parametry soedineniya. |to - spisok, otdelennyj zapyatymi, opredelyayushchij protokol (v nastoyashchee vremya odin iz SLIP i CSLIP), sleduya za MTU. Kogda dent vhodit v sistemu, diplogin izvlekaet informaciyu otnositel'no nego iz diphosts fajla, i, esli vtoraya oblast' ne pusta, podskazyvaet " Parol' vneshnej zashchity ''. Stroka, vvedennaya pol'zovatelem - sravnivaetsya s (neshifrovannym) parolem iz diphosts. Esli oni ne sootvetstvuyut, to popytka vhoda v sistemu budet otklonena. - 140 - |to svyaz' ostaetsya ustanovlennoj, poka pol'zovatel' ne otsoedinyaetsya, ili modem ne brosaet liniyu. Diplogin zatem vozvratit liniyu k normal'noj discipline line i vyjdet. Diplogin trebuet privilegii super-pol'zovatelya. Esli Vy zapustili dip setuid root, to Vy dolzhny sdelat' diplogin otdel'noj kopiej dip(a) vmesto prostoj svyazi. Diplogin mozhet zatem byt' sdelan setuid, bez vozdejstviya na sostoyanie dip neposredstvenno. 9. Dvuhtochechnyj Protokol(point-to-point protocol) 9.1 Rasputyvayushchij P's Tochno tak zhe kak SLIP, PPP - protokol dlya togo, chtoby posylat' datagrammy cherez posledovatel'nuyu svyaz', no on adresuet paru vysheupomyanutyh netochnostej. On pozvolyaet soobshchayushchiemsya storonam obsudit' opcii, takie kak IP adres i maksimal'nyj datagramnyj razmer vo vremya zapuska, i obespechivaet razreshenie klkenta. Dlya kazhdoj iz etih vozmozhnostej, PPP imeet otdel'nyj protokol. Nizhe, my kratko rassmotrim eti bazisnye standartnye bloki PPP. |to obsuzhdenie daleko ne polno; i esli Vy hotite vyyasnit' chto-libo otnositel'no PPP, to ya nastoyatel'no rekomenduyu Vam prochitat' specifikaciyu v RFC 1548, takzhe kak i dozen ili companion RFCs. (1) V samoj osnove PPP lezhit upravlenie peredachej dannyh vysokogo urovnya, sokrashchenno HDLC(High-Level Data Link Control Protocol),(2), kotoryj opredelyaet granicy vokrug ndividual'nyh struktur PPP, i obespechivaet 16 razryadov kontrol'noj summy. V protivopolozhnost' bolee primitivnomu oformleniyu SLIP paketa, PPP sposoben k zahvatu blokov iz drugih protokolovtakih kak IP tipa IPX Novell's, ili Appletalk. PPP dostigaet etogo, dobavlyaya oblast' protokola k osnovnomu HDLC. LCP(Link Control Protocol), Protokol upravleniya svyazi, ispol'zuetsya na vershine HDLC dlya ogovora opcij, imeyushchih otnoshenie k kanalu svyazi, tipa Maximum Receive Unit (MRU), kotoraya zayavlyaet - 141 - maksimal'nyj razmer datagrammy odnoj storony svyazi. Vazhnyj shag v stadiyu konfiguracii svyazi PPP klientskogo razresheniya. Hotya eto ne obyazatel'no, eto dejstvitel'no dolzhno bylo by byt' dlya dial- up linij. Obychno, vyzyvaemyj host prosit klienta zaregestrirovat' sebya, dokazyvaya, chto on znaet nekotoryj sekretnyj klyuch. Esli klient nabral nepravil'nyj klyuch, to svyaz' budet prervana. S PPP, razreshenie rabotaet obeimi sposobami; to est' vyzyvayushchij mozhet takzhe prosit', chtoby server opoznal sebya. |ti procedury ustanovleniya podlinosti ne zavisyat drug ot druga. Imeyutsya dva protokola dlya razlichnyh tipov razresheniya, kotorye my obsudim pozzhe. Oni imenovany "Protokolom Ustanovleniya Podlinnosti Parolya", ili PAP(Password Authentication Protocol ), ili CHAP(Challenge Handshake Authentication Protocol). Kazhdyj setevoj protokol, kotoryj razbit poperek kanala svyazi,  pozhobno IP, AppleTalk, i t.d, skonfigurirovan dinamicheski, ispol'zuya sootvetstvuyushchuyu Network Control Protocol (NCP). Naprimer, chtoby poslat' IP datagrammy poperek 1. Relevantnye RFCs perechisleny v Annoted Bibiliography v konce etoj knigi. 2. Fakticheski, HDLC- namnogo bolee obshchij protokol, izobretennyj Mezhdunarodnoj organizaciej po standartizacii svyazi, oba PPPs dolzhny snachala obsudit', kotoryj iz IP adresov kazhdyj iz nih ispol'zuet. Protokol upravleniya, ispol'zuemyj dlya etogo - IPCP, the Internet Protocol Control Protocol. Pomimo posylki standarta IP datagrammy poperek svyazi, PPP takzhe podderzhivaet Van Jacobson header compression IP datagramm. |to - metod dlya togo, chtoby sokratit' zagolovki TCP blokov k vsego trem bajtam. |to takzhe ispol'zuetsya v CSLIP, i - bol'she otnositsya k VJ header compression. Ispol'zovanie szhatiya mozhet byt' zaklyucheno v limite vremeni zapuska cherez IPCP. 9.2 PPP na Linux - 142 - Na Linux, PPP funkcional'nye vozmozhnosti rasshchepleny na dve chasti, low-level HDLC drajver, kotoryj razmeshchen v yadre, i prostranstvo pol'zovatelya pppd daemon, kotoroe obrabatyvaet razlichnye protokoly upravleniya. Tekushchee raz®edinenie PPP dlya Linux - linux-ppp-1.0.0, kotoroe soderzhit yadro PPP modulya, pppd, i programma, imenovannaya chat ispol'zuetsya dlya togo, chtoby vypolnit' otdalennuyu svyaz'. PPP kernel drajver byl napisan Michael Callahan. Pppd byl vyveden iz PPP realizacii dlya Sun i 386BSD mashin, kotoryj byl napisan Drew Perkins i drugimi, i podderzhivaetsya Paul Mackerras. |to bylo predostavleno k Linux Al Longyear. (3) chat byl napisan Karl Fox.(4) Tochno tak zhe kak i SLIP, PPP vypolnen posredstvom special'noj line discipline. Dlya togo, chtoby ispol'zovat' posledovatel'nuyu liniyu kak PPP svyaz', Vy snachala dolzhpy uutanovit' svyaz' nad vashim modemom kak obychno, i vposledstvii preobrazovat' liniyu k PPP rezhimu. V etom metode, vse vhodyashchie dannye prohodyat cherez PPP drajver, kotoryj proveryaet vhodyashchie HDLC struktury dlya sootvetstviya (kazhdaya HDLC struktura neset 16 bitov kontrol'noj summy). V nastoyashchee vremya, on sposoben k vyboru, ispol'zuya Van Jacobson header compression. Kak tol'ko Linux podderzhivaet IPX, PPP drajver budet rasshiren dlya togo, chtoby obrabatyvat' IPX bloki. Kernel drajveru pomogaet pppd, PPP daemon, kotoryj vypolnyaet celuyu inicializaciyu i opoznavatel'nyj period, kotoryj yavlyaetsya neobhodimym pered tem, kak fakticheskoe setevoe dvizhenie mozhet byt' poslano poperek svyazi. Povedenie Pppd mozhet podstraivat'sya, ispol'zuya ryad opcij. PPP - kompleksnyj, nevozmozhno opisat' vse iz nih v edinstvennoj glave. 3. Oba avtora skazali, chto oni budut ochen' zanyaty nekotoroe vremya dlya togo, chtoby vernut'sya. Esli Vy imeete kakie-libo voprosy otnositel'no PPP v obshchem, to Vam luchshe vsego sprosit' by lyudej otnositel'no NET kanala Linux activists mailing list.. 4. Karl@morningstar.com. - 143 - |ta kniga, odnako, ne mozhet pokryvat' vse aspekty pppd, no dast Vam polnoe vvedenie. Dlya bolee podrobnoj informacii, obratites' k stranicam instrukcii i fajlam README na pppd ishodnom rasprostranenii, kotoroe dolzhno pomoch' Vam otsortirovat' bol'shinstvo voprosov, eta glava ob®yasnyaet kak eto sdelat'. Esli u Vas ostayutsya problemy dazhe posle chteniya vsej dokumentacii, to Vy dolzhny obratit'sya k newsgroup somp.protocols.ppp dlya spravki, kotoraya yavlyaetsya mestom gde Vy uznaete mnogoe o pppd. 9.3 Zapusk pppd Kogda Vy hotite soedinit'cya s Internet cherez PPP svyaz', Vy dolzhny ustanovit' bazisnye vozmozhnosti raboty s setyami tipa vozvrata cikla, i reshayushchego ustrojstva. Oba byli opisany v predydchshchih" glavah. Imeyutsya nekotorye veshchi, kotorye nuzhno upominat' otnositel'no ispol'zovaniya DNS nad posledovatel'noj svyaz'yu; pozhalujsta obratites' k SLIP glave dlya opisaniya. Kak vvodnyj primer togo, kak ustanavlivat' PPP svyaz' s pppd, predstavte, chto Vy - vo vlager snova. Vy uzhe soedenilis' s serverom po telefonu, c3po, i zaregistrirovalis' na ppp account. C3po uzhe zapustila svoj PPP drajver. Posle vyhoda iz kommunikacionnyh programm, kotorye Vy ispol'zuete dlya soedineniya po telefonu, Vam neobhodimo vypolnit' sleduyushchuyu komandu: # pppd /dev/cua3 38400 crtscts defaultroute |to peremestit posledovatel'nuyu liniyu cua3 k PPP rezhimu i ustanovit IP svyaz' s c3po. Skorost' peredachi, ispol'zuemaya na posledovatel'nom porte budet 38400bps. Opciya crtscts vklyuchaet apparatnoe rukopozhatie na port, kotoryj dolzhen rabotat' na skorosti bolee chem 9600 bit\sek. Pervuyu veshch', kotoruyu pppd delaet posle zapuska - dogovorit'sya o nekotoryh harakteristikah svyazi, ispol'zuya LCP. Obychno, zadannoe po umolchaniyu mnozhestvo opcij, o kotorom pppd poprobuet dogovorit'sya, tak chto my ne budem podrobno vdavat'sya v eto. My vozvratimsya k LCP bolee - 144 - podrobno neskol'ko pozzhe. V nastoyashchee vremya, my takzhe prinimaem, chto c3po ne trebuet kakogo-libo ustanovlenie nashej podlinnosti, tak chto period konfiguracii zavershen uspeshno. Pppd budet dogovarivat'sya o IP parametrah s peer ispol'zuya IPCP, IP upravlyaet protokolom. Tak kak my ne tochno opredelyali IP adres k pppd vyshe, to on poprobuet ispol'zovat' adres, poluchennyj pri nalichii reshayushchego ustrojstvo, pri prosmotre lokal'nogo hostname. I zatem ob®yavyat etot adres drug drugu. Obychno, nichego ne sluchaetsya s etimi znacheniyami po umolchaniyu. Dazhe esli Vasha mashina nahoditsya v Ethernet, Vy mozhete ispol'zovat' tot zhe samyj IP adres dlya oboih. i dlya Ethernet, i dlya PPP interface. No tem ne menee, pppd pozvolyaet Vam ispol'zovat' razlichnye adresa, ili dazhe sprashivat' Vashego peer dlya togo, chtoby ispol'zovat' nekotoryj specificheskij adres. |ti opcii obsuzhdeny dalee. Posle prohozhdeniya IPCP perioda ustanovki, pppd podgotovit Vash host's networking layer dlya togo, chtoby ispol'zovat' PPP svyaz'. Snachala budet skonfigurirovann PPP setevoj interface kak point-to-point svyaz', ispol'zuya ppp0 dlya pervoj PPP cvyazi, kotoraya yavlyaetsya aktivnoj, ppp1 dlya vtoroj, i tak dalee. Zatem, on ustanovit marshrutnuyu tablicu, kotoraya ukazyvaet na host v drugom konce svyazi. V primere, pokazannom vyshe, pppd sdelaet zadannyj po umolchaniyu setevoj marshrut k c3 opciii defaultroute. (5) On azastavlyaet vse datagrammy k hostam ne na vashej lokal'noj seti byt' poslannymi k C3po. Imeetsya ryad razlichnyh marshrutov, kotorye pppd podderzhivaet, kotorye my obsudim pozzhe v etoj glave. 9.4 Ispol'zovanie fajlov opcij Prezhde chem pppd proanaliziruet argumenty komandnoj stroki, on prosmotrit neskol'ko fajlov dlya opcij, zadannyh po umolchaniyu. |ti - 145 - fajly mogut soderzhat' lyubye podhodyashchie argumenty komandnoj stroki, rasprostranyayushchiesya poperek proizvol'nogo chisla linij. Kommentarii predstavleny svoimi special'nymi znakami. Pervyj fajl opcij - /etc/ppp/options, kotoryj vsegda prosmatrivaetsya togda, kogda zapuskaetsya pppd. Pri ispol'zovanii etogo dlya ustanovki nekotoryh global'nyh znachenij po umolchaniyu - horoshaya ideya, potomu chto eto pozvolit Vam sohranit' pol'zovatelej ot vypolneniya neskol'kih veshchej, kotorye mogut postavit' pod ugrozu zashchitu. Naprimer, chtoby pppd zaprosil nekotoryj vid ustanovleniya podlinnosti (ili PAP ili CHAP) ot peer, Vy by dobavili opciyu auth k etomu fajlu. |ta opciya neobhodima dlya togo, chtoby stalo nevozmozhno ustanovit' PPP svyaz' s lyuboj sistemoj, kotoraya ne v nashih opoznazatel'nyh bazah dannyh. Drugoj fajl opcij, kotoryj chitaetsya posle /etc/ppp/options - rpprc v ishodnom kataloge pol'zovatelya. On pozvolyaet kazhdomu pol'zovatelyu tochno opredelit' ee sobstvennoe mnozhestvo opcij po umolchaniyu. Tipovoj fajl /etc/ppp/options mog by vyglyadet' sleduyushchim obrazom: 5. Zadannyj po umolchaniyu setevoj marshrut mozhet byt' tol'ko ustanovlen, esli ni odin iz nih ne ustanovlen. # Global options for pppd running on vlager.vbrew.com auth # require authentication usehostname # use local hostname for CHAP lock # use UUCP-style device locking domain vbrew.com # our domain name Pervyya dve iz etih opcij obrashchayutsya k ustanovleniyu podlinnosti i budut ob®yasneny nizhe. Klyuchevoe slovo blokirovki zastavit pppd ustupit' standartu UUCP metod blokirovki ustrojstva. S etim sobraniem, kazhdyj process, kotoryj obrashchaetsya k posledovatel'nomu ustrojstvu, skazhem /dev/cua3, sozdaet fajl blokirovki, nazvannyj LCK.. cua3 v UUCP katologe, chtoby soobshchit', chto eto ustrojstvo nahoditsya v ispol'zovanii. Neobhodimo predotvratit' lyubye drugie programmy tipa minicom ili uuci lokal'nogo - 146 - ustrojstva v to vremya kak ispol'zuetsya PPP. Prichina v obespechenii etoj opciej v global'nom konfiguracionnom fajle - to, chto opcii tipa teh, chto byli pokazanny vyshe ne mogut byt' otmeneny, i oni obespechivayut priemlemyj uroven' zashchity. Zamet'te odnako, chto nekotorye opcii mogut byt' otmeneny pozzhe; odin takoj primer -soedinit' stroku. 9.5 Nabor nomera s chat Odna iz veshchej, kotoraya mozhet ispugat' Vas kak neudobnaya v vysheizlozhennym primere - to, chto Vy dolzhny ustanovit' svyaz' vruchnuyu prezhde, chem Vy mogli by zapustit' pppd. V otlichie ot dip, pppd ne imeet sobstvennyj script yazyk dlya nabora neznachitel'noj sistemy i registracii, no polagaetsya na nekotoruyu vneshnyuyu programmu ili shell script dlya togo, chtoby sdelat' eto. Komanda, kotoraya budet vypolnena mozhet byt' dana pppd s connect komandoj line option. Pppd perenaznachit vhod i vyhod k posledovatel'noj linii. Odna poleznaya programma dlya etogo - expect, napisannaya Don Libes. Ona imeet ochen' moshchnyj yazyk osnovannyj na Tcl, i byla razrabotana tochno dlya etogo sorta prilozheniya. Pppd paket idet s podobnoj programmoj nazyvaemoj called chat, kotoraya pozvolyaet Vam opredelit' UUCP-style chat script. V osnovnom, chat script sostoit iz chereduyushchihsya posledovatel'nosti strok, kotorye my ozhidaem poluchit' ot otdalennoj sistemy, i otvetov, kotorye my dolzhny poslat'. My budem nazyvat' expect i send stroki, sootvetstvenno. |to tipichnaya vyborka iz chat script; ogin: b1ff ssword: s3kr3t On soobshchaet chat chtoby zhdat' otaet iz otdalennoj sistemy dlya togo, chtoby poslat' login prompt, i vernut' login imya b1ff. My tol'ko zhdem ogin: tak chtoby bylo vse ravno startuet li login prompt s verhnego registra ili s nizhnego registra I, ili prihodit iskazhennym. Sleduyushchyaya stroka - expect string snova, kotoraya zastavit chat zhdat' parol', i posylat' svoj parol' v otvet. - 147 - Vot eto v osnovnom i vse to, dlya chego prednaznachen chat scripts. Polnyj script dlya soedineniya s PPP serverom, nesomnenno dolzhen vklyuchat' sootstvuyushchie komandy modema. Predstavte, chto vash modem ponimaet Hayes komandy, i nomer telefona servera byl 318714. Polnyj vyzov chat dlya ustanovki svyazi s c3po byl by: $ chat -v '' ATZ OK ATDT318714 CONNECT '' ogin: ppp word: GaGariN Po opredeleniyu, pervaya stroka dolzhna by byt' expect strokoj, no tak kak modem ne budet govorit' chto - nibud' prezhde, chem my pnuli ego, my sdelaem chat tak, chtoby on snachala ozhidal, oprzdelkv pustuyu stroku. My prodolzhaem i posylaem ATZ, reset komanda dlya Hayes-sovmestimyh modemov, i zhdem reakciyu (OK). Sleduyushchaya stroka posylaet dial komandu s nomerom telefona dlya chat, i ozhidaet soobshchenie CONNECT v otvet. Za etim sleduet pustaya stroka snova, potomu chto my ne hotim posylat', no luchshe podozhdat' dlya bystrogo vhoda v sistemu. Ostatok ot chat script rabotaet tochno tak, kak opisano vyshe. Opciya -v delaet caht log all activities k syslog daemon's local2 facility. (6) Opredelenie chat script na komandnoj stroke neset opravdannyj risk, potomu chto pol'zovateli mogut prosmatrivat' komandnuyu stroku processov s ispol'zovaniem ps komandy. Vy mozhete izbezhat' etogo, pomeshchaya chat script v fajl, skazhem dial-c3po. Vy mozhete zastavit' chat prochest' script iz fajla vmesto komandnoj stroki, davaya emu opciyu -f, soprovozhdaemoj imenem fajla. Zaversheniem koldovstva nad pppd teper' vyglyadelo by sleduyushchim obrazom: # pppd connect "chat -f dial-c3po" /dev/cua3 38400 -detach \ crtscts modem defaultroute 6. Esli Vy redaktiruete syslog.conf tak, chtoby perenaznachit' eti log soobshcheniya k fajlu, udostoverites', chto etot fajl ne vsemirno chitaemyj, tak kak chat takzhe regestriruet vvedennyj chat script po umolchaniyu - vklyuchaya paroli i vse. - 148 - Pomimo soedinyayushchejsya opcii, kotoraya opredelyaet dial-up script, my dobavili eshche dve opcii k komandnoj stroke: - detach, kotoraya soobshchaet rppd ne otdelyat'sya ot konsoli i stat' processom predposylki. Klyuchevoe slovo modema zastavit ego vypolnit' nekotorye modem-opredelennye dejstviya na posledovatel'nom ustrojstve, podobno "povesit' trubku" prezhde i posle vyzova. Esli Vy ne ispol'zuete eto klyuchevoe slovo, pppd ne budet opredelyat' DCD liniyu, i budet ne obnaruzhenna neozhidanno. Primery, pokazannye vyshe byli dovol'no prosty; chct pozvolyaet uchityvat' namnogo bolee kompleksnye chat script. Odna ochen' poleznaya osobennost' - sposobnost' k tochnomu opredeleniyu stroki na kotoroj mozhno prervat' chat s oshibkoj. Tipichnye avarijnye stroki - BUSY, ili NO CARRIER, kotorye vash modem obychno generiruet, kogda vyzyvaemyj nomer zanyat, ili ne podnimayut trubku. Dlya togo, chtoby sdelat' chat raspoznayushchim ih nemedlenno, skoree bystree chem vyjdet vremya, Vy mozhete opredelit' nachalo script, ispol'zuya klyuchevoe slovo ABORT. $ chat -v ABORT BUSY ABORT 'NO CARRIER' '' ATZ OK ... V podobnom rezhime, Vy mozhete izmenit' znachenie blokirovki po vremeni dlya chastej chat scripts, vstavlyaya TIME OUT opcii. Dlya detalej, pozhalujsta obratites' k chat(8) spravochnika. Inogda, vy mozhet byt' zahoteli by imet' nekotoryj vid uslovnogo izvlecheniya chastej chat script. Naprimer, kogda Vy ne poluchaete otdalennyj end'slogin prompt, vozmozhno Vy mozhete zahotet' poslat' BREAK, ili vozvrat karetki. Vy mozhete dostich' etogo, prisoedinyaya sub-script k expect stroke. Ona sostoit iz posledovatel'nosti send- i expect- strok, tochno takih zhe kak i polnyj script neposredstvenno, kotoryj otdelen defisami. Sub-script vypolnyaetsya vsyakij raz, kogda expected stroka kogda ne bylo nichego polucheno. V primere izlozhennom vyshe, my modificirovali by chat script sleduyushchim obrazom: ogin:-BREAK-ogin: ppp ssword: GaGariN Teper', kogda chat ne vidit, chto otdalennaya sistema posylaet - 149 - bystryj vhod v sistemu, sub-script vypolnyaetsya snachala posylaya BREAK, i zatem ozhidaet dlya vhoda v sistemu snova. Esli prompt teper' poyavitsya, to script budet prodolzhat'sya kak obychno, inache eto prervetsya s oshibkoj. 9.6 Otladka vashej PPP ustanovki Po umolchaniyu, pppd regestriruet lyubye preduprezhdeniya i soobshcheniya ob oshibkah k syslog's daemon facility. Vy dolzhny dobavit' zapisyu " v syslog.conf, kotoraya perenaznachit ego k fajlu, ili dazhe k konsoli, inache syslog prosto otbrosit eti soobshcheniya. Sleduyushchaya zapis' posylaet vse soobshcheniya k /var/log/ppp-log: daemon.* /var/log/ppp-log Esli vasha PPP ustanovka ne rabotaet, pri prosmotre etogo log fajla, to on dolzhen dat' Vam podskazku, chto chto-to idet nepravil'no. Esli eto ne pomogaet, to Vy mozhete vklyuchit' osobo otlazhivayushchijsya vyvod, ispol'zuya opciyu otladki. |to delaet pppd log s soderzhaniem iz vseh upravlyayushchih blokov, poslannyh ili poluchennyh k syslog. Vse soobshcheniya budut idti k daemon facility. V zaklyuchenie, naibolee reshitel'naya osobennost' - otklyuchenie kernel-level otladki, vyzyvaya pppd s opciej kdebug. Ona soprovozhdaetsya chislovym argumentom, kotoryj yavlyaetsya porazryadnym ILI sleduyushchih znachenij: 1 dlya obshchih soobshchenii otladki, 2 dlya pechati soderzhaniya vsej vhodyashchej HDLC struktury, i 4 dlya togo, chtoby sdelat' drajver printera vyhodyashchim na HDLC strukturu. Dlya togo, chtoby zahvatit' kernel otlazhivayushchee soobshcheniya, Vy dolzhny takzhe zapustit' syslogd daemon, kot ili klogd daemon. Kazhdyj iz nih napravlyaet kernel otladku k syslog's kernel facility. 9.7 IP opcii konfiguracii IRCP ispol'zuetsya dlya togo, chtoby obgovorit' paru IP parametrov v konfiguracionnoj svyazi. Obychno, kazhdyj peer mozhet posylat' IPCP zapros konfiguracii, ukazyvaya, kotoraya peremennaya hochet - 150 - izmenit'sya iz znachenij zadannyh po umolchaniyu, i k kakomu znacheniyu. Posle polucheniya, otdalennyj end osmatrivaet kazhduyu opciyu, i podtverzhdaet ili otklonyaet ee. Pppd daet Vam mnozhestvo upravleniya, otnositel'no IPCP opcij, kotorye budut pytat'sya vesti peregovory. Vy mozhete nastroit' ee cherez razlichnye opcii komandnyh strok, kotorye my obsudim nizhe. 9.7.1 Vybor IP adresov V primere vyshe, u nau byl pppd, svyazyvayushchejsya s c3po i ustanavlivayushchij IP svyaz'. Nikakie usloviya ne prinimalis' dlya togo, chtoby vybrat' chastnyj adres IP na lyubom konce svyazi. Vzamen, my vybrali adres vlager's kak lokal'nyj adres IP, i pozvolyaem c3po obespechit' sebya sobstvennym. Inogda eto polezno imet' kontrol' nad tem , kakoj adres ispol'zuetsya na odnom ili na drugom konec svyazi. Pppd podderzhivaet otdel'nye raznovidnosti etogo. CHtoby prosit' o chastnyh adresah, Vy voobshche obespechivaete pppd sleduyushchemi opciyami: local addr:remote addr Gde local addr i remote addr mogut byt' opredeleny ili v dotted quad notation, ili kak hostnames.(7) |to zastavit pppd popytat'sya ispol'zovat' pervyj adres kak sobstvennyj adres IP, i vtoroj kak peer. Esli peer otklonyaet lyuboj iz nih v techenie IPCP peregovorov, nikakaya svyaz' IP ne budet ustanovlenna. (8) Esli Vy hotite ustanovit' lokal'nyj adres, no prinimaete lyuboj adres, kotoryj ispol'zuet peer, Vy prosto ne uchityvaete remote addr part. Naprimer, dlya togo, chtoby vlager ispol'zoval IP adres 130.83.4.27 vmesto sobstvennogo, Vy by dali emu 130.83.4.27: na komandnoj stroke. Podobno ustanovki remote adresov tol'ko, Vy pokinuli by lokal'nuyu oblast' adresa. - 151 - Ispol'zuya znachenie po umolchaniyu, pppd zatem ispol'zuet adres, svyazannyj s vashim hostname. Nekotorye PPP servery, kotorye obrabatyvayut mnozhestvo klientov, pripisyvayut adresa dinamicheski: adresa naznacheny sistemam tol'ko kogda sushchestvuet obrashchenie i trebuyutsya posle togo, kak oni prekratili registrirovat'sya snova. Kogda proishodit soedinenie s takim serverom, Vy dolzhny udostoverit'sya, chto pppd ne zaprashivaet kakoj- libo IP adres iz servera, no kogda adres budet prinyat server poprosit Vas, chtoby Vy ego ispol'zovali. |to oznachaet to, chto Vy ne dolzhny opredelit' togo, Vy dolzhny ispol'zovat' opciyu noipdefault, kotoraya zastavit pppd zhdatyu pegr, chtoby obespechit' adres IP vmesto ispol'zovaniya adresa lokal'nogo hosta. 7. Ispol'zovanie hostnames v etoj opcii imeet sledstviya na CHAP ustanovleniya podlinnosti. Pozhalujsta obratites' k razdelu na CHAP. 8. Vy mozhete pozvolit' peer PPP otmenit' vashi idei otnositel'no IP adresov, davaya pppd ipcp-accept-local i ipcp-accept-remote opcii. Pozhalujsta obratites' k rukovodstvu dlya vyyasneniya detalej. 9.7.2 Napravlenie cherez svyaz' PPP Posle ustanovki setevogo interface, pppd budet ustanavlivat' host marshrut tol'ko k svoemu peer. Esli remote host nahoditsya na LAN, Vy obyazatel'no zahotite byt' sposobnym soedinitsya s hostami mnozhestvami "pozadi" Vashego peer; to est' setevoj marshrut dolzhen byt' ustanovlen. My uzhe videli, chto pppd mozhno poprosit' ustvnovit' zadannyj po umolchaniyu marshrut, ispol'zuyayu opciyu defaultroute. |ta opciya ochen' polezna esli PPP server, s kotorym Vy svyazalis' budet dejstvovat' kak vashi Internet vorota. Obratnyj sluchaj, gde vasha sistema dejstvuet kak vorota dlya edinstvennogo hosta, yavlyaetsya takzhe otnositel'no prostym dlya togo, chtoby byt' vypolnenym. Naprimer, voz'mite nekotoryh sluzhashchih v Virtual Brewery, ch'ya lokal'naya mashina nazyvaetsya loner. Pri soedinenii s vlager - 152 - cherez PPP, on ispol'zuet adres na podseti Brewery. V vlager, my mozhem teper' dat' pppd opciyu proxyarp, kotoraya ustanovit polnomochnuyu ARP zapis' dlya loner. |to avtomaticheski sdelaet loner dostupnym dlya vseh i v Winery. Odnako, veshchi daleko ne vsegda prosty kak eto inogda kazhetsya, naprimer kogda Vy soedinyaete dve LAN. |to obychno trebuet dobavleniya special'nogo setevogo marshruta, potomu chto eti seti mogut imet' svoj marshrut zadannyj po umolchaniyu. Krome togo, imeya oboih peer ispol'zovanie svyazi PPP kak marshrut zadannyj po umolchaniyu generirovalo by cikl, gde bloki k nekzveutnym adresatam budut pinat'sya mezhdu peer poka ih time-to-live istechet. Kak primer, predpolozhite, chto Virtual Brewery otkryvaet vetv' v kakom-nibud' drugom gorode. Podrazdelenie zapuskaet sobstvennuyu Ethernet ispol'zuya IP setevoj nomer 191.72.3.0, kotoryj yavlyaetsya podset'yu 3 iz Brewery klassa B seti. Oni hotyat soedinit'sya s Brewery's main Ethernet via PPP dlya tgo, chtoby modificirovat' bazy dannyh zakazchikov, i t.d. Snova, vlager dejstvuet kak vorota; peer vyzyvaetsya sub-etha i imeet adres IP 191.72.3.1.. Kogda sub-etha soedinitsya s vlager, ona primet zadannyj po umolchaniyu marshrut k vlager kak obychnyj. Na vlager, my budem dolzhny ustanovit' setevoj marshrut dlya podseti 3, kotoryj prohodit k sub-etha. Dlya etogo, my ispol'zuem osobennost' pppd, ne obsuzhdennogo poka - ip-v gotovnosti komandy. |to shell script ili programma, razmeshchennaya v /etc/ppp, kotoraya vypolnena posle togo, kak PPP interface byl skonfigurirovan. Kogda on sushchestvuet, eto vyzyvaetsya so sleduyushchimi par ip-up iface device speed local addr remote addr Gde iface nazyvaet setevoj interface ispol'zuemym, device - tropa fajla posledovatel'nogo ustrojstva ispol'zuemogo (/dev/tty, esli stdin/stdout ispol'zuetsya), i speed - bystrodejstvie ustrojstva. Local addr i remote addr dayut IP adresa, ispol'zuemye v oboih koncah svyazi v dotted quad notation. V nashem sluchae, ip-up script, mozhet soderzhat' - 153 - sleduyushchij kodovyj fragment: #!/bin/sh case $5 in 191.72.3.1) # this is sub-etha route add -net 191.72.3.0 gw 191.72.3.1;; esac exit 0 V podobnom rezhime, /etc/ppp/ip-down ispol'zuetsya dlya togo, chtoby otmenit' vse dejstviya ip-up posle togo, kak svyaz' PPP byla demontirovana snova. Odnako, shemzh matshrutov eshche ne polna. My ustanovili marshrut vhodov tablicy na oba PPP hosta, no poka, vse drugie hosty na obih setyah ne znayut nichego otnositel'no svyazi PPP. |to ne bol'shaya problema, esli vse hosty v podrazdelenii imeyut svoi, zadannye po umolchaniyu marshruty v sub- etha, i vse hosty v Brewery napravlyayutsya k vlager po umolchaniyu. Esli eto ne tak, to vasha edinstvennaya opciya budet ispol'zovat' daemon marshrut podobno vorotam. Posle sozdaniya setevogo marshruta peredal by po radio novyj marshrut ko vsem hostam na prisoedinennoj podseti. 9.8 Opcii upravleniya svyaz'yu Vyshe, my uzhe stolknulis' s LCP, Protokolom Upravleniya Svyazi, kotoryj ispol'zuetsya dlya togo, chtoby zaklyuchit' harakteristiki svyazi, i proverit' svyaz'. Dve naibolee vazhnyh opcii, kotorye mogut byt' zaklyucheny LCP - maksimum poluchaet edinicu i Asinhronnoe Otobrazhenie Upravlyayushchego simvola. Imeetsya ryad drugih LCP opcij konfiguracii, no oni slishkom specializirovanny dlya obsuzhdeniya ih zdes'. Pozhalujsta obratites' k RFC 1548 dlya opisaniya etogo. Asinhronnoe otobrazhenie upravlyayushchego simvola, razgovorno nazyvaemogo async otobrazhenie, ispol'zuetsya na asinhronnyh svyazyah tipa - 154 - telefonnyh linij dlya opoznavaniya upravlyayushchih simvolov, kotoryh nuzhno najti (zamenit' specificheskoj posledovatel'nost'yu s dvumya harakterami). Naprimer, Vy mozhet byt' zahotite izbezhat' XON i XOFF, ispol'zuemye dlya rukopozhatiya programmnogo obespecheniya, potomu chto nekotoryj ploho skonfigurirovannyj modem mog by udushit' polucheniya stop- signala. Ctrl-] (telnet simvol ESC). PPP pozvolyaet Vam vyhodit' iz lyubogo iz znaka s ASCII kodirovkoj ot 0 do 31, tochno opredelyaya ih v async otobrazhenii. Async otobrazhenie - rastr shirinoj 32 bita, s samym mladshim bitom, sootvetstvuyushchim ASCII NUL znaku, i starshim bitom sootvetstvuyushchim 31 ASCII. Esli bit ustanovlen, to op soobshchaet sootvetstvuyushchemu znaku, kotoryj dolzhen vyjti pered posylkoj cherez svyaz'. Pervonachal'no, async otobrazhenie - mnozhestvo k 0xffffffff, to est' vse upravlyayushchie simvoly budut esaped. Dlya togo, chtoby soobshchit' vashemu peer, chto eto on ne dolzhen escaped vse upravlyayushchie simvoly, a tol'ko neskol'ko iz nih, Vy mozhete tochno opredelyat' novyj asyncmap k pppd ispol'zuya opciyu asyncmap. Naprimer, esli tol'ko ^S i ^Q (ASCII