Modemy a PPP

Libor Ambrůz, xambruz@fi.muni.cz


Obsah


1.0 Modemy

1.1 Co to vlastně modem je a pár základních pojmů z této oblasti

Modem je slovo, které vzniklo zkrácením slov modulátor/demodulátor. Modem je zařízení nebo program, který umožňuje počítači přenášet data přes telefonní linku. V počítači jsou používána data v digitální podobě (tedy pomocí nul a jedniček), zatímco informace přenášené přes telefonní linku jsou v podobě analogových vln. Modem je převodníkem, který na jedné straně data převede z digitální podoby do analogové a na druhé straně je schopen je opět převést zpět z analogové do digitální.

Kdyby si každý dělal své vlastní rozhraní a normy, tak by to nedopadlo příliš dobře. Na štěstí je tu standardysované rozhraní pro připojení externích modemů k počítači a toto rozhraní nazýváme RS-232 a je to vlastně sériový port. V důsledku toho mohou být externí modemu připojeny k libovolnému počítači, který má toto rozhraní, a to je v dnešní době i na těch nejstarších počítačích. Kromě externích modemů existují ještě interní modemy. To jsou modemy, které připojujeme přes PCI slot na základní desce počítače. V dnešní době se už většinou používají externí modemy, které se připojují přes USB rozhraní a interní modemy mohou být dokonce integrovány do základních desek počítačů. Kromě klasických modemů už v dnešní době máme modemy hlasové a nejsme v dnešní době vázáni pouze na spojení přes telefonní linku, např. ISDN, optická vlákna,... Modemy už neslouží pouze pro přenos dat mezi dvěmi počítači nebo jako spojení mezi datovým terminálem a počítačem, který chce získat data, v dnešní době se např. používají pro přenos videa a hlasu. To rovněž znamená, že narozdíl od prvotních "nízkých" přenosových rychlostí kolem 300b/s se dnes pohybujeme kolem 28Kb/s či ještě více. Taktéž se dnes používají účinnější techniky pro kompresi dat, detekci chyb a jejich opravy.

Pár základních pojmů:

1.2 Jak se spojují dva modemy

Ustavení spojení mezi dvěmi modemy vyžaduje proces s handshakovaným posílání a přijímání kódovaných signálů pro zřízení spojení. Je použitá tzv. FallBack metoda pro nalezení společného způsobu komunikace. Volající modem se snaží připojit nejvyšší rychlostí (nebo nejlepším schématem samoopravujícím chyby nebo kompresním schématem). Pokud volaný modem neposílá zpět signál, že umí ovládat daný protokol, volající modem postupně snižuje rychlost nebo nabízí méně efektivní schéma a zkouší to znovu. Tento cyklus se opakuje dokud se nenalezne společně nejlepší kompromis nebo se nevyčerpají dostupné možnosti.

Příklad rozhovoru mezi dvěmi modemy:

MODEM 2 zvoní na MODEM 1 MODEM 2: Haló je tam někdo?
MODEM 1: Ahoj, já jsem modem, kdo je tam?
MODEM 2: Jsem modem, umíš mluvit rychlostí 33.6kb/s?
MODEM 1: Ano, umím taky mluvit rychlostí 33.6kb/s.
MODEM 2: Dobře budem mluvit rychlostí 33.6kb/s.
MODEM 2: Umíš mluvit podle V.42bis?
MODEM 1: Neodpovídá.
MODEM 2: Umíš mluvit podle V.42?
MODEM 1: Ano, umím.
MODEM 2: Dobře, budem mluvit podle V.42.
MODEM 1: Dobře, souhlasím. To je nejlepší co můžem oba dva poskytnout.

Jak to funguje v praxi? Volající modem zavolá na nějaké číslo. Na druhé straně modem zjistí, že na něj někdo "zvoní", takže zvedne linku a pošle tón o určité délce a na určité frekvenci. Modem na druhé straně zjistí, že mu došel tento tón a řekne si, hmmm tak to je modem. Tóny se totiž volí tak, aby člověk nemohl vydat takový tón. Modem, který chtěl volat mu odpoví tónem na svoji nosné frekvenci (pokud se vysílá daný tón, spojení je ustaveno, jinak se zruší). Pokud se nedohodnou, nezjistí se odpověď, posílá první modem na nižší frekvenci. Viz. předchozí odstavec.

1.3 Normy platné pro modemy

Komunikace mezi dvěmi zařízeními může pracovat pouze pokud jsou obě dvě rozhraní definovaná a schválená. Pro modemy standarty definují techniky používané pro modulaci, opravu chyb a modulaci a ostatní atributy. Mezi organizace vydávající standardy definující rozhraní patří ITU (International Telecommunications Union an agency of the United Nations - Geneva), ISO (International Standards Organization) a CCITT (International Telegraph and Telephone Consultative Comittee a group of ITU). Standardy modemů byly postupně vyvíjeny a vydávány, nejvíce v USA a to organizací ANSI (American National Standards Institute).

Standardy:

StandardRychlostDruh modulace
V.21200b/sFSK
V.221200b/sPSK
V.22 bis2400b/sQAM
V.231200b/sFSK
V.262400b/sPSK
V.26 bis2400b/sPSK
V.26 ter2400b/sPSK
V.274800b/sPSK
V.27 bis4800b/sPSK
V.27 ter4800b/sPSK
V.299600b/sQAM
V.329600b/sQAM
V.32 bis14400b/sTCM
V.32 ter19200b/sTCM
V.32 fast28800b/sTCM
V.3436600b/sTCM
V.42 57600b/sTCM
V.42 bis115200b/sTCM

2.0 AT příkazy

2.1 Co to jsou AT příkazy a k čemu slouží

AT příkazy jsou příkazy, pomocí kterých dáváte modemu příkazy co má udělat. Byly vyvinuty společností Hayes Microcomputer Products za účelem ovládání modemu. Proč právě AT příkaz? Tento pojem vznikl zkrácením z originálního ATention code a vžil se zejména proto, že každý příkaz, který dáváte modemu začíná písmeny AT. Oba znaky můžete psát malými nebo velkými písmeny, tj. non-case sensitive. Proto, aby jste mohli zadávat AT příkazy si musíte spustit nějaký program, pomocí kterého komunikujete přímo s modemem. Jedním z nejznámějších takových programů je program
Minicom. Příkazy zadáváte po hlášení OK. Modem ignoruje mezery mezi znaky. Pokud uděláte chybu, stiskněte klávesu Backspace nebo kombinaci Ctrl+H a napište správně. K odeslání AT příkazu slouží klávesa Enter. AT příkazy se navíc dají kombinovat, tj. můžete za sebe uvést více AT příkazů, které začínají jedním AT na začátku a další AT se již neuvádějíi, např.: AT&FS10=100X3+MS=V32, který obnoví tovární nastavení modemu, nastaví registr S10 na hodnotu 100, nastaví ignorování hlášky NO DIALTONE a provede nastavení modulace V32.

2.2 Seznam nejzajímavějších AT příkazů

Základní AT příkazy:

2.3 Seznam návratových kódů

Po odeslání příkazu modem odpovídá návratovými kódy. Tyto kódy nám dávají informaci o aktuálním stavu modemu nebo spojení. Pro slovní návratové kódy se zadává ATV1 (většinou tovární nastavení), pro číselné návratové kódy ATV0. Pro potlačení návratových kódů se používá příkaz ATQ1. Základní návratové kódy:

2.4 Ukládání nastavení do profilů

K ukládání nastavení skupiny AT příkazů do profilu slouží příkaz &W. Příkaz ATZ provede reset modemu a nastaví modem podle uloženého nastavení v profilu.
Jak vytvořit profil s vlastními příkazy?
  1. Nastavte všechny příkazy, které potřebujete.
  2. Napište AT&W a stiskněte Enter pro uložení příkazů do profilu.
  3. Pokud změníte některé příkazy a potřebujete obnovit uložený profil, zadejte příkaz ATZ. Pro vrácení k továrnímu nastavení zadejte AT&F potvrzené stiskem Enter a následně AT&W potvrzené stiskem Enter.

2.5 Příkazy pro navazování spojení

Základní příkaz pro spojení je ATD, za ním obvykle následuje T (pokud se jedná o tónovu volbu) nebo P (pokud se jedná o pulsní volbu) a za tímto písmenem pak telefonní číslo, např. ATDP012345678. Další příkazy ovlivňující spojení, které se mohou hodit:

3.0 Minicom

3.1 K čemu je to dobrý?

Minicom je komunikační program, který trochu připomíná sharewarový program TELIX, ale je zadarmo včetně zdrojových kódů a spustitelný pod více Unixovými systémy. Tato utilita obsahuje volací adresář s automatickým vytáčením, podporou pro zamykání souborů na sériovém zařízení ve stylu UUCP, zachytáváním souborů, více uživatelů s individuálním nastavením a ještě další vlastnosti.

3.2 Základní přepínače v příkazové řádce

Výběr nejzajímavějších přepínačů v příkazové řádce:

3.3 Základní ovládání

Minicom je založen na okenním rozhraní. K zavolání okna s vámi požadovanou funkcí stačí zmáčknout klávesy CTRL-A (tuto kombinaci budu dále značit C-A) a následně funkční klávesu (A-Z) podle požadované funkce, např. C-A a Z vyvolá okno s nápovědou, kde si můžete prohlédnout seznam všech zkratkových příkazů. Pro každé menu slouží klasicky k ovládání NAHORU (šipka nahoru nebo k), DOLŮ (šipka dolu nebo j), VLEVO (šipka vlevo nebo h), VPRAVO (šipka vpravo nebo l), VÝBĚR (Enter), ZRUŠENÍ (Esc). Obrazovka programu je rozdělena do dvou částí: horních 24 řádků je obrazovka emulátoru terminálu. V tomto okně jsou interpretovány ANSI nebo VT100 escape sekvence. Pokud v dolní části obrazovky zbývá řádek, je na něm umístěno zobrazování stavu programu. Pokud zde není místo, pak je tento řádek vždy zobrazen po stisku kláves CTRL-A. Výběr z základních příkazů C-A a klávesa:

3.4 Volací adresář

Stiskem C-A a klávesy D vás program přesune do volacího adresáře. Tady si jednoduše stiskem klávesy odpovídající zvýrazněnému písmenu nebo posunutím na odpovídajíci funkci a potvrzením klávesou Enter, vyberete funkci, kterou požadujete. Můžete zde přidávat, mazat, editovat a hledat záznamy ve volacím adresáři. Výběrem funkce dial na některé označené položce se spustí vytáčení telefonního čísla, které ji odpovídá. Pokud nemáte označenou žádnou položku, pak se zavolá telefonní číslo zvýrazněné položky. Pokud modem volá, můžete stisknout klávesu Esc pro přerušení volání. Pokud stisknete jinou klávesu, volací okno se uzavře, ale volání se nezruší. Volací adresář je následně uložen do souboru .dialdir v domovském adresáři uživatele. V daném menu můžete rovněž použít manuální volání, tj. zadat přímo telefonní číslo, na které se má zavolat. Pokud zvolíte funkci Edit je vám nabídnut další seznam funkcí, které umožní změnu nastavení konkrétní položky jako např. jméno, telefonní číslo, skript, uživatelské jméno a heslo,... Editovací menu rovněž zobrazuje poslední datum a čas, kdy byla tato položka použita a celkový počet volání. Tyto informace vám ovšem minicom nepovolí změnit, jsou po každém volání automaticky aktualizovány.

3.5 Konfigurace

Podobně jako volací adresář lze vyvolat stiskem C-A a O menu konfigurace, které umožní nastavit jednotlivé parametry programu, na některé ovšem potřebujete práva roota. Můžete zde nastavit adresář pro stahování souborů, adresář pro umístění skriptů, logovací volby, protokoly pro přenos souborů, nastavení seriového portu, nastavení modemu, nastavení obrazovky programu, makra,...

3.6 Instalace

Dodává se jako rpm aktuální verze minicom-2.00.0-3 (stačí pouze nainstalovat) nebo lze stáhnout ze zdrojových kódů z
www.netsonic.fi, kde je ale dostupná pouze verze 2.00-0. Po stažení lze rpm jednoduše nainstalovat pomocí příkazu rpm -i minicom-2.00.0-3.i386.rpm. Pokud jste si stáhnuli zdrojové kódy, potom po jejich rozbalení příkazem tar -xzf minicom-2.00.0.src.tar.gz, použijte příkaz ./configure v adresáři s rozbalenými zdrojovými kódy. Tento příkaz vám vytvoří soubor Makefile. Nyní stačí již jen použít příkazu make pro vytvoření slinkované verze, make check pokud si chcete ověřit, že proběhl překlad korektně a make install pro nainstalování tohoto programu do vašeho systému. Po nainstalování můžete provést make clean, který vám zruší všechny vytvořené soubory, které vznikli v průběhu překladu.

3.7 Konfigurační soubory

Minicom si uchovává konfigurační soubory v jednom adresáři, většinou se jedná o adresář /var/lib/minicom, /usr/local/etc nebo /etc. Pokud máte již minicom nainstalován a chcete zjistit, kde si uchovává konfigurační soubory stačí napsat minicom -h. Konfigurační soubory:
  1. minicom.users - obsahuje práva pro přístupi k programu minicom.
  2. minirc.dfl a minirc.mod - jsou generované parametrem -s při spuštění, definují port a zařízení, kde je modem umístěn (napr. /dev/modem).
  3. $HOME/.dialdir - definuje volací adresář
  4. $HOME/.minirc.dfl - uživatelský profil
  5. $HOME/minicom.log - logovací soubor uživatele
Inspiraci k nastavení můžete naleznout v /usr/doc/minicom*.

4.0 Mgetty

4.1 Co to je mgetty

Mgetty+sendfax je balík programů pro posílání a přijímání faxů v unixovém prostředí používající faxmodemy třídy 2.0 nebo 2 (ty jsou odlišné). Přesněji řečeno, program mgetty umožňuje používat faxmodem třídy 2.0 nebo 2 pro přijímání faxů. Umožnňuje rovněž přijímat hovory a připojovat se přes modem na jiný počítač. Sendfax je samostatný program, který slouží pro odesílání faxových souborů. Vgetty je rozšířená verze mgetty, která umí odpovídat telefonu jako záznamník a nahrávat hlasové zprávy.

4.2 Jak mgetty pracuje

Pro pochopení toho, jak mgetty pracuje uvedu příklad co se děje za různých situací, kdy používáte mgetty pro kontrolu modemu spojeného přes sériovou linku, např. /dev/tty2a.

Když je počítač nastartován, operační systém nastartuje proces init, který je odpovědný za to, že getty běží na odpovídajících vstup/výstupních zařízeních jako jsou např. virtuální terminály, sériové linky a modemy. Proces init načte svůj konfigurační soubor /etc/inittab, který mu řekne, že /dev/tty2a je kontrolovaný přes mgetty. Vytvoří tedy záznam v /etc/utmp (toto login potřebuje udělat a to je zároveň důvod, proč se nemůžete přihlásit pokud zkoušíte spustit mgetty ručně) a vytvoří nový mgetty proces, který používá uvedenou příkazovou řádku.

Když je mgetty nastartován, nejprve zkontroluje jestli neexistuje odpovídající platný zamykací soubor držený jiným procesem. Pokud tato situace nastane, znamená to, že nějaký jiný program používá uvedený port a mgetty počká až se tento zamykací soubor odstraní. Neplatné zamykací soubory, např. pro neexistující procesy, jsou ignorovány. Jakmile je port volný, mgetty vytvoří svůj vlastní zamykací soubor, inicializuje modem a odstraní zamykací soubor. Nyní mgetty čeká, až se někdo připojí na daný port. Jen taková poznámka, mgetty nečte z uvedeného portu žádné znaky, pouze ověřuje, zda je někdo na portu dostupný pomocí systémových volání poll() nebo select().

Nyní mohou nastat dvě možné situace, co se stane, když dorazí na port znaky. Nějaký jiný program (např. uucico) nastartoval volání ven nebo byl modemem zaslán signál RING. V prvním případě mgetty opustí samotný port. To je jednoduché, pokud volající program vytvoří platný zámykací soubor: mgetty ho najde, počká až se odstraní tento soubor a potom se ukončí. To bude mít za následek, že init způsobí znovuzavolání nového procesu mgetty, který bude čekat na další volání. Ve druhém případě, pokud neexistuje zamykací soubor, mgetty předpokládá, že telefon zvoní, vytvoří zamykací soubor a začne číst dostupné znaky. Jestliže nalezne RING, zvedne telefon zasláním ATA a čeká na zprávu CONNECT. Jestliže se jedná o fax, uloží fax v adresáři FAX_SPOOL_IN (obvykle jím bývá /var/spool/fax/incomming) a ukončí se. Pokud se jedná o modem, vytiskne /etc/issue a zobrazí přihlašovací prompt. Jakmile dostane řetězec s uživatelským jménem, zavolá /bin/login a nechá od této chvíle řízení na něm. Login načte heslo a spustí uživatelský shell, uucico nebo cokoliv jiného, ale mgetty už se o to nestará. Zamykací soubor zůstává, takže žádný jiný program nemůže přistupovat k modemu, když je někdo nalogovaný. Pokud použijeme login.config, tak můžeme pomocí něj nadefinovat spouštění i jiných programů, než je /bin/login. Jakmile je mgetty přerušen ať už z jakéhokoliv důvodu, init může znovu inicializovat port a nastartovat nový mgetty proces, který odstraní všechny zbývající zamykací soubory z předchozího přihlášení.

Řízení přes zamykací soubory je obtížné, ale velmi důležité. Je nezbytné, aby se všechny programy, které používají modem, dohodly na jednom zamykacím protokolu, jinak nově spuštěný program nemusí vědět, že je modem používán a může se snažit připojit na nějaký jiný modem. Typicky je zamykací soubor nazýván /usr/spool/uucp/LCK..ttyxx a obsahuje ID procesu, který právě používá modem. Ostatní procesy mohou číst tento soubor a říci jestli tento zamykací soubor patří existujícímu procesu nebo jestli už tento proces neexistuje a můžeme tento soubor odstranit.

4.3 Instalace

Tento balík se opět dodává ve formě rpm (nižší verze, instalace rpm -i mgetty*.rpm) nebo zdrojových kódů, poslední verze je mgetty-1.1.29 a je jej možné stáhnout z tohoto odkazu www.leo.org. Tento soubor se dá jednoduše rozbalit pomocí příkazu tar -xzf mgetty1.1.29-Nov25.tar.gz. Vlastní kompilování tohoto balíku je docela jednoduché. Zkopírujte si soubor policy.h-dist na policy.h a upravte si v něm své lokální nastavení bezpečnostní politiky. Nemusíte se obávat, pokud chcete po nainstalování nějaké nastavení změnit, jde to jednoduše udělat v souboru mgetty.config. Pro správné nastavení se můžete inspirovat bohatými komentáři v souboru policy.h. Následně musíte upravit Makefile. V něm je nutné upravit instalační cesty a systémově závislé knihovny. Nyní již stačí pouze zadat příkaz make pro sestavení programu a make install, pro jeho nainstalování. Pokud si překladač stěžuje na řádky #ident, spusťte make noident před make install, který se postará o tyto řádky. Pokud dostanete při linkování chybové hlášení "unresolved symbols", musíte balíku říci, kde máte umístěná systémová volání select(S) nebo poll(S), pomocí přepínačů -DUSE_SELECT nebo -DUSE_POLL v Makefilu (pokud to nevíte, zkuste použít oba tyto přepínače, dokud nebude chyba odstraněna). Pokud není chyba příbuzná k voláním select() nebo poll(), zjistěte si v systémových manuálových stránkách, které knihovny jsou linkované a přidejte patřičný argument -l<knihovna> k LIBS. Pokud přeložíte mgetty s parametrem -DSYSLOG, všechny chybové a logovací zprávy budou ukládány do syslog, pokud to váš systém umožňuje.

4.4 Konfigurační soubory

Z toho, jak mgetty pracuje, je doufám jasné, že potřebujeme záznam v /etc/inittab. Tento záznam pro mgetty je ve tvaru:
id:runlevels:(respawn/off):/usr/local/sbin/mgetty [options] <device>
Výběr pár základních parametrů, které se uvádí v poli options: Jednoduchý příklad řádku v /etc/inittab: Fla:23:respawn:/usr/local/sbin/mgetty -x 3 tty2a.

Konfigurační soubory:

Logovací soubory mgetty jsou uloženy na cestě LOG_PATH.<device>, kde LOG_PATH je definována v policy.h. Standartně jsou uloženy v /var/log/mgetty.ttyxx

5.0 PPP

5.1 Co to je PPP?

PPP (Point to Point Protocol) je protokol sloužící pro posílání datagramů po sériové lince, odstraňující spoustu nedostatků protokolu SLIP (Serial Line IP). Umožňuje, aby si obě komunikující strany dohodly na začátku parametry spojení jako např. maximální velikost datagramu. Dále poskytuje ověření totožnosti klienta. Protokol PPP se skládá z několika dalších protokolů. Na nejnižší vrstvě je tzv. Vysokoúrovňový protokol pro řízení datových spojení (HDLC), který definuje pole jednotlivých rámců protokolu PPP a poskytuje kontrolní součet. Dále může obsahovat i paket jiných protokolů jako IPX nebo Appletalk a to tak, že k základnímu rámci je přidáno speciální protokolové pole identifikující typ paketu přenášeného daným rámcem. Dalším protokolem je Protokol pro řízení spojení (LCP) , který se používá nad protokolem HDLC a slouží ke sjednávání parametrů týkajících se datového spojení jako je např. MRU (Maximum Receive Unit), určující maximální velikost datagramu, kterou je jedna ze stran ochotna přijmout. Dalšími důležitými protokoly, které se používají pomocí protokolu PPP jsou protokoly pro ověřování totožnosti: Protokol pro ověřování hesla (PAP) a Protokol na ověření inicializační výzvy (CHAP). Kromě vlastního posílání IP-datagramů po lince podporuje PPP také tzv. Van Jacobsonovu kompresy hlaviček IP-paketů, což je technika používající zmenšování hlaviček TCP-paketů až na 3bajty.

V Linuxu je funkce protokolu rozdělena na dvě části, na vysokoúrovňový ovladač HDLC, který se nachází v jádře operačního systému, a na démona uživatelského prostoru pppd, který se stará o různé řídící protokoly. Protokol PPP je implementován pomocí speciálního režimu linky. Chcete-li používat nějakou sériovou linku s protokolem PPP, musíte nejprve vytvořit spojení pomocí modemu a následně převést linku do režimu protokolu PPP. V tomto režimu budou všechna příchozí data postoupena ovladači protokolu PPP, který ověří platnost rámců protokolu HDLC, rozbalí je a odešle je. Ovladači jádra operačního systému pomáhá démon pppd, který provádí veškerou inicializační fázi a fázi ověřování totožnosti.

