Obsah
TOC \o "1-4" LINUX - Sériové linky PAGEREF _Toc498355442 \h 1
Úvod PAGEREF _Toc498355443 \h 1
Nastavení portů PAGEREF _Toc498355444 \h 2
Sériové protokoly PAGEREF _Toc498355445 \h 2
SLIP PAGEREF _Toc498355446 \h 2
CSLIP PAGEREF _Toc498355447 \h 2
PPP PAGEREF _Toc498355448 \h 2
Konfigurace sériové linky PAGEREF _Toc498355449 \h 3
Navázání spojení mezí modemy a počítačem - fáze 1 PAGEREF _Toc498355450 \h 3
Automatické vytáčení linky PAGEREF _Toc498355451 \h 3
Obsluha modemové linky na volané straně PAGEREF _Toc498355452 \h 4
Realizace linkové vrstvy sloupce protokolů OSI - fáze 2 PAGEREF _Toc498355453 \h 5
Nastavení parametrů síťové vrstvy - fáze 3 PAGEREF _Toc498355454 \h 5
Konfigurace programu sliplogin PAGEREF _Toc498355455 \h 5
Konfigurace programu pppd PAGEREF _Toc498355456 \h 6
Konfigurační soubory PAGEREF _Toc498355457 \h 6
IP adresy PAGEREF _Toc498355458 \h 6
Ověření totožnosti PAGEREF _Toc498355459 \h 7
Směrování PAGEREF _Toc498355460 \h 7
Přístupová práva PAGEREF _Toc498355461 \h 8
Pevné sériové spoje PAGEREF _Toc498355462 \h 8
SLIP a CSLIP PAGEREF _Toc498355463 \h 8
PPP PAGEREF _Toc498355464 \h 8
Konfigurace serveru PPP PAGEREF _Toc498355465 \h 8
Obecné požadavky pro IP na sériové lince PAGEREF _Toc498355466 \h 9
Sériové linky se využívají při komutovaných linkách a pevných linkách. Jejich relizace je pomocí modemu a rozhraní RS232C s integrovaným obvodem UART 16550A s pamětí FIFO.
OS Linux podporuje protokoly SLIP a PPP, které umožňují komunikaci prostřednictvím modemu a telefonní linky.
Každému sériovému portu je v Linuxu vyhrazena dvojice souborů ttySx (pro komunikaci zahajovanou zvenčí) a cuax (které jsou určeny jen pro komunikaci ven), kde x je číslo portu 0 až n. Pomocí těchto souborů funguje zamykání sériových rozhraní v jádře, které zabraňuje kolizím. Pokud se používají tzv. zamykací soubory, pak se nemusí rozlišovat, kdo komunikaci zahajuje a lze používat jen ttySx. Pak soubory cuax se nepoužívají.
Pro standardní rozhraní COM1 až 4 jsou automaticky přiřazeny standardní parametry odle BIOSu, tedy
Rozhraní | I/O adresa | IRQ |
COM1 | 0x3f8 | 4 |
COM2 | 0x2f8 | 3 |
COM3 | 0x3e8 | 4 |
COM4 | 0x2e8 | 3 |
Pro jiná rozhraní nebo jiná nastavení se musí použít příkaz setserial(8), kterým se nastavuje obvod UART, číslo portu, I/O adresa, IRQ a rychlost přenosu.
setserial /dev/ttyS0 auto_irq autoconfig spd_vhi
kde spd_vhi nastavuje rychlost 115,2kb/s
spd_hi 57,6kb/s
bez uvedení 38,4kb/s
auto_irq nastavení standardního IRQ
autoconfig nastavení standardní adresy
Komunikace se standardně provádí s protokolem RTS-CTS. Tento protokol lze nastavit
stty crtscts </dev/ttyS0
Ve vrstvě sériového rozhraní nad hardwarem jsou definované protokoly SLIP a PPP, které umožňují využívat protokol TCP/IP pro sériovou linku.
SLIP - Serial Line Interface Protokol - je jednoduchý, dnes málo používaný protokol. V podstatě doplňuje datagram o oddělovač datagramů END =192. Pak ale musí byty s dekadickou hodnotou 192 nahradit 219 220 a bajt 219 bajtem 219 221.
Pro složitější situace je SLIP nepoužitelný. SLIP umí přenášet jen protokoly IP, kdy musí být předem dodány IP adresy obou konců
Compressed SLIP, protokol, který má Van Jacobsonovou kompresi IP hlaviček
PPP protokol - Point-to-Point Protocol - je novější než SLIP a je to standard pro Internet.
Protokol PPP se dělí do 3 dílčích protokolů, které vykonávají určité funkce
· DLLP - protokol linkové vrstvy zaručující spolehlivý přenos,
· LCP - link Control Protocol - linkový řídící protokol slouží k navázání a ukončení spojení a sjednání parametrů konfigurace (např MRU - maximum Recieve Unit). Dále kontroluje kvalitu komunikace a ověření totožnosti uživatelů. Protokol LCP se používá nad protokolem HDCL (viz násl. odstavec).
· NCP - Net Control Protocol - síťový řídící protokol vytvářející vazbu mezi linkovou a síťovou vrstvou. Umožňuje přenášet data pro více protokolů v síťové vrstvě.
PPP protokol podporuje Van Jacobsonovu kompresi IP hlaviček (až na 3 B).
V Linuxu je podpora PPP rozdělena na 2 části,
· na vysokoúrovňový ovladač HDCL, který se nachází v jádru operačního systému. Protokol HDCL - High Level Data Link Control Protokol - pracuje na nejnižší vrstvě protokolu PPP a definuje formát PPP rámců - jednotlivá pole protokolu PPP a vytváří 16ti bitový kontrolní součet
· na démona uživatelského prostoru pppd, který se stará o řídící protokoly. Tento démon se nestará o spolupráci s modemem, tj. neumí vytáčet čísla, navazovat spojení, atd. Pro tyto funkce musí používat podpůrné programy jako je chat. pppd si v případě potřeby navázání spojení volá tento program chat.
Inicializace PPP je provedena spuštěním pppd, který provede následující kroky
1. zavolá chat a naváže spojení s PPP serverem ( u pevných linek tento krok není)
2. dohodne se na některých parametrech IP spojení. K této činnosti používá IPCP - IP control protokol
3. nakonfiguruje rozhraní s názvem pppx , kde x je 0,1,2, ....
4. aktualizuje směrovací tabulku.
Všechna příchozí data jsou podstoupena ovladači protokolu PPP, který ověřuje platnost rámců protokolu HDLC, který je rozbalí a odešle.
Ovladače jsou součástí jádra. Tím je dosaženo větších přenosových rychlostí.
Konfiguraci sériové linky lze rozdělit bez ohledu na protokoly do 3 fází
1. Navázání spojení mezí modemy a počítačem
2. Realizace linkové vrstvy sloupce protokolů OSI
3. Nastavení parametrů síťové vrstvy.
Je jednoduchá pro pevné spojení a pro volající stranu. Složitější situace je pro volanou stranu, která musí automaticky zvedat telefon, kdy je nutno provést zabezpečení proti neoprávněnému přístupu. Komutované spoje jsou výhodné pro příležitostné spoje.
Volající vytáčí linku přes program dip(8) - Dialup IP. Tento program (který je součástí balíku SLIP) používá systémové volání ioctl pro převzetí kontroly nad sériovým zařízením. dip se stará o převedení sériové linky do SLIP režimu a o patřičný záznam ve směrovacích tabulkách. dip se volá názvem dip a názvem scriptovacího souboru. DIP je interpretem jednoduchého scriptového jazyka. Obdobně program pppd(8) realizuje spojení na protokolu PPP. Tento program používá pro navázání spojení program chat(8). Popis je v dokumentu HOWTO(8).
Výhodné jsou programy, které provedou spojení nikoliv hned po spuštění, ale až se objeví datagram. Takto funguje program diald(8)(9). Tento démon vytváří umělé síťové rozhraní, které se chová jako protokol SLIP, a tedy vyžaduje instalaci modulu SLIP, i když používáme jen PPP. Jádro na tuto linku směřuje datagramy, které zachycuje démon diald. Pokud linka není aktivní, tak se pokusí ji vytočit a navázat spojení. Na lince lze používat jak SLIP tak i PPP.,
jádro diald modem
Diald může díky pozici mezi kernelem a rozhraním vykonávat další funkce jako je měření objemu dat, filtrování paketů atd.
(Balík PPP obsahuje program chat, který umožňuje zadat komunikační script, který se v podstatě skládá ze sekvence střídání očekávaných a vysílaných řetězců. První řetězec ( a další liché) musí být očekávané řetězce. Nemusí to být celá slova, ale jisté jejich části, např ogin: místo login: nebo Login: apod. Přeskočení se definuje prázdným řetězcem ´ ´. Typický příklad ogin: blaf ssword 31s5G4, kde blaf je přihlašovací jméno a ogin a ssword jsou očekávané řetězce. Pro případ poruchy funguje chat i takto: nedojde-li výzva v určitém časovém limitu (default 45s) vyzve protější stranu dohodnutou odpovědí a čeká na reakci protistrany. Pokud na tuto komunikaci protistrana odpoví dohodnutou výzvou (jiná od původní) odpoví na ni jako na řádnou výzvu)
Pro obsluhu terminálové linky ( tj. po navázání spojení) se používá getty nebo mgetty, který je obvykle spuštěn programem init. getty (mgetty) vypisuje na obrazovku obsah souboru /etc/issue a výzvu k zadání uživatelského jména. Pak předá řízení programu login. Ten na vzdálené straně realizuje zvolený komunikační protokol.
Pro modemové a faxmodemové propojení je vhodnější mgetty, který zajistí
· obousměrnou komunikaci po téže lince
· přenos po téže lince jak datových, tak i hlasových a faxových zpráv
· přijímání pošty
· statistiku a diagnostiku spojení
mgetty vyžaduje zamykací soubory (nelze používat volání open), které jsou v adresáři /usr/spool/uucp nebo v Linuxu /var/lock jejichž jména musí mít tvar LCK..dev, kde dev je jméno speciálního souboru pro danou linku. Linka, kterou obsluhuje mgetty se jeví jako stále obsazená, i když na ní není komunikace. Proto nelze použít soubory cuan, které by hlásily chybu.
Program mgetty je spouštěn procesem init, a proto v souboru /etc/inittab musí být na řádku tt
tt.úrovně:respawn:/usr/sbin/mgetty [parametry] zařízení
kde úrovně úroveň pro spuštění mgetty
respawn pro znovuspuštění procesem init po ukončení
příklad:
S1:45:respawn:/user/bin/mgetty -x 1 ttyS1
Příkaz mgetty [volby] zařízení
kde zařízení je název speciálního souboru sériového rozhraní - tty*
volby
-a rychlost ser. portu se automaticky nastaví podle zjištěné rychlosti modemu
-D bez faxu jen data
-i soubor před přihlášením se zobrazí obsah tohoto souboru
-n Z default Z=1; mgetty zvedne po Z-tém zazvonění
-p výzva řetězec pro výzvu pro připojení na terminálu
-r spojení bez modemů - neprovede se inicializace modemu
-R T zvedne po položení a po T sekundách novém vytvánění
-s rychlost nastavená rychlosti portu
-x úroveň 0-9 pro diagnostiku
Konfigurace mgetty je v adresáři /etc/mgetty+sendfax. Nejdůležitější je mgetty.config. Soubor je rozdělen do bloků podle jednotlivých portů. Co je před těmito bloky platí pro všechna rozhraní. Nastavuje se rychlost, spojení s/bez modemů, mód pro přístupová práva, zapínání faxových funkcí, počet zazvonění, zvedání po opakovaném zvonění, login výzva atd.
Zvedání sluchátka
Modemy standardu Hayes vyzvánějící linku zvednou po k zazvonění, pokud jsou nakonfigurované na ATS0=k. Protože mgetty umí zvedat sám, musí být na modemu nastaveno ATS0=0. Tím se aké zaručí, že telefon se zvedne až mgetty je na příjmu. Vytvořením souboru /etc/nologin.ttySn se zakáže mgetty zvedat telefon. Pak lze pomocí démonu cron povolit zvedání v určitou dobu, a jinak zakázat, tj telefon funguje jako normální telefon.
Programy musí zařídit totožné nastavení linky na obou koncích. Proto musí zajistit, aby byl přístup na sériové rozhraní vyhrazen pro daný komunikační modul v jádře operačního systému Linux.
· U protokolu SLIP/CSLIP je to příkazem slattach(8),
· u PPP se koordinuje tento krok s protokolem LCP (součást PPP) programem pppd(8).
Po ukončení fáze 2 je nastaveno nové rozhraní pro protokol
· SLIP s označením sln
· PPP pppn,
kde n je pořadové číslo.
V této fázi se příkazem ifconfig(8) přidělí parametry IP. Např. pro router může být nastaveno
ifconfig sl0 223.7.46.14 pointopoint 223.7.46.13 netmask 255.255.255.252 metric 4 mtu 296
Tzn., že sériovému rozhraní na routeru je přiděleno IP 223.7.46.14 a požadovaná protilehlá strana má adresu 223.7.46.13. Spojení má metriku 4 (pomalé) a max délka paketu - MTU (max. transfer. unit) je 296B. Tato velikost přikazuje jádru OS maximální veliost rámce, o kterou se má příslušné rozhraní starat. Naopak MRU - maximální Receiver unit - přikazuje vysílací straně, že nemá generovat rámce větší než je hodnota MRU. MRU proto není otázkou schopnosti linky, ale optimálního nastavení rychlosti přenosu.Rozhraní ale musí přijmout rámce větší než je MRU, a to do velikosti 1500B. Některé protokoly umí sestavovat zpět ethernetovské rámce do délky 1500B ze sériových a některé ne. Proto se služba rozdělení ethernetovského rámce na požadované délky 296B nepoužívá, i když to má za důsledek zpomalení přenosu .
Program sliplogin se používá pro dynamickou konfiguraci protokolu SLIP.
Konfigurace spočívá
1. zřízení skupiny uživatelů
2. zřízení speciálních účtů v souboru /etc/passwd
3. sestavení konfiguračních souborů slip.hosts a slip.tty a skriptů slip.login a slip.logout
Výhody protokolu PPP
· lze dohodnou parametry a IP adresy
· lepší kontrola přístupu k lince
· lze přenášet i jiné protokoly
Co do rychlosti jsou protokoly SLIP a PPP rovnocenné. Vztah volajícího a volaného je rovnocenný a proto se nerozlišuje klient a server.
Podobně jako u SLIP lze v /etc/passwd uvést
petr:heslo:111:17:petr Novák(PPP):/home/petr:/usrsbin/pppd
Při spuštěném mgetty není nutné zavádět uživatele pro ppp. Komunikace může probíhat dvojím způsobem
1. způsob
klient server
spustí pppd, který se propojí spustí se mgetty
se serverem a požádá program mgetty spustí login s výzvou login
chat o následné zajištění spojení.
chat přijme login a vyšle jméno vyzve k zadání pasword
chat zadá heslo zkontroluje podle souboru passwd a spustí
pppd
chat předá obsluhu pppd
2. způsob
spustí pppd, který požádá spustí se mgetty
o navázání spojení program chat.
Chat nečeká na login a ukončí
svou činnost a předá řízení
pppd výzva klientského pppd zabrání spuštění
procedury login a spustí se přímo pppd.
Většina parametrů se předává z konfiguračních souborů (nikoliv z příkazové řádky). Parametry jsou zpracovávány postupně z těchto zdrojů
1. /etc/ppp/options pro globální nastavení platné pro celý systém. Tento soubor prohlíží démon pppd vždy jako první. Je vhodné zde uvádět implicitní globální nastavení jako je např.ověření totožnosti -auth
2. uživatelský_domovský_adr/.ppprc individuální úprava pro jednotlivé uživatele
3. příkazový řádek
4. /etc/ppp/options.linka kde linka je jméno spec. souboru pro dané rozhraní např. ttyS1 pro COM2.
Démon pppd je vázán na rozhraní, rychlost a dále lze u něho nastavit
· požadavek authentikace (totožnosti)
· nastavit řízení RTS CTS (volba crtscts nutný pro rychlosti vyšší než 9,6 kBd) lze nastavit i softwarové řízení dat xonxoff
· diagnostika
· na druhé straně linky je router
· nastavení IP adres (pro lokální lze vynechat - pak se použije z DNS)
· nastavení MTU (délka paketu- vysílaného)
· nastavení MRU (délka paketu- přijímaného)
· požadavek na návrh IP od druhého konce
· doplňuje ARP tabulku proxy Adresami
· klíčové slovo modem sděluje démonu pppd, aby na sériovém portu provedl operace specifické pro modem. Pokud se nepoužije není pppd schopen monitorovat linku proti náhlému zavěšení na opačné straně.
Nastavení a odsouhlasení adres IP je práce protokolu IPCP, který je součástí síťových řídících protokolů NCP protokolu PPP, neboť IP adresy mohou navrhnout obě strany. Pokud se nedohodnou, spojení se nenaváže. Návrh lze provést v příkazovém řádku
pppd lokál_adr:vzdálená_adr
nebo v konfiguračním souboru /etc/ppp/options.ttySn Adresy mohou být v tečkové notaci nebo jako názvy hostitelů, ale pak se zhorší ověřování totožnosti pomocí protokolu CHAP.
· Uvedením noipdefault bere vždy IP adresu navrhovanu druhou stranou.
· Taktéž není-li zadána lokální adresa použije se implicitně IP adresa odpovídající lokálnímu počítači podle DNS.
· Pokud chceme akceptovat i návrhy druhé strany musí být uvedeno ipcp-accept-local nebo ipcp-accept-remote
· Při konfiguraci serveru, ke kterému se budou připojovat stanice přes vytáčenou linku musí se akceptovat IP podle zadání v serveru
· dynamické přidělování IP adres: každému portu přiřadíme IP adresu, která se bude přiřazovat klientům PPP. Toto musí být v souboru ....options.ttySn. Např:
v souboru options.ttyS0 bude řádek :191.120.2.101 nebo i s lokální adresou
191.120.2.1:191.120.2.101
Na straně klienta musí být volba noipdefault která sdělí démonu pppd aby čekal na přidělení IP adresy od protějšího počítače.
Linkový řídící protokol LCP umožňuje oběma stranám požadovat ověření totožnosti. K tomu se používá jedna z metod PAP -Pasword Autentication Protocol (jednodušší) nebo CHAP - Challence Handshake AP (spolehlivější). Pro použití těchto protokolů i druhé strany musí být v konfiguraci použito auth. Pak pppd provede jak PAP tak i CHAP. Pro auth +chap se provede jen CHAP.
PAP obdobně jako u Telnetu nebo FTP se vysílá v paketu heslo bez kódování. Heslo je uložené v souboru
/etc/ppp/pap-secrets
který slouží obousměrně. Obsah souboru vypadá
klient server heslo [IP adresy]
kde strana označená jako klient prokazuje totožnost (* značí všechny klienty). Vysílání jména a hesla se opakuje až do potvrzení nebo přerušení. Heslo se porovnává s heslem ve stejném souboru u serveru.
Šifrované heslo se vysílá až po neúspěchu nebo pokud v konfiguraci pppd bylo uvedeno papcrypt, pak se nešifrované heslo vůbec nevysílá.
CHAP - autentizaci zahajuje server pobídkou - tj. složitým řetězcem. Klient tuto pobídku zašifruje pomocí dohodnutého klíče. Server jej porovnává s vlastním šifrováním, a pak zašle potvrzení autentizace. Data CHAP jsou uložena v souboru
/etc/ppp/chap-secrets
se strukturou
klient server šifra [IP adresy]
Protokol ověřuje i u spojených linek v pravidelných intervalech heslem uživatele.
Principy směrování u SLIP a PPP jsou obdobné.
U PPP lze nastavit v konfiguraci pppd
· příkazem defaultroute druhou stranu linky PPP jako implicitní router
· příkazem proxyarp lze aktivovat u této stanice připojené na ethernet proxy ARP.
Při dynamickém adresování pomocí démonu gated se provede nastavení cest automaticky.
Další možností pppd je komprese. Hlavička se posílá pomocí Jacobsonovy komprese, která lze vypnout parametrem -vj. Pro data se dá opět vypnout BSD komprese, která zabírá v operační paměti 2,6MB.
K zabránění vstupu vetřelcům je nutné dodržovat
· omezit vstup na skupinu uživatelů ppp
· démon pppd nesmíbýt zapsán mezi regulérní interaktivní utility v souboru /etc/shells. Tím se znemožní přístup přes FTP
· uživatel nesmí mít ve svém domácím adresáři .rhosts, který by umožňoval vzdálený přístup bez hesla
· uživatel nesmí přijímat poštu přes aliasy odkazující na neznámého uživatele
ppp:User-ppp-Cannot-Recieve-Mail
· při používání souboru .ppprc musí být nastaven jeho vlastník na root a práva jen na čtení (chmod 444)
Pro přepínání (převedení) sériového rozhraní do režimu SLIP nebo CSLIP slouží příkaz slattach(8). Příkaz může vypadat pro COM1 a 19200Bd
slattach -p slip -s 19200 /dev/ttyS0 &
kde místo slip lze použít cslip, slip6 (6ti bitová verze), cslip6 nebo ppp
-s určuje rychlost
pro (interní) modem se uvádí /dev/modem, který nastavuje specifické vlastnosti modemu
slattach by měl být v souboru /etc/inittab definován s parametrem respawn pro obnovení po výpadku, aby se slattach mohl spustit automaticky po startu.
Démon pppd se musí spustit při startu, a tedy musí být uveden v souboru inittab a nakonfigurovat pppd jako u spojovaných linek, popř. pomocí skriptu /etc/ppp/ip-up. V konfiguraci musí být passive, který zajistí čekání na odstartování komunikace protilehlou stranou. (Passive = vyšle požadavek i když nepřijde hned odpověď čeká a neskončí.)
Spuštění démona pppd jako serveru je věcí patřičných voleb do příkazové řádky. Je nutné vytvořit speciální účet ppp, přidělit mu nějaký script nebo program, který bude fungovat při přihlašování jako interpret, jenž spustí démona pppd. Do souboru /etc/passwd lze přidat řádek
ppp:*:500:200:Public Account:/temp:/etc/ppp/ppplogin
Pak se musí pro účet ppp nastavit heslo pomocí příkazu passwd. Pak ppplogin bude vypadat
#!/bin/sh
# ppplogin / script pro spuštění pppd při přihlášení
msg n
stty -echo
exec pppd -detach silent modem crtscts
kde příkaz msg zabraňuje zapisovat do tty pomocí write
stty vypíná opakování znaků (neopakuje znaky které posílá)
-detach - zabraňuje pppd odpojení od tty; jinak pppd přejde do pozadí a ukončí skript, což znamená zavěšení.
silent - čeká před začátkem na příchozí paket
modem kontroluje linku DTR - kterou lze zjistit ukončení spojení
Při používání doménové notace IP adres je nutné nastavit v resolveru DNS serveru (tj. soubor resolv.conf) IP adresy nameserveru a jejich doménová jména. Vlastní IP adresy a doménová jména jsou buď v /etc/hosts nebo na nameserveru.