Pryč jsou doby, kdy provideři nabízeli vytáčené spojení s pevnou síťovou adresou a SLIP protokolem. Dnes převažuje připojení PPP. K přihlašování se již nepoužívá přihlašování heslem, ale ověřování PAP nebo CHAP.
Jak probíhá připojení
K připojení nelze použít standardní ifconfig – před připojením je nutné provést přihlášení a ověření, a o to se stará buď balík ppp, nebo některý GUI program s podobnou funkcí. V článku budeme psát o ppp.
Pokud je pppd suid root, může jej spustit každý uživatel. V některých distribucích se o vytáčení stará program wvdial, my si však popíšeme cestu, jak vytáčet i bez něj –
připravíme si jednoduchý skript (v některých distribucích se jmenuje pppon nebo ip-on):
#! /bin/sh /usr/sbin/pppd /dev/modem call mujprovider
Program pppd načte nastavení z /etc/ppp/options, z /etc/ppp/options.jméno_zařízení a z příkazové řádky a zahájí připojování. Příkaz call
argument přitom znamená, že se načte soubor z /etc/ppp/peers/argument.
Stejně jednoduchý bývá i skript pro zavěšení (jmenuje se pppoff nebo ip-off, jméno souboru může záležet na distribuci; zavěsit linku může jen ten uživatel, který pppd spustil, nebo root):
#! /bin/sh kill `cat /var/run/ppp0.pid`
V mém případě je /etc/ppp/options jednoduchý:
# používat zámky lock
Protože používám symbolické zařízení /dev/modem, bude se číst též skript /etc/ppp/options.modem. Ten není o nic složitější:
# používat signály Carrier Detect a Data Terminal Ready modem # používat hardwarové řízení toku dat (RTS/CTS) crtscts # rychlost sériové linky modemu 115200
Pro tuto konfiguraci by měl být modem nastaven tak, aby bylo možné zavěsit signálem DTR. (Pokud se vám zavěšování signálem DTR nelíbí, lze běžné modemy zavěsit sekvencí +++ATH, kde úvodní +++ jsou z obou stran odděleny zhruba sekundovou pauzou.)
Nyní přichází zajímavější soubor /etc/ppp/peers/mujprovider. Jeho detainím popisem se již na Rootu zabýval tento článek, takže jen popíšu své nastavení:
# připojovací skript (zde vyplňte seznam čísel providera) connect "/etc/ppp/chat/pap_chap 0971xxxxxxx 0971xxxxxxx" # odpojovací skript (pro standardně nastavený modem není nutný) #disconnect "chat -v -f /etc/ppp/chat/hang" # použít DNS providera usepeerdns # nastavit jako implicitní cestu pro směrování defaultroute # IP se přiděluje až po připojení noipdefault # odpojení po 300s nečinnosti idle 300 # linka přenese všechny znaky asyncmap 0 # pppd nebude ověřovat server noauth # přihašovací jméno name moje_jméno # ladění příkazů #debug # ladění paketů přes jádro (zdržuje!) #kdebug 4
Máme-li nastaveno usepeerdns (a provider tuto funkci podporuje), vznikne po připojení soubor /etc/ppp/resolv.conf
s adresami DNS serverů providera.
Připojovací skript /etc/ppp/chat/pap_chap může vypadat takto:
! /bin/sh # hlasité tónové vytáčení #DIAL=DT # tiché tónové vytáčení DIAL=M0DT # hlasité pulsní vytáčení #DIAL=DP # tiché pulsní vytáčení #DIAL=M0DP for i in $@ do if /usr/sbin/chat -f /etc/ppp/chat/pap_chap.chat -T $DIAL$i then exit 0 fi done exit 1
A vlastní skript pro chat – /etc/ppp/chat/pap_chap.chat (je stejný pro všechny providery) může být např.:
#! /usr/sbin/chat -f # skript pro PAP/CHAP ověřování ABORT "NO CARRIER" ABORT "NO DIALTONE" ABORT "ERROR" ABORT "NO ANSWER" ABORT "BUSY" TIMEOUT 5 "" "ATZ" OK\r\n "AT\T" TIMEOUT 90 CONNECT "\c" \r\n "\c"
Oboje lze vyřešit i jednodušeji, ale uvedené skripty jsem vytvořil době, kdy někteří provideři nabízeli více čísel. Navržené řešení může procházet i čísla různých providerů, dokud neuspěje (pokud však používáme SMTP server nebo proxy providera, museli bychom vyřešit jeho dynamickou změnu, například tím, že by skript obsahoval požadované hodnoty pro všechny providery a zapisoval je do souboru).
A slíbený alternativní zavěšovací skript /etc/ppp/chat/hang:
! /usr/sbin/chat -f # Zavěšovací skript pro modemy, které ignorují DTR. TIMEOUT 5 "" "\d+++\dATH" "OK" "ATZ"
Soubory /etc/ppp/pap-secrets a /etc/ppp/chap-secrets mohou být totožné (nebo jeden může být odkazem na druhý):
# klíče pro ověřování PAP/CHAP # klient server klíč IP adresy moje_jméno * moje_heslo
Pokud máme u různých providerů různá hesla nebo přihlašovací jména (pozor, někteří provideři vyžadují přihlašovací jména „holá“, jiná i s následujícím @provider.cz), musíme je v kolonce server (nebo IP adresa) specifikovat. Soubor může být čitelný jen pro superuživatele, ale přesto se může s jeho pomocí přihlásit i obyčejný uživatel (heslo si ovšem nezjistí).
Všechny skripty, které pppd volá, se vykonávají s právy superuživatele.
To však není všechno, co pppd umí! Ještě jsou zde další dva soubory: /etc/ppp/ip-up (ten se spouští sekundu pro uspěšném ověření) a /etc/ppp/ip-down (ten se spouští při odpojení). Pppd je ke své činnosti nepotřebuje, ale my si je můžeme vyplnit spoustou užitečností.
Užitečnosti pro vytáčenou linku
je zajímavá proxy, přizpůsobená pro uživatele vytáčeného spojení. Její pomocí můžete surfovat offline, pohybovat se po stažených stránkách a objednávat nové. Můžete také povolit úpravy ve stránce a třeba barevně odlišit odkazy na strany, které má WWWOFFLE v paměti. WWWOFFLE lze propojit s místním vyhledávačem. O WWWOFFLE již na Rootu pojednává tento článek. K tomu mohu jen přidat malou kolekci bookmarkletů, která vám ulehčí práci s touto proxy. Na mých stránkách pak najdete záplatu a nedokončený český překlad.
Někteří provideři nabízejí vlastní http proxy. Můžete ji používat jak přímo z webového prohlížeče, tak jako nadřazenou proxy pro WWWOFFLE. Zda dojde k urychlení prohlížení, záleží na tom, jaké weby navštěvujete a jak velkou proxy a silnou linku má provider. Pokud prohlížíte podobné stránky jako ostatní klienti providera, můžete pocítit výrazného zrychlení (zejména mají-li stránky pomalou odezvu). Pokud navštěvujete jiné stránky, zrychlení nenastane.
Program pdnsd je dlouhodobou pamětí DNS záznamů (na rozdíl od programů nscd nebo bind si je ukládá na disk). Ušetří nám čas strávený dotazy na DNS záznamy. (I o tomto programu jsme již na Rootovi psali – pozn. redakce)
V minulých týdnech jsme popisovali, jak nastavit poštu, a to i pro vytáčenou linku. I s ní budeme ve spouštěcím uživatelském skriptu počítat.
Uživatelské skripty
Nyní si můžeme popsat vzorový skript /etc/ppp/ip-up:
#! /bin/sh # případné zprávy lze přesměrovat do protokolu #exec >>/var/log/ppp 2>&1 # vygenerovat /etc/resolv.conf pro usepeerdns # Vyžaduje /etc/resolv.conf.default s implicitními hodnotami!!! # (Alternativou je prostý symbolický odkaz) if [ -f /etc/ppp/resolv.conf ] ; then rm /etc/resolv.conf cat /etc/resolv.conf.default /etc/ppp/resolv.conf >/etc/resolv.conf fi # vymazat případné negativní výsledky dotazů na DNS v nscd nscd --invalidate=hosts # přepnout se do režimu online wwwoffle -online # standardní metoda pro odeslání pošty # sendmail < 8.12 #/usr/sbin/sendmail -q & # sendmail >= 8.12 /usr/sbin/sendmail -L sm-msp-queue -Ac -q & /usr/sbin/sendmail -L sm-mta -q & # stáhnout poštu, opakovat každých 15 minut /usr/bin/fetchmail -d 900 --syslog # stáhnout objednané webové stránky wwwoffle -fetch & # Ukázky dalších možností: # Je levný tarif? (nepozná státní svátky!) HOUR=`date +%H` WEEKDAY=`date +%w` if [ $WEEKDAY = 6 -o $WEEKDAY = 0 -o $HOUR -lt 6 -o $HOUR -ge 18 ] then # Levný tarif Telecomu # synchronizovat mé stránky na Penguinu #/usr/bin/rsync -e ssh -l -rltz --delete\ # --force --safe-links --exclude="*~"\ # --exclude="upload" ~sb/penguin/public_ftp/\ # utx@penguin.cz:/home/ftp/pub/users/utx/ #/usr/bin/rsync -e ssh -l -rltz --delete\ # --force --safe-links --exclude="*~" --exclude="upload"\ # ~sb/penguin/public_html/ utx@penguin.cz:public_html/ # stáhnout si aktuální stav překladatelských stránek # (mnoho rsync serverů je přístupných pro každého) #/usr/bin/rsync -azv --delete penguin.cz::preklady-cs/ /dist/recent/preklady-cs/ # tento řádek smažte # (je tu jen kvůli tomu, že je vše zakomentované) true #else # Drahý tarif Telecomu fi
Vidíme, že pomocí tohoto skriptu lze zautomatizovat mnoho užitečných činností.
Podobně lze použít i skript /etc/ppp/ip-down:
#! /bin/sh # případné zprávy lze přesměrovat do protokolu #exec >>/var/log/ppp 2>&1 # vrátit /etc/resolv.conf if [ -f /etc/ppp/resolv.conf ] ; then rm /etc/resolv.conf cat /etc/resolv.conf.default >/etc/resolv.conf fi # odstranit pomocné resolv.conf rm -f /etc/ppp/resolv.conf # přepnout se do režimu offline wwwoffle -offline # zastavit fetchmail fetchmail -q # takto lze po odpojení indexovat stažené www stránky # ve vyhledávači htdig (který neumí česky) # spustit upravenou konfiguraci: # (viz záplata na CP1250 z http://www.penguin.cz/~utx) # recode-ms-chars = yes a enable-modify-html = no #/usr/sbin/wwwoffled -c /var/cache/wwwoffle/wwwoffle-search.conf #sleep 2 #/var/cache/wwwoffle/html/search/htdig/scripts/wwwoffle-htdig-lasttime #/usr/sbin/wwwoffle -c /var/cache/wwwoffle/wwwoffle-search.conf -kill
To je pro dnešek vše. Nezmínili jsme se o možnosti vytáčení na žádost (které vyžaduje jinou konfiguraci pppd, případně i Sendmailu), o komprimovaném přenosu po PPP lince (který vyžaduje podporu od providera) a o mnoha dalších věcech. Většina z toho je popsána v manuálech příslušných programů.