PPP může běžet jak pro ustanovení PPP spojeni (jako klient) nebo i pro přijímání neznámých hovorů (jako server).

5.2 Jaderný ovladač PPP a instalace PPP

Podporu PPP potřebuje mít zakompilovanou podporu v jádře. Pokud tomu tak je, tak můžete tuto část přeskočit a pokračovat instalací PPP. Jestliže nemáte podporu zakompilovanou v jádře, pak budete muset jádro znovu přeložit. Budete se muset rozhodnout, jestli budete chtít mít tento ovladač přímo zakompilovanýv jádře a nebo jej budete mít přeložený jako modul. Když je ovladač PPP přímo zakompilovaný, tak se bude spouštět při startu celého jádra. Pokud je zakompilovaný pouze jako modul, potom je uložen v adresáři /lib/modules v podobě jednoho nebo více souborů a je natahován do jádra a to jen tehdy, když je potřeba.

Jádra řady 2.2 obsahují starší verzi PPP jaderného ovladače, který nepodporuje multilink (připojení více spojení najednou). Pokud tuto vlastnost budete potřebovat, je potřeba použít jádro řady 2.4. Ovladač pro jádro 2.4 byl kompletně přepsán s podporovou multilinku a s podporu operací přes různé komunikační média (ovladač pod jádrem 2.2 povoloval pouze operace nad sériovými porty a zařízeními, která vypadala jako sériové porty jako jsou např. pseudoterminály).

Pokud máte v jádře zakompilovanou podporu ovladače PPP tak se vám ve výpisu dmesg nebo v adresáři /lib/modules/<verze jádra> objeví

K PPP se můžete dostat ve formě rpm, tu stačí jednoduše nainstalovat pomocí příkazu rpm -i ppp-2.4.1.rpm, nebo ve formě zdrojových kódů. Zdrojové kódy lze jednoduše rozbalit příkazem tar -xzf ppp-2.4.1.tar.gz. Potom již stačí provést v rozbaleném adresáři pouze příkazy ./configure, make a make install. Proto, aby jste mohli provést make install ovšem musíte mít práva roota. Po nainstalování se vám v adresáři /etc/ppp vytvoří konfigurační soubory PPP.

Zdrojové kódy si můžete stáhnout mimo jiné z adresy www.samba.org/ppp.

5.3 Nastavení systému pro pppd

Důležité je mít nastavené forwardování paketů (Podívejte se, zda soubor /proc/sys/net/ipv4/ip_forward obsahuje 1, pokud ne tak ji tam napište, pokud tento soubor ve vašem systému není IPForwarding nastaven. Zkuste jej nastavit v /etc/sysconfig/network nebo /etc/sysctl.conf).

Jádro řady 2.4

Pod jádrem řady 2.4 pppd potřebuje otevřít znakové zařízení /dev/ppp (108,0). Pokud používáte devfs (device filesystem), /dev/ppp bude automaticky vytvořeno po nahrání modulu ppp_generic nebo hned po startu (pokud je tento modul zakompilován do jádra). Pokud používáte ppp_generic jako modul, budete muset přidat tento řádek do /etc/devfsd.conf:
LOOKUP ppp MODLOAD
Pokud tento modul nepoužíváte, budete muset toto zařízení vytvořit sami pomocí příkazů: mknod /dev/ppp c 108 0 a chmod 600 /dev/ppp.
Pokud používáte automatické nahrávání modulů a máte PPP přeloženo jako modul, budete muset přidat následující řádky do /etc/modules.conf:
alias /dev/ppp ppp_generic
alias char-major-108 ppp_generic
aliastty-ldisc-3ppp_async
aliastty-ldisc-14ppp_synctty
aliasppp-compress-21bsd_comp
aliasppp-compress-24ppp_deflate
aliasppp-compress-26ppp_deflate

Jádro řady 2.2

Pokud používáte automatické nahrávání modulů a máte PPP jako modul, budete muset přidat následující řádky do /etc/modules.conf:
aliastty-ldisc-3ppp_async
aliasppp-compress-21bsd_comp
aliasppp-compress-24ppp_deflate
aliasppp-compress-26ppp_deflate

5.4 Konfigurace PPP

5.4.1 Základní body

Pro to, aby jste mohli začít konfigurovat ppp je nutné mít splněno pár základních bodů:
  1. mít správně nastavený sériový port a modem. Aktuální nastavení seriových portů zjistíte v souboru /proc/interrupts nebo /proc/tty/driver/serial. Je nutné mít nastavené samostatné přerušení na modemu, jinak by vám při jeho používání mohli nastat komplikace. K nastavení portů slouží příkaz setserial. Zařízení /dev/ttyS0(COM1) a /dev/ttyS2(COM3) používají obvykle přerušení IRQ4, /dev/ttyS1(COM2) a /dev/ttyS3(COM4) používají obvykle přerušení IRQ3. Nastavení modemu si můžete vyzkoušet/nastavit, např. pomocí programu Minicom (viz. Serial a Modem HOWTO)
  2. mít zakompilovanou podporu ppp v jádře a nainstalovaný daný balík (pokud jste toto neučinili, vraťte se k bodu 5.2)
Nyní nastavte do souboru /etc/resolv.conf nejlépe adresu DNS, který vám bude poskytovat překlad IP adres na jména. Nyní nastavte obsah souboru /etc/hosts na:
order hosts, bind
multi on
Toto nastavení říká překladači adres, aby se nejprve dotázal na danou adresu v souboru host před tím, než kontaktuje DNS.

Protože démon pppd musí běžet pod právy roota, musíte nastavit (poud již nejsou nastavena) práva setuid roota na souboru /usr/sbin/pppd příkazem chmod u+s /usr/sbin/pppd.
Pokud chcete, aby pppd nemohl spouště každý, nechejte práva na souboru /usr/sbin/pppd bez setuid, vytvořte si v /etc/group novou skupinu, např. PPP, přidejte této skupině práva na soubory /usr/sbin/pppd, /usr/sbin/ppp-on, /usr/sbin/ppp-off a přidejte si do skupiny PPP pouze ty uživatele, pro které chcete spouštění pppd povolit.

5.4.2 Soubory PPP a jejich příklady

Nyní přistupime ke konfigurování samotného PPP. PPP používá tyto soubory: V adresáři /etc/ppp najdete soubor options.tpl, který obsahuje bohatě okomentované možnosti nastavení PPP. Podle tohoto soubor by jste si měli vytvořit soubor /etc/ppp/options a dále soubory /etc/ppp/options.ttyXX pro konfiguraci zařízení ttyXX.

Příklad jednoduchého souboru /etc/ppp/options:
# /etc/ppp/options (bez autentizace PAP/CHAP)
#
# Zabránit pppd forkování na pozadí
-detach
#
# použít kotrolu modemu
modem
# použít zamykací soubory ve stylu uucp pro zajištění exklusivního přístupu k sériovému zařízení
lock
# použít hardwarovou kontrolu toku
crtscts
# vytvořit implicitní cestu pro toto spojení v tabulce cest (routing table)
defaultroute
# nenastavuj kontrolu pomocí Escape sekvencí
asyncmap 0
# použij maximální délku vysílaného paketu 552 bajtů
mtu 552
# použij maximální délku přijímaného paketu 552 bajtů
mru 552
#
#-------konec vzorového soubor /etc/ppp/options (bez autentizace PAP/CHAP)
Tento soubor vám bude jistě fungovat i na vašem systému, pro uzpůsobení však použijte další volby ze šablony options.tpl.

Pokud nepožadujete autentizaci pomocí CHAP nebo PAP (ty budou probírány až za chvíli), můžete použít dodávané skripty skripty ppp-on, ppp-on-dialer (ten lze používat i s PAP/CHAP) a ppp-off:
Příklad ppp-on skriptu:
#!/bin/sh
TELEPHONE=555-123456 #telefonní číslo pro připojení
ACCOUNT=libor #uživatelské jméno
PASSWORD=ambruz #heslo pro přihlášení
LOCAL_IP=0.0.0.0 #Lokální IP adresa, jestliže ji znáte, pokud se ale přiděluje dynamicky, uveďte 0.0.0.0
REMOTE_IP=0.0.0.0 #Vzdálená IP adresa, jestliže je vyžadována, normálně uveďte 0.0.0.0
NETMASK=255.255.255.255 #Síťová maska, jestliže je potřeba
export TELEPHONE ACCOUNT PASSWORD
DIALER_SCRIPT=/etc/ppp/ppp-on-dialer
exec /usr/sbin/pppd debug lock modem crtscts /dev/ttyS0 38400 \
$LOCAL_IP:$REMOTE_IP \
connect $DIALER_SCRIPT

Příklad ppp-on-dialer skriptu:
#!/bin/sh
/usr/sbin/chat -v \
TIMEOUT 3 \
ABORT '\nBUSY\r' \
ABORT '\nNO ANSWER\r' \
ABORT '\nRINGING\r\n\r\nRINGING\r' \
'' \rAT \
'OK-+++\c-OK' ATH0\
TIMEOUT 30 \
OK ATDT$TELEPHONE \
CONNECT '' \
ogin:--ogin: $ACCOUNT \
assword: $PASSWORD \

Příklad ppp-off skriptu
#!/bin/sh
if ["$1"=""]; then
DEVICE=ppp0
else
DEVICE=$1
fi
if [-r /var/run/$DEVICE.pid ]; then
kill -INT 'cat /var/run/$DEVICE.pid'
if [! "$?" = "0" ]; then
rm -f /var/run/$DEVICE.pid
echo "ERROR: Removed stale pid file"
exit 1
fi
echo "PPP link to $DEVICE terminated."
exit 0
fi
echo "ERROR: PPP link is not ACTIVE on $DEVICE"
exit 1

5.4.3 PAP versus CHAP

Pokud budete chtít používat autentizaci, pak nejprve musíte přidat do hlavního konfiguračního souboru /etc/ppp/options řádek
name vaše_jméno jméno_serveru, name říká jméno uživatele, pro kterého je daný řádek platný. Pro autentizaci můžete použít buď PAP(Password Authentication Protocol) a nebo CHAP(Chalenge Handshake Authentication Protocol). Jaký je mezi nimi rozdíl? PAP je oproti CHAP méně bezpečný protokol, protože posílá serveru, ke kterému se chce autentizovat , v čistém textu vaše jméno i heslo a vrací zpět odpověď, zda došlo ke správnému přihlášení. Tento protokol používá konfigurační soubor /etc/ppp/pap-secrets, kde jsou záznamy ve tvaru:
klient server heslo nepovinný_parametr_akceptované_lokální_IP_adresy, např. libor * ambruz

Oproti tomu protokol CHAP je založen na protokolu typu výzva odpověď a nikdy neposílá sdílené tajemství v otevřeném textu. Server pošle výzvu (řetězec znaků) a klient musí prokázat znalost svého tajemství zasláním hashe ze svého tajmeství a zaslané zprávy, tím je ověřena jeho identita. CHAP používá konfigurační soubor /etc/ppp/chap-secrets. Každý řádek je tvaru: uživatel server tajemství, např. libor iris bababa.

5.4.4 Klient versus server a spojení s mgetty

Pokud se vám spouštění přes skripty nelíbí a nebo jen pro testovací účely můžete spouštět PPP ručně. Nejprve ustavte spojení např. pomocí výše uváděného programu Minicom a ukončete jej bez zavěšení linky (C-A Q). Nyní zadejte z příkazové řádky příkaz pppd -d -detach /dev/ttyS0 38400&. Nyní si můžete ověřit příkazem ifconfig nastavení linky, měli by jste vidět něco ve stylu:

ppp0 Link encap: Point-to-Point Protocol
inet addr:10.144.153.104 P-t-P:10.144.153.51 Mask:255.255.255.255
UP POINTTOPOINT RUNNING MTU:552 Metric:1
RX packets:5 errors:0 dropped:0 overruns:0
TX packets:5 errors:0 dropped:0 overruns:0

Pro další testování linky můžete použít příkazy ping, netstat a route. Pro ukončení můžete použít skript ppp-off, modem chvíli po spuštění tohoto skriptu sám zavěsí linku. Pro jistotu ještě zkontrolujte a případně po sobě smažte zámky, které mohly zůstat v adresáři /var/lock a mají tvar LCK..ttySx.

Pro provozování PPP jako server, musíte přidat nového uživatele ppp do /etc/passwd případně i do /etc/shadow. Dále je dobré vytvořit ppplogin skript, obsahující něco ve stylu:

#!/bin/sh
mesg n
stty -echo
exec pppd -teach silent modem crtscts

mesg zabrání ostatním uživatelům zapisovat do tty při používání, stty vypíná výstup znaků na obrazovku, parametr ppp -detach zajistí oddělení pppd od kontroly tty, silent znamená, že pppd počká na zaslání paketu předtím než začne odpovídat, modem říká, že se použije zařízení modem, crtscts vypne hardwarový handshake.

5.4.5 Tip jak zkloubit ppp s mgetty

Do /etc/mgetty/login.config přidejte tento řádek:
/AutoPPP/ - ppp /usr/sbin/pppd auth -chap +pap login (případně nastavte znamenka opačně, - zakazuje a + povoluje daný způsob ). Nakonfigurujte modem na režim automatické odpovědi příkazem ATS0=3 (toto ovšem není nutné při použití mgetty). Nakonfigurujte sériové zařízení s getty pro automatickou odpověď, použitím mgetty. Rozhodněte se pro způsob autentizace. Nakonfigurujte pppd jako server viz. výše. Zvažte routování (routing), pokud jej budete používat, použijte skript ip-up.


Zdroje