V minulých číslech Zpravodaje se čtenáři dověděli o možnostech spojení domácího počítače s terminálovým serverem ÚVT MU: článek [1] ukazuje, jak vytvořit IP spojení mezi terminálovým serverem a počítačem vybaveným Microsoft Windows za použití protokolu PPP1. V tomto článku nastíníme, jak postupovat, pokud chceme obdobných výsledků dosáhnout na počítači s operačním systémem LINUX.
Pod LINUXem existují dva druhy speciálních souborů, které přísluší sériovým portům. První z nich jsou určeny pro příchozí spojení (dial-in). Jsou to speciální soubory s hlavním číslem (major) 4 a jmenují se /dev/ttyS[0-3]. Druhý typ je určen pro volání ven ze systému (dial-out). Tato zařízení mají major 5 a jmenují se /dev/cua[0-3].
Dále je nutno věnovat pozornost tomu, jaký typ sériového portu vlastníme. Počítač IBM PC AT byl vybaven sériovými porty řízenými obvodem 8250. S tímto typem se u současných typů počítačů již téměř nesetkáme. Nejčastěji používaným obvodem pro tyto účely je (anebo aspoň donedávna byl) obvod 16450. Oba zmiňované chipy mají vstup/výstupní frontu v délce jedné slabiky. Nejmodernějším obvodem řídícím sériový port je obvod 16550A. Tento obvod má vstupní a výstupní frontu v délce 16 slabik. Toho s výhodou využijeme zejména ve víceprocesovém prostředí, kde systém nemůže poskytovat tak rychlou odezvu na přerušení od sériového portu.
Kde jsou hranice možností jednotlivých obvodů? V zásadě lze říci, že 16450 lze provozovat do rychlosti 38 400 bps, takže se hodí nanejvýš pro modemy s maximální rychlostí 14 400 bps a hardwarovou kompresí dat. Pro rychlejší modemy je lépe koupit sériovou kartu s obvody 16550A. Vlastníme-li interní modem, jsou tyto problémy vyřešeny, neboť většina současných interních modemů se z hlediska systému tváří jako 16550A.
Předpokládejme, že máme svůj modem připojený na druhý sériový port (COM2 pod MS-DOSem, /dev/cua1 pod LINUXem). K tomu, abychom mohli posílat modemu jednoduché příkazy, případně ručně vytáčet čísla, potřebujeme určitý software. Pro tyto účely je možné použít program cu z balíku uucp, který musí být spuštěn pod superuživatelskou identifikací:
#cu -l cua1 -s 38400 |
Je také možné použít obrazovkově orientovaný program minicom (klávesami "Ctrl-a z" vyvoláme nápovědu) anebo program seyon pro X Window System.
Jedním z těchto programů si nastavíme modem na příslušnou konfiguraci a pak vyzkoušíme, jestli s ním lze pracovat, přibližně takto:
ATZ OK ATD755755 CARRIER 14400 CONNECT ... login: kas Password: heslo ... TERMINAL-SERVER> |
Pokud modem podporuje uchování uživatelské konfigurace, je lepší mít všechny důležité parametry přednastavené a modem inicializovat pouhým resetovacím řetězcem ATZ.
Nyní již můžeme používat přímé spojení s terminálovým serverem nejen pro vzdálené přihlášení, ale i pro přenos souborů (například protokolem Zmodem - příkazy sz a rz). Nicméně máme daleko širší možnosti. Zatím se náš počítač (nebo přesněji jeden jeho proces) tvářil jako terminál vzdáleného počítače na MU. Nyní se pokusíme vytvořit ze svého počítače plnohodnotný uzel Internetu.
Existují dva protokoly, které umí LINUX provozovat nad modemovým spojením: prvním z nich je SLIP (Serial Line Internet Protocol), druhým je již zmiňovaný PPP. Protokol PPP je silnější a také jednodušší na použití, proto se zde budeme zabývat jen jím. (Zájemci si mohou nastudovat použití SLIPu z [2].)
Konfigurace PPP není složitá. Nejprve je třeba se ujistit, že námi používané jádro umí používat PPP; v takovém případě soubor /proc/net/dev obsahuje slovo ppp. Pokud jádro nemá nainstalovanou podporu PPP, ale umí pracovat se sítí TCP/IP, je možné nainstalovat PPP za běhu systému jako modul. Příkazem
# make modules modules_install |
spuštěným v adresáři /usr/src/linux se vytvoří (mimo jiné) moduly slhc.o a ppp.o, které nainstalujeme do běžícího systému:
# /sbin/insmod /lib/modules/'uname -r'/net/slhc.o # /sbin/insmod /lib/modules/'uname -r'/net/ppp.o |
Bohužel podpora TCP/IP zatím ještě není modularizovaná2, takže pokud používané jádro nemá podporu TCP/IP (soubor /proc/net/dev neexistuje), je nutné překompilovat a nainstalovat nové jádro.
Pro vytvoření PPP spojení použijeme program pppd, který se nachází v adresáři /usr/lib/ppp/. Popišme si jednotlivé parametry programu pppd, které použijeme k vytvoření spojení:
Nejprve je nutno vytvořit telefonní spojení s terminálovým serverem. K tomu slouží program chat ve stejném adresáři jako pppd. Vytvořme soubor /usr/lib/ppp/chatscript přibližně s tímto jednořádkovým obsahem:
'' ATZ OK ATD755755 CONNECT '' Username: uživatelské_jméno Password: heslo SERVER> ppp |
Takto vytvořený soubor obsahuje střídavě řetězce, které program chat očekává od modemu, a odpovědi na tyto texty: Nejprve program neočekává žádný řetězec a rovnou posílá první příkaz - proto text začíná prázdným řetězcem. Dále jsou příkazy pro reset modemu a vytočení telefonního čísla. Jakmile je spojení ustaveno (modem odpoví "CONNECT"), nevysílá chat žádný řetězec, ale čeká na výzvu k zadání uživatelského jména. Pak zadá jméno a heslo a počká na prompt terminálového serveru. Příkazem ppp přepne vzdálený konec telefonní linky do režimu PPP.
Na tomto místě je třeba učinit poznámku o bezpečnosti: Je zřejmé, že jakékoli heslo uvedené v nezašifrované podobě v souboru je velmi nebezpečné. Proto toto řešení lze doporučit pouze na jednouživatelských počítačích. V každém případě je dobré nastavit souboru chatscript minimální přístupová práva.
Máme-li tedy prostředky na vytvoření PPP spojení, lze zadat příkaz, kterým se toto spojení vytvoří:
# /usr/lib/ppp/pppd connect "chat -f /usr/lib/ppp/chatscript" 38400 /dev/cua1 defaultroute |
Zde parametr connect značí program, který se má použít pro navázání spojení, a číslo 38400 určuje rychlost pro spojení mezi počítačem a modemem3. Další parametr určuje speciální soubor modemu a poslední parametr říká, že pppd má po navázání spojení směrovat síťové pakety přes rozhraní PPP.
Program pppd se po spuštění přepne na pozadí a my můžeme začít využívat síťové služby:
$ ping 147.251.4.33 |
Ještě zadáme adresu nameserveru, abychom nemuseli používat pro spojení IP adres; do souboru /etc/resolv.conf napíšeme tyto řádky:
domain ics.muni.cz nameserver 147.251.4.33 nameserver 147.251.48.3 |
Nyní již můžeme používat doménová jména:
$ telnet grond |
PPP spojení ukončíme zasláním signálu SIGTERM procesu pppd.
Vytvořením PPP spojení mezi naším počítačem a terminálovým serverem se z počítače stane plnohodnotný uzel Internetu se všemi bezpečnostními riziky, která tento fakt přináší. Proto je dobré nemít na svém počítači účty s prázdným heslem a také neopomenout žádné důležité bezpečnostní opatření.
Další informace o operačním systému LINUX je možné získat přes WWW. Česká domovská WWW stránka LINUXu se nachází na http://www.fi.muni.cz/~kas/linux/linux.html a obsahuje odkazy na většinu zdrojů v České republice, které se týkají LINUXu, a také některé odkazy do zahraničí.
[1] | Petr Ulrich.
Některé zkušenosti s používáním protokolu SLIP.
Zpravodaj V/2, 1994, s. 13-15.
... zpět do textu |
[2] | Olaf Kirch.
Linux Network Administrator's Guide.
O'Reilly & Associates, 1994.
... zpět do textu |
[3] | Al Longyear.
Linux PPP HOWTO.
Linux Documentation Project.
... zpět do textu |
1 | Point-to-point Protocol
... zpět do textu |
2 | v čase psaní tohoto článku - to jest jádro verze 1.3.20
... zpět do textu |
3 | Toto číslo musí být vždy aspoň tak vysoké jako předpokládaná
rychlost spojení na telefonní lince. Pokud modem podporuje
hardwarovou kompresi dat, je zde nutné mít výrazně vyšší rychlost
spojení mezi modemem a počítačem.
... zpět do textu